我有一个数据帧 df 由40个估算数据集 imp 组成,每个数据集有228个月 month 寄生频率 psit 和气候变异数据 var .

set.seed(560)
df<-data.frame(imp= rep(1:40, each=228), month=rep(1:228), psit= 
rep(rnorm(228, 20, 10)), var=rnorm(9120, 50, 10))

我想遍历每个 imp 子集并进行一系列时滞分析 . 第一次滞后将比最近的数据偏移一个月,第二次滞后将偏离最近的数据等2个月,总共过去216个月 . 以下是第一个插补数据集的三次滞后的示例:

sub<-subset(df, imp==1)
timelag1<- cbind(sub[1:12,3], sub[2:13,4]) #1 month time lag
timelag2<- cbind(sub[1:12,3], sub[3:14,4]) #2 month time lag
timelag3<- cbind(sub[1:12,3], sub[4:15,4]) #3 month time lag

......等所有213个月左右 . 因此,每个 imp 子集都会有多个时滞分析 . 然后我将对所有插补数据集重复此操作 . 从每个时间滞后我想计算r平方值 . 如果对所有40个插补数据集进行此操作,则时间标记1的40个r平方值,timelag 2的40个r平方值,timelag 3的40个r平方值......等等 . 所以我希望将这些r平方值汇总在一起 . 因此,在循环结束时,每个时间滞后应该有一个合并的r平方值向量 .

例:

model_for_timelag1<-lm(psit ~ lag(var, -1), tail(df, 12+1) #lm for 
  timelag1
 summary(model_for_timelag1)$r.squared
 #Repeat model 1 for the 39 remaining imputed datasets

 model_for_timelag2<-lm(psit ~ lag(var, -2), tail(df, 12+2)  #lm for 
 timelag2
 summary(model_for_timelag2)$r.squared
 #Repeat model 2 for the 39 remaining imputed datasets

 model_for_timelag3<-lm(psit ~ lag(var, -3), tail(df, 12+3)  #lm for 
 timelag3
 summary(model_for_timelag3)$r.squared 
 #Repeat model 3 for the 39 remaining imputed datasets

 pool.r.squared(all_model1) #pool all 40(all imputed datasets)model1s
 pool.r.squared(all_model2) #pool all 40(all imputed datasets)model2s
 pool.r.squared(all_model3) #pool all 40(all imputed datasets)model3s

我不成功的尝试:

rsquared<-NA

 for (i in length(df$imp)) {
 model[i]<- lm(psit ~ lag(var, var[[-i]]), tail(df, 12+var[[i]])
 rsquared[i]<- summary$r.squared
 pool.r.squared()
    }

如果有一个更简单的解决方案,我不会偏向for循环 . 我只是预见到for循环能够处理这类问题 .