Calculate a confidence interval for a model output by repeatedly replacing the parameters in a fitted model object with a draw from the multivariate normal distribution of the maximum likelihood estimates, then recalculating the output function.
Arguments
- x
Output from
flexsurvregorflexsurvspline, representing a fitted survival model object. Or a list of such objects, defining a multi-state model.- B
Number of parameter draws to use
- fn
Function to bootstrap the results of. It must have an argument named
xgiving a fitted flexsurv model object. This may return a value with any format, e.g. list, matrix or vector, as long as it can be converted to a numeric vector withunlist. See the example below.- cl
Width of symmetric confidence interval, by default 0.95
- attrs
Any attributes of the value returned from
fnwhich we want confidence intervals for. These will be unlisted, if possible, and appended to the result vector.- cores
Number of cores to use for parallel processing.
- sample
If
TRUEthen the bootstrap sample itself is returned. IfFALSEthen the quantiles of the sample are returned giving a confidence interval.- ...
Additional arguments to pass to
fn.
Value
A matrix with two rows, giving the upper and lower confidence limits respectively. Each row is a vector of the same length as the unlisted result of the function corresponding to fncall.
Examples
## How to use bootci.fmsm
## Write a function with one argument called x giving a fitted model,
## and returning some results of the model. The results may be in any form.
tmat <- rbind(c(NA,1,2),c(NA,NA,3),c(NA,NA,NA))
bexp <- flexsurvreg(Surv(Tstart, Tstop, status) ~ trans, data=bosms3, dist="exp")
summfn <- function(x, t){
resp <- flexsurv::pmatrix.fs(x, trans=tmat, t=t)
rest <- flexsurv::totlos.fs(x, trans=tmat, t=t)
list(resp, rest)
}
## Use bootci.fmsm to obtain the confidence interval
## The matrix columns are in the order of the unlisted results of the original
## summfn. You will have to rearrange them into the format that you want.
## If summfn has any extra arguments, in this case \code{t}, make sure they are
## passed through via the ... argument to bootci.fmsm
bootci.fmsm(bexp, B=3, fn=summfn, t=10)
#> [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9]
#> 2.5% 0.07086242 0 0 0.1259084 0.06162104 0 0.7340619 0.9170291 1
#> 97.5% 0.10155072 0 0 0.1670345 0.08297094 0 0.8030821 0.9383790 1
#> [,10] [,11] [,12] [,13] [,14] [,15] [,16] [,17] [,18]
#> 2.5% 3.508327 0 0 1.945612 3.367053 0 3.894949 6.316462 10
#> 97.5% 3.928152 0 0 2.210304 3.683538 0 4.544205 6.632947 10
bootci.fmsm(bexp, B=3, fn=summfn, t=5)
#> [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9]
#> 2.5% 0.2926618 0 0 0.2519563 0.2423577 0 0.4178660 0.7294152 1
#> 97.5% 0.3104028 0 0 0.2736102 0.2705848 0 0.4465273 0.7576423 1
#> [,10] [,11] [,12] [,13] [,14] [,15] [,16] [,17] [,18]
#> 2.5% 2.878274 0 0 1.017161 2.672749 0 0.9782927 2.210025 5
#> 97.5% 2.947286 0 0 1.082149 2.789975 0 1.0614997 2.327251 5