손으로 ARIMA 추정


15

ARIMA 모델링 / Box Jenkins (BJ)에서 매개 변수가 어떻게 추정되는지 이해하려고합니다. 불행히도 내가 만난 책 중 어느 것도 Log-Likelihood 추정 절차와 같은 추정 절차를 자세하게 설명하지 않습니다. 매우 유용한 웹 사이트 / 교육 자료 를 찾았습니다 . 다음은 위에서 언급 한 소스의 방정식입니다.

(θ)=2로그(2π)2로그(σ2)=1이자형22σ2

ARIMA / BJ 추정을 직접 수행하여 배우고 싶습니다. 그래서 을 사용 하여 ARMA를 손으로 추정하는 코드를 작성했습니다. 아래는 내가 R에서 한 일입니다.아르 자형아르 자형

  • ARMA를 시뮬레이션했습니다 (1,1)
  • 위의 방정식을 함수로 작성
  • 시뮬레이션 된 데이터와 최적화 함수를 사용하여 AR 및 MA 매개 변수를 추정했습니다.
  • 또한 통계 패키지에서 ARIMA를 실행하고 직접 수행 한 것과 ARMA 매개 변수를 비교했습니다. 아래는 비교입니다 :

비교

** 내 질문은 다음과 같습니다.

  • 추정 변수와 계산 변수 사이에 약간의 차이가있는 이유는 무엇입니까?
  • ARIMA가 R 백 캐스트에서 작동합니까? 또는 추정 절차가 코드에서 아래에 설명 된 것과 다르게 작동합니까?
  • 관찰 1에서 e1 또는 오류를 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σ

방정식을 변경했으며 이제 코드의 내용을 반영합니다. +0.000000001을 제거 할 수 있는지 잘 모르겠습니다. 0으로 나눌 수 있고 로그 문제 (0)로 인해 "NaN"이 발생할 수 있습니다.
기상 캐스터

2
정확한 가능성의 개념이 있습니다. MA 오류의 주먹 값 (질문 중 하나)과 같은 초기 매개 변수에 대한 지식이 필요합니다. 구현은 일반적으로 초기 값을 처리하는 방법에 따라 다릅니다. 내가 일반적으로하는 것은 (많은 책에서 언급되지 않은) ML wrt의 초기 값도 최대화하는 것입니다.
Cagdas Ozgenc

3
Tsay에서 다음 내용을 살펴보십시오. 모든 사례를 다루지는 않지만 제게 도움이되었습니다. faculty.chicagobooth.edu/ruey.tsay/teaching/uts/lec8-08.pdf
Cagdas Ozgenc

1
@CagdasOzgenc는 초기 값으로 지적한 바와 같이 차이의 원인입니다. 귀하의 의견을 답변으로 게시하면 귀하의 의견을 답변으로 수락 할 수 있습니다.
예측 자

답변:


6

정확한 가능성의 개념이 있습니다. MA 오류의 주먹 값 (질문 중 하나)과 같은 초기 매개 변수에 대한 지식이 필요합니다. 구현은 일반적으로 초기 값을 처리하는 방법에 따라 다릅니다. 내가 일반적으로하는 것은 (많은 책에서 언급되지 않은) ML wrt의 초기 값도 최대화하는 것입니다.

Tsay에서 다음을 살펴보십시오. 모든 경우를 다루지는 않지만 매우 도움이되었습니다.

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


3

arima함수 의 도움말 페이지를 읽었습니까 ? 관련 발췌문은 다음과 같습니다.

정확한 가능성은 ARIMA 프로세스의 상태 공간 표현과 Kalman 필터가 발견 한 혁신 및 그 차이를 통해 계산됩니다. 차이가있는 ARMA 프로세스의 초기화는 정상 성을 사용하며 Gardner et al. (1980). 차이가있는 공정의 경우, 비 정지 구성 요소에는 사전에 확산이 주어진다 (카파에 의해 제어 됨). 확산 사전에 의해 여전히 제어되는 관측치 (1e4 이상의 칼만 이득을 가짐으로 결정됨)는 가능성 계산에서 제외됩니다. (이로 인해 제외 된 관측치가 차이로 인해 누락 된 관측치 인 경우 결 측값이없는 경우 arima0과 비교할만한 결과를 얻을 수 있습니다.)

매개 변수도 관련이 있습니다 method=c("CSS-ML", "ML", "CSS").

피팅 방법 : 최대 가능성 또는 조건부 제곱합을 최소화합니다. 기본값은 결 측값이없는 경우 조건부 제곱합을 사용하여 시작 값을 찾은 다음 최대 가능성을 찾는 것입니다.

결과는 다음과 같은 결과와 크게 다르지 않습니다. arima 기능별로 않으므로 모든 것을 올바르게 얻을 수 있습니다.

두 가지 최적화 절차의 결과를 비교하려면 시작 값이 동일하고 동일한 최적화 방법을 사용해야합니다. 그렇지 않으면 결과가 다를 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.