Estimasi ARIMA dengan tangan

15

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.

LL(θ)=n2log(2π)n2log(σ2)t=1net22σ2

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 ,RR

  • 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:

Perbandingan

** 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
peramal cuaca
sumber
1
TnTT=n+1g1+0.000000001σ
Saya telah mengubah persamaan dan sekarang mencerminkan apa yang ada dalam kode. Saya tidak yakin bagaimana saya bisa menghapus +0.000000001 karena itu akan menyebabkan "NaNs" karena dapat dibagi oleh 0 dan juga karena masalah log (0)
peramal
2
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.
Cagdas Ozgenc
3
Silakan lihat di berikut dari Tsay, tidak mencakup semua kasus, tetapi cukup membantu bagi saya: faculty.chicagobooth.edu/ruey.tsay/teaching/uts/lec8-08.pdf
Cagdas Ozgenc
1
@CagdasOzgenc seperti yang ditunjukkan oleh Anda nilai awal adalah penyebab perbedaan. Saya dapat menerima komentar Anda sebagai jawaban jika Anda memposting komentar Anda sebagai jawaban.
peramal

Jawaban:

6

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

Cagdas Ozgenc
sumber
3

Apakah Anda membaca halaman bantuan arimafungsi? Berikut adalah kutipan yang relevan:

Kemungkinan yang tepat dihitung melalui representasi ruang-negara dari proses ARIMA, dan inovasi serta variansnya ditemukan oleh filter Kalman. Inisialisasi proses ARMA yang dibedakan menggunakan stasioneritas dan didasarkan pada Gardner et al. (1980). Untuk proses yang berbeda, komponen non-stasioner diberikan sebelumnya yang difus (dikendalikan oleh kappa). Pengamatan yang masih dikendalikan oleh difus sebelumnya (ditentukan dengan memiliki keuntungan Kalman minimal 1e4) dikeluarkan dari perhitungan kemungkinan. (Ini memberikan hasil yang sebanding dengan arima0 dengan tidak adanya nilai-nilai yang hilang, ketika pengamatan dikecualikan justru dijatuhkan oleh perbedaan.)

Juga relevan adalah parameter method=c("CSS-ML", "ML", "CSS"):

Metode fitting: kemungkinan maksimum atau meminimalkan jumlah kuadrat bersyarat. Defaultnya (kecuali ada nilai yang hilang) adalah menggunakan conditional-sum-of-kuadrat untuk menemukan nilai awal, kemudian kemungkinan maksimum.

Hasil Anda tidak jauh berbeda dari yang dihasilkan oleh arimafungsi, 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.

mpiktas
sumber