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

如何为lm(y~x1+x2)线性回归模型绘制95%置信区间

问题原因与修正方案

核心错误点

  • predict()调用参数错误:你的回归模型lm1包含x1、x2两个自变量,但传入的newdata仅包含x列,R无法匹配到模型所需的自变量,因此置信区间计算失败。
  • abline()不适用于多元回归:abline(lm())仅支持单自变量的一元线性回归场景,多元回归的拟合结果为高维平面,无法直接用单条二维直线展示。
  • newx生成逻辑不匹配:你直接基于x1+x2的范围生成序列,但没有对应到x1、x2的实际取值组合,无法输入到模型中计算预测值。

修正代码示例

针对你希望以x1+x2为横轴展示拟合结果的需求,这里提供适配你数据特征的修正代码(你的数据中x1仅取0和0.04两个离散值,我们固定x1的取值后生成匹配的x2序列即可):

# 原始数据
y <- c(139.31449, 105.17776, 105.38411,  99.27608,  92.29064,  91.55114,  84.44251,  78.40453,  74.66656,  73.33242,  72.42429,  77.08666)
x1 <- c(0.04, 0.00, 0.00, 0.00, 0.00, 0.00, 0.04, 0.00, 0.00, 0.00, 0.00, 0.00)
x2 <- c(0.00, 0.08, 0.10, 0.12, 0.15, 0.20, 0.00, 0.08, 0.10, 0.12, 0.15, 0.20)
lm1 <- lm(y ~ x1 + x2)

# 生成预测用的新数据:分别固定x1为0和0.04,生成x2的连续序列
new_x2 <- seq(min(x2), max(x2), by = 0.01)
newdata1 <- data.frame(x1 = 0, x2 = new_x2)
newdata2 <- data.frame(x1 = 0.04, x2 = new_x2)

# 计算两组的置信区间
conf1 <- predict(lm1, newdata = newdata1, interval = "confidence", level = 0.95)
conf2 <- predict(lm1, newdata = newdata2, interval = "confidence", level = 0.95)

# 绘图
plot(x1 + x2, y, xlab = "x1 + x2", ylab = "y")
# 绘制x1=0时的拟合线和置信区间
lines(new_x2 + 0, conf1[,1], col = "lightblue")
matlines(new_x2 + 0, conf1[,2:3], col = "blue", lty = 2)
# 绘制x1=0.04时的拟合线和置信区间
lines(new_x2 + 0.04, conf2[,1], col = "lightcoral")
matlines(new_x2 + 0.04, conf2[,2:3], col = "red", lty = 2)
# 加图例区分两组
legend("topright", legend = c("x1=0拟合线", "x1=0 95%CI", "x1=0.04拟合线", "x1=0.04 95%CI"),
       col = c("lightblue", "blue", "lightcoral", "red"), lty = c(1,2,1,2))

代码说明

  • 按照你数据中x1的离散取值拆分了两组预测,分别计算对应拟合值和置信区间,符合你将x1+x2作为横轴的绘图需求
  • 所有传入predict()的新数据都包含x1和x2两个列,和模型自变量完全匹配,不会出现计算错误
  • 不用abline,直接用lines绘制对应拟合结果,适配多元回归的可视化需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 04:06:03