我正在用巨大的數據庫進行滾動迴歸,並且用於滾動的參考列被稱爲「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
}
上述工程的代碼,並且沒有錯誤出來,但我不知道如何自動編譯每個迴歸產生的所有錯誤到一個數據池?任何人都可以幫助我嗎?
這段代碼的問題是'錯誤'(真的很糟糕的名字)對象沒有預先分配,然後它也沒有被索引,你總是用最後一個結果覆蓋「錯誤」 。你也應該說你將會對結果做什麼 –
@DWin謝謝你的回答,我需要分析不同同行公司(具有類似特徵的公司)的錯誤分佈,以便進一步做研究。用逐步代碼,錯誤正確地產生。但是我需要運行代碼21次才能得到21錯誤集,然後使用rbind()追加21錯誤集,但它不是那麼高效。我現在想要做的是用循環完成該過程,然後將錯誤集自動附加到一個大的錯誤集中。 – mushroom
你似乎沒有閱讀意義。每次循環時,代碼'error < - ...'都會替換之前的任何值'error'。 –