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.
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 ,
- 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:
** 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
time-series
forecasting
arima
optimization
box-jenkins
Prognostiker
quelle
quelle
g1
+0.000000001
Antworten:
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
quelle
Haben Sie die Hilfeseite der
arima
Funktion gelesen ? Hier ist der relevante Auszug:Ebenfalls relevant ist ein Parameter
method=c("CSS-ML", "ML", "CSS")
:Ihre Ergebnisse unterscheiden sich nicht wesentlich von denen, die durch die
arima
Funktion 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.
quelle