使用R语言predict()函数绘制置信区间时异常问题求助
问题解决:置信区间显示异常的原因及修正
你的置信区间显示异常的核心问题是预测时传入的新数据列名与模型自变量名不匹配:
- 你的模型是
lm(BML$Boron ~ BML$ML_Law),自变量实际对应的名称是ML_Law - 但你生成
newdata时用了data.frame(x=newx),列名是x,predict无法正确关联到模型的自变量,导致计算出的置信区间是固定值,最终画出异常的平行线
修正后的完整代码
# 拟合模型(建议使用data参数,避免$符号,更规范) model <- lm(Boron ~ ML_Law, data = BML) summary(model) # 生成新的自变量序列,注意newdata的列名必须和模型自变量一致(ML_Law) newx <- seq(min(BML$ML_Law), max(BML$ML_Law), length.out=25) preds <- predict(model, newdata = data.frame(ML_Law = newx), interval = 'confidence') # 绘图 plot(Boron ~ ML_Law, data = BML, col='black', pch=19, xlab="Ocean pH Data Anomaly", ylab="δ¹¹B Isotopic Record pH Anomaly") points(alldata$Boron ~ alldata$BATS, col='blue', pch=19) points(alldata$Boron ~ alldata$HOT, col='orange', pch=19) points(alldata$Boron ~ alldata$SODA, col='green', pch=19) abline(model) lines(newx, preds[ ,3], lty = 'dashed', col = 'blue') lines(newx, preds[ ,2], lty = 'dashed', col = 'blue')
额外说明
- 使用
lm(Boron ~ ML_Law, data = BML)这种写法,会让模型明确识别数据框中的列名,后续预测时不容易出现列名不匹配的问题 - 修正后
predict会根据ML_Law的新值正确计算每个点的预测值和置信区间,画出的虚线会是随自变量变化的正常置信区间
内容的提问来源于stack exchange,提问作者Liesl Blackman
相关产品推荐
相关产品推荐

