巨大なデータベースでローリング回帰を行っています。ローリングに使用される参照列は「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(t(t(error)))
[,1]
21 0.006202145
62 -0.003005097
103 -0.019273856
144 -0.016053012
185 -0.025608022
226 -0.004548264
データプールの構造は次のとおりです。
> 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
}
上記のコードは機能し、エラーは発生しませんが、各回帰によって生成されたすべてのエラーを 1 つのデータプールに自動的にコンパイルする方法がわかりません。誰でもそれで私を助けることができますか?