R线性回归predict警告:newdata有1行但匹配到392行变量如何解决
问题原因
- R的
predict.lm()函数要求传入的newdata变量名,必须和拟合线性模型时用到的自变量名称完全匹配(大小写也需一致)。 - 你构造训练数据集
mydata时,将马力字段重命名为了my_horse,因此模型内存储的自变量名为my_horse;但预测时传入的newdata中字段名为horsepower,名称不匹配,R无法识别到可用于预测的自变量,就会默认调用模型训练时的392行原始自变量数据计算预测值,因此返回全量结果并弹出对应警告。
解决方案
方法1:直接匹配预测时的变量名
将newdata中的变量名修改为和训练时一致的my_horse即可,如需输出99%置信区间、预测区间,额外指定interval和level参数即可:
# 仅输出单条预测值 predict(car_linear_regression, newdata = data.frame(my_horse = 93.5)) # 输出预测值 + 99%置信区间(针对总体回归均值的区间估计) predict(car_linear_regression, newdata = data.frame(my_horse = 93.5), interval = "confidence", level = 0.99) # 输出预测值 + 99%预测区间(针对单个观测值的区间估计,范围比置信区间更宽) predict(car_linear_regression, newdata = data.frame(my_horse = 93.5), interval = "prediction", level = 0.99)
方法2:拟合时使用原始字段名(降低后续维护成本)
拟合模型时直接用原始数据集的字段名,不需要额外构造单独的向量重命名,后续预测时直接传horsepower即可:
# 直接用原始数据集拟合模型,无需单独构造字段 car_linear_regression <- lm(acceleration ~ horsepower, data = auto_df) # 直接传入horsepower做预测 predict(car_linear_regression, newdata = data.frame(horsepower = 93.5), interval = "prediction", level = 0.99)
内容的提问来源于stack exchange,提问作者Emilia Delizia
相关产品推荐
相关产品推荐

