endpoint | R Documentation |
Define one or multiple endpoints. This is a user-friendly wrapper for
the class constructor Endpoint$new
. Users who are not familiar with
the concept of classes may consider using this wrapper directly.
wrapper if
endpoint(name, type = c("tte", "non-tte"), readout = NULL, generator, ...)
name |
character vector. Name(s) of endpoint(s) |
type |
character vector. Type(s) of endpoint(s). It supports
|
readout |
numeric vector with name to be the non-tte endpoint(s).
|
generator |
a RNG function. Its first argument must be 'n', number of
patients. It must return a data frame of 'n' rows. It support all
built-in random number generators in |
... |
optional arguments for |
set.seed(12345)
## Example 1. Generate a time-to-event endpoint.
## Two columns are returned, one for time, one for event (1/0, 0 for
## A built-in RNG function is used to handle piecewise constant exponential
## distribution
risk <- data.frame(
end_time = c(1, 10, 26.0, 52.0),
piecewise_risk = c(1, 1.01, 0.381, 0.150) * exp(-3.01)
)
pfs <- endpoint(name = 'pfs', type='tte',
generator = PiecewiseConstantExponentialRNG,
risk = risk, endpoint_name = 'pfs')
pfs$get_generator()
## Example 2. Generate continuous and binary endpoints using R's built-in
## RNG functions, e.g. rnorm, rexp, rbinom, etc.
ep1 <- endpoint(
name = 'cd4', type = 'non-tte', generator = rnorm, readout = c(cd4=1),
mean = 1.2)
ep2 <- endpoint(
name = 'resp_time', type = 'non-tte', generator = rexp, readout = c(resp_time=0),
rate = 4.5)
ep3 <- endpoint(
name = 'orr', type = 'non-tte', readout = c(orr=3), generator = rbinom,
size = 1, prob = .4)
mean(ep1$get_generator()(1e4)[, 1]) # compared to 1.2
sd(ep1$get_generator()(1e4)[, 1]) # compared to 1.0
log(2) / median(ep2$get_generator()(1e4)[, 1]) # compared to 4.5
mean(ep3$get_generator()(1e4)[, 1]) # compared to 0.4
## print summary reports for endpoint objects in console
# ep1
# ep2
# ep3
## An example of piecewise constant exponential random number generator
## Baseline hazards are piecewise constant
## Hazard ratios are piecewise constant, resulting a delayed effect.
run <- TRUE
if (!requireNamespace("survminer", quietly = TRUE)) {
run <- FALSE
message("Please install 'survminer' to run this example.")
}
if (!requireNamespace("survival", quietly = TRUE)) {
run <- FALSE
message("Please install 'survival' to run this example.")
}
if(run){
risk1 <- risk
ep1 <- endpoint(
name = 'pfs', type='tte',
generator = PiecewiseConstantExponentialRNG,
risk=risk1, endpoint_name = 'pfs')
risk2 <- risk1
risk2$hazard_ratio <- c(1, 1, .6, .4)
ep2 <- endpoint(
name = 'pfs', type='tte',
generator = PiecewiseConstantExponentialRNG,
risk=risk2, endpoint_name = 'pfs')
n <- 1000
tte <- rbind(ep1$get_generator()(n), ep2$get_generator()(n))
arm <- rep(0:1, each = n)
dat <- data.frame(tte, arm)
sfit <- survival::survfit(
survival::Surv(time = pfs, event = pfs_event) ~ arm, dat)
survminer::ggsurvplot(sfit,
data = dat,
pval = TRUE, # Show p-value
conf.int = TRUE, # Show confidence intervals
risk.table = TRUE, # Add risk table
palette = c("blue", "red"))
## print summary reports for endpoint objects in console
# ep1
# ep2
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.