stdParfrailty {stdReg} | R Documentation |
Regression standardization in shared frailty gamma-Weibull models
Description
stdParfrailty
performs regression standardization in shared frailty gamma-Weibull models,
at specified values of the exposure, over the sample covariate distribution.
Let ,
, and
be the survival outcome, the exposure, and a
vector of covariates, respectively.
stdParfrailty
uses a fitted Cox
proportional hazards model to estimate the standardized
survival function , where
is a specific value of
,
is a specific value of
, and the expectation is over the marginal
distribution of
.
Usage
stdParfrailty(fit, data, X, x, t, clusterid, subsetnew)
Arguments
fit |
an object of class |
data |
a data frame containing the variables in the model. This should be the same
data frame as was used to fit the model in |
X |
a string containing the name of the exposure variable |
x |
an optional vector containing the specific values of |
t |
an optional vector containing the specific values of |
clusterid |
a string containing the name of the cluster identification variable. |
subsetnew |
an optional logical statement specifying a subset of observations to be used in the standardization. This set is assumed to be a subset of the subset (if any) that was used to fit the regression model. |
Details
stdParfrailty
assumes that a shared frailty gamma-Weibull model
has been fitted, with parametrization as descibed in the help section for parfrailty
.
Integrating out the gamma frailty gives the survival function
where is the cumulative baseline hazard
The ML estimates of are used to obtain
estimates of the survival function
:
For each in the
t
argument and for each in the
x
argument,
these estimates are averaged across all subjects (i.e. all observed values of )
to produce estimates
The variance for is obtained by the sandwich formula.
Value
An object of class "stdParfrailty"
is a list containing
call |
the matched call. |
input |
|
est |
a matrix with |
vcov |
a list with |
Note
Standardized survival functions are sometimes referred to as (direct) adjusted survival functions in the literature.
stdParfrailty
does not currently handle time-varying exposures or covariates.
stdParfrailty
internally loops over all values in the t
argument. Therefore,
the function will usually be considerably faster if length(t)
is small.
The variance calculation performed by stdParfrailty
does not condition on
the observed covariates . To see how this matters, note that
The usual parameter in a Cox proportional hazards model does not depend
on
. Thus,
is
independent of
as well (since
), so that the
term
in the corresponding variance decomposition
for
becomes equal to 0. However,
depends
on
through the average over the sample distribution for
,
and thus the term
is not 0, unless one
conditions on
. The variance calculation by Gail and Byar (1986) ignores this term,
and thus effectively conditions on
.
Author(s)
Arvid Sjolander
References
Chang I.M., Gelman G., Pagano M. (1982). Corrected group prognostic curves and summary statistics. Journal of Chronic Diseases 35, 669-674.
Dahlqwist E., Pawitan Y., Sjolander A. (2019). Regression standardization and attributable fraction estimation with between-within frailty models for clustered survival data. Statistical Methods in Medical Research 28(2), 462-485.
Gail M.H. and Byar D.P. (1986). Variance calculations for direct adjusted survival curves, with applications to testing for no treatement effect. Biometrical Journal 28(5), 587-599.
Makuch R.W. (1982). Adjusted survival curve estimation using covariates. Journal of Chronic Diseases 35, 437-443.
Examples
## Not run:
require(survival)
#simulate data
n <- 1000
m <- 3
alpha <- 1.5
eta <- 1
phi <- 0.5
beta <- 1
id <- rep(1:n, each=m)
U <- rep(rgamma(n, shape=1/phi, scale=phi), each=m)
X <- rnorm(n*m)
#reparametrize scale as in rweibull function
weibull.scale <- alpha/(U*exp(beta*X))^(1/eta)
T <- rweibull(n*m, shape=eta, scale=weibull.scale)
#right censoring
C <- runif(n*m, 0, 10)
D <- as.numeric(T<C)
T <- pmin(T, C)
#strong left-truncation
L <- runif(n*m, 0, 2)
incl <- T>L
incl <- ave(x=incl, id, FUN=sum)==m
dd <- data.frame(L, T, D, X, id)
dd <- dd[incl, ]
fit <- parfrailty(formula=Surv(L, T, D)~X, data=dd, clusterid="id")
fit.std <- stdParfrailty(fit=fit, data=dd, X="X", x=seq(-1,1,0.5), t=1:5, clusterid="id")
print(summary(fit.std, t=3))
plot(fit.std)
## End(Not run)