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

ggplot中lm方法未显示置信区间,求助添加置信区间的解决办法

解决ggplot geom_smooth不显示置信区间的问题

核心原因

你用geom_smooth(data = newDRdata, ...)时,如果newDRdata只是包含预测拟合值的数据集(比如仅通过predict()生成的拟合列),它没有原始模型的方差、残差等信息,ggplot无法计算置信区间——哪怕设置se=TRUE也没用,因为缺少必要的统计量。

两种解决办法

办法1:直接用原始数据拟合(最简便)

不需要单独生成newDRdata,让geom_smooth直接基于原始的clawregression_data拟合模型并计算置信区间:

ggplot(clawregression_data, aes(x = logDR, y = Deut)) +
  geom_point(shape=1) +    
  geom_smooth(method = lm, se = TRUE) +
  expand_limits(y=c(-100,0))

办法2:用带置信区间的预测数据手动绘制

如果必须使用newDRdata,需要先让预测结果包含置信区间的上下限,再用geom_line画拟合线、geom_ribbon画置信区间:

  1. 先拟合原始模型并生成带置信区间的预测数据:
# 拟合线性模型
lm_fit <- lm(Deut ~ logDR, data = clawregression_data)
# 生成包含置信区间的预测结果(用seq生成连续x值保证拟合线平滑)
pred_data <- predict(lm_fit, 
                     newdata = data.frame(logDR = seq(min(clawregression_data$logDR), 
                                                     max(clawregression_data$logDR), 
                                                     length.out = 100)),
                     interval = "confidence")
# 整理成ggplot可用的数据框
newDRdata_df <- cbind(data.frame(logDR = seq(min(clawregression_data$logDR), 
                                             max(clawregression_data$logDR), 
                                             length.out = 100)),
                      as.data.frame(pred_data))
  1. 绘图:
ggplot() +
  geom_point(data = clawregression_data, aes(x = logDR, y = Deut), shape=1) +    
  geom_line(data = newDRdata_df, aes(x = logDR, y = fit)) +
  geom_ribbon(data = newDRdata_df, aes(x = logDR, ymin = lwr, ymax = upr), alpha = 0.2) +
  expand_limits(y=c(-100,0))

补充说明

  • geom_smooth(method=lm)的se=TRUE生效的前提是,它能拿到用于拟合模型的原始数据(或包含标准误的预测数据),仅靠单一的拟合值列无法计算置信区间。
  • 如果你的newDRdata是从其他渠道生成的,检查数据中是否有se.fit(标准误)或置信区间上下限列,若有也可以直接用这些列配合geom_ribbon绘制。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 10:55:17