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

时间:2016-10-22 14:38:54

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

我在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]

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

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:3)

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工作。我在这里发布它以给出一个开始/味道。

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位已在开头解释。

fixed中的

randomnlme参数指定了整体公式中应该被视为固定效果和随机效应的内容。由于我们没有随机效应,我们将其保留为未指定。我们希望ag作为固定效果,因此我尝试了fixed = a + g ~ 1之类的内容。不幸的是,由于某种原因我不知道它不太有效。我阅读了?nlme,并认为此公式意味着我们希望所有观察结果都有ag,但稍后nlme会报告错误,说明这不是有效的小组公式。

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

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

  • nlmegls通过允许非对角线方差函数来扩展gnlslm

所以,我应该使用nls代替:

gnls