R语言绘制99%置信区间与预测区间xy长度不匹配报错求助
报错原因
当前conf_int仅针对马力=93.5的单个值计算区间,返回结果只有1行,和mydata$my_horse全列的长度完全不一致,所以触发长度不匹配的报错。此外要生成99%区间,需要额外在predict()中指定level=0.99参数,R默认生成的是95%区间。
完整可运行代码
# 1. 数据准备与模型构建(和原有逻辑一致) my_acc <- auto_df$acceleration my_horse <- auto_df$horsepower mydata <- data.frame(my_acc, my_horse) car_linear_regression <- lm(my_acc ~ my_horse, mydata) # 2. 生成覆盖所有马力范围的连续序列,用于绘制平滑的区间线 # 取马力的最小值到最大值,生成100个均匀分布的点,保证区间线平滑 new_horse_seq <- data.frame(my_horse = seq(min(mydata$my_horse), max(mydata$my_horse), length.out = 100)) # 3. 计算99%置信区间和99%预测区间 conf_int_99 <- predict(car_linear_regression, newdata = new_horse_seq, interval = "confidence", level = 0.99) pred_int_99 <- predict(car_linear_regression, newdata = new_horse_seq, interval = "prediction", level = 0.99) # 4. 绘图 # 绘制原始散点 plot(my_acc ~ my_horse, data = mydata, pch = 20, cex = 1.5, col = "blue", xlab = "汽车马力", ylab = "加速到100km/h所需秒数", main = "线性回归99%置信区间与预测区间") # 绘制回归直线 abline(car_linear_regression, lwd = 3, col = "red") # 绘制99%置信区间上下界 lines(new_horse_seq$my_horse, conf_int_99[, "lwr"], col = "darkred", lty = 2, lwd = 2) lines(new_horse_seq$my_horse, conf_int_99[, "upr"], col = "darkred", lty = 2, lwd = 2) # 绘制99%预测区间上下界 lines(new_horse_seq$my_horse, pred_int_99[, "lwr"], col = "darkgreen", lty = 3, lwd = 2) lines(new_horse_seq$my_horse, pred_int_99[, "upr"], col = "darkgreen", lty = 3, lwd = 2) # 增加图例方便区分 legend("topright", legend = c("原始散点", "回归直线", "99%置信区间", "99%预测区间"), col = c("blue", "red", "darkred", "darkgreen"), pch = c(20, NA, NA, NA), lty = c(NA, 1, 2, 3), lwd = 2) # (可选)单独标记马力=93.5对应的单个点的区间,匹配练习要求 point_conf <- predict(car_linear_regression, newdata = data.frame(my_horse = 93.5), interval = "confidence", level = 0.99) point_pred <- predict(car_linear_regression, newdata = data.frame(my_horse = 93.5), interval = "prediction", level = 0.99) points(x = 93.5, y = point_conf[,"fit"], pch = 19, col = "black", cex = 2) arrows(x0 = 93.5, y0 = point_conf[,"lwr"], x1 = 93.5, y1 = point_conf[,"upr"], code = 3, angle = 90, length = 0.1, col = "darkred", lwd = 2) arrows(x0 = 93.5, y0 = point_pred[,"lwr"], x1 = 93.5, y1 = point_pred[,"upr"], code = 3, angle = 90, length = 0.1, col = "darkgreen", lwd = 2)
关键修改说明
- 生成覆盖马力全部取值范围的连续序列作为预测输入,保证返回的区间结果长度和x轴数据长度一致,解决长度不匹配报错
- 新增
level=0.99参数,满足99%区间的计算要求 - 区分置信区间和预测区间的线条样式,增加图例方便识别,可选补充单个马力值93.5的区间标记,匹配练习要求
内容的提问来源于stack exchange,提问作者Emilia Delizia
相关产品推荐
相关产品推荐

