Saya mencoba memahami bagaimana parameter diperkirakan dalam pemodelan ARIMA / Box Jenkins (BJ). Sayangnya tidak ada buku yang saya temui yang menjelaskan prosedur estimasi seperti prosedur estimasi Log-Likelihood secara terperinci. Saya menemukan situs web / materi pengajaran yang sangat membantu. Berikut ini adalah persamaan dari sumber yang dirujuk di atas.
Saya ingin mempelajari estimasi ARIMA / BJ dengan melakukannya sendiri. Jadi saya menggunakan untuk menulis kode untuk memperkirakan ARMA dengan tangan. Di bawah ini yang saya lakukan di R ,
- Saya mensimulasikan ARMA (1,1)
- Tuliskan persamaan di atas sebagai fungsi
- Menggunakan data yang disimulasikan dan fungsi optimal untuk memperkirakan parameter AR dan MA.
- Saya juga menjalankan ARIMA dalam paket statistik dan membandingkan parameter ARMA dari apa yang saya lakukan dengan tangan. Di bawah ini adalah perbandingannya:
** Berikut adalah pertanyaan saya:
- Mengapa ada sedikit perbedaan antara variabel yang diperkirakan dan yang dihitung?
- Apakah fungsi ARIMA dalam R backcasts atau apakah prosedur estimasi berbeda dari apa yang diuraikan di bawah ini dalam kode saya?
- Saya telah menetapkan e1 atau error pada observasi 1 sebagai 0, apakah ini benar?
- Juga adakah cara untuk memperkirakan batas keyakinan perkiraan menggunakan hessian optimasi?
Terima kasih banyak atas bantuan Anda seperti biasa.
Di bawah ini adalah kode:
## 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
time-series
forecasting
arima
optimization
box-jenkins
peramal cuaca
sumber
sumber
g1
+0.000000001
Jawaban:
Ada konsep kemungkinan pasti. Ini membutuhkan pengetahuan tentang parameter awal seperti nilai pertama dari kesalahan MA (salah satu pertanyaan Anda). Implementasi biasanya berbeda mengenai bagaimana mereka memperlakukan nilai awal. Apa yang biasanya saya lakukan adalah (yang tidak disebutkan dalam banyak buku) adalah untuk juga memaksimalkan ML wrt nilai awal juga.
Silakan lihat berikut ini dari Tsay, itu tidak mencakup semua kasus, tetapi cukup membantu bagi saya:
http://faculty.chicagobooth.edu/ruey.tsay/teaching/uts/lec8-08.pdf
sumber
Apakah Anda membaca halaman bantuan
arima
fungsi? Berikut adalah kutipan yang relevan:Juga relevan adalah parameter
method=c("CSS-ML", "ML", "CSS")
:Hasil Anda tidak jauh berbeda dari yang dihasilkan oleh
arima
fungsi, jadi Anda pasti mendapatkan semuanya dengan benar.Ingat bahwa jika Anda ingin membandingkan hasil dari dua prosedur pengoptimalan, Anda perlu memastikan, bahwa nilai awal adalah sama, dan metode pengoptimalan yang sama digunakan, jika tidak hasilnya akan berbeda.
sumber