You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 22:07:28