我有一个包含观察月份、分数和结果的数据集。我需要为每个月执行一次 -16 到 -13 个月的逻辑回归,以使用分数预测结果,然后将结果拟合到第 0 个月的值。我能够产生一个 foreach 循环来做到这一点,但我怀疑这是最好的方法。
df<-data.frame(month=rep(1:94,times=20),score=abs(round(rnorm(n=94*20)*100,0)),outcome=abs(round(rnorm(n=94*20),0)))
df$outcome<-ifelse(df$outcome>1,0,df$outcome)
#logistic regression example (including scaling the results to provide the score modifier)
library("foreach")
foreach(imonth=unique(df$month)[16:length(unique(df$month))])%do%
{glmsubset<-df[df$month>=(imonth-16)&df$month<=(imonth-13),]
glmmodel<-glm(formula=outcome~score,data=glmsubset, family=binomial(link=logit))
df$modelresult[df$month==imonth]<-predict(glmmodel,newdata=df[df$month==imonth,],type="response")
}
df$scoreadjustment<-log(df$modelresult/(1-df$modelresult))*(50/log(2))
df$adjscore<-round(df$score+ifelse(is.na(df$scoreadjustment),0,df$scoreadjustment),0)
df
因此,对于第 94 个月,应该对第 78 个月到第 81 个月的子集执行逻辑回归,并将结果模型作为附加列应用于第 94 个月的分数。附加列将填充每个月 >=16 的月份。
我希望有一个不那么像循环的结构,人们已经指出了一些 SO 帖子: 是否有一种 _fast_ 方法可以在 data.table 中运行滚动回归? R data.table 滑动窗口
然而,第一个在执行某种形式的回归时不使用偏移月份,并且旨在返回系数而不是直接使用结果。第二个执行滚动中位数的聚合,也指第一个 SO 帖子。第一个需要对所涉及的所有功能有深入的了解,并且对于较低专业水平的人来说几乎没有可访问性。
我正在阅读zoo
,rollapply
特别是从中阅读。