【问题标题】:R, AR(1) and FGLS Computations. Unable to create a lagged variableR、AR(1) 和 FGLS 计算。无法创建滞后变量
【发布时间】:2017-03-22 00:19:58
【问题描述】:

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)

【问题讨论】:

  • 另外,这是我的第一篇文章,所以如果我能做些什么来改善这个问题,请告诉我。
  • 摆脱奇怪的 [DATA 事情,尽可能在帖子正文中而不是在场外图片中发布问题。向我们展示DATA 中的内容,并告诉我们哪一列包含时间变量。告诉我们当您尝试使用 lag 时会发生什么。或者更好的是,提供一个最小的工作示例,以便我们自己了解。
  • 另外你为什么这么肯定你的回归系数是错误的?我可以很容易地想象出许多数据集,其中 t=1 的值可以非常准确地预测 t=2 的值。
  • 1.没有一列包含时间变量,带有数据的附加图像正是我们在问题集中给出的。 2. 我知道我的系数非常好,因为问题集告诉我们如果我们做对了问题,我们的 B1 系数应该是什么。我将编辑正文并尝试使其变得更好。
  • 我修复了开头的“数据”,它显示了我们正在处理的一些数据的屏幕截图。我不确定如何为您提供一个最小的工作示例或具体使用该数据的能力?

标签: r


【解决方案1】:

在普通的lm() 公式中使用lag() 不起作用,因为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() 完成练习中的不同步骤。

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2019-09-05
      • 2013-08-31
      • 1970-01-01
      • 1970-01-01
      • 2015-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多