R语言线性模型多因变量预测异常问题及解决咨询
问题背景
使用mtcars数据集做技术演示:
- 加载数据:
data <- mtcars - 构建多因变量线性模型:
fit <- lm(mpg + disp ~ ., data=data) - 调用
predict(fit, data)预测时,仅得到每行一个预测值(如下),而非预期的mpg和disp两个因变量的预测值:
Mazda RX4 Mazda RX4 Wag Datsun 710 Hornet 4 Drive Hornet Sportabout Valiant Duster 360 Merc 240D 165.60538 179.57702 159.75746 247.73607 344.79637 251.66598 348.80082 160.58774 Merc 230 Merc 280 Merc 280C Merc 450SE Merc 450SL Merc 450SLC Cadillac Fleetwood Lincoln Continental 148.81596 207.46454 200.85338 360.66297 331.60317 331.14515 429.61466 452.19838 Chrysler Imperial Fiat 128 Honda Civic Toyota Corolla Toyota Corona Dodge Challenger AMC Javelin Camaro Z28 462.42356 126.53160 59.90496 93.95177 149.87657 332.59491 325.64415 380.86739 Pontiac Firebird Fiat X1-9 Porsche 914-2 Lotus Europa Ford Pantera L Ferrari Dino Maserati Bora Volvo 142E 375.64822 111.88026 159.05993 101.86053 369.53347 169.01770 309.00674 177.31316
咨询两个问题:
- 如何通过
predict()或其他函数获取两个因变量的预测值? - 如何解读当前得到的预测结果?
注:本模型仅为技术演示,无需评估其合理性。
解答
1. 获取两个因变量的预测值方法
当用lm()拟合多因变量模型时,直接调用predict()默认会返回堆叠后的一维向量,可通过以下两种方法得到分因变量的结构化预测结果:
方法一:提取模型内置的拟合值矩阵
拟合完成的模型对象fit中,fitted.values存储了训练数据的预测值,这是一个按因变量分列的矩阵:# 获取训练集的双因变量预测值 fitted_matrix <- fit$fitted.values head(fitted_matrix)输出会包含
mpg和disp两列,每行对应一个样本的两个预测值。方法二:调用predict时指定type="matrix"
在predict()中添加type="matrix"参数,可直接返回按因变量分列的预测矩阵,支持训练集和新数据:# 获取预测值矩阵 pred_matrix <- predict(fit, data, type = "matrix") head(pred_matrix)
2. 当前预测结果的解读
你当前得到的是两个因变量预测值的堆叠向量:
- 向量前32个值对应
mpg的预测结果,后32个值对应disp的预测结果(mtcars共32个样本)。 - 从输出数值范围来看,当前显示的是
disp的预测值(比如Mazda RX4的原始disp为160,预测值165.6与之匹配),若要验证,可对比fit$fitted.values的两列数据,就能看到前后两段分别对应mpg和disp的预测结果。
这是因为predict.lm()在默认type="response"且模型为多因变量时,会将矩阵形式的预测值按列堆叠成一维向量返回,因此呈现为每行单值的输出形式。
内容的提问来源于stack exchange,提问作者antecessor
相关产品推荐
相关产品推荐

