R 将通过滚动回归生成的所有数据编译为一个

R 将通过滚动回归生成的所有数据编译为一个,r,compilation,regression,rolling-computation,R,Compilation,Regression,Rolling Computation,我正在使用一个巨大的数据库进行滚动回归,用于滚动的参考列称为“Q”,每个数据块的值从5到45。起初,我一步一步地尝试使用简单的代码,效果非常好: fit <- as.formula(EB~EB1+EB2+EB3+EB4) #use the 20 Quarters data to do regression model<-lm(fit,data=datapool[(which(datapool$Q>=5&datapool$Q<=24)),]) #use the mo

我正在使用一个巨大的数据库进行滚动回归,用于滚动的参考列称为“Q”,每个数据块的值从5到45。起初,我一步一步地尝试使用简单的代码,效果非常好:

fit <- as.formula(EB~EB1+EB2+EB3+EB4)
#use the 20 Quarters data to do regression
model<-lm(fit,data=datapool[(which(datapool$Q>=5&datapool$Q<=24)),])
#use the model to forecast the value of next quarter
pre<-predict(model,newdata=datapool[which(datapool$Q==25),])
#get the forecast error
error<-datapool[which(datapool$Q==25),]$EB -pre
数据池的结构如下:

> head(datapool)
  X  Q            Firm         EB       EB1        EB2        EB3
1 1  5 CMCSA US Equity 0.02118966 0.08608825 0.01688180 0.01826571
2 2  6 CMCSA US Equity 0.02331379 0.10506550 0.02118966 0.01688180
3 3  7 CMCSA US Equity 0.01844747 0.12961955 0.02331379 0.02118966
4 4  8 CMCSA US Equity         NA         NA 0.01844747 0.02331379
5 5  9 CMCSA US Equity 0.01262287 0.05622834         NA 0.01844747
6 6 10 CMCSA US Equity 0.01495291 0.06059339 0.01262287         NA
       ...
       Firm B(also from Q5 to Q45)
       ...
       Firm C(also from Q5 to Q45)
上面产生的错误都在“数据池”中标记为“X”值,因此我可以知道错误来自哪个公司

因为我需要运行21次回归(第5-24、6-25、…、25-44季度),所以我不想手动进行回归,并且已经考虑了以下代码:

fit <- as.formula(EB~EB1+EB2+EB3+EB4)
for (i in 0:20){
model<-lm(fit,data=datapool[(which(datapool$Q>=5+i&datapool$Q<=24+i)),])
pre<-predict(model,newdata=datapool[which(datapool$Q==25+i),])
error<-datapool[which(datapool$Q==25),]$EB -pre
}
fit(我再说一遍:对向量使用'error'这个名称真是个坏主意。)它是一个核心函数的名称。这就是我尝试这项任务的方式。(使用subset参数和索引比使用which语句

fit <- as.formula(EB~EB1+EB2+EB3+EB4)
pre <- numeric(len=21)
errset <- numeric(len=21)
for (i in 0:20){
     model<-lm(fit,data=datapool, subset= Q>=5+i & Q<=24+i )
     pre[i]<-predict(model,newdata=datapool[ datapool[["Q"]] %in% i:(25+i), ])
     errset[i]<-datapool[25+i,]$EB -pre
}
errset

fit此代码的问题是“error”(非常非常糟糕的名称)对象没有预先分配,然后它也没有索引。您总是覆盖“error”最后一个结果。你还应该说你将如何处理结果。@谢谢你的回答。我需要分析不同同行公司(具有类似特征的公司)的错误分布为了做进一步的研究。使用分步代码,正确地生成了错误。但是我需要运行代码21次以获得21个错误集,然后使用rbind()附加21个错误集,但效率不高。我现在要做的是使用循环执行此过程,然后将错误集自动附加到一个大错误集中。您似乎没有阅读其含义。每次通过循环,代码
error@DWin我都在考虑使用“ldply(error\urbind)”但正如你所说,错误总是被覆盖,我只得到最后一个错误集。是的,你是对的,我意识到我的问题,并试图解决它,但是直到现在我还没有找到一些解决方案来保持所有的错误集使用索引,标准的CS策略。
for(i in seq_set)err_set[i]非常感谢您的努力和帮助,但我仍然无法自动完成该过程。代码只返回21个错误,而不是21个错误集。无论如何,我需要继续进行分析,不能在代码上花费太多时间。我已经一步一步地完成了,而且也不需要太多时间。感谢您的耐心和良好的提示和帮助:)
fit <- as.formula(EB~EB1+EB2+EB3+EB4)
pre <- numeric(len=21)
errset <- numeric(len=21)
for (i in 0:20){
     model<-lm(fit,data=datapool, subset= Q>=5+i & Q<=24+i )
     pre[i]<-predict(model,newdata=datapool[ datapool[["Q"]] %in% i:(25+i), ])
     errset[i]<-datapool[25+i,]$EB -pre
}
errset