【问题标题】:ARIMA model with nonlinear exogenous variable in RR中具有非线性外生变量的ARIMA模型
【发布时间】:2017-03-04 18:05:33
【问题描述】:

我正在 R 中进行非线性回归,并希望在我的模型中添加一个移动平均项以消除残差中的自相关。

基本上,这是模型:

y[n] = a + log((x1[n])^g + (x2[n])^g) + c*e[n-1] + e[n]

其中[e] 是移动平均项。

我计划使用ARIMA(0, 0, 1) 对残差进行建模。但是,我不知道应该在 R 中使用哪个函数将非线性外生部分添加到 ARIMA 模型。

更多信息:我知道如何使用nls命令估计ag,但不知道如何处理e[n]

我知道arima 中的xreg 可以处理带有线性外生变量的ARIMA 模型。是否有类似的函数来处理具有非线性外生变量的 ARIMA 模型?

提前感谢您的帮助!

【问题讨论】:

  • 您好哲元,谢谢您的建议。但我需要对残差进行建模,而不是添加固定效果。 “nlme”可以处理带有非线性外生部分的 ARIMA(0,0,1) 模型吗?你能解释一下吗?再次感谢您。
  • 好的,非常感谢!我会试试的。

标签: r time-series regression non-linear-regression


【解决方案1】:

nlme 具有这样的能力,因为它可以拟合非线性混合模型。通过允许随机效应和相关误差,您可以将其视为nls 的扩展(仅具有固定效应的非线性回归)。

nlme 可以处理 ARMA 相关性,例如 correlation = corARMA(0.2, ~ 1, p = 0, q = 1, fixed = TRUE)。这意味着,残差是 MA(1) 过程,初始猜测系数为 0.2,但要在模型拟合期间更新。 ~ 1 表明 MA(1) 处于拦截状态,没有进一步的分组结构。

我不是nlme 方面的专家,但我知道nlme 是您所需要的。我制作了以下示例,但由于我不是专家,目前我无法获得nlme 的工作。我把它贴在这里给一个开始/味道。

set.seed(0)
x1 <- runif(100)
x2 <- runif(100)
## MA(1) correlated error, with innovation standard deviation 0.1
e <- arima.sim(model = list(ma = 0.5), n = 100, sd = 0.1)
## a true model, with `a = 0.2, g = 0.5`
y0 <- 0.2 + log(x1 ^ 0.5 + x2 ^ 0.5)
## observations
y <- y0 + e

## no need to install; it comes with R; just `library()` it
library(nlme)

fit <- nlme(y ~ a + log(x1 ^ g + x2 ^ g), fixed = a + g ~ 1,
            start = list(a = 0.5, g = 1),
            correlation = corARMA(0.2, form = ~ 1, p = 0, q = 1, fixed = FALSE))

类似于nls,我们有一个整体模型公式y ~ a + log(x1 ^ g + x2 ^ g),迭代过程需要起始值。我选择了start = list(a = 0.5, g = 1)correlation 位已经在开头解释过了。

nlme 中的fixedrandom 参数指定在整个公式中应该被视为固定效应和随机效应。由于我们没有随机效应,我们不指定它。我们想要ag 作为固定效果,所以我尝试了fixed = a + g ~ 1 之类的东西。不幸的是,由于某种我不知道的原因,它不太有效。我阅读了?nlme,并认为这个公式意味着我们想要一个共同的ag 用于所有观察,但后来nlme 报告了一个错误,说这不是一个有效的组公式。

我也在这方面进行投资;正如我所说,上面给了我们一个开始。我们已经非常接近最终答案了。


感谢user20650 指出我尴尬的错误。我应该使用gnls 函数而不是nlme。根据nlme 包的设计性质,函数lmenlme 必须采用random 参数才能工作。幸运的是,nlme 包中还有其他几个例程用于扩展线性模型和非线性模型。

  • glsgnls 通过允许非对角方差函数扩展 lmnls

所以,我真的应该改用gnls

## no `fixed` argument as `gnls` is a fixed-effect only
fit <- gnls(y ~ a + log(x1 ^ g + x2 ^ g), start = list(a = 0.5, g = 1),
            correlation = corARMA(0.2, form = ~ 1, p = 0, q = 1, fixed = FALSE))

#Generalized nonlinear least squares fit
#  Model: y ~ a + log(x1^g + x2^g) 
#  Data: NULL 
#  Log-likelihood: 92.44078
#
#Coefficients:
#        a         g 
#0.1915396 0.5007640 
#
#Correlation Structure: ARMA(0,1)
# Formula: ~1 
# Parameter estimate(s):
#   Theta1 
#0.4184961 
#Degrees of freedom: 100 total; 98 residual
#Residual standard error: 0.1050295 

【讨论】:

  • 欢迎您。您可能喜欢在 www 中浮动的 Pinheiro 和 Bates 混合模式书籍 - 免费副本,但我认为您的部门会有副本
  • 我试过了.. 但我需要 15 个声望才能“喜欢”它(我现在只有 14 个?)。但是,当然,当我达到 15 名声望时,我会回去接受你的回答 :)
  • 对不起,我有一个愚蠢的问题:为什么添加“相关”命令后残差的 ACF&PACF 图没有改变?它们看起来与“nls”产生的完全一样。即使我将 ARMA(0,1) 模型更改为 ARMA(1,0),绘图仍然保持不变。基本上,我使用residuals() 命令提取残差。数值改变了,但自相关没有改变......
  • @zy.G;你用的是什么残差。如果您使用raw 残差,它们不会改变。使用normalized。阅读?residuals.gnls [par(mfrow=c(2,1)) ; acf(resid(fit)) ; acf(resid(fit, type="normalized"))]
  • @ZheyuanLi 是的,你是对的.. 结果不同。因此残差与主要部分同时建模。谢谢!
猜你喜欢
  • 1970-01-01
  • 2015-07-21
  • 2014-05-22
  • 1970-01-01
  • 2020-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-10
相关资源
最近更新 更多