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

模型估计均值可视化:误差棒/置信区间选择及代码问题问询

关于模型估计边际均值与误差可视化的疑问

背景

此前绘制的是原始均值的标准误差(SE),现在数据已拟合到模型中,纠结是沿用旧方式,还是改为绘制模型的估计边际均值。通过emmeans得到结果:

group <- emmeans(mod1,~ MY_GROUP|YEAR) 
year <- emmeans(mod1,~YEAR|MY_GROUP) 

t <- data.frame(year) %>% full_join(data.frame(group))

t
  YEAR MY_GROUP   emmean        SE       df lower.CL upper.CL
1 2020       G1 17.61143 0.4025956 75.91634 16.80958 18.41328
2 2021       G1 18.75524 0.4025956 75.91634 17.95339 19.55709
3 2020       G2 18.52619 0.4025956 75.91634 17.72434 19.32804
4 2021       G2 19.06762 0.4025956 75.91634 18.26577 19.86947

当前尝试绘制置信区间的代码:

t %>% 
  mutate_if(is.numeric, round, 2) %>% 
  ggplot(., aes(x = YEAR, y = emmean)) +
  stat_summary(aes(group = MY_GROUP, linetype = MY_GROUP, color = MY_GROUP),
               geom = "line", size = 1, position = position_dodge(width = 0)) +
  # stat_summary(aes(group = MY_GROUP), geom = "errorbar", size = 0.5) +
  stat_summary(aes(group = MY_GROUP, color = MY_GROUP), 
               position = position_dodge(width = 0), fun.data = mean_se) +
  geom_errorbar(aes(ymin= lower.CL, ymax= upper.CL), color= 'black', width=.1,
                                 position=position_dodge(.9)) +
  # stat_summary(fun = mean, shape = 4) +
  scale_color_manual(values = c(G1 = "black", G2 =  "black"), guide = 'none') +
  scale_linetype(name = 'MY_GROUP:')

运行后提示:

No summary function supplied, defaulting to mean_se()
Warning message:
Removed 4 rows containing missing values (geom_segment()).

疑问

  • A) 哪种方式更优且更具信息量?
  • B) 仍收到警告信息,但当前绘制的是置信区间而非mean_se(),对吗?

解答

A) 可视化方式选择

建议优先选择绘制模型的估计边际均值+置信区间,原因如下:

  1. 估计边际均值(EMMs)是模型调整后的均值,能控制其他协变量的影响,比原始均值更准确反映分组/年份的真实效应,尤其当数据存在不均衡或协变量时。
  2. 置信区间(CI)比标准误差(SE)更具实际意义:CI直接展示了总体均值的可信范围,读者能直观判断效应的精度和统计显著性(若两组CI无重叠,提示可能存在显著差异);而SE仅反映样本均值的变异程度,需要额外计算才能关联到置信水平。
  3. 你的emmeans结果已经给出了lower.CL和upper.CL,直接用这些值绘制CI能和模型分析保持一致性,避免原始均值与模型结果脱节。

B) 警告信息与绘制内容说明

你当前的代码同时绘制了两种误差线:

  • stat_summary(fun.data = mean_se) 这一行试图计算并绘制原始数据的标准误差线,但你的t数据框只有4行模型结果,没有原始数据支撑计算,因此触发缺失值警告,同时出现默认提示。
  • geom_errorbar(aes(ymin= lower.CL, ymax= upper.CL)) 这一行才是正确绘制模型的置信区间。

要解决警告并只保留CI绘制,删除多余的stat_summary行,修改后的代码如下:

t %>% 
  mutate_if(is.numeric, round, 2) %>% 
  ggplot(aes(x = YEAR, y = emmean, group = MY_GROUP, linetype = MY_GROUP, color = MY_GROUP)) +
  geom_line(size = 1, position = position_dodge(width = 0.9)) + # 直接用emmean绘制线条
  geom_errorbar(aes(ymin= lower.CL, ymax= upper.CL), color= 'black', width=.1, position=position_dodge(.9)) +
  scale_color_manual(values = c(G1 = "black", G2 =  "black"), guide = 'none') +
  scale_linetype(name = 'MY_GROUP:')

这样就只会绘制模型的估计边际均值线条和置信区间,不会再出现警告。


内容的提问来源于stack exchange,提问作者Larissa Cury

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 17:15:42