R - 对数据集子集的滑动逻辑回归

时间:2013-08-05 11:02:22

标签: r split data.table

我有一个包含观察月份,分数和结果的数据集。我需要每个月进行一次逻辑回归,即使用得分预测结果的月数-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帖子: Is there a _fast_ way to run a rolling regression inside data.table? R data.table sliding window

然而,第一个,虽然执行回归形式不使用偏移月,并且设计用于返回系数而不是直接使用结果。第二个执行滚动中位数的聚合,也指第一个SO帖子。第一个要求对所涉及的所有功能有很强的了解,并且对于较低专业知识水平的人员几乎没有提供可访问性。

我正在阅读zoo,特别是rollapply

0 个答案:

没有答案