Estoy tratando de entender cómo se estiman los parámetros en el modelado ARIMA / Box Jenkins (BJ). Desafortunadamente, ninguno de los libros que he encontrado describe el procedimiento de estimación como el procedimiento de estimación de probabilidad de registro en detalle. Encontré el sitio web / material didáctico que fue muy útil. La siguiente es la ecuación de la fuente mencionada anteriormente.
Quiero aprender la estimación ARIMA / BJ haciéndolo yo mismo. Así que usé para escribir un código para estimar ARMA a mano. A continuación se muestra lo que hice en R ,
- Simulé ARMA (1,1)
- Escribió la ecuación anterior como una función
- Usó los datos simulados y la función de optimización para estimar los parámetros AR y MA.
- También ejecuté el ARIMA en el paquete de estadísticas y comparé los parámetros ARMA de lo que hice a mano. A continuación se muestra la comparación:
** A continuación están mis preguntas:
- ¿Por qué hay una ligera diferencia entre las variables estimadas y calculadas?
- ¿Funciona ARIMA en retransmisiones R o el procedimiento de estimación es diferente al que se describe a continuación en mi código?
- He asignado e1 o error en la observación 1 como 0, ¿es esto correcto?
- ¿También hay una manera de estimar los límites de confianza de los pronósticos utilizando el hessian de la optimización?
Muchas gracias por su ayuda como siempre.
Debajo está el código:
## 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
pronosticador
fuente
fuente
g1
+0.000000001
Respuestas:
Existe el concepto de probabilidad exacta. Requiere el conocimiento de parámetros iniciales como el primer valor del error de MA (una de sus preguntas). Las implementaciones generalmente difieren con respecto a cómo tratan los valores iniciales. Lo que suelo hacer es (que no se menciona en muchos libros) es también maximizar ML wrt los valores iniciales.
Eche un vistazo a lo siguiente de Tsay, no cubre todos los casos, pero fue muy útil para mí:
http://faculty.chicagobooth.edu/ruey.tsay/teaching/uts/lec8-08.pdf
fuente
¿Leíste la página de ayuda de la
arima
función? Aquí está el extracto relevante:También es relevante un parámetro
method=c("CSS-ML", "ML", "CSS")
:Sus resultados no difieren mucho de los producidos por la
arima
función, por lo que definitivamente lo hizo todo bien.Recuerde que si desea comparar los resultados de dos procedimientos de optimización, debe asegurarse de que los valores iniciales son los mismos y se utiliza el mismo método de optimización; de lo contrario, los resultados podrían diferir.
fuente