Оценка ARIMA от руки

15

Я пытаюсь понять, как оцениваются параметры в моделировании ARIMA / Box Jenkins (BJ). К сожалению, ни одна из книг, с которыми я столкнулся, подробно не описывает процедуру оценки, такую ​​как процедура оценки правдоподобия. Я нашел сайт / учебный материал, который был очень полезным. Ниже приведено уравнение из источника, указанного выше.

LL(θ)знак равно-N2журнал(2π)-N2журнал(σ2)-ΣTзнак равно1NеT22σ2

Я хочу узнать оценку 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
предсказатель
источник
1
TNTTзнак равноN+1g1+0.000000001σ
Я изменил уравнение и теперь отражает то, что в коде. Я не уверен, как я мог удалить +0,000000001, потому что это вызовет "NaNs" из-за делимого на 0, а также из-за проблемы log (0)
прогнозист
2
Существует понятие точного правдоподобия. Требуется знание начальных параметров, таких как первое значение ошибки MA (один из ваших вопросов). Реализации обычно различаются в отношении того, как они обрабатывают начальные значения. То, что я обычно делаю (это не упоминается во многих книгах), это также максимизировать ML относительно начальных значений.
Кагдас Озгенц
3
Пожалуйста, взгляните на следующее из Цай, это не охватывает все случаи, но было весьма полезно для меня: faculty.chicagobooth.edu/ruey.tsay/teaching/uts/lec8-08.pdf
Cagdas Ozgenc
1
@CagdasOzgenc, как указано вами начальные значения, является причиной различия. Я могу принять ваш комментарий как ответ, если вы оставите свой комментарий как ответ.
синоптик

Ответы:

6

Существует понятие точного правдоподобия. Требуется знание начальных параметров, таких как первое значение ошибки MA (один из ваших вопросов). Реализации обычно различаются в отношении того, как они обрабатывают начальные значения. То, что я обычно делаю (это не упоминается во многих книгах), это также максимизировать ML относительно начальных значений.

Пожалуйста, взгляните на следующее из Цай, это не охватывает все случаи, но было весьма полезно для меня:

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

Кагдас Озгенц
источник
3

Вы читали страницу помощи arimaфункции? Вот соответствующая выдержка:

Точная вероятность вычисляется с помощью представления процесса ARIMA в пространстве состояний, а инновации и их дисперсия обнаруживаются фильтром Калмана. Инициализация процесса дифференцированного ARMA использует стационарность и основана на Gardner et al. (1980). Для дифференцированного процесса нестационарные компоненты получают диффузный априор (контролируется каппа). Наблюдения, которые все еще контролируются диффузным априором (определяемым с помощью усиления Калмана не менее 1e4), исключаются из расчетов вероятности. (Это дает сравнимые результаты с arima0 при отсутствии пропущенных значений, когда исключенные наблюдения являются именно теми, которые были отброшены разностью.)

Также актуален параметр method=c("CSS-ML", "ML", "CSS"):

Метод подбора: максимальная вероятность или минимизация условной суммы квадратов. По умолчанию (если отсутствуют пропущенные значения) используется условная сумма квадратов для поиска начальных значений, а затем максимальная вероятность.

Ваши результаты не сильно отличаются от результатов, полученных с помощью arimaфункции, поэтому вы определенно все поняли правильно.

Помните, что если вы хотите сравнить результаты двух процедур оптимизации, вам необходимо убедиться, что начальные значения одинаковы, и используется один и тот же метод оптимизации, иначе результаты могут отличаться.

mpiktas
источник