我有一个像这样的数据集:
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平方值。
答案 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