ARMA模型的拟合值

机器算法验证 阿玛
2022-03-09 22:54:32

我试图了解如何为 ARMA(p,q) 模型计算拟合值。我已经在这里找到了一个关于 ARMA 过程的拟合值的问题,但无法理解它。

如果我有一个 ARMA(1,1) 模型,即

Xt=α1Xt1+ϵtβ1ϵt1

并给出一个(固定的)时间序列,我可以估计参数。我将如何使用这些估计值计算拟合值。对于 AR(1) 模型,拟合值由下式给出

Xt^=α1^Xt1.

由于 ARMA 模型中的创新是不可观察的,我将如何使用 MA 参数的估计?我会忽略 MA 部分并计算 AR 部分的拟合值吗?

1个回答

要回答您的问题,您基本上需要知道如何 在模型中计算残差,即e_t因为那时\hat{X_{t}}=X_{t}-e_{t}让我们首先生成一个假数据(X_t并拟合模型(没有平均值):etarmaXt^=XtetXtarima(.5,.6)arma

library(forecast)
n=1000
ts_AR <- arima.sim(n = n, list(ar = 0.5,ma=0.6))
f=arima(ts_AR,order=c(1,0,1),include.mean=FALSE)
summary(f)
    Series: ts_AR 
    ARIMA(1,0,1) with zero mean     

    Coefficients:
             ar1     ma1
          0.4879  0.5595
    s.e.  0.0335  0.0317

    sigma^2 estimated as 1.014:  log likelihood=-1426.7
    AIC=2859.4   AICc=2859.42   BIC=2874.12

    Training set error measures:
                         ME    RMSE       MAE      MPE     MAPE      MASE
    Training set 0.02102758 1.00722 0.8057205 40.05802 160.1078 0.6313145

现在我按如下方式创建残差:e1=0(因为在 1 处没有残差)并且对于t=2,...,n我们有:et=XtArXt1Maet1,其中ArMa是上述拟合模型中估计的自回归和移动平均部分。这是代码:

e = rep(1,n)
e[1] = 0 ##since there is no residual at 1, e1 = 0
for (t in (2 : n)){
  e[t] = ts_AR[t]-coef(f)[1]*ts_AR[t-1]-coef(f)[2]*e[t-1]
}

一旦找到残差,拟合值就是因此,在下文中,我比较了从 R 获得的前 10 个拟合值和我可以从计算的拟合值(即手动)。etXt^=Xtetet

cbind(fitted.from.package=fitted(f)[1:10],fitted.calculated.manually=ts_AR[1:10]-e[1:10])
      fitted.from.package fitted.calculated.manually
 [1,]          -0.4193068                 -1.1653515
 [2,]          -0.8395447                 -0.5685977
 [3,]          -0.4386956                 -0.6051324
 [4,]           0.3594109                  0.4403898
 [5,]           2.9358336                  2.9013738
 [6,]           1.3489537                  1.3682191
 [7,]           0.5329436                  0.5219576
 [8,]           1.0221220                  1.0283511
 [9,]           0.6083310                  0.6048668
[10,]          -0.5371484                 -0.5352324

如您所见,它们很接近但不完全相同。原因是当我创建残差时我设置了不过还有其他选择。例如,根据帮助文件,卡尔曼滤波器发现的残差及其方差以及它们对的计算将与我略有不同。但随着时间的推移,它们正在趋同。 现在为 Ar(1) 模型。我拟合了模型(没有平均值)并直接向您展示如何使用系数计算拟合值。这次我没有计算残差。请注意,我报告了删除第一个拟合值的前 10 个拟合值(同样,它会根据您的定义方式而有所不同)。如您所见,它们完全相同。e1=0arimaet

f=arima(ts_AR,order=c(1,0,0),include.mean=FALSE)
cbind(fitted.from.package=fitted(f)[2:10],fitted.calculated.manually=coef(f)*ts_AR[1:9])
      fitted.from.package fitted.calculated.manually
 [1,]          -0.8356307                 -0.8356307
 [2,]          -0.6320580                 -0.6320580
 [3,]           0.0696877                  0.0696877
 [4,]           2.1549019                  2.1549019
 [5,]           2.0480074                  2.0480074
 [6,]           0.8814094                  0.8814094
 [7,]           0.9039184                  0.9039184
 [8,]           0.8079823                  0.8079823
 [9,]          -0.1347165                 -0.1347165