emmeans包在R中如何计算SE?

4

我对混合模型的标准误差(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会在组之间变化。我基于这样一个假设:该软件包的cran项目网站指出(https://cran.r-project.org/web/packages/emmeans/vignettes/basics.html#backstory):
“估计的边际均值基于模型而不是直接基于数据”
所以我在想,如何计算SE?添加随机因素会如何改变此计算?谢谢。
1个回答

6
为了回答具体的问题,请查看摘要结果:
> 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

我们可以从中得知模型的残差标准差为8.267。此外,我们还需要每个因子水平的观测数量:

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

由于平均数的标准误差是标准偏差除以样本大小的平方根,因此计算:

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

看这些,它们与 emmeans() 输出的标准误相匹配。正如问题中引用的那样,emmeans() 使用 模型,所示的模型基于所有四个样本具有相同 SD 的假设,并且估计该共同 SD 为 8.267,并具有 25 自由度。基于一次只用一个样本的手动计算使用单独的 SD,而这是不同于传递给 emmeans() 的模型的一个不同的模型;这就是结果不同的原因。

至于 emmeans() 如何计算标准误的 通用 问题,它不使用手动计算公式。它使用 EMM 是回归系数的线性组合这一事实。它找出需要什么组合,然后使用来自 coef() 的回归系数和这些系数的方差-协方差矩阵 vcov() 的矩阵计算来获得 EMM 和它们的标准误。对于涉及多个因素、随机效应等模型,这些计算几乎无法手动重现。


PS -- 问题中给出的链接跳转到了文档的错误子部分。应该是 https://cran.r-project.org/web/packages/emmeans/vignettes/basics.html#EMMdef。 - Russ Lenth
谢谢您的快速回答,rvl!老实说,我一直在等待您的答复。 - Chino Chiang

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接