如何在 R 中使用 auto.arima 的结果构建函数?

机器算法验证 r 时间序列 预测 擅长 自回归的
2022-04-15 05:09:48

fit = auto.arima(Y, xreg=X)在R中使用:得到ARIMA(1,0,0),结果如下:

ar1: 0.3793;    intercept: 9132.46;    X: 22.0469

然后:

  1. 我构建了函数:(Y(t) - 9132.46) = 0.3793*(Y(t-1) - 9132.46) + 22.0469*X(t)在 Excel 中手动计算拟合值和预测值。
  2. 在 R 中,我fitted(fit)用来获取拟合值,forecast()以获取预测值。

但是我发现1)和2)的结果不一样,是不是我建的函数有什么问题?

1个回答

您应该使用以下公式:

Y(t) = 0.3793*(Y(t-1) - 9132.46 - 22.0469*X(t-1)) + 9132.46 + 22.0469*X(t).

复制样本外预测的示例:

require(forecast)
set.seed(123)
n <- 100
xreg <- rnorm(n)
x <- arima.sim(n=n, model=list(ar=0.4)) + 2 + 0.8 * xreg
fit <- arima(x, order=c(1,0,0), include.mean=TRUE, xreg = xreg)
newxreg <- rnorm(5)
# forecasts using predict
pred <- predict(fit, n.ahead=5, newxreg = newxreg)$pred
# forecasts by hand
pred2 <- rep(NA, 5)
pred2[1] <- coef(fit)[1] * (x[n] - coef(fit)[2] - coef(fit)[3] * xreg[n]) + 
  coef(fit)[2] + coef(fit)[3] * newxreg[1]
for (i in seq(2, 5))
  pred2[i] <- coef(fit)[1] * (pred2[i-1] - coef(fit)[2] - coef(fit)[3] * newxreg[i-1]) + 
    coef(fit)[2] + coef(fit)[3] * newxreg[i]
cbind(pred, pred2)
#         pred    pred2
# 101 2.966803 2.966803
# 102 1.822288 1.822288
# 103 1.991748 1.991748
# 104 2.095386 2.095386
# 105 2.855613 2.855613
all.equal(as.vector(pred), pred2)
#[1] TRUE