2014-06-30 142 views
0

作爲我的數據分析(按時間序列)的一部分,我正在檢查對數收益與已實現波動率之間的相關性。許多線性迴歸

我的數據由跨越數百個不同公司(大型動物園對象,〜2 MB文件大小)的時間系列組成。爲了檢查上述的相關性,我已經使用以下代碼來計算幾個軋製方差(也稱爲實現波動):

rollvar5 <- sapply(returns, rollVar, n=5, na.rm=TRUE) 
rollvar10 <- sapply(returns, rollVar, n=10, na.rm=TRUE) 

使用簡單fTrading功能rollVar。然後,我將滾動變量轉換爲zoo對象,並添加日期索引(通過將結果導出到csv文件並手動添加日期,然後使用read.zoo - 不是很複雜,但工作得很好)。

現在我希望創建大約100個線性迴歸模型,每個模型將公司的對數回報與實現的波動性連接到指定的公司。在個人的基礎上,這看起來像下面這樣:

lm_rollvar5 <- lm(returns$[5:1000,1] ~ rollvar5[5:1000,1]) 
lm_rollvar10 <- lm(returns$[10:1000,1] ~ rollvar10[10:1000,1]) 

這工作沒有問題。

現在我想擴展它以自動創建所有100家公司的線性迴歸模型。我試過的是一個簡單的for循環:

NC <- ncol(returns) 
for(i in 1:NC){ 
lm_rollvar5 <- lm(returns[5:1000],i] ~ rollvar5[5:1000,i]) 
summary(lm_rollvar5) 
lm_rollvar10 <- lm(returns[10:1000],i] ~ rollvar10[10:1000,i]) 
summary(lm_rollvar10) 
} 

有什麼辦法可以優化我的方法嗎? (即如何以簡單的方式保存所有迴歸結果)。從現在開始,for-loop只輸出數百個迴歸結果,這對分析結果是無效的。因爲有幾個時間序列對象(返回值和滾動差異保存在不同的對象中,如你所見)。我也嘗試使用apply函數,但我不確定如何在這種情況下使用它。

回答

1

至於你的問題如何以簡單的方式保存所有的迴歸結果,由於我們不知道你需要做什麼以及你認爲什麼「簡單」,所以這有點難以回答。但是,您可以在循環外部定義一個列表,並將每個迴歸模型存儲在此列表中,以便以後可以訪問模型而不必稍後重新設置它們。嘗試

NC <- ncol(returns) 
lm_rollvar5 <- vector(mode="list", length=NC) 
lm_rollvar10 <- vector(mode="list", length=NC) 
for(i in 1:NC){ 
lm_rollvar5[[i]] <- lm(returns[5:1000],i] ~ rollvar5[5:1000,i]) 
lm_rollvar10[[i]] <- lm(returns[10:1000],i] ~ rollvar10[10:1000,i]) 
} 

這給你的公司i在列表中的第i位置的擬合模型。以同樣的方式,你也可以保存摘要的輸出。或者你這樣做

my.summaries_5 <- lapply(lm_rollvar5, summary) 

它給你一個摘要列表。

+0

使用你的方法,出現了許多警告: 「項替換的數目不替換長度的倍數」 此外,當我輸入摘要(lm_rollvar5 [1])的輸出是不是線性的摘要回歸模型(顯示殘差統計數據,標準誤差等),但只是數據類型的總結,表示有2個係數(數字)。 – Olorun

+0

一個錯字,我很抱歉。再試一次。順便說一句,當你用'[]'對列表進行子集化時,你會得到一個列表。要檢索存儲在該列表中的元素,您需要使用'[[]]'。例如,'summary(lm_rollvar5 [[1]])'應該給出所需的輸出。 – coffeinjunky

+0

非常感謝,完美無瑕! – Olorun