使用fpp3包构建多特征时间序列TSLM模型的预测步骤咨询
fpp3包构建多特征时间序列TSLM模型的预测步骤咨询
嗨,你遇到的这个问题其实是多变量时间序列预测里的典型场景,我来给你拆解下原因和解决步骤:
为什么单特征没问题,多特征会报错?
你单特征用的TSLM(Consumption)本质是仅含截距项的模型(等同于TSLM(Consumption ~ 1)),它只需要用历史数据算出的截距项来生成未来预测,完全不需要额外变量。但当你加入Income + Production + Savings + Unemployment这些预测变量后,模型变成了回归模型——要预测Consumption的未来值,必须先知道这几个自变量在未来4个季度的取值,这就是报错提示“Unable to compute required variables from provided new_data”的核心原因。
而你之前能正常运行report()和glance(),是因为这两个函数只需要历史数据集来计算模型的拟合统计量,不需要任何未来数据,所以不会触发这个问题。
多特征TSLM模型的预测步骤
下面是具体的解决流程:
1. 准备预测期的自变量数据
你有两种获取未来自变量数据的方式:
- 如果已经有未来4个季度的实际观测值(比如提前拿到了这些经济指标的官方预测数据),直接整理成和
us_change格式一致的时间序列数据框即可。 - 如果没有实际数据,需要先对每个自变量单独建立时间序列模型,预测它们的未来值。这里用ARIMA模型举例(你也可以用TSLM或者其他fpp3支持的模型):
library(fpp3) library(tidyverse) # 对每个自变量建立预测模型并生成未来4期预测值 var_forecasts <- us_change |> # 提取需要预测的自变量和时间列 select(Quarter, Income, Production, Savings, Unemployment) |> # 转换为长格式方便批量建模 pivot_longer(-Quarter, names_to = "Variable", values_to = "Value") |> # 为每个变量拟合ARIMA模型 model(arima = ARIMA(Value)) |> # 预测未来4个季度 forecast(h = 4) |> # 转换回宽格式,和原数据集结构匹配 pivot_wider(names_from = Variable, values_from = .mean)
2. 传入自变量预测值进行Consumption的预测
把上面生成的自变量预测数据,通过new_data参数传给forecast()函数,就能得到多特征模型的预测结果了:
# 先拟合多特征TSLM模型 fit_consMR <- us_change |> model(tslm = TSLM(Consumption ~ Income + Production + Savings + Unemployment)) # 传入自变量预测数据,生成Consumption的预测 cons_forecast <- forecast(fit_consMR, new_data = var_forecasts) # 查看结果 cons_forecast
3. 验证预测结果
运行后你会得到和单特征模型类似的fable对象,里面包含未来4个季度Consumption的预测分布和均值,此时模型已经用上了所有自变量的未来预测值。
额外提示
如果你的自变量有已知的未来取值(比如某些政策变量是固定的),直接把这些值整理成符合要求的时间序列数据框传入new_data即可,不需要额外建模预测。
备注:内容来源于stack exchange,提问作者Russ Conte
相关产品推荐
相关产品推荐

