我使用coxme包中的函数coxme()
在R中拟合混合效果Cox模型。在我的模型中,我有一个审查的生存时间$ X $,一个协变量$ Z $和一个分组变量$ Group $。有一个随机的截距和一个随机的斜率,即我拟合模型$ \ lambda(t | Z,b_0,b_1)= \ lambda_0(t)e ^ {\ beta Z + b_0 + b_1 Z} $。
我想指定随机效应的协方差矩阵的结构;特别是,我想指定$ b_0 $和$ b_1 $是不相关的,因此协方差矩阵是对角线的。似乎coxme()
在指定协方差结构时非常灵活。我认为我应该将一个矩阵列表传递给这个函数的varlist
选项,但到目前为止,我对此的尝试都失败了,我不认为我完全理解它应该如何工作。
也可以将自定义方差函数传递给此选项,实际上,其中一个包装晕影提供了一些如何完成此操作的示例。然而,在这种情况下,这个过程似乎很乏味,而且(我希望)是不必要的。所以我的问题是,如何在coxme()
函数中轻松指定对角协方差矩阵结构?
下面是一些模拟的示例数据和第一次指定协方差结构的尝试。我希望我告诉coxme()
使用线性组合$ V = \ sigma ^ 2_1 A + \ sigma ^ 2_2 B $,如下定义的$ A $和$ B $,这将有效拟合具有任意对角元素的对角协方差矩阵。
> n = 25 # Size of each cluster
> K = 25 # Number of clusters
> N = n*K # Total number of observations
>
> Z = rnorm(n=N, mean=0.5, sd=0.5) # Covariate
> b0 = rep(rnorm(n=K, mean=0, sd=0.5), each=n) # Random intercept
> b1 = rep(rnorm(n=K, mean=0, sd=0.5), each=n) # Random slope
> Group = factor(x=rep(1:K, each=n))
>
> beta = 2
> eta = beta*Z + b0 + b1*Z
> T = rexp(n=N, rate=exp(eta)) # Exponential failure time, conditional on Z, b0, and b1
> C = runif(n=N, min=0, max=2.5) # Uniform censoring time to get about 20% censoring
>
> time = pmin(T,C) # Censored observation time
> delta = T < C # Event indicator
>
> A = matrix(c(1, 0, 0, 0), nrow=2)
> B = matrix(c(0, 0, 0, 1), nrow=2)
> my.covariance = list(A, B)
> fit = coxme(Surv(time, delta) ~ Z + (1 + Z | Group), varlist = my.covariance)
Error in coxme(Surv(time, delta) ~ Z + (1 + Z | Group), varlist = my.covariance) :
In random term 1: Mlist cannot have both covariates and grouping
答案 0 :(得分:1)
经过大量的Google搜索和实验后,我再次查看one of the vignettes coxme
包。我在第3节的最后一个要点中找到了一个可能的问题答案,即
“ - 通过defaut,假设一个完整的协方差矩阵。模型2表明,指定独立性的一种简单方法是将效果放在单独的术语中。”
因此在数据示例中,以下命令可用于获取独立的随机效果:
> fit = coxme(Surv(time, delta) ~ Z + (1 | Group) + (Z | Group))
> fit$vcoef
$Group
Intercept
0.1181417
$Group
Z
0.2822648
仅显示随机截距和随机斜率的方差,因为假设相关性为零。
可能的替代方法是使用phmm()
包中的phmm
函数。由于估计是基于完全可能性,因此该方法将给出略微不同的拟合。