7

我有一个平稳的时间序列,我想用一个自回归项拟合一个线性模型来校正序列相关性,即使用公式 At = c1*Bt + c2*Ct + ut,其中 ut = r*ut-1 +等

(ut 是一个 AR(1) 项,用于纠正误差项中的序列相关性)

有谁知道在 R 中使用什么来建模这个?

谢谢卡尔

4

3 回答 3

9

GLMMarp将适合这些模型。如果您只想要一个具有高斯误差的线性模型,您可以arima()使用通过参数指定协变量的函数来实现xreg

于 2009-12-14T08:21:48.330 回答
7

在 R 中有几种方法可以做到这一点。以下是使用R 附带的数据集包中的“安全带”时间序列数据集的两个示例。

arima()函数包含在 R 中的 package:stats 中。该函数采用形式参数,order=c(p, d, q)您可以在其中指定自回归、积分和移动平均分量的顺序。在您的问题中,您建议您创建一个 AR(1) 模型来纠正错误中的一阶自相关,仅此而已。我们可以使用以下命令来做到这一点:

arima(Seatbelts[,"drivers"], order=c(1,0,0),
      xreg=Seatbelts[,c("kms", "PetrolPrice", "law")])

order 的值指定我们需要一个 AR(1) 模型。xreg 组件应该是我们想要作为回归的一部分添加的一系列其他 X。输出看起来有点像summary.lm()打开的输出。

另一个替代过程可能更熟悉您拟合回归模型的方式是gls()nlme 包中使用。以下代码将 Seatbelt 时间序列对象转换为数据框,然后提取并添加一个新列 ( t ),它只是排序时间序列对象中的一个计数器:

Seatbelts.df <- data.frame(Seatbelts)
Seatbelts.df$t <- 1:(dim(Seatbelts.df)[1])

上面的两行只是获取数据的形状。由于该arima()函数是为时间序列设计的,因此可以更轻松地读取时间序列对象。要使用 nlme 拟合模型,您将运行:

library(nlme)
m <- gls(drivers ~ kms + PetrolPrice + law,
         data=Seatbelts.df,
         correlation=corARMA(p=1, q=0, form=~t))
summary(m)

以“correlation”开头的行是您将 ARMA 相关结构传递给 GLS 的方式。结果不会完全相同,因为默认情况下arima()使用最大似然来估计模型并gls()使用受限最大似然。如果您添加method="ML"到调用中,gls()您将获得与上述 ARIMA 函数相同的估计值。

于 2014-07-17T23:34:36.613 回答
2

你的链接功能是什么?

您描述它的方式听起来像是带有自相关误差的基本线性回归。在这种情况下,一种选择是用来lm获得对系数的一致估计并使用Newey-West HAC standard errors

我不确定 GLM 的最佳答案。

于 2009-12-14T06:49:16.490 回答