Title: | Primary Event Censored Distributions |
---|---|
Description: | Provides functions for working with primary event censored distributions and 'Stan' implementations for use in Bayesian modeling. Primary event censored distributions are useful for modeling delayed reporting scenarios in epidemiology and other fields (Charniga et al. (2024) <doi:10.48550/arXiv.2405.08841>). It also provides support for arbitrary delay distributions, a range of common primary distributions, and allows for truncation and secondary event censoring to be accounted for (Park et al. (2024) <doi:10.1101/2024.01.12.24301247>). A subset of common distributions also have analytical solutions implemented, allowing for faster computation. In addition, it provides multiple methods for fitting primary event censored distributions to data via optional dependencies. |
Authors: | Sam Abbott [aut, cre, cph] , Sam Brand [aut] , Adam Howes [ctb] , Sebastian Funk [ctb] |
Maintainer: | Sam Abbott <[email protected]> |
License: | MIT + file LICENSE |
Version: | 1.0.0 |
Built: | 2024-10-28 12:32:38 UTC |
Source: | https://github.com/epinowcast/primarycensored |
This function tests whether a given function behaves like a valid PDF by checking if it integrates to approximately 1 over the specified range and if it takes the arguments min and max.
check_dprimary(dprimary, pwindow, dprimary_args = list(), tolerance = 0.001)
check_dprimary(dprimary, pwindow, dprimary_args = list(), tolerance = 0.001)
dprimary |
Function to generate the probability density function
(PDF) of primary event times. This function should take a value |
pwindow |
Primary event window |
dprimary_args |
List of additional arguments to be passed to
dprimary. For example, when using |
tolerance |
The tolerance for the integral to be considered close to 1 |
NULL. The function will stop execution with an error message if dprimary is not a valid PDF.
Distribution checking functions
check_pdist()
,
check_truncation()
check_dprimary(dunif, pwindow = 1)
check_dprimary(dunif, pwindow = 1)
This function tests whether a given function behaves like a valid CDF by checking if it's monotonically increasing and bounded between 0 and 1.
check_pdist(pdist, D, ...)
check_pdist(pdist, D, ...)
pdist |
Distribution function (CDF) |
D |
Maximum delay (truncation point). If finite, the distribution is truncated at D. If set to Inf, no truncation is applied. Defaults to Inf. |
... |
Additional arguments to be passed to pdist |
NULL. The function will stop execution with an error message if pdist is not a valid CDF.
Distribution checking functions
check_dprimary()
,
check_truncation()
check_pdist(pnorm, D = 10)
check_pdist(pnorm, D = 10)
This function checks if the truncation time D is appropriate relative to the
maximum delay. If D is much larger than necessary, it suggests
considering setting it to Inf
for better efficiency with minimal accuracy
cost.
check_truncation(delays, D, multiplier = 2)
check_truncation(delays, D, multiplier = 2)
delays |
A numeric vector of delay times |
D |
The truncation time |
multiplier |
The multiplier for the maximum delay to compare with D. Default is 2. |
Invisible NULL. Prints a message if the condition is met.
Distribution checking functions
check_dprimary()
,
check_pdist()
check_truncation(delays = c(1, 2, 3, 4), D = 10, multiplier = 2)
check_truncation(delays = c(1, 2, 3, 4), D = 10, multiplier = 2)
This function computes the primary event censored probability mass function (PMF) for a given set of quantiles. It adjusts the PMF of the primary event distribution by accounting for the delay distribution and potential truncation at a maximum delay (D). The function allows for custom primary event distributions and delay distributions.
dprimarycensored( x, pdist, pwindow = 1, swindow = 1, D = Inf, dprimary = stats::dunif, dprimary_args = list(), log = FALSE, pdist_name = NULL, dprimary_name = NULL, ... ) dpcens( x, pdist, pwindow = 1, swindow = 1, D = Inf, dprimary = stats::dunif, dprimary_args = list(), log = FALSE, pdist_name = NULL, dprimary_name = NULL, ... )
dprimarycensored( x, pdist, pwindow = 1, swindow = 1, D = Inf, dprimary = stats::dunif, dprimary_args = list(), log = FALSE, pdist_name = NULL, dprimary_name = NULL, ... ) dpcens( x, pdist, pwindow = 1, swindow = 1, D = Inf, dprimary = stats::dunif, dprimary_args = list(), log = FALSE, pdist_name = NULL, dprimary_name = NULL, ... )
x |
Vector of quantiles |
pdist |
Distribution function (CDF) |
pwindow |
Primary event window |
swindow |
Secondary event window (default: 1) |
D |
Maximum delay (truncation point). If finite, the distribution is truncated at D. If set to Inf, no truncation is applied. Defaults to Inf. |
dprimary |
Function to generate the probability density function
(PDF) of primary event times. This function should take a value |
dprimary_args |
List of additional arguments to be passed to
dprimary. For example, when using |
log |
Logical; if TRUE, probabilities p are given as log(p) |
pdist_name |
A string specifying the name of the delay distribution
function. If NULL, the function name is extracted using
|
dprimary_name |
A string specifying the name of the primary event
distribution function. If NULL, the function name is extracted using
|
... |
Additional arguments to be passed to the distribution function |
The primary event censored PMF is computed by taking the difference of the
primary event censored cumulative distribution function (CDF) at two points,
and
. The primary event censored PMF,
, is given by:
where is the primary event censored CDF.
The function first computes the CDFs for all unique points (including both
and
) using
pprimarycensored()
. It then
creates a lookup table for these CDFs to efficiently calculate the PMF for
each input value. For non-positive delays, the function returns 0.
If a finite maximum delay is specified, the PMF is normalized to
ensure it sums to 1 over the range [0, D]. This normalization can be
expressed as:
where is the normalized PMF and
is the unnormalized PMF. For the explanation and
mathematical details of the CDF, refer to the documentation of
pprimarycensored()
.
Vector of primary event censored PMFs, normalized by D if finite (truncation adjustment)
Primary event censored distribution functions
pprimarycensored()
,
rprimarycensored()
# Example: Weibull distribution with uniform primary events dprimarycensored(c(0.1, 0.5, 1), pweibull, shape = 1.5, scale = 2.0) # Example: Weibull distribution with exponential growth primary events dprimarycensored( c(0.1, 0.5, 1), pweibull, dprimary = dexpgrowth, dprimary_args = list(r = 0.2), shape = 1.5, scale = 2.0 )
# Example: Weibull distribution with uniform primary events dprimarycensored(c(0.1, 0.5, 1), pweibull, shape = 1.5, scale = 2.0) # Example: Weibull distribution with exponential growth primary events dprimarycensored( c(0.1, 0.5, 1), pweibull, dprimary = dexpgrowth, dprimary_args = list(r = 0.2), shape = 1.5, scale = 2.0 )
Density, distribution function, and random generation for the exponential growth distribution.
dexpgrowth(x, min = 0, max = 1, r, log = FALSE) pexpgrowth(q, min = 0, max = 1, r, lower.tail = TRUE, log.p = FALSE) rexpgrowth(n, min = 0, max = 1, r)
dexpgrowth(x, min = 0, max = 1, r, log = FALSE) pexpgrowth(q, min = 0, max = 1, r, lower.tail = TRUE, log.p = FALSE) rexpgrowth(n, min = 0, max = 1, r)
x , q
|
Vector of quantiles. |
min |
Minimum value of the distribution range. Default is 0. |
max |
Maximum value of the distribution range. Default is 1. |
r |
Rate parameter for the exponential growth. |
log , log.p
|
Logical; if TRUE, probabilities p are given as log(p). |
lower.tail |
Logical; if TRUE (default), probabilities are P[X <= x], otherwise, P[X > x]. |
n |
Number of observations. If |
The exponential growth distribution is defined on the interval [min, max] with rate parameter (r). Its probability density function (PDF) is:
The cumulative distribution function (CDF) is:
For random number generation, we use the inverse transform sampling method:
Generate
Set and solve for
:
This method works because of the probability integral transform theorem,
which states that if is a continuous random variable with CDF
, then
follows a
distribution. Conversely, if
is a
random
variable, then
has the same distribution as
, where
is the inverse of the CDF.
In our case, we generate from
, then solve
for
to get a sample from our exponential growth
distribution. The formula for
is derived by algebraically solving
the equation:
When is very close to 0 (
), the distribution
approximates a uniform distribution on [min, max], and we use a simpler
method to generate samples directly from this uniform distribution.
dexpgrowth
gives the density, pexpgrowth
gives the distribution
function, and rexpgrowth
generates random deviates.
The length of the result is determined by n
for rexpgrowth
, and is the
maximum of the lengths of the numerical arguments for the other functions.
x <- seq(0, 1, by = 0.1) probs <- dexpgrowth(x, r = 0.2) cumprobs <- pexpgrowth(x, r = 0.2) samples <- rexpgrowth(100, r = 0.2)
x <- seq(0, 1, by = 0.1) probs <- dexpgrowth(x, r = 0.2) cumprobs <- pexpgrowth(x, r = 0.2) samples <- rexpgrowth(100, r = 0.2)
This function wraps the custom approach for fitting distributions to doubly censored data using fitdistrplus and primarycensored.
fitdistdoublecens( censdata, distr, pwindow = 1, D = Inf, dprimary = stats::dunif, dprimary_name = NULL, dprimary_args = list(), truncation_check_multiplier = 2, ... )
fitdistdoublecens( censdata, distr, pwindow = 1, D = Inf, dprimary = stats::dunif, dprimary_name = NULL, dprimary_args = list(), truncation_check_multiplier = 2, ... )
censdata |
A data frame with columns 'left' and 'right' representing
the lower and upper bounds of the censored observations. Unlike
|
distr |
A character string naming the distribution to be fitted. |
pwindow |
Primary event window |
D |
Maximum delay (truncation point). If finite, the distribution is truncated at D. If set to Inf, no truncation is applied. Defaults to Inf. |
dprimary |
Function to generate the probability density function
(PDF) of primary event times. This function should take a value |
dprimary_name |
A string specifying the name of the primary event
distribution function. If NULL, the function name is extracted using
|
dprimary_args |
List of additional arguments to be passed to
dprimary. For example, when using |
truncation_check_multiplier |
Numeric multiplier to use for checking if the truncation time D is appropriate relative to the maximum delay. Set to NULL to skip the check. Default is 2. |
... |
Additional arguments to be passed to |
This function temporarily assigns and then removes functions from the global environment in order to work with fitdistr. Users should be aware of this behaviour, especially if they have existing functions with the same names in their global environment.
An object of class "fitdist" as returned by fitdistrplus::fitdist.
Modelling wrappers for external fitting packages
pcd_as_stan_data()
,
pcd_cmdstan_model()
# Example with normal distribution set.seed(123) n <- 1000 true_mean <- 5 true_sd <- 2 pwindow <- 2 swindow <- 2 D <- 10 samples <- rprimarycensored( n, rnorm, mean = true_mean, sd = true_sd, pwindow = pwindow, swindow = swindow, D = D ) delay_data <- data.frame( left = samples, right = samples + swindow ) fit_norm <- fitdistdoublecens( delay_data, distr = "norm", start = list(mean = 0, sd = 1), D = D, pwindow = pwindow ) summary(fit_norm)
# Example with normal distribution set.seed(123) n <- 1000 true_mean <- 5 true_sd <- 2 pwindow <- 2 swindow <- 2 D <- 10 samples <- rprimarycensored( n, rnorm, mean = true_mean, sd = true_sd, pwindow = pwindow, swindow = swindow, D = D ) delay_data <- data.frame( left = samples, right = samples + swindow ) fit_norm <- fitdistdoublecens( delay_data, distr = "norm", start = list(mean = 0, sd = 1), D = D, pwindow = pwindow ) summary(fit_norm)
S3 class for primary event censored distribution computation
new_pcens( pdist, dprimary, dprimary_args, pdist_name = NULL, dprimary_name = NULL, ... )
new_pcens( pdist, dprimary, dprimary_args, pdist_name = NULL, dprimary_name = NULL, ... )
pdist |
Distribution function (CDF) |
dprimary |
Function to generate the probability density function
(PDF) of primary event times. This function should take a value |
dprimary_args |
List of additional arguments to be passed to
dprimary. For example, when using |
pdist_name |
A string specifying the name of the delay distribution
function. If NULL, the function name is extracted using
|
dprimary_name |
A string specifying the name of the primary event
distribution function. If NULL, the function name is extracted using
|
... |
Additional arguments to be passed to pdist |
An object of class pcens_{pdist_name}_{dprimary_name}
. This
contains the primary event distribution, the delay distribution, the
delay distribution arguments, and any additional arguments. It can be
used with the pcens_cdf()
function to compute the primary event censored
cdf.
Low level primary event censored distribution objects and methods
pcens_cdf()
,
pcens_cdf.default()
,
pcens_cdf.pcens_pgamma_dunif()
,
pcens_cdf.pcens_plnorm_dunif()
This function takes in delay data and prepares it for use with the primarycensored Stan model.
pcd_as_stan_data( data, delay = "delay", delay_upper = "delay_upper", n = "n", pwindow = "pwindow", relative_obs_time = "relative_obs_time", dist_id, primary_id, param_bounds, primary_param_bounds, priors, primary_priors, compute_log_lik = FALSE, use_reduce_sum = FALSE, truncation_check_multiplier = 2 )
pcd_as_stan_data( data, delay = "delay", delay_upper = "delay_upper", n = "n", pwindow = "pwindow", relative_obs_time = "relative_obs_time", dist_id, primary_id, param_bounds, primary_param_bounds, priors, primary_priors, compute_log_lik = FALSE, use_reduce_sum = FALSE, truncation_check_multiplier = 2 )
data |
A data frame containing the delay data. |
delay |
Column name for observed delays (default: "delay") |
delay_upper |
Column name for upper bound of delays (default: "delay_upper") |
n |
Column name for count of observations (default: "n") |
pwindow |
Column name for primary window (default: "pwindow") |
relative_obs_time |
Column name for relative observation time (default: "relative_obs_time") |
dist_id |
Integer identifying the delay distribution: 1 = Lognormal, 2 = Gamma, 3 = Weibull, 4 = Exponential, 5 = Generalized Gamma, 6 = Negative Binomial, 7 = Poisson, 8 = Bernoulli, 9 = Beta, 10 = Binomial, 11 = Categorical, 12 = Cauchy, 13 = Chi-square, 14 = Dirichlet, 15 = Gumbel, 16 = Inverse Gamma, 17 = Logistic |
primary_id |
Integer identifying the primary distribution: 1 = Uniform, 2 = Exponential growth |
param_bounds |
A list with elements |
primary_param_bounds |
A list with elements |
priors |
A list with elements |
primary_priors |
A list with elements |
compute_log_lik |
Logical; compute log likelihood? (default: FALSE) |
use_reduce_sum |
Logical; use reduce_sum for performance? (default: FALSE) |
truncation_check_multiplier |
Numeric multiplier to use for checking if the truncation time D is appropriate relative to the maximum delay for each unique D value. Set to NULL to skip the check. Default is 2. |
A list containing the data formatted for use with
pcd_cmdstan_model()
Modelling wrappers for external fitting packages
fitdistdoublecens()
,
pcd_cmdstan_model()
data <- data.frame( delay = c(1, 2, 3), delay_upper = c(2, 3, 4), n = c(10, 20, 15), pwindow = c(1, 1, 2), relative_obs_time = c(10, 10, 10) ) stan_data <- pcd_as_stan_data( data, dist_id = 1, primary_id = 1, param_bounds = list(lower = c(0, 0), upper = c(10, 10)), primary_param_bounds = list(lower = numeric(0), upper = numeric(0)), priors = list(location = c(1, 1), scale = c(1, 1)), primary_priors = list(location = numeric(0), scale = numeric(0)) )
data <- data.frame( delay = c(1, 2, 3), delay_upper = c(2, 3, 4), n = c(10, 20, 15), pwindow = c(1, 1, 2), relative_obs_time = c(10, 10, 10) ) stan_data <- pcd_as_stan_data( data, dist_id = 1, primary_id = 1, param_bounds = list(lower = c(0, 0), upper = c(10, 10)), primary_param_bounds = list(lower = numeric(0), upper = numeric(0)), priors = list(location = c(1, 1), scale = c(1, 1)), primary_priors = list(location = numeric(0), scale = numeric(0)) )
This function creates a CmdStanModel object using the Stan model and functions from primarycensored and optionally includes additional user-specified Stan files.
pcd_cmdstan_model(include_paths = primarycensored::pcd_stan_path(), ...)
pcd_cmdstan_model(include_paths = primarycensored::pcd_stan_path(), ...)
include_paths |
Character vector of paths to include for Stan
compilation. Defaults to the result of |
... |
Additional arguments passed to cmdstanr::cmdstan_model(). |
The underlying Stan model (pcens_model.stan
) supports various features:
Multiple probability distributions for modeling delays
Primary and secondary censoring
Truncation
Optional use of reduce_sum for improved performance (via within chain parallelism).
Flexible prior specifications
Optional computation of log-likelihood for model comparison
A CmdStanModel object.
Modelling wrappers for external fitting packages
fitdistdoublecens()
,
pcd_as_stan_data()
if (!is.null(cmdstanr::cmdstan_version(error_on_NA = FALSE))) { model <- pcd_cmdstan_model(compile = FALSE) model }
if (!is.null(cmdstanr::cmdstan_version(error_on_NA = FALSE))) { model <- pcd_cmdstan_model(compile = FALSE) model }
Load Stan functions as a string
pcd_load_stan_functions( functions = NULL, stan_path = primarycensored::pcd_stan_path(), wrap_in_block = FALSE, write_to_file = FALSE, output_file = "pcd_functions.stan" )
pcd_load_stan_functions( functions = NULL, stan_path = primarycensored::pcd_stan_path(), wrap_in_block = FALSE, write_to_file = FALSE, output_file = "pcd_functions.stan" )
functions |
Character vector of function names to load. Defaults to all functions. |
stan_path |
Character string, the path to the Stan code. Defaults to the path to the Stan code in the primarycensored package. |
wrap_in_block |
Logical, whether to wrap the functions in a
|
write_to_file |
Logical, whether to write the output to a file. Default is FALSE. |
output_file |
Character string, the path to write the output file if write_to_file is TRUE. Defaults to "pcd_functions.stan". |
A character string containing the requested Stan functions
Tools for working with package Stan functions
pcd_stan_files()
,
pcd_stan_functions()
,
pcd_stan_path()
This function retrieves Stan files from a specified directory, optionally filtering for files that contain specific functions.
pcd_stan_files(functions = NULL, stan_path = primarycensored::pcd_stan_path())
pcd_stan_files(functions = NULL, stan_path = primarycensored::pcd_stan_path())
functions |
Character vector of function names to search for. If NULL, all Stan files are returned. |
stan_path |
Character string specifying the path to the directory containing Stan files. Defaults to the Stan path of the primarycensored package. |
A character vector of file paths to Stan files.
Tools for working with package Stan functions
pcd_load_stan_functions()
,
pcd_stan_functions()
,
pcd_stan_path()
This function reads all Stan files in the specified directory and extracts the names of all functions defined in those files.
pcd_stan_functions(stan_path = primarycensored::pcd_stan_path())
pcd_stan_functions(stan_path = primarycensored::pcd_stan_path())
stan_path |
Character string specifying the path to the directory containing Stan files. Defaults to the Stan path of the primarycensored package. |
A character vector containing unique names of all functions found in the Stan files.
Tools for working with package Stan functions
pcd_load_stan_functions()
,
pcd_stan_files()
,
pcd_stan_path()
Get the path to the Stan code
pcd_stan_path()
pcd_stan_path()
A character string with the path to the Stan code
Tools for working with package Stan functions
pcd_load_stan_functions()
,
pcd_stan_files()
,
pcd_stan_functions()
Compute primary event censored CDF
pcens_cdf(object, q, pwindow, use_numeric = FALSE)
pcens_cdf(object, q, pwindow, use_numeric = FALSE)
object |
A |
q |
Vector of quantiles |
pwindow |
Primary event window |
use_numeric |
Logical, if TRUE forces use of numeric integration even for distributions with analytical solutions. This is primarily useful for testing purposes or for settings where the analytical solution breaks down. |
Vector of computed primary event censored CDFs
Low level primary event censored distribution objects and methods
new_pcens()
,
pcens_cdf.default()
,
pcens_cdf.pcens_pgamma_dunif()
,
pcens_cdf.pcens_plnorm_dunif()
This method serves as a fallback for combinations of delay and primary event distributions that don't have specific implementations. It uses the numeric integration method.
## Default S3 method: pcens_cdf(object, q, pwindow, use_numeric = FALSE)
## Default S3 method: pcens_cdf(object, q, pwindow, use_numeric = FALSE)
object |
A |
q |
Vector of quantiles |
pwindow |
Primary event window |
use_numeric |
Logical, if TRUE forces use of numeric integration even for distributions with analytical solutions. This is primarily useful for testing purposes or for settings where the analytical solution breaks down. |
This method implements the numerical integration approach for computing
the primary event censored CDF. It uses the same mathematical formulation
as described in the details section of pprimarycensored()
, but
applies numerical integration instead of analytical solutions.
Vector of computed primary event censored CDFs
pprimarycensored()
for the mathematical details of the
primary event censored CDF computation.
Low level primary event censored distribution objects and methods
new_pcens()
,
pcens_cdf()
,
pcens_cdf.pcens_pgamma_dunif()
,
pcens_cdf.pcens_plnorm_dunif()
Method for Gamma delay with uniform primary
## S3 method for class 'pcens_pgamma_dunif' pcens_cdf(object, q, pwindow, use_numeric = FALSE)
## S3 method for class 'pcens_pgamma_dunif' pcens_cdf(object, q, pwindow, use_numeric = FALSE)
object |
A |
q |
Vector of quantiles |
pwindow |
Primary event window |
use_numeric |
Logical, if TRUE forces use of numeric integration even for distributions with analytical solutions. This is primarily useful for testing purposes or for settings where the analytical solution breaks down. |
Vector of computed primary event censored CDFs
Low level primary event censored distribution objects and methods
new_pcens()
,
pcens_cdf()
,
pcens_cdf.default()
,
pcens_cdf.pcens_plnorm_dunif()
Method for Log-Normal delay with uniform primary
## S3 method for class 'pcens_plnorm_dunif' pcens_cdf(object, q, pwindow, use_numeric = FALSE)
## S3 method for class 'pcens_plnorm_dunif' pcens_cdf(object, q, pwindow, use_numeric = FALSE)
object |
A |
q |
Vector of quantiles |
pwindow |
Primary event window |
use_numeric |
Logical, if TRUE forces use of numeric integration even for distributions with analytical solutions. This is primarily useful for testing purposes or for settings where the analytical solution breaks down. |
Vector of computed primary event censored CDFs
Low level primary event censored distribution objects and methods
new_pcens()
,
pcens_cdf()
,
pcens_cdf.default()
,
pcens_cdf.pcens_pgamma_dunif()
Method for Weibull delay with uniform primary
## S3 method for class 'pcens_pweibull_dunif' pcens_cdf(object, q, pwindow, use_numeric = FALSE)
## S3 method for class 'pcens_pweibull_dunif' pcens_cdf(object, q, pwindow, use_numeric = FALSE)
object |
A |
q |
Vector of quantiles |
pwindow |
Primary event window |
use_numeric |
Logical, if TRUE forces use of numeric integration even for distributions with analytical solutions. This is primarily useful for testing purposes or for settings where the analytical solution breaks down. |
Vector of computed primary event censored CDFs
This function computes the primary event censored cumulative distribution function (CDF) for a given set of quantiles. It adjusts the CDF of the primary event distribution by accounting for the delay distribution and potential truncation at a maximum delay (D). The function allows for custom primary event distributions and delay distributions.
pprimarycensored( q, pdist, pwindow = 1, D = Inf, dprimary = stats::dunif, dprimary_args = list(), pdist_name = NULL, dprimary_name = NULL, ... ) ppcens( q, pdist, pwindow = 1, D = Inf, dprimary = stats::dunif, dprimary_args = list(), pdist_name = NULL, dprimary_name = NULL, ... )
pprimarycensored( q, pdist, pwindow = 1, D = Inf, dprimary = stats::dunif, dprimary_args = list(), pdist_name = NULL, dprimary_name = NULL, ... ) ppcens( q, pdist, pwindow = 1, D = Inf, dprimary = stats::dunif, dprimary_args = list(), pdist_name = NULL, dprimary_name = NULL, ... )
q |
Vector of quantiles |
pdist |
Distribution function (CDF) |
pwindow |
Primary event window |
D |
Maximum delay (truncation point). If finite, the distribution is truncated at D. If set to Inf, no truncation is applied. Defaults to Inf. |
dprimary |
Function to generate the probability density function
(PDF) of primary event times. This function should take a value |
dprimary_args |
List of additional arguments to be passed to
dprimary. For example, when using |
pdist_name |
A string specifying the name of the delay distribution
function. If NULL, the function name is extracted using
|
dprimary_name |
A string specifying the name of the primary event
distribution function. If NULL, the function name is extracted using
|
... |
Additional arguments to be passed to pdist |
The primary event censored CDF is computed by integrating the product of the delay distribution function (CDF) and the primary event distribution function (PDF) over the primary event window. The integration is adjusted for truncation if a finite maximum delay (D) is specified.
The primary event censored CDF, , is given by:
where is the CDF of the delay distribution,
is the PDF of the primary event times, and
is the primary event window.
If the maximum delay is finite, the CDF is normalized by dividing
by
:
where is the normalized CDF.
This function creates a primarycensored
object using
new_pcens()
and then computes the primary event
censored CDF using pcens_cdf()
. This abstraction allows
for automatic use of analytical solutions when available, while
seamlessly falling back to numerical integration when necessary.
Note: For analytical detection to work correctly, pdist
and dprimary
must be directly passed as distribution functions, not via assignment or
pdist_name
and dprimary_name
must be used to override the default
extraction of the function name.
Vector of primary event censored CDFs, normalized by D if finite (truncation adjustment)
Primary event censored distribution functions
dprimarycensored()
,
rprimarycensored()
# Example: Lognormal distribution with uniform primary events pprimarycensored(c(0.1, 0.5, 1), plnorm, meanlog = 0, sdlog = 1) # Example: Lognormal distribution with exponential growth primary events pprimarycensored( c(0.1, 0.5, 1), plnorm, dprimary = dexpgrowth, dprimary_args = list(r = 0.2), meanlog = 0, sdlog = 1 )
# Example: Lognormal distribution with uniform primary events pprimarycensored(c(0.1, 0.5, 1), plnorm, meanlog = 0, sdlog = 1) # Example: Lognormal distribution with exponential growth primary events pprimarycensored( c(0.1, 0.5, 1), plnorm, dprimary = dexpgrowth, dprimary_args = list(r = 0.2), meanlog = 0, sdlog = 1 )
This function generates random samples from a primary event censored distribution. It adjusts the distribution by accounting for the primary event distribution and potential truncation at a maximum delay (D). The function allows for custom primary event distributions and delay distributions.
rprimarycensored( n, rdist, pwindow = 1, swindow = 1, D = Inf, rprimary = stats::runif, rprimary_args = list(), oversampling_factor = 1.2, ... ) rpcens( n, rdist, pwindow = 1, swindow = 1, D = Inf, rprimary = stats::runif, rprimary_args = list(), oversampling_factor = 1.2, ... )
rprimarycensored( n, rdist, pwindow = 1, swindow = 1, D = Inf, rprimary = stats::runif, rprimary_args = list(), oversampling_factor = 1.2, ... ) rpcens( n, rdist, pwindow = 1, swindow = 1, D = Inf, rprimary = stats::runif, rprimary_args = list(), oversampling_factor = 1.2, ... )
n |
Number of random samples to generate. |
rdist |
Function to generate random samples from the delay distribution
for example |
pwindow |
Primary event window |
swindow |
Integer specifying the window size for rounding the delay
(default is 1). If |
D |
Maximum delay (truncation point). If finite, the distribution is truncated at D. If set to Inf, no truncation is applied. Defaults to Inf. |
rprimary |
Function to generate random samples from the primary
distribution (default is |
rprimary_args |
List of additional arguments to be passed to rprimary. |
oversampling_factor |
Factor by which to oversample the number of samples to account for truncation (default is 1.2). |
... |
Additional arguments to be passed to the distribution function. |
The mathematical formulation for generating random samples from a primary event censored distribution is as follows:
Generate primary event times (p) from the specified primary event distribution (f_p) within the primary event window (pwindow):
Generate delays (d) from the specified delay distribution (f_d) with parameters theta:
Calculate the total delays (t) by adding the primary event times and the delays:
Apply truncation to ensure that the delays are within the specified range [0, D]:
Round the truncated delays to the nearest secondary event window (swindow):
The function oversamples to account for potential truncation and generates additional samples if needed to reach the desired number of valid samples.
Vector of random samples from the primary event censored distribution censored by the secondary event window.
Primary event censored distribution functions
dprimarycensored()
,
pprimarycensored()
# Example: Lognormal distribution with uniform primary events rprimarycensored(10, rlnorm, meanlog = 0, sdlog = 1) # Example: Lognormal distribution with exponential growth primary events rprimarycensored( 10, rlnorm, rprimary = rexpgrowth, rprimary_args = list(r = 0.2), meanlog = 0, sdlog = 1 )
# Example: Lognormal distribution with uniform primary events rprimarycensored(10, rlnorm, meanlog = 0, sdlog = 1) # Example: Lognormal distribution with exponential growth primary events rprimarycensored( 10, rlnorm, rprimary = rexpgrowth, rprimary_args = list(r = 0.2), meanlog = 0, sdlog = 1 )