Time-Series
手動 ARIMA 估計
我試圖了解如何在 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