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
g1
+0.000000001