R,AR(1)和FGLS计算。无法创建滞后变量

时间:2017-03-22 00:19:58

标签: r

Problem

Data

大家好。我的任务是在过去的两周内试图解决这个问题,而我的教授几乎没有帮助。我并不是真的要求确切的代码,但我无法解决问题......

我们给出了一组变量数据(M,R,Y),并要求我们运行图像中显示的回归。我现在的问题是我似乎无法创建一个滞后变量。我被告知1)我们不需要使用时间序列对象2)我应该使用时间序列对象(基于我的研究)。此外,当我们到达要求我们运行t = 2及之后的回归以得到p_hat的部分时,我能得到的唯一系数是1.0000而我们应该得到的B1最终会变成像3.14e这样的-11,一些令人难以置信的错误。根据给出的数据,这是我目前的变量。如果有人能够帮助指导我朝着正确的方向发展,我将非常感激。

#Creates Time Series Objects Which Can Be Lagged using lag()
Mt2 <- ts(data=DATA$M, start=1,end=180,frequency=1)
Mt1 <- ts(data=DATA$M, start=1,end=180,frequency=1)
Rt2 <- ts(data=DATA$R, start=1,end=180,frequency=1)
Yt2 <- ts(data=DATA$Y, start=1,end=180,frequency=1)

#Dependent Variable starts at t=2 and ends at t=181
#Lag Variable starts at t=1 and ends at t=180
Model_A <- lm( Mt2 ~ lag(Mt2,1) + Rt2  + Yt2, data=DATA)
bgtest(Model_A) #Conclude there is Autocorrelation

e <- resid(Model_A)
et <- ts(e,start=2,end=180,frequency=1)
et2 <- ts(e,start=1, end=179, frequency=1)
Model_e <- lm(et ~ et2)

2 个答案:

答案 0 :(得分:1)

在普通lag()公式中使用lm()不起作用,因为lag()只是移动时间索引但保持数据向量不变。并且当lm()(或者更确切地说model.frame())忽略时间索引时,这导致将响应变量包括为回归量之一,因此回归系数为1.作为说明:

lm(Nile ~ lag(Nile, -1))
## Call:
## lm(formula = Nile ~ lag(Nile, -1))
## 
## Coefficients:
##   (Intercept)  lag(Nile, -1)  
##    -1.819e-13      1.000e+00  

此问题有多种解决方案,包括:

  • 使用ar()arima()等专用时间序列基础结构。后者还可以通过xreg轻松合并其他回归量:

    arima(Nile, c(1, 0, 0))
    ## Call:
    ## arima(x = Nile, order = c(1, 0, 0))
    ## 
    ## Coefficients:
    ##          ar1  intercept
    ##       0.5063   919.5685
    ## s.e.  0.0867    29.1410
    ## 
    ## sigma^2 estimated as 21125:  log likelihood = -639.95,  aic = 1285.9
    
  • lm()的便捷界面与model.frame一起使用 dyndynlm

    等处理
    library("dynlm")
    dynlm(Nile ~ L(Nile, 1))
    ## Time series regression with "ts" data:
    ## Start = 1872, End = 1970
    ## 
    ## Call:
    ## dynlm(formula = Nile ~ L(Nile, 1))
    ## 
    ## Coefficients:
    ## (Intercept)   L(Nile, 1)  
    ##    452.7668       0.5043  
    
  • 在致电lm()之前“手动”执行延迟预处理:

    nile <- ts.intersect(Nile = Nile, NileLag = lag(Nile, -1))
    lm(Nile ~ NileLag, data = nile)
    ## Call:
    ## lm(formula = Nile ~ NileLag, data = nile)
    ## 
    ## Coefficients:
    ## (Intercept)      NileLag  
    ##    452.7668       0.5043  
    

根据您是否需要特定的估算方法或返回的模型类进行进一步计算,一种或另一种策略可能更方便。在您的特定情况下,我会推荐最后一个解决方案,然后使用普通lm()完成练习中的不同步骤。

答案 1 :(得分:0)

使用data.frame并“手动”创建滞后变量或使用dplyr :: lag之类的东西。像这样:

X <- 1:10
Xlag <- c(NA, X[1:9])

基本R lag函数对除ts对象以外的任何其他函数都没有用,除了支持它们的特定建模函数外,它们不是很有用。