R语言多元线性回归预测区间为何返回多行结果?
问题原因与解决方法
为什么返回300多行结果?
你的代码中newdata = data直接复制了整个原始数据集,随后对每一行的educ加3。predict()函数会对newdata中的每一行观测值单独生成预测区间,因此返回结果的行数和原数据集完全一致(300多行)。
如何获取单一预测区间?
要得到单一的预测区间,你需要创建一条代表目标场景的单行数据:将其他自变量设置为参考值(比如数值型变量取均值、分类变量取众数,或你关注的特定取值),仅将educ在参考值基础上加3,再传入predict()函数。
示例代码
# 1. 生成各变量的参考值:数值型取均值,分类变量取众数 ref_data <- data.frame( educ = mean(data$educ, na.rm = TRUE), age = mean(data$age, na.rm = TRUE), gdhlth = names(which.max(table(data$gdhlth))), smsa = names(which.max(table(data$smsa))), union = names(which.max(table(data$union))), selfe = names(which.max(table(data$selfe))), marr = names(which.max(table(data$marr))), yrsmarr = mean(data$yrsmarr, na.rm = TRUE), yngkid = names(which.max(table(data$yngkid))) ) # 2. 将educ加3,得到单行的新数据 newdata_single <- ref_data newdata_single$educ <- newdata_single$educ + 3 # 3. 生成单一99%预测区间 predict(reg5, newdata = newdata_single, interval = 'prediction', level = 0.99)
补充:区分预测区间与平均效应置信区间
如果你想了解的是educ增加3对sleep的平均影响的区间(而非单个观测的预测区间),可以直接提取回归系数并计算置信区间:
# 获取educ系数的99%置信区间,乘以3得到增加3的平均效应区间 confint(reg5, "educ", level = 0.99) * 3
- 预测区间:针对单个特定观测的sleep取值范围,包含随机误差,区间更宽
- 平均效应置信区间:针对总体上educ每增加3时sleep的平均变化的估计范围,仅包含估计误差
内容的提问来源于stack exchange,提问作者Zora Kuang
相关产品推荐
相关产品推荐

