SurvRegCens: Weibull Survival Regression Model with a censored covariate

Description Usage Arguments Details Value Author(s) References Examples

View source: R/SurvRegCens.R

Description

Computes estimators for the shape and scale parameter of the Weibull distribution, as well as for the vector of regression parameters in a parametric survival model with potentially right-censored time-to-event endpoint distributed according to a Weibull distribution. The regression allows for one potentially interval-censored and an arbitrary number of non-censored covariates.

Usage

1
2
SurvRegCens(formula, data = parent.frame(), Density, initial, conf.level = 0.95, 
          intlimit = 10^-10, namCens = "VarCens", trace = 0, reltol = 10^-8)

Arguments

formula

A formula expression as for other regression models. The response has to be a survival object for right-censored data, as returned by the Surv function. The censored covariate is equally specified using Surv. See the examples below and the documentation for Surv, lm and formula for details.

data

A data frame in which to interpret the variables named in the formula argument.

Density

Density function of the censored covariate.

initial

Initial values for the parameters to be optimized over, ordered according to Scale parameter, Shape parameter, regression parameters (i.e. β) linked to the non-censored covariates, regression parameter (i.e. β) linked to the censored covariate. A straightforward initial vector is based on ignoring the censoring of the censored covariate and using survreg, see the example below for an illustration.

conf.level

Confidence level of confidence intervals.

intlimit

In computation of integrals, values of the function to be integrated below intlimit are set to 0. This makes integration results more accurate and speeds up integration. If the data is such that the absolute values of the underlying baseline Weibull density are very small, i.e. in the range of intlimit, it is advisable to rescale the time variable, e.g. change the scaling from days to years. A very small value of the estimated λ is indicative of that situation.

namCens

Name of censored covariate, to tidy outputs.

trace

trace argument in optim, indicates whether to show optimization progress.

reltol

reltol argument in optim. By changing this one can modify the relative tolerance in maximization of the likelihood function.

Details

The time-to-event distributed according to a Weibull distribution, i.e. time-to-event ~ Weibull(λ,γ), has conditional density given by,

f_{Y_i}(t|x_i,β) =γ * λ * t^(γ-1) * exp(x_i*β) * exp(- λ * t^γ * exp(x_i*β)),

conditional hazard function given by,

h_i(t|x_i,β)= λ * γ * t^(γ-1) * exp(x_i*β),

and conditional survival function given by,

