Time-Series

手動 ARIMA 估計

  • November 25, 2013

我試圖了解如何在 ARIMA 建模/Box Jenkins (BJ) 中估計參數。不幸的是,我遇到的所有書籍都沒有詳細描述估計過程,例如對數似然估計過程。以下是任何標準教科書中 ARMA 的對數似然: $$ LL(\theta)=-\frac{n}{2}\log(2\pi) - \frac{n}{2}\log(\sigma^2) - \sum\limits_{t=1}^n\frac{e_t^2}{2\sigma^2} $$

我想通過自己來學習 ARIMA/BJ 估計。所以我用 $ R $ 編寫用於手動估計 ARMA 的代碼。下面是我所做的 $ R $ ,

  • 我模擬了 ARMA (1,1)
  • 把上面的方程寫成一個函數
  • 使用模擬數據和優化函數來估計 AR 和 MA 參數。
  • 我還在 stats 包中運行了 ARIMA,並比較了我手動操作的 ARMA 參數。 下面是對比:

比較

**以下是我的問題:

  • 為什麼估計變量和計算變量之間存在細微差別?
  • ARIMA 是否在 R backcasts 中起作用,或者估計過程與我的代碼中下面概述的不同?
  • 我已將觀察 1 處的 e1 或錯誤指定為 0,這是正確的嗎?
  • 還有一種方法可以使用優化的粗麻布估計預測的置信範圍嗎?

非常感謝您一如既往的幫助。

下面是代碼:

## Load Packages

library(stats)
library(forecast)

set.seed(456)


## Simulate Arima
y <- arima.sim(n = 250, list(ar = 0.3, ma = 0.7), mean = 5)
plot(y)

## Optimize Log-Likelihood for ARIMA

n = length(y) ## Count the number of observations
e = rep(1, n) ## Initialize e

logl <- function(mx){
 
 g <- numeric
 mx <- matrix(mx, ncol = 4)
 
 mu <- mx[,1] ## Constant Term
 sigma <- mx[,2] 
 rho <- mx[,3] ## AR coeff
 theta <- mx[,4] ## MA coeff
 
 e[1] = 0 ## Since e1 = 0
 
 for (t in (2 : n)){
   e[t] = y[t] - mu - rho*y[t-1] - theta*e[t-1]
 }
 
 ## Maximize Log-Likelihood Function 
 g1 <-  (-((n)/2)*log(2*pi) - ((n)/2)*log(sigma^2+0.000000001) - (1/2)*(1/(sigma^2+0.000000001))*e%*%e)
 
 ##note: multiplying Log-Likelihood by "-1" in order to maximize in the optimization
 ## This is done becuase Optim function in R can only minimize, "X"ing by -1 we can maximize
 ## also "+"ing by 0.000000001 sigma^2 to avoid divisible by 0
 g <- -1 * g1
 
 return(g)
 
}

## Optimize Log-Likelihood
arimopt <- optim(par=c(10,0.6,0.3,0.5), fn=logl, gr = NULL,
                method = c("L-BFGS-B"),control = list(), hessian = T)
arimopt

############# Output Results###############
ar1_calculated = arimopt$par[3]
ma1_calculated = arimopt$par[4]
sigmasq_calculated = (arimopt$par[2])^2
logl_calculated = arimopt$val
ar1_calculated
ma1_calculated
sigmasq_calculated
logl_calculated

############# Estimate Using Arima###############
est <- arima(y,order=c(1,0,1))
est

有精確可能性的概念。它需要初始參數的知識,例如 MA 誤差的第一個值(您的問題之一)。實現通常在如何處理初始值方面有所不同。我通常做的是(這在很多書中都沒有提到)也是最大化 ML wrt 的初始值。

請看一下 Tsay 的以下內容,它並不涵蓋所有情況,但對我很有幫助:

http://faculty.chicagobooth.edu/ruey.tsay/teaching/uts/lec8-08.pdf

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

comments powered by Disqus