R语言多元线性回归predict()返回过多结果问题求助
多元线性回归预测问题的解决办法
问题核心原因
你的代码存在两个关键错误:
- 首次调用
predict时,新数据集构造逻辑错误:你用x[1,1]、x[2,1]这种方式取的是不同行的单个元素,R会自动循环补齐这些值,生成和训练样本行数一致的149行数据框,因此返回149个预测值。 - 循环方法中参数名错误:
predict函数指定新数据集的参数是newdata,而非你写的sample_x,导致函数无法识别测试数据。
正确解决方案
方案1:直接传入完整测试数据框(推荐)
无需手动拆分变量,直接把test_x传入newdata即可,只要test_x的列名和训练时的sample_x完全一致(你的数据已满足该条件):
sample_spxx = spxx[2:150] sample_x = x[1:149,] y = lm(sample_spxx ~ sample_x) test_spxx = spxx[151:207] test_x = x[150:206,] # 直接传入测试数据框 predictions = predict(y, newdata = test_x)
此方法会生成与test_x行数匹配的预测值(共57个),和test_spxx长度一致。
方案2:修复循环方法的参数错误
如果坚持逐行预测,只需修正参数名:
predictions = c() for(i in 1:nrow(test_x)){ # 将错误的sample_x改为newdata predictions[i] = predict(y, newdata = data.frame(test_x[i,])) }
注意:test_x[i,]转成data.frame时,R会保留原列名,确保和训练集一致即可。
额外提示
- 训练模型时,
lm(sample_spxx ~ sample_x)等价于将sample_x所有列作为自变量,也可以显式写为lm(sample_spxx ~ DTWEXBGS + CFNAI + DGS2 + BAMLH0A0HYM2 + CPIAUCSL, data = cbind(sample_spxx, sample_x)),可读性更强。 - 务必保证
test_x和sample_x的列名完全一致,大小写、拼写均不能出错,否则predict会报错。
内容的提问来源于stack exchange,提问作者user121416
相关产品推荐
相关产品推荐

