2013-10-14 27 views
0

我正在用巨大的數據庫進行滾動迴歸,並且用於滾動的參考列被稱爲「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 
} 

上述工程的代碼,並且沒有錯誤出來,但我不知道如何自動編譯每個迴歸產生的所有錯誤到一個數據池?任何人都可以幫助我嗎?

+0

這段代碼的問題是'錯誤'(真的很糟糕的名字)對象沒有預先分配,然後它也沒有被索引,你總是用最後一個結果覆蓋「錯誤」 。你也應該說你將會對結果做什麼 –

+0

@DWin謝謝你的回答,我需要分析不同同行公司(具有類似特徵的公司)的錯誤分佈,以便進一步做研究。用逐步代碼,錯誤正確地產生。但是我需要運行代碼21次才能得到21錯誤集,然後使用rbind()追加21錯誤集,但它不是那麼高效。我現在想要做的是用循環完成該過程,然後將錯誤集自動附加到一個大的錯誤集中。 – mushroom

+0

你似乎沒有閱讀意義。每次循環時,代碼'error < - ...'都會替換之前的任何值'error'。 –

回答

0

(我再說一遍:對於一個向量使用'error'這個名字真的不好主意。)它是一個核心函數的名字。我就是這樣試圖完成這項任務的。 (使用比折磨哪些語句子集參數和索引。

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 

沒有gaurantees這不會通過在開始TOF數據不多了出錯誤或結束,因爲你沒有提供的數據或進行了全面介紹數據對象

+0

非常感謝你的努力和幫助,但我仍然無法自動執行程序。該代碼只返回21個錯誤,而不是21個錯誤集。無論如何,我需要繼續進行分析,不能在代碼上花太多時間。我已經一步一步地完成了,也不需要太多的時間。感謝您的耐心和不錯的提示和幫助:) – mushroom