【问题标题】:Can you fit a non-stationary model using the ar function in R您可以使用 R 中的 ar 函数拟合非平稳模型吗
【发布时间】:2019-08-11 05:42:43
【问题描述】:

我正在尝试用ar 函数拟合一个简单的 AR(1) 系列,但它对非平稳系列给出了不好的结果。

我已尝试查找 ar 函数文档,但没有找到任何相关信息。

我通过以下方式模拟一个系列:

l = 100
alpha = 1.05 # first tried with 1.01, 1.02
x <- w <- rnorm(l)
for (t in 2:l) x[t] <- alpha * x[t-1] + w[t]
ar(x)

不是给出 1 作为方差和真正的 alpha 值,而是 alpha 值从未超过 1,并且方差非常偏离。阿尔法越高,它变得越糟。对于 1.05,方差约为 600。

【问题讨论】:

  • 您可以拟合,但由于虚假回归问题,结果变得不可靠。使用 R 内部的 AirPassengers 数据,默认为 AP &lt;- AirPassengers,然后运行 ​​ar(AP)。你可以得到结果。
  • 我对伪回归问题这个术语不熟悉,我会读一下。

标签: r time-series


【解决方案1】:

我不知道为什么ar 不起作用,但我可以为您提供一个适用于 ar(1) 的解决方案:您可以使用 nls 拟合指数函数。实际上,自回归一阶是一阶微分方程,其解是指数的:

library(nls2)
l = 100
alpha = 1.02 
w <- rnorm(l,0,1)
x <- vector(length = l)
x[1] = 5
for (t in 2:l) {
  x[t] <- alpha * x[t-1] + w[t]
}
data <- data.frame(time = 1:l,x = x)
fit <- nls2(x ~ c*exp((alpha-1)*time),
           start = data.frame(alpha = c(0.95,1.05) , c = c(-10,10)),
           algorithm = "random-search",
           data = data,
           maxiter  = 100)
summary(fit)


      Estimate Std. Error t value Pr(>|t|)    
alpha 1.023239   0.001427 716.942  < 2e-16 ***
c     2.649077   0.310785   8.524 1.91e-13 ***

这种方法可以处理大于1或小于1的alpha。这里我使用nls2,它允许覆盖一系列初始值,这在使用非线性拟合时很容易。

【讨论】:

  • 你确定它是这样工作的吗?您能否提供证据/参考证明您可以找到连续微分方程解的 nls 并以某种方式推导出带噪声的离散方程的 alpha 值?另外,当我知道模型是AR(1)时,这不是作弊吗? ar 函数不假设。
  • 不,我不确定。我只是在尝试一些东西,因为我想到了它,而且它似乎有效。您肯定是对的,在某些情况下您不能使用连续方程来推导离散方程。
猜你喜欢
  • 1970-01-01
  • 2013-12-02
  • 1970-01-01
  • 2017-01-28
  • 2011-11-06
  • 2018-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多