2012-09-25 56 views
1

自2008年以來我已經得到了歐元區斯托克50指數的每日OHLC數據集看起來就像是:使用TTR[R滾動隨機森林的變量選擇

   Open High  Low Close Volume Adjusted 
2008-01-02 4393.53 4411.59 4330.73 4339.23  0 4339.23 
2008-01-03 4335.91 4344.36 4312.34 4333.42  0 4333.42 
2008-01-04 4331.25 4343.46 4253.69 4270.53  0 4270.53 
2008-01-07 4268.43 4294.45 4257.22 4283.37  0 4283.37 
2008-01-08 4292.40 4330.56 4292.40 4295.23  0 4295.23 
2008-01-09 4285.34 4285.34 4246.92 4258.32  0 4258.32 

我計算了幾個技術規則。因此我得到了一個更大的數據集:

   RSI2  RSI3  RSI4  RSI5 RSI10 RSI20  SMA5 SMA20 SMA60  EMA5 EMA20 EMA60  atr  SMI 
2009-01-07 97.964071 92.62210 87.21605 82.40040 66.95642 55.19221 19720.64 18655.29 17758.68 2556.777 2556.777 2556.777 82.06602 27.52145 
2009-01-08 43.766573 58.62387 62.97794 64.03382 60.23197 52.99739 19756.44 18666.60 17754.07 2566.499 2566.499 2566.499 80.33416 29.12141 
2009-01-09 27.182247 44.97072 52.29336 55.50633 56.74068 51.80171 19776.92 18674.31 17750.34 2523.372 2523.372 2523.372 78.65886 29.37878 
2009-01-12 13.371347 30.46561 39.97055 45.24210 52.16207 50.17764 19788.02 18683.05 17748.76 2524.466 2524.466 2524.466 78.58966 28.17871 
2009-01-13 6.141462 19.52298 29.30404 35.68593 47.25383 48.32987 19772.25 18693.01 17749.35 2488.165 2488.165 2488.165 76.08326 25.34705 
2009-01-14 2.712386 11.97834 20.69541 27.26891 42.10718 46.23469 19747.87 18694.16 17742.88 2449.353 2449.353 2449.353 75.42231 20.65686 

我想知道每個工作季度哪些是最重要的技術規則。我決定使用randomForest包中編碼的Random Forest-RI算法,計算Breiman重要性度量(感謝importance函數),並選擇具有可變重要性度量的技術規則,使其大於平均值季度樣本。最後,我希望獲得整個期間縮減的技術規則數據集以計算統計數據等。

鑑於重要技術規則的數量可能隨時間而變化,包含最重要技術規則的陣列的維度從四分之一到另一個不相同。因此,我不能把我所有的價值都放在一個單一的對象中。

是否有一種方便的方式來存儲我的所有季度數據集?

謝謝。

+1

這個編碼自動分析系統的請求的範圍似乎比SO設計的要大......除了應該使用什麼類型的R對象之外。沒有R方式持有大小不一的物品的前提是明顯錯誤的。列表結構可用,並始終用於此目的。 –

回答

1

使用數據框或xts對象。他們都處理不同數量的列。就你而言,由於所有數據列都是數字類型,因此可以使用xts對象。

你在標題中說「滾動」。你是否想要分析90天的重疊期?例如。 2008-01-02至2008-04-02,然後2008-01-03至2008-04-03等等?如果是的話rollapply(data,width=90,FUN)可以使用。如果你想處理宿舍,一次一個,quarters <- split(data,'quarters')然後(因爲這給你一個xts對象列表)lapply(quarters,FUN)

我認爲你使用單一數據結構的問題是,SMA5是從2008年 - 01-08,但是SMA200直到年底才能上市;這意味着在前三個季度,SMA200列將只包含NAs?這可以。在將數據傳遞給RandomForest之前,保持NA並處理它們。

在樂趣,你會刪除包含NA像這樣的列(其中xq是包含數據只有一個季度的XTS對象):

xq = xq[,!apply(is.na(x),2,any)] 

UPDATE:重新閱讀您的問題後,和你的後續問題我認爲上面的答案是你沒有的問題!我認爲這個問題在你的TTR表中有NAs,而且RandomForest不喜歡它們。

經過反思,我認爲你的實際問題是「RandomForest從每個季度的分析中獲得了不同數量的好指標,我該如何處理?」答案是一個參差不齊的數據結構,一個列表。每季度一個列表條目。列表條目本身可以是任何東西,甚至是一個xts對象,但在這種情況下,指標名稱的簡單字符向量似乎是完美的。在Zach's answer對您的其他問題很好地顯示。