我对计算混合模型的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是如何计算的?以及添加随机因素将如何改变此计算?预先感谢。
答案 0 :(得分:2)
要回答特定问题,请查看摘要结果:
> 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()
的模型是不同的模型;这就是为什么结果不同的原因。
关于emmeans()
如何计算SE的一般问题,它不使用人工计算公式。它利用了EMM是回归系数的线性组合这一事实。它找出需要什么组合,然后使用包含来自coef()
的回归系数的矩阵计算以及这些系数的vcov()
的方差-协方差矩阵来获得EMM及其标准误差。对于涉及多个因素,随机效应等的模型,几乎不可能手工复制这些计算。