我有一个平稳的时间序列,我想用一个自回归项拟合一个线性模型来校正序列相关性,即使用公式 At = c1*Bt + c2*Ct + ut,其中 ut = r*ut-1 +等
(ut 是一个 AR(1) 项,用于纠正误差项中的序列相关性)
有谁知道在 R 中使用什么来建模这个?
谢谢卡尔
我有一个平稳的时间序列,我想用一个自回归项拟合一个线性模型来校正序列相关性,即使用公式 At = c1*Bt + c2*Ct + ut,其中 ut = r*ut-1 +等
(ut 是一个 AR(1) 项,用于纠正误差项中的序列相关性)
有谁知道在 R 中使用什么来建模这个?
谢谢卡尔
GLMMarp包将适合这些模型。如果您只想要一个具有高斯误差的线性模型,您可以arima()
使用通过参数指定协变量的函数来实现xreg
。
在 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 函数相同的估计值。
你的链接功能是什么?
您描述它的方式听起来像是带有自相关误差的基本线性回归。在这种情况下,一种选择是用来lm
获得对系数的一致估计并使用Newey-West HAC standard errors。
我不确定 GLM 的最佳答案。