ci.Crisk {Epi} | R Documentation |
Compute cumulative risks and expected sojourn times from models for cause-specific rates.
Description
Consider a list of parametric models for rates of competing events, such as different causes of death, A, B, C, say. From estimates of the cause-specific rates we can compute 1) the cumulative risk of being in each state ('Surv' (=no event) and A, B and C) at different times, 2) the stacked cumulative rates such as A, A+C, A+C+Surv and 3) the expected (truncated) sojourn times in each state up to each time point.
This can be done by simple numerical integration using estimates from models for the cause specific rates. But the standard errors of the results are analytically intractable.
The function ci.Crisk
computes estimates with confidence
intervals using simulated samples from the parameter vectors of supplied
model objects. Some call this a parametric bootstrap.
The times and other covariates determining the cause-specific rates must be supplied in a data frame which will be used for predicting rates for all transitions.
Usage
ci.Crisk(mods,
nd,
tnam = names(nd)[1],
nB = 1000,
perm = length(mods):0 + 1,
alpha = 0.05,
sim.res = 'none')
Arguments
mods |
A named list of |
nd |
A data frame of prediction points and covariates to be used
on all models supplied in |
tnam |
Name of the column in |
nB |
Scalar. The number of simulations from the (posterior) distribution of the model parameters to be used in computing confidence limits. |
perm |
Numerical vector of length |
alpha |
numeric. 1 minus the confidence level used in calculating the c.i.s |
sim.res |
Character. What simulation samples should be
returned. If |
Value
If sim.res='none'
a named list with 4 components, the first 3
are 3-way arrays classified by time, state and estimate/confidence
interval:
-
Crisk
Cumulative risks for thelength(mods)
events and the survival -
Srisk
Stacked versions of the cumulative risks -
Stime
Sojourn times in each states -
time
Endpoints of intervals. It is just the numerical version of the names of the first dimension of the three arrays
All three arrays have (almost) the same dimensions:
time, named as
tnam
; endpoints of intervals. Lengthnrow(nd)
.-
cause
. The arraysCrisk
andStime
have values "Surv
" plus the names of the listmods
(first argument).Srisk
has lengthlength(mod)
, with each level representing a cumulative sum of cumulative risks, in order indicated by theperm
argument. Unnamed,
ci.50%
,ci.2.5%
,ci.97.5%
representing quantiles of the quantities derived from the bootstrap samples. Ifalpha
is different from 0.05, names are of course different.
If sim.res='rates'
the function returns bootstrap samples of
rates for each cause as an array
classified by time, cause and bootstrap sample.
If sim.res='crisk'
the function returns bootstrap samples of
cumulative risks for each cause (including survival) as an array
classified by time, state (= causes + surv) and bootstrap sample.
Author(s)
Bendix Carstensen, http://bendixcarstensen.com
See Also
mat2pol
simLexis
plotCIF
ci.surv
Examples
library(Epi)
data(DMlate)
# A Lexis object for survival
Ldm <- Lexis(entry = list( per = dodm,
age = dodm-dobth,
tfd = 0 ),
exit = list( per = dox ),
exit.status = factor( !is.na(dodth), labels = c("DM","Dead") ),
data = DMlate[sample(1:nrow(DMlate),1000),] )
summary(Ldm, timeScales = TRUE)
# Cut at OAD and Ins times
Mdm <- mcutLexis(Ldm,
wh = c('dooad','doins'),
new.states = c('OAD','Ins'),
seq.states = FALSE,
ties = TRUE)
summary(Mdm$lex.dur)
# restrict to DM state and split
Sdm <- splitLexis(factorize(subset(Mdm, lex.Cst == "DM")),
time.scale = "tfd",
breaks = seq(0,20,1/12))
summary(Sdm)
summary(Relevel(Sdm, c(1, 4, 2, 3)))
boxes(Relevel(Sdm, c(1, 4, 2, 3)),
boxpos = list(x = c(15, 85, 80, 15),
y = c(85, 85, 20, 15)),
scale.R = 100)
# glm models for the cause-specific rates
system.time(
mD <- glm.Lexis(Sdm, ~ Ns(tfd, knots=0:6*2), to = 'Dead') )
system.time(
mO <- glm.Lexis(Sdm, ~ Ns(tfd, knots=0:6*2), to = 'OAD' ) )
system.time(
mI <- glm.Lexis(Sdm, ~ Ns(tfd, knots=0:6*2), to = 'Ins' ) )
# intervals for calculation of predicted rates
int <- 1 / 100
nd <- data.frame(tfd = seq(0, 10, int)) # not the same as the split,
# and totally unrelated to it
# cumulaive risks with confidence intervals
# (too few timepoints, too few simluations)
system.time(
res <- ci.Crisk(list(OAD = mO,
Ins = mI,
Dead = mD),
nd = data.frame(tfd = 0:100 / 10),
nB = 100,
perm = 4:1))
str(res)