3

我有兴趣计算混合模型的 SE。为此,首先我在一个更简单的模型中使用了包中包含的一个数据集。

pigs$percent <- as.factor(pigs$percent)
Doc_lm_1 <- lm(conc~percent, pigs) 
summary(Doc_lm_1)
emmeans(Doc_lm_1, pairwise~percent)$emmeans

输出:

percent emmean   SE df lower.CL upper.CL
9         32.7 2.92 25     26.7     38.7
12        38.0 2.76 25     32.3     43.7
15        40.1 3.12 25     33.7     46.6
18        39.9 3.70 25     32.3     47.6

当我尝试使用平衡数据集时,所有组的 SE 都是相同的,并且与手工 SE 不匹配。我想在那种情况下不会考虑任何因素,但它仍然应该与手工制作的 SE 相匹配

SE可能是参数的SE吗?正如我们在表中看到的,当数据不平衡时,组之间的 SE 会发生变化。我的假设基于该包的 cran 项目网站指示(https://cran.r-project.org/web/packages/emmeans/vignettes/basics.html#backstory):

估计边际均值基于模型,而不是直接基于数据”

所以我问我,SE是如何计算的?以及添加随机因素将如何改变这个计算?提前致谢。

4

1 回答 1

4

要回答具体问题,请查看汇总结果:

> summary(Doc_lm_1)
... several lines skipped ...
Residual standard error: 8.267 on 25 degrees of freedom
Multiple R-squared:  0.134, Adjusted R-squared:  0.03011 
F-statistic:  1.29 on 3 and 25 DF,  p-value: 0.2997

...从中我们可以看出模型的残差 SD 为 8.267。此外,我们需要每个因子水平的观察次数:

> with(pigs, tapply(conc, percent, length))
 9 12 15 18 
 8  9  7  5 

由于平均值的 SE 是 SD 除以样本量的平方根,计算:

> 8.267 / sqrt(c(8,9,7,5))
[1] 2.922826 2.755667 3.124632 3.697115

瞧,这些与emmeans()输出中显示的 SE 匹配。正如问题中所引用的那样,emmeans()使用模型,并且所示模型基于所有四个样本具有相同 SD 的假设,并且该共同 SD 的估计值为 8.267,自由度为 25。一次基于一个样本的手工计算使用单独的 SD,这是与交付给的模型不同的模型emmeans();这就是结果不同的原因。

至于如何计算 SE 的一般问题emmeans(),它不使用手工计算公式。它利用了 EMM 是回归系数的线性组合这一事实。它找出需要哪些组合,然后使用涉及回归系数的矩阵计算coef(),以及这些系数的方差-协方差矩阵vcov(),以获得 EMM 及其标准误差。对于涉及多个因素、随机效应等的模型,这些计算几乎不可能手动重现。

于 2019-01-27T22:03:37.543 回答