R语言中基于已构建线性回归模型实现未来数据预测的方法
如何用你的LM模型实现特斯拉收盘价(TSLAC)的未来预测?
嘿,我来帮你搞定这个未来预测的问题!你的核心问题出在newdata的构建不符合predict函数的要求——咱们先拆解清楚问题,再一步步解决:
先搞懂你的模型需要什么
你构建的回归模型是:
TISPYNVDA_TSLA <- lm(TSLAC ~ Trend + SPYC * NVDAC, data = Daten)
这个模型的自变量包括:
Trend:你的时间序列索引(1到251)SPYC和NVDAC:两个核心变量,还有它们的交互项SPYC:NVDAC
predict()函数要生成未来预测,必须拿到所有自变量的未来取值,而不是用模型的拟合值来当输入——这就是你之前尝试失败的原因。
步骤1:构建未来的自变量数据集
要预测252到350的区间,你需要为这三个自变量都生成对应的值:
1.1 生成未来的Trend序列
这个最简单,直接延续你现有的索引:
# 未来的Trend:252到350,共99个值 future_trend <- 252:350
1.2 处理SPYC和NVDAC的未来值
这里分两种情况:
- 如果你已经有SPYC和NVDAC的未来观测数据:直接把这些值整理进数据框就行
- 如果没有未来数据:你需要先对SPYC和NVDAC各自建模(比如用ARIMA、指数平滑)预测它们的未来值;如果只是做快速测试,也可以用它们的历史均值来填充(注意:实际项目里不推荐用均值,会影响预测准确性)
举个用历史均值填充的例子:
# 计算SPYC和NVDAC的历史均值(忽略缺失值) mean_spyc <- mean(Daten$SPYC, na.rm = TRUE) mean_nvdac <- mean(Daten$NVDAC, na.rm = TRUE) # 构建完整的未来自变量数据集 future_data <- data.frame( Trend = future_trend, SPYC = rep(mean_spyc, length(future_trend)), # 重复均值99次 NVDAC = rep(mean_nvdac, length(future_trend)) )
步骤2:生成未来预测值
现在用predict()函数,传入你的模型和刚构建的future_data:
# 生成未来的TSLAC预测值 future_predictions <- predict(TISPYNVDA_TSLA, newdata = future_data)
步骤3:把预测结果和原有数据绘图对比
现在可以把历史拟合值、真实值和未来预测值画在同一张图里:
# 先绘制历史拟合线和真实值 plot( x = 1:251, y = predict(TISPYNVDA_TSLA), type = "l", xlab = "Zeitindex", ylab = "TSLAC Preis", main = "TSLAC: Historischer Fit & Zukünftige Vorhersage", lwd = 2 ) lines(1:251, Daten$TSLAC, col = "red", lwd = 2) # 添加未来预测的虚线 lines(252:350, future_predictions, col = "blue", lwd = 2, lty = 2) # 添加图例,让图更清晰 legend( "topleft", legend = c("Historischer Fit", "Echte Werte", "Zukünftige Vorhersage"), col = c("black", "red", "blue"), lty = c(1, 1, 2), lwd = 2 )
为什么你之前的尝试失败了?
你之前用newline <- data.frame(wt=predict(TISPYNVDA_TSLA))然后传入predict(),这完全不符合要求:
predict()需要的是模型自变量的取值,而不是因变量(TSLAC)的拟合值- 模型没办法从拟合的TSLAC值反推出Trend、SPYC和NVDAC,所以必然会报错
内容的提问来源于stack exchange,提问作者Aron1894
相关产品推荐
相关产品推荐

