R Studio绘制预测区间报错:x与y长度不一致问题求助
解决
xy.coords(x, y) : 'x' and 'y' lengths differ报错问题 嘿,这个报错我之前处理过!核心原因很明确:你用来绘图的x和y向量长度不匹配——原始数据里的Humidity和Temp是200个观测值,但你生成的xstar只有100个点,要是绘图时不小心把这两类长度不同的向量混在一起用,就会触发这个错误。
先看你的代码问题:attach(data)其实是个潜在的坑,它会把数据框的列暴露到全局环境,很容易引发变量引用混乱,建议直接用data参数或者明确指定列名。另外,你大概率是在添加预测区间线的时候,错误地用了原始的200个Humidity值去匹配100个预测区间值,才导致长度不匹配。
给你整理了修正后的完整代码,亲测可行:
# 避免使用attach,直接用数据框引用列 fitreg <- lm(Temp ~ Humidity, data = data) # 生成100个覆盖Humidity范围的预测点 xstar <- seq(min(data$Humidity), max(data$Humidity), length.out = 100) new <- data.frame(Humidity = xstar) # 计算95%预测区间 pi <- predict(fitreg, newdata = new, interval = "predict", level = 0.95) # 先绘制原始散点图(用200个观测值,没问题) plot(Temp ~ Humidity, data = data, xlab = "Humidity", ylab = "Temperature", main = "Temperature vs Humidity with 95% Prediction Intervals") # 添加回归线 abline(fitreg, col = "darkblue", lwd = 2) # 添加预测区间的上下限(xstar和pi的长度都是100,匹配) lines(xstar, pi[, "lwr"], col = "darkred", lty = 2) lines(xstar, pi[, "upr"], col = "darkred", lty = 2) # 可选:添加图例让图更清晰 legend("topright", legend = c("Regression Line", "95% Prediction Interval"), col = c("darkblue", "darkred"), lty = c(1, 2), lwd = 2)
额外给你几个排查小技巧:
- 检查
pi的维度:运行dim(pi)应该返回100 3,length(xstar)是100,确保两者长度完全一致。 - 如果原始数据有缺失值,先清理:
data_clean <- data[complete.cases(data$Temp, data$Humidity),],再用清理后的数据重新拟合和绘图,避免因缺失值导致的观测数不一致。 - 永远别用
attach(),它会让变量来源变得模糊,后续维护代码时很容易踩坑。
内容的提问来源于stack exchange,提问作者ttiimm13
相关产品推荐
相关产品推荐

