You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言多元线性回归predict()返回过多结果问题求助

多元线性回归预测问题的解决办法

问题核心原因

你的代码存在两个关键错误:

  1. 首次调用predict时,新数据集构造逻辑错误:你用x[1,1]、x[2,1]这种方式取的是不同行的单个元素,R会自动循环补齐这些值,生成和训练样本行数一致的149行数据框,因此返回149个预测值。
  2. 循环方法中参数名错误: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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 15:15:09