为什么计算提取的随机效应的方差(使用 ranef)与 lme 的输出不同?

机器算法验证 r 混合模式
2022-04-06 02:02:23

我正在应用一个混合模型来预测肿瘤进展(y),使用肿瘤体积(x)作为固定效应和中心(i=1,...10) 作为随机截距。模型可以写成:

yij=α+βxij+bi+ϵij

lme()在R中使用了这个函数:

fit1 <- lme(PD ~ log(Volume), random = ~1 | CenterID, data=Data)

结果表明,随机截距的标准差为 0.079。因此bi服从正态分布N(0,0.079).

同时,我可以通过应用来提取随机截距ranef(fit1)这给出了一个列表bi对应每个中心。然后我计算这个向量的标准。

sd(ranef(fit1)[[1]])

我希望它给出与 0.079 相似的结果。然而,却大相径庭。

有人能告诉我为什么sd(ranef(fit1)[[1]])给出与模型输出不同的结果VarCorr(fit1)吗?ranef(fit1)之间究竟是什么关系VarCorr(fit1)

1个回答

VarCorr()这里提供了 REML 对随机截距的方差估计,但sd(ranef(fit1)[[1]])显示了随机截距的经验贝叶斯估计的标准偏差。换句话说,假设我们有参数σVarCorr()给我们估计σ^; 我们可以生成一个随机样本σ^,然后通过 计算随机样本的标准差sd()

两者会有所不同,因为结果 bysd()是对结果的估计VarCorr()相似度取决于数据集,用 中的Orthodont示例测试时两者相似lme()

> summary(fit1 <- lme(distance ~ age, random = ~1 | Subject, data=Orthodont))
Random effects:
 Formula: ~1 | Subject
        (Intercept) Residual
StdDev:    2.114724 1.431592

> sd(ranef(fit1)[[1]])
[1] 2.003087