如何在R中的emmeans包中计算SE

时间:2019-01-25 14:16:58

标签: r emmeans

我对计算混合模型的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是如何计算的?以及添加随机因素将如何改变此计算?预先感谢。

1 个答案:

答案 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及其标准误差。对于涉及多个因素,随机效应等的模型,几乎不可能手工复制这些计算。