R中具有非线性外生变量的ARIMA模型

ARIMA model with nonlinear exogenous variable in R

我正在 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 具有这种能力,因为它适合非线性混合模型。通过允许随机效应和相关误差,您可以将其视为 nls(仅固定效应的非线性回归)的扩展。

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

我不是 nlme 方面的专家,但我知道 nlme 是您所需要的。我生成了以下示例,但由于我不是专家,所以我现在无法 nlme 工作。我post它在这里给一个开始/味道。

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位在开头已经解释过了

fixednlme 中的 random 参数指定在整个公式中应该将什么视为固定效应和随机效应。由于我们没有随机效应,因此我们将其未指定。我们希望 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