我正在尝试在 R 中使用 ARIMAX 构建一个预测模型,并需要一些关于如何在 xreg 参数中处理协变量的指导。
我知道,auto.arima 函数在拟合模型(从训练周期数据)时负责协变量的差分,我也不需要差分协变量来生成测试周期(未来值)的预测。 但是,在 R 中使用自定义 (p, d, q) 和 (P, D, Q)[m] 值与 d 或 D 大于 0 的 Arima() 拟合模型时,我们是否需要手动对协变量进行差分? 如果我进行差分,我会遇到一个问题,即差分协变量矩阵的长度小于因变量的数据点数。
应该如何处理这个问题?
- 我应该按原样发送协变量矩阵,即没有差分吗?
- 我是否应该进行差分但省略前几个没有差分协变量数据的观测值?
- 我是否应该保留差异协变量值不可用的前几行的实际值,而其余行具有差异值?
- 如果我必须将标志变量 (1/0) 传递给 xreg 矩阵,我是否也应该对这些变量进行差分,或者将标志变量的实际值与剩余变量的差异值绑定?
此外,在生成未来期间的预测时,如何传递协变量值(原样或差分后)?
我正在使用以下代码:
ndiff <- ifelse(((pdq_order == "auto") || (PDQ_order == "auto")), ndiffs(ts_train_PowerTransformed), pdq_order[2])
nsdiff <- ifelse(((pdq_order == "auto") || (PDQ_order == "auto")), nsdiffs(ts_train_PowerTransformed), PDQ_order$order[2])
# Creating the appropriate covariates matrix after doing differencing
ifelse(nsdiff >= 1
, ifelse(ndiff >= 1
, xreg_differenced <- diff(diff(ts_CovariatesData_TrainingPeriod, lag = PDQ_order$period, differences = nsdiff), lag = 1, differences = ndiff)
, xreg_differenced <- diff(ts_CovariatesData_TrainingPeriod , lag = PDQ_order$period, differences = nsdiff)
)
, ifelse(ndiff >= 1
, xreg_differenced <- diff( ts_CovariatesData, lag = 1, differences = ndiff)
, xreg_differenced <- ts_CovariatesData
)
# Fitting the model
model_arimax <- Arima(ts_train_PowerTransformed, order = pdq_order, seasonal = PDQ_order, xreg = xreg_differenced))
# Generating Forecast for the test period
fit.test <- model_arimax %>% forecast(h=length(ts_test),
xreg = as.data.frame(diff(diff(ts_CovariatesData_TestPeriod, lag = PDQ_order$period, differences = nsdiff), lag = 1, differences = ndiff))
恳请建议。
Arima
将区分顺序和季节性参数中指定的响应变量和 xreg 变量。你永远不需要自己做差异。