如何通过emmeans获取三分类变量的各水平调整均值?
问题:用emmeans计算三分类变量调整均值仅得汇总值的解决方法
已成功的二分类变量计算示例
我已经能用emmeans计算二分类变量(比如sex:1=男性,2=女性)的调整均值,模型及代码如下:
mean_MF <- lm(LZ~age + SES_3 + sex, data = MF) summary(mean_MF) emmeans(mean_MF, ~ sex)
输出能正常展示两个水平的调整均值:
> emmeans(mean_MF, ~ sex) sex emmean SE df lower.CL upper.CL 1 7.05 0.0193 20894 7.02 7.09 2 6.96 0.0187 20894 6.93 7.00
结果已针对belastet_SZ、belastet_SNZ、guteSeiten_SZ、guteSeiten_SNZ、SES_3的水平取平均,置信水平为0.95。
三分类变量计算遇到的问题
以三分类年龄变量Alter为例,编码规则:
18-30岁:1
31-40岁:2
41-51岁:3
使用的模型及emmeans代码:
F_Alter <- lm(LZ~ SES_3 + Alter, data = Frauen) summary(F_Alter) emmeans(F_Alter, ~ Alter)
模型摘要显示:
> summary(F_Alter) Call: lm(formula = LZ ~ SES_3 + Alterfactor, data = Frauen) Residuals: Min 1Q Median 3Q Max -7.2303 -1.1162 0.1951 1.1220 3.8838 Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) 7.44956 0.05653 131.777 < 2e-16 *** SES_3mittel -0.42539 0.04076 -10.437 < 2e-16 *** SES_3niedrig -1.11411 0.05115 -21.781 < 2e-16 *** Alterfactor -0.07309 0.02080 -3.513 0.000444 *** --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 Residual standard error: 1.889 on 14481 degrees of freedom (5769 Beobachtungen als fehlend gelöscht) Multiple R-squared: 0.03287, Adjusted R-squared: 0.03267 F-statistic: 164 on 3 and 14481 DF, p-value: < 2.2e-16
但emmeans仅输出一个汇总值,而非三个年龄水平的调整均值:
emmeans(F_Alter, ~ Alter) Alter emmean SE df lower.CL upper.CL 1.93 6.8 0.0179 14481 6.76 6.83 Results are averaged over the levels of: SES_3 Confidence level used: 0.95
解决方法
问题核心是Alter被R当作连续变量处理,而非分类变量——从模型摘要里Alterfactor是单一系数(未按水平拆分)也能验证这点。要获取三个年龄水平的调整均值,有两种处理方式:
方法1:重新拟合模型时将Alter转为因子
先把变量转换为分类格式,再重新构建模型:
# 将Alter转换为因子,可自定义标签更易读 Frauen$Alter <- factor(Frauen$Alter, levels = c(1,2,3), labels = c("18-30岁", "31-40岁", "41-51岁")) # 重新拟合模型 F_Alter <- lm(LZ~ SES_3 + Alter, data = Frauen) # 计算调整均值 emmeans(F_Alter, ~ Alter)
方法2:直接在emmeans中强制按分类变量处理
如果不想重新拟合模型,可在emmeans中通过参数指定变量的分类属性:
emmeans(F_Alter, ~ factor(Alter), at = list(Alter = c(1,2,3)))
或者更简洁的写法:
emmeans(F_Alter, ~ Alter | Alter, at = list(Alter = c(1,2,3)))
执行后就能得到三个年龄水平各自的调整均值。
内容的提问来源于stack exchange,提问作者Patmae
相关产品推荐
相关产品推荐

