【问题标题】:Loop Through Data with Sequential Time Lags output Linear Regression Coefficients具有顺序时滞输出线性回归系数的循环数据
【发布时间】:2017-09-18 07:45:15
【问题描述】:

我有一个这样的数据集:

 set.seed(242)
 df<- data.frame(month=order(seq(1,20,1),decreasing=TRUE), 
 psit=sample(1:100,20,replace=TRUE),  var=sample(1:10,20, 
 replace=TRUE))

我希望进行粗略的时间滞后分析,以了解滞后的 var 数据如何影响 psit 数据。如该粗略分析中所定义的,滞后是每个psit 数据点过去几个月的var 数据T-1、T-2、T-3 等。

要查看前几个月的var 数据如何影响psit 数据,我希望创建一个timelag 向量,该向量由与psit 变量偏移一个月的var 数据组成。然后我将timelag 向量绑定到psit 向量。以下是 1 个月偏移量、2 个月偏移量、3 个月偏移量的数据帧示例:

 set.seed(242)
 timelag1<- cbind(df[1:12,2], df[2:13,3]) #1 month time lag
 timelag2<- cbind(df[1:12,2], df[3:14,3]) #2 month time lag
 timelag3<- cbind(df[1:12,2], df[4:15,3]) #3 month time lag

对于每个数据帧,我想使用 lm() 函数针对 psit 数据回归 var 并输出 R 平方值。将针对每个后续偏移重复此过程。下面的例子:

 model1<-lm(timelag1)
 summary(model1)$r.squared
 model2<-lm(timelag2)
 summary(model2)$r.squared
 model3<-lm(timelag3)
 summary(model3)$r.squared

我想创建一个循环,为 240 个月的大型数据集迭代此过程。然后在每个数据帧上运行lm(),然后输出 r 平方值。

【问题讨论】:

    标签: r


    【解决方案1】:

    尝试使用允许lm 处理动物园和其他时间序列对象的 dyn 包:

    library(dyn)
    
    z <- read.zoo(df)
    models <- lapply(1:3, function(i) dyn$lm(psit ~ lag(var, -i), tail(z, 12+i)))
    sapply(models, function(x) summary(x)$r.squared)
    ## [1] 0.31209189 0.04923393 0.09995727
    

    请注意,通常如果使用滞后 k,则还包括所有较小的 k 值。在这种情况下:

    models <- lapply(1:3, function(i) dyn$lm(psit ~ lag(var, -(1:i)), tail(z, 12+i)))
    do.call("anova", models)
    

    给予:

    Model 1: psit ~ lag(var, -(1:i))
    Model 2: psit ~ lag(var, -(1:i))
    Model 3: psit ~ lag(var, -(1:i))
      Res.Df    RSS Df Sum of Sq      F Pr(>F)
    1     10 8688.5                           
    2      9 8221.7  1    466.73 0.4545 0.5192
    3      8 8215.5  1      6.24 0.0061 0.9398
    

    【讨论】:

    • 感谢您的帮助@G。格洛腾迪克。对于您提供的两个选项,我都收到错误消息。 Error in lag(var, -(1:i)) : n must be a single positive integer 。您是否能够对代码进行注释,以便我了解参数如何帮助获得结果?
    • 我应该注意,当我使用 read.zoo() 读取 df 时,month 列已被删除,df 仅包含 psitvar 变量。这应该发生吗?
    • 具体来说,tail(z, 12+i)dyn 参数中做了什么,1:3lapply 命令中做了什么?在我的示例中,我有 3 个模型来进行回归,但如果我的数据集可以迭代到 12 个月或更长时间,那么 1:3 是否将分析限制为三个滞后,从而限制了三个模型?
    • 你需要阅读动物园。有几个小插曲。 tail(z, 12+i) 取 12+i 最近的分数。 lapply 为每个 1:3 的值运行匿名函数,因此它被调用 3 次,i=1 一次,i=2 一次,i=3 一次。如果您确保安装了 dyn 及其依赖项,请启动一个新的 R 会话,从问题中复制并粘贴 df,然后将代码复制并粘贴到我没有看到错误的答案中。
    • 你能帮我解决这个问题的更新版本吗? stackoverflow.com/questions/46395927/…
    猜你喜欢
    • 2016-05-21
    • 2016-04-15
    • 1970-01-01
    • 2016-10-25
    • 1970-01-01
    • 1970-01-01
    • 2021-06-11
    • 1970-01-01
    • 2016-10-05
    相关资源
    最近更新 更多