Оцінка ARIMA вручну


15

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

LL(θ)=-н2журнал(2π)-н2журнал(σ2)-т=1нет22σ2

Я хочу навчитися оцінці ARIMA / BJ, роблячи це самостійно. Тому я використав для написання коду для оцінки ARMA вручну. Нижче - що я зробив у ,RR

  • Я імітував ARMA (1,1)
  • Написане вище рівняння як функцію
  • Використовували модельовані дані та оптимальну функцію для оцінки параметрів AR та MA.
  • Я також запустив ARIMA в пакет статистичних даних і порівняв параметри ARMA з тим, що я робив вручну. Нижче наведено порівняння:

Порівняння

** Нижче мої запитання:

  • Чому існує невелика різниця між оцінними та обчисленими змінними?
  • Чи функціонує ARIMA в R-зворотах чи процедура оцінки відрізняється від того, що вказано нижче в моєму коді?
  • Я призначив е1 або помилку в спостереженні 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
Який зв’язок між і ? У вашому коді немає " ". Можливо, ? Якщо так, то явна помилка в обчисленні . Також вам не потрібно відмовлятися від цього матеріалу, навіть якщо це лише змінить відповідь: для малих це забезпечить повідомлення про неправильні значення цього параметра. ТнТТ=н+1g1+0.000000001σ
whuber

Я змінив рівняння і тепер відображає те, що є в коді. Я не впевнений, як я можу видалити +0.000000001, оскільки це призведе до "NaNs" через ділення на 0, а також через випуск журналу (0)
прогноз

2
Існує концепція точної вірогідності. Це вимагає знання початкових параметрів, таких як кулакове значення помилки MA (одне з ваших питань). Впровадження зазвичай відрізняється щодо того, як вони ставляться до початкових значень. Те, що я зазвичай роблю, це те, що не згадується в багатьох книгах, - це також максимально збільшити ML початкові значення.
Cagdas Ozgenc

3
Будь ласка , зверніть увагу на наступні з Цай, вона не охоплює всі випадки, але дуже корисно для мене: faculty.chicagobooth.edu/ruey.tsay/teaching/uts/lec8-08.pdf
Cagdas Ozgenc

1
@CagdasOzgenc за вказаними вами початковими значеннями є причиною різниці. Я можу прийняти ваш коментар як відповідь, якщо ви опублікуєте свої коментарі як відповідь.
синоптик

Відповіді:


6

Існує концепція точної вірогідності. Це вимагає знання початкових параметрів, таких як кулакове значення помилки MA (одне з ваших питань). Впровадження зазвичай відрізняється щодо того, як вони ставляться до початкових значень. Те, що я зазвичай роблю, це те, що не згадується в багатьох книгах, - це також максимально збільшити ML початкові значення.

Будь ласка, подивіться на наступне з Цей, воно охоплює не всі справи, але було дуже корисним для мене:

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


3

Чи читали ви довідкову сторінку arimaфункції? Ось відповідний уривок:

Точна ймовірність обчислюється за допомогою державного просторового представлення процесу ARIMA, а інновації та їх відмінність знайдені фільтром Калмана. Ініціалізація відмінного процесу ARMA використовує стаціонарність і ґрунтується на Gardner et al. (1980). Для розрізненого процесу нестаціонарним компонентам надається дифузний попередній (керований kappa). Спостереження, які все ще контролюються за допомогою дифузного попереднього (визначається коефіцієнтом збільшення коефіцієнта Кальмана щонайменше 1e4), виключаються з розрахунків ймовірності. (Це дає порівнянні результати з arima0 за відсутності відсутніх значень, коли спостереження виключаються саме ті, що випали за допомогою диференціювання.)

Також важливим є параметр method=c("CSS-ML", "ML", "CSS"):

Спосіб підгонки: максимальна ймовірність або мінімізація умовної суми квадратів. За замовчуванням (якщо немає відсутніх значень) є використання умовної суми квадратів для пошуку початкових значень, а потім максимальної ймовірності.

Ваші результати не так сильно відрізняються від результатів, які виробляються arimaфункціями, тому ви, безумовно, все встигли.

Пам'ятайте, що якщо ви хочете порівняти результати двох процедур оптимізації, вам потрібно переконатися, що вихідні значення однакові, і використовується той самий метод оптимізації, інакше результати можуть відрізнятися.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.