循环数据与顺序时间滞后输出线性回归系数

时间:2017-09-17 16:02:27

标签: r

我有一个像这样的数据集:

 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数据。如此粗略分析中所定义的滞后是来自每个var数据点的过去几个月的psit数据T-1,T-2,T-3等。

要查看前几个月var数据如何影响psit数据,我希望制作一个timelag向量,其中包含距离该数据偏离一个月的var数据psit变量。然后我会将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

对于每个数据帧,我想使用var函数对psit数据进行lm()回归,然后输出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平方值。

1 个答案:

答案 0 :(得分:0)

尝试使用允许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