手工进行ARIMA估算


15

我试图了解如何在ARIMA建模/ Box Jenkins(BJ)中估算参数。不幸的是,我所遇到的书都没有详细描述估计程序,例如对数似然估计程序。我发现该网站/教学材料非常有帮助。以下是来自上面引用的来源的公式。

大号大号θ=-ñ2日志2π-ñ2日志σ2-Ť=1个ñËŤ22σ2

我想自己学习ARIMA / BJ估计。因此,我使用编写了用于手工估算ARMA的代码。下面是我在做,[R[R[R

  • 我模拟了ARMA(1,1)
  • 将上面的方程写成函数
  • 使用模拟数据和优化函数来估计AR和MA参数。
  • 我还在stats软件包中运行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
ŤñŤŤ=ñ+1个g1+0.000000001σ

我更改了公式,现在反映了代码中的内容。我不确定如何删除+0.000000001,因为它会由于被0整除以及导致出现日志(0)而导致“ NaNs”
预测者

2
存在精确可能性的概念。它要求了解初始参数,例如MA错误的第一个值(您的问题之一)。实现方式通常在处理初始值方面有所不同。我通常要做的是(在很多书中都没有提到)也要最大化ML以及初始值。
Cagdas Ozgenc

3
请看看来自中央执行委员会下面,是不是涵盖所有情况,但相当有帮助对我来说:faculty.chicagobooth.edu/ruey.tsay/teaching/uts/lec8-08.pdf
Cagdas Ozgenc

1
您指出的@CagdasOzgenc初始值是造成差异的原因。如果您发表评论作为答案,我可以接受您的评论作为答案。
预测者

Answers:



3

您阅读arima功能的帮助页面了吗?以下是相关摘录:

精确的似然是通过ARIMA过程的状态空间表示来计算的,而创新和它们的方差是通过卡尔曼滤波器找到的。不同的ARMA进程的初始化使用平稳性,并且基于Gardner等人的观点。(1980)。对于不同的过程,将对非平稳分量进行先验扩散(由kappa控制)。仍然由弥散先验控制的观测(由具有至少1e4的卡尔曼增益确定)从似然计算中排除。(当排除的观测值恰好是由差分丢弃的观测值时,这在缺少缺失值的情况下可以给arima0提供可比的结果。)

同样相关的是一个参数method=c("CSS-ML", "ML", "CSS")

拟合方法:最大似然或最小化条件平方和。默认值(除非缺少值)是使用条件平方和来查找起始值,然后是最大似然。

您的结果与arima函数产生的结果相差无几,因此您绝对可以正确地完成所有工作。

请记住,如果要比较两个优化过程的结果,则需要确保起始值相同,并且使用相同的优化方法,否则结果可能会有所不同。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.