代码之家  ›  专栏  ›  技术社区  ›  Karl

用自回归项修正序列相关的GLM

  •  7
  • Karl  · 技术社区  · 16 年前

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

    (ut是一个ar(1)术语,用于纠正错误术语中的串行相关性)

    有人知道在R中用什么来建模吗?

    谢谢 卡尔

    3 回复  |  直到 12 年前
        1
  •  8
  •   Rob Hyndman    16 年前

    这个 GLMMarp 包装适合这些型号。如果你只想要一个带有高斯误差的线性模型,你可以用 arima() 函数,其中通过 xreg 争论。

        2
  •  4
  •   mako    12 年前

    在R中有几种方法可以做到这一点。 "Seatbelts" time series dataset in the datasets package 和R一起。

    这个 arima() 函数包含在包中:r中包含的统计信息。该函数接受窗体的参数 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 compontent应该是我们想要添加的一系列其他xs。输出看起来有点像 summary.lm() 转向它的一边。

    另一个比较熟悉的方法是使用回归模型。 gls() nlme package . 以下代码将安全带时间序列对象转换为数据帧,然后提取并添加新列( 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)
    

    以“相关”开头的行是将ARMA相关结构传递给GLS的方式。结果不会完全相同,因为 阿里玛( 使用最大似然估计模型和 GL() 默认情况下使用受限的最大可能性。如果添加 method="ML" 呼唤 GL() 您将得到与上面的arima函数相同的估计。

        3
  •  2
  •   Tristan    16 年前

    你的链接功能是什么?

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

    一般来说,我不确定GLM的最佳答案。