Elle ARIMA tahmini


15

ARIMA modelleme / Box Jenkins (BJ) parametrelerinin nasıl hesaplandığını anlamaya çalışıyorum. Maalesef karşılaştığım kitapların hiçbiri Log-Likelihood tahmin prosedürü gibi tahmin prosedürünü ayrıntılı olarak açıklamıyor. Web sitesi / öğretim materyali çok yararlı buldum . Yukarıda referansta bulunulan kaynaktan denklem aşağıdadır.

LL(θ)=-n2günlük(2π)-n2günlük(σ2)-Σt=1net22σ2

ARIMA / BJ tahminini kendim yaparak öğrenmek istiyorum. Bu yüzden ARMA'yı elle tahmin etmek için bir kod yazmak için kullandım . Aşağıda R'de yaptığım şey ,R,R,

  • ARMA'yı simüle ettim (1,1)
  • Yukarıdaki denklemi fonksiyon olarak yazdı
  • AR ve MA parametrelerini tahmin etmek için simüle edilmiş verileri ve optim işlevini kullandı.
  • Ayrıca ARIMA'yı istatistik paketinde çalıştırdım ve ARMA parametrelerini elle yaptığımdan karşılaştırdım. Karşılaştırma aşağıdadır:

karşılaştırma

** Sorularım aşağıdadır:

  • Tahmin edilen ve hesaplanan değişkenler arasında neden küçük bir fark var?
  • ARIMA, R backcast'lerinde çalışıyor mu veya tahmin prosedürü, kodumda aşağıda belirtilenlerden farklı mı?
  • Gözlem 1'de 0 olarak e1 veya hata atadım, bu doğru mu?
  • Ayrıca optimizasyonun kendirini kullanarak tahminlerin güven sınırlarını tahmin etmenin bir yolu var mı?

Her zaman olduğu gibi yardımlarınız için çok teşekkürler.

Kod aşağıdadır:

## 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

1
TnTT=n+1g1+0.000000001σ

Denklemi değiştirdim ve şimdi kodda ne olduğunu yansıtıyor. 0 ile bölünebilir ve aynı zamanda günlük (0) sorunu nedeniyle "NaN" 'a neden olacağından +0.000000001'i nasıl kaldırabileceğimi bilmiyorum
tahminci

2
Kesin olabilirlik kavramı var. MA hatasının ilk değeri (sorularınızdan biri) gibi başlangıç ​​parametreleri hakkında bilgi gerektirir. Uygulamalar genellikle ilk değerleri nasıl ele aldıklarına göre farklılık gösterir. Genellikle yaptığım şey (birçok kitapta belirtilmeyen), başlangıç ​​değerlerini de ML'ye maksimize etmektir.
Çağdaş Özgenç

3
Lütfen Tsay'dan aşağıdakilere bir göz atın, tüm vakaları
kapsamıyor

1
İlk değerleri belirttiğiniz gibi @CagdasOzgenc farkın sebebidir. Yorumlarınızı cevap olarak gönderirseniz yorumunuzu cevap olarak kabul edebilirim.
tahminci

Yanıtlar:


6

Kesin olabilirlik kavramı var. MA hatasının ilk değeri (sorularınızdan biri) gibi başlangıç ​​parametreleri hakkında bilgi gerektirir. Uygulamalar genellikle ilk değerleri nasıl ele aldıklarına göre farklılık gösterir. Genellikle yaptığım şey (birçok kitapta belirtilmeyen), başlangıç ​​değerlerini de ML'ye maksimize etmektir.

Lütfen Tsay'dan aşağıdakilere bir göz atın, tüm vakaları kapsamıyor, ancak benim için oldukça yardımcı oldu:

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


3

arimaFonksiyonun yardım sayfasını okudunuz mu? İşte ilgili alıntı:

Tam olasılık, ARIMA sürecinin bir devlet-mekan temsili ve bir Kalman filtresinin bulduğu yenilikler ve varyansları ile hesaplanır. Farklılaştırılmış ARMA işleminin başlatılması durağanlık kullanır ve Gardner ve ark. (1980). Farklı bir işlem için sabit olmayan bileşenlere önceden bir diffüz (kappa tarafından kontrol edilir) verilir. Önceden diffüz tarafından kontrol edilen gözlemler (Kalman kazancının en az 1 e4 olmasıyla belirlenir) olasılık hesaplamalarının dışında tutulur. (Bu, hariç tutulan gözlemler tam olarak farkın düştüğü değerler olduğunda, eksik değerlerin yokluğunda arima0'a karşılaştırılabilir sonuçlar verir.)

Ayrıca ilgili bir parametredir method=c("CSS-ML", "ML", "CSS"):

Montaj yöntemi: maksimum olasılık veya koşullu kareler toplamını en aza indirin. Varsayılan değer (eksik değerler yoksa) başlangıç ​​değerlerini bulmak için koşullu kareler toplamını, ardından maksimum olasılığı kullanmaktır.

Sonuçlarınız arimafonksiyon tarafından üretilen sonuçlardan çok farklı değil , bu yüzden kesinlikle her şeyi doğru aldınız.

İki optimizasyon prosedürünün sonuçlarını karşılaştırmak istiyorsanız, başlangıç ​​değerlerinin aynı olduğundan ve aynı optimizasyon yönteminin kullanıldığından emin olmanız gerektiğini, aksi takdirde sonuçların farklı olabileceğini unutmayın.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.