模型估计均值可视化:误差棒/置信区间选择及代码问题问询
关于模型估计边际均值与误差可视化的疑问
背景
此前绘制的是原始均值的标准误差(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) 可视化方式选择
建议优先选择绘制模型的估计边际均值+置信区间,原因如下:
- 估计边际均值(EMMs)是模型调整后的均值,能控制其他协变量的影响,比原始均值更准确反映分组/年份的真实效应,尤其当数据存在不均衡或协变量时。
- 置信区间(CI)比标准误差(SE)更具实际意义:CI直接展示了总体均值的可信范围,读者能直观判断效应的精度和统计显著性(若两组CI无重叠,提示可能存在显著差异);而SE仅反映样本均值的变异程度,需要额外计算才能关联到置信水平。
- 你的
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
相关产品推荐
相关产品推荐

