Я пытаюсь понять, как оцениваются параметры в моделировании ARIMA / Box Jenkins (BJ). К сожалению, ни одна из книг, с которыми я столкнулся, подробно не описывает процедуру оценки, такую как процедура оценки правдоподобия. Я нашел сайт / учебный материал, который был очень полезным. Ниже приведено уравнение из источника, указанного выше.
Я хочу узнать оценку ARIMA / BJ, делая это самостоятельно. Поэтому я использовал чтобы написать код для оценки ARMA вручную. Ниже то, что я сделал в R ,
- Я моделировал ARMA (1,1)
- Написал вышеприведенное уравнение как функцию
- Использовал смоделированные данные и функцию optim для оценки параметров AR и MA.
- Я также запустил ARIMA в пакете статистики и сравнил параметры ARMA с тем, что я сделал вручную. Ниже приведено сравнение:
** Ниже приведены мои вопросы:
- Почему существует небольшая разница между оценочными и расчетными переменными?
- Работает ли ARIMA в R обратных передачах или процедура оценки отличается от описанной ниже в моем коде?
- Я назначил e1 или ошибку в наблюдении 1 как 0, это правильно?
- Также есть ли способ оценить доверительные границы прогнозов, используя гессиан оптимизации?
Большое спасибо за вашу помощь, как всегда.
Ниже приведен код:
## 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
предсказатель
источник
источник
g1
+0.000000001
Ответы:
Существует понятие точного правдоподобия. Требуется знание начальных параметров, таких как первое значение ошибки MA (один из ваших вопросов). Реализации обычно различаются в отношении того, как они обрабатывают начальные значения. То, что я обычно делаю (это не упоминается во многих книгах), это также максимизировать ML относительно начальных значений.
Пожалуйста, взгляните на следующее из Цай, это не охватывает все случаи, но было весьма полезно для меня:
http://faculty.chicagobooth.edu/ruey.tsay/teaching/uts/lec8-08.pdf
источник
Вы читали страницу помощи
arima
функции? Вот соответствующая выдержка:Также актуален параметр
method=c("CSS-ML", "ML", "CSS")
:Ваши результаты не сильно отличаются от результатов, полученных с помощью
arima
функции, поэтому вы определенно все поняли правильно.Помните, что если вы хотите сравнить результаты двух процедур оптимизации, вам необходимо убедиться, что начальные значения одинаковы, и используется один и тот же метод оптимизации, иначе результаты могут отличаться.
источник