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
が、これまでのところ私の試みは失敗しており、それがどのように機能するかを完全に理解していないと思います。
カスタム分散関数をこのオプションに渡すこともできます。実際、パッケージのビネットの 1 つに、これを行う方法の例がいくつかあります。ただし、このプロセスは面倒で、(私が望んでいることですが) この場合は不要です。私の質問は、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