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