我有一个数据帧 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循环能够处理这类问题 .