ARIMA-Schätzung von Hand

15

Ich versuche zu verstehen, wie die Parameter in ARIMA-Modellierung / Box Jenkins (BJ) geschätzt werden. Leider beschreibt keines der Bücher, auf die ich gestoßen bin, das Schätzverfahren wie das Log-Likelihood-Schätzverfahren im Detail. Ich fand die Website / das Lehrmaterial sehr hilfreich. Es folgt die oben angegebene Gleichung aus der Quelle.

LL(θ)=-n2Log(2π)-n2Log(σ2)-t=1net22σ2

Ich möchte die ARIMA / BJ-Schätzung selbst erlernen. Also habe ich , um einen Code zum Schätzen von ARMA von Hand zu schreiben. Unten ist, was ich in tat ,RR

  • Ich habe ARMA simuliert (1,1)
  • Schrieb die obige Gleichung als Funktion
  • Verwendete die simulierten Daten und die Optimierungsfunktion, um AR- und MA-Parameter abzuschätzen.
  • Ich habe auch die ARIMA im Statistikpaket ausgeführt und die ARMA-Parameter anhand meiner Handarbeit verglichen. Unten ist der Vergleich:

Vergleich

** Hier sind meine Fragen:

  • Warum gibt es einen kleinen Unterschied zwischen den geschätzten und den berechneten Variablen?
  • Funktioniert ARIMA in R-Backcasts oder unterscheidet sich das Schätzverfahren von dem in meinem Code beschriebenen?
  • Ich habe e1 oder einen Fehler bei Beobachtung 1 als 0 zugewiesen. Ist das richtig?
  • Gibt es auch eine Möglichkeit, die Konfidenzgrenzen von Prognosen mit dem Hessischen der Optimierung abzuschätzen?

Vielen Dank für Ihre Hilfe wie immer.

Unten ist der Code:

## 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
Prognostiker
quelle
1
Wie ist die Beziehung zwischen und ? Ihr Code enthält kein " ". Vielleicht ist ? Wenn ja, würde es einen offensichtlichen Fehler bei der Berechnung von geben . Sie müssen auch auf das Zeug verzichten , obwohl dies die Antwort nur geringfügig ändert: Für small wird sichergestellt, dass Sie falsche Werte für diesen Parameter angeben. TnTT=n+1g1+0.000000001σ
whuber
Ich habe die Gleichung geändert und reflektiert jetzt, was im Code ist. Ich bin mir nicht sicher, wie ich +0.000000001 entfernen könnte, da dies "NaNs" verursachen wird, weil es durch 0 teilbar ist und weil log (0) ausgegeben wird
Prognostizierer
2
Es gibt das Konzept der genauen Wahrscheinlichkeit. Es erfordert die Kenntnis von Anfangsparametern wie dem ersten Wert des MA-Fehlers (eine Ihrer Fragen). Implementierungen unterscheiden sich normalerweise darin, wie sie die Anfangswerte behandeln. Was ich normalerweise mache (was in vielen Büchern nicht erwähnt wird), ist, ML auch in Bezug auf die Anfangswerte zu maximieren.
Cagdas Ozgenc
3
Bitte werfen Sie einen Blick auf die folgende von Tsay, es ist nicht alle Fälle abdecken, aber es war für mich sehr hilfreich: faculty.chicagobooth.edu/ruey.tsay/teaching/uts/lec8-08.pdf
Cagdas Ozgenc
1
@CagdasOzgenc wie von Ihnen angegebenen Anfangswerten ist die Ursache für die Differenz. Ich kann Ihren Kommentar als Antwort akzeptieren, wenn Sie Ihre Kommentare als Antwort posten.
Prognose

Antworten:

6

Es gibt das Konzept der genauen Wahrscheinlichkeit. Es erfordert die Kenntnis von Anfangsparametern wie dem ersten Wert des MA-Fehlers (eine Ihrer Fragen). Implementierungen unterscheiden sich normalerweise darin, wie sie die Anfangswerte behandeln. Was ich normalerweise mache (was in vielen Büchern nicht erwähnt wird), ist, ML auch in Bezug auf die Anfangswerte zu maximieren.

Bitte werfen Sie einen Blick auf das Folgende von Tsay, es deckt nicht alle Fälle ab, war aber für mich sehr hilfreich:

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

Cagdas Ozgenc
quelle
3

Haben Sie die Hilfeseite der arimaFunktion gelesen ? Hier ist der relevante Auszug:

Die genaue Wahrscheinlichkeit wird über eine Zustandsraumdarstellung des ARIMA-Prozesses und die Innovationen und deren Varianz berechnet, die von einem Kalman-Filter gefunden werden. Die Initialisierung des differenzierten ARMA-Prozesses basiert auf Stationarität und basiert auf Gardner et al. (1980). Für einen differenzierten Prozess erhalten die instationären Komponenten einen diffusen Prior (gesteuert durch Kappa). Beobachtungen, die noch vom diffusen Vorgänger kontrolliert werden (bestimmt durch einen Kalman-Gewinn von mindestens 1e4), werden von den Wahrscheinlichkeitsberechnungen ausgeschlossen. (Dies führt zu vergleichbaren Ergebnissen wie arima0, wenn keine Werte fehlen, wenn die ausgeschlossenen Beobachtungen genau die sind, die durch die Differenzierung verloren gegangen sind.)

Ebenfalls relevant ist ein Parameter method=c("CSS-ML", "ML", "CSS"):

Anpassungsmethode: maximale Wahrscheinlichkeit oder minimale bedingte Quadratsumme. In der Standardeinstellung (sofern keine Werte fehlen) werden bedingte Quadratsummen verwendet, um die Startwerte und dann die maximale Wahrscheinlichkeit zu ermitteln.

Ihre Ergebnisse unterscheiden sich nicht wesentlich von denen, die durch die arimaFunktion erzielt wurden. Sie haben also definitiv alles richtig gemacht.

Denken Sie daran, dass Sie, wenn Sie die Ergebnisse zweier Optimierungsverfahren vergleichen möchten, sicherstellen müssen, dass die Startwerte gleich sind und die gleiche Optimierungsmethode verwendet wird. Andernfalls können die Ergebnisse abweichen.

mpiktas
quelle