S_i(t|x_i,β) = exp(- λ * t^γ * exp(x_i*β),

where x_i collects the values of each covariate for observation i and β represents the regression parameters.

Value

SurvRegCens returns an object of class "src", a list containing the following components:

coeff

Estimators, confidence intervals, p-values for the for the null hypothesis: {Estimators is equal to 0}, and this for each of the parameters of the Weibull survival regression model.

percent.cens

Percentage of censored observations in the censored covariate.

loglik

Log-likelihood function value at the estimators.

info.converg

Convergence information provided by the function optim.

info.converg.message

Message provided by optim.

The methods print.src, summary.src, coef.src, and logLik.src are used to print or obtain a summary, coefficients, or the value of the log-likelihood at the maximum.

Author(s)

Stanislas Hubeaux, [email protected]

Kaspar Rufibach, [email protected]
http://www.kasparrufibach.ch

References

Hubeaux, S. (2013). Parametric Surival Regression Model with left- and/or interval-censored covariate. Technical report, Biostatistics Oncology, F. Hoffmann-La Roche Ltd.

Hubeaux, S. and Rufibach, K. (2014). SurvRegCensCov: Weibull Regression for a Right-Censored Endpoint with a Censored Covariate. Preprint, http://arxiv.org/abs/1402.0432.

Sattar, A., Sinha, S. K. and Morris, N. J. (2012). A Parametric Survival Model When a Covariate is Subject to Left-Censoring. Biometrics & Biostatistics, S3(2).

Examples

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
## Not run: 
## --------------------------------------------------------------
## 1 censored-covariate and 2 non-censored covariates 
## no censoring, to compare result with survival::survreg
## modify prop.cens to introduce left-censoring of covariate
## --------------------------------------------------------------

set.seed(158)
n <- 100
lambda <- exp(-2)
gamma <- 1.5

## vector of regression parameters: the last entry is the one for the censored covariate
beta <- c(0.3, -0.2, 0.25) 
true <- c(lambda, gamma, beta)

## non-censored covariates
var1 <- rnorm(n, mean = 4, sd = 0.5)
var2 <- rnorm(n, mean = 4, sd = 0.5)

## Generate censored covariate. 
## For generation of Weibull survival times, do not left-censor it yet.
var3 <- rnorm(n, mean = 5, sd = 0.5)

## simulate from a Weibull regression model
time <- TimeSampleWeibull(covariate_noncens = data.frame(var1, var2), 
          covariate_cens = var3, lambda = lambda, gamma = gamma, beta = beta) 

## left-censor covariate
## prop.cens specifies the proportion of observations that should be left-censored
prop.cens <- 0
LOD <- qnorm(prop.cens, mean = 5, sd = 0.5)
var3.cens <- censorContVar(var3, LLOD = LOD)

## censor survival time
event <- matrix(1, nrow = n, ncol = 1)
time.cens <- rexp(n, rate = 0.5)
ind.time <- (event >= time.cens)
event[ind.time] <- 0
time[ind.time] <- time.cens[ind.time]

## specify the density for the censored covariate:
## For simplicity, we take here the "true" density we simulate from. In an application,
## you might want to use a density with parameters estimated from the censored covariate,
## e.g. using the function ParamSampleCens. See example in Hubeaux & Rufibach (2014).
DensityCens <- function(value){return(dnorm(value, mean = 5, sd = 0.5))}

## use Weibull regression where each censored covariate value is set 
## to LOD ("naive" method)
naive <- survreg(Surv(time, event) ~ var1 + var2 + var3.cens[, 2], dist = "weibull")
initial <- as.vector(ConvertWeibull(naive)$vars[, 1])

## use new method that takes into account the left-censoring of one covariate
data <- data.frame(time, event, var3.cens, var1, var2)
formula <- formula(Surv(time, event) ~  Surv(time = var3.cens[, 1], time2 = var3.cens[, 2], 
                      type = "interval2") + var1 + var2)
cens1 <- SurvRegCens(formula = formula, data = data, Density = DensityCens, initial = initial, 
                      namCens = "biomarker")
summary(cens1)
coef(cens1)
logLik(cens1)

## compare estimates
tab <- data.frame(cbind(true, initial, cens1$coeff[, 1]))
colnames(tab) <- c("true", "naive", "Weibull MLE")
rownames(tab) <- rownames(cens1$coeff)
tab

## compare confidence intervals
ConvertWeibull(naive)$HR[, 2:3]
cens1$coeff[, 7:8]


## --------------------------------------------------------------
## model without the non-censored covariates
## --------------------------------------------------------------
naive2 <- survreg(Surv(time, event) ~ var3.cens[, 2], dist = "weibull")
initial2 <- as.vector(ConvertWeibull(naive2)$vars[, 1])

## use new method that takes into account the left-censoring of one covariate
formula <- formula(Surv(time, event) ~ Surv(time = var3.cens[, 1], time2 = var3.cens[, 2], 
                      type = "interval2"))
cens2 <- SurvRegCens(formula = formula, data = data, Density = DensityCens, initial = initial2, 
                      namCens = "biomarker")
summary(cens2)

## compare estimates
tab <- data.frame(cbind(true[c(1, 2, 5)], initial2, cens2$coeff[, 1]))
colnames(tab) <- c("true", "naive", "Weibull MLE")
rownames(tab) <- rownames(cens2$coeff)
tab

## compare confidence intervals
ConvertWeibull(naive2)$HR[, 2:3]
cens2$coeff[, 7:8]

## End(Not run)

Example output

Loading required package: survival

Weibull regression for a right-censored response with an interval-censored covariate

Call:
SurvRegCens(formula = formula, data = data, Density = DensityCens, 
    initial = initial, namCens = "biomarker")

Coefficients:
           Estimate Std. Error    CI.low     CI.up p-value
lambda     0.001959   0.004254 -0.006380  0.010297      NA
gamma      1.614858   0.152556  1.315855  1.913862      NA
var1       0.385001   0.291292 -0.185922  0.955923  0.1863
var2       0.475895   0.289898 -0.092295  1.044086  0.1007
biomarker  0.490131   0.293964 -0.086029  1.066290  0.0955

AIC: 276.1
  lambda   gamma  var1   var2 biomarker
 0.00196 1.61486 0.385 0.4759   0.49013
'log Lik.' -133.03514 (df=5)                true       naive Weibull MLE
lambda     0.1353353 0.001958688 0.001958688
gamma      1.5000000 1.614858351 1.614858351
var1       0.3000000 0.385000733 0.385000733
var2      -0.2000000 0.475895438 0.475895438
biomarker  0.2500000 0.490130621 0.490130621
                      LB       UB
var1           0.8303384 2.601071
var2           0.9118360 2.840801
var3.cens[, 2] 0.9175676 2.904584
          exp(CI.low) exp(CI.up)
lambda             NA         NA
gamma              NA         NA
var1        0.8303384   2.601071
var2        0.9118360   2.840801
biomarker   0.9175676   2.904584

Weibull regression for a right-censored response with an interval-censored covariate

Call:
SurvRegCens(formula = formula, data = data, Density = DensityCens, 
    initial = initial2, namCens = "biomarker")

Coefficients:
          Estimate Std. Error   CI.low    CI.up p-value
lambda     0.07799    0.11385 -0.14515  0.30112      NA
gamma      1.54765    0.14361  1.26618  1.82912      NA
biomarker  0.44208    0.29145 -0.12914  1.01331   0.129

AIC: 277.6
               true      naive Weibull MLE
lambda    0.1353353 0.07798653  0.07798653
gamma     1.5000000 1.54764945  1.54764945
biomarker 0.2500000 0.44208204  0.44208204
       LB        UB 
0.8788471 2.7546997 
          exp(CI.low) exp(CI.up)
lambda             NA         NA
gamma              NA         NA
biomarker   0.8788471     2.7547

SurvRegCensCov documentation built on May 30, 2017, 3:32 a.m.