Arma

ARMA模型的擬合值

  • May 16, 2014

我試圖了解如何為 ARMA(p,q) 模型計算擬合值。我已經在這裡找到了一個關於 ARMA 過程的擬合值的問題,但無法理解它。

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

並給出一個(固定的)時間序列,我可以估計參數。我將如何使用這些估計值計算擬合值。對於 AR(1) 模型,擬合值由下式給出

由於 ARMA 模型中的創新是不可觀察的,我將如何使用 MA 參數的估計?我會忽略 MA 部分併計算 AR 部分的擬合值嗎?

要回答您的問題,您基本上需要知道殘差即 在arma模型中計算。因為那時. 讓我們首先生成一個假數據() 來自arima(.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

現在我創建殘差如下:(因為在 1 處沒有殘差)並且對於我們有:, 在哪裡和是上述擬合模型中估計的自回歸和移動平均部分。這是代碼:

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 個擬合值和我可以從中計算的值我在上面創建(即手動)。

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

如您所見,它們很接近但不完全相同。原因是當我創建我設置的殘差時. 不過還有其他選擇。例如,基於幫助文件arima,卡爾曼濾波器發現的殘差及其方差,因此它們的計算會和我略有不同。但隨著時間的推移,它們正在趨同。

現在為 Ar(1) 模型。我擬合了模型(沒有平均值)並直接向您展示如何使用係數計算擬合值。這次我沒有計算殘差。請注意,我報告了刪除第一個擬合值的前 10 個擬合值(同樣,它會根據您的定義方式而有所不同)。如您所見,它們完全相同。

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

引用自:https://stats.stackexchange.com/questions/98989

comments powered by Disqus

相關問答