R滚动随机森林变量选择

时间:2012-09-25 14:07:32

标签: r xts random-forest

自2008年以来,我每天都有欧洲Stoxx 50指数的OHLC数据集,看起来像这样:

              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

我使用TTR包计算了几个技术规则。因此,我得到了一个更大的数据集:

               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包中编码的随机森林-RI算法,计算Breiman重要性度量(感谢importance函数)并选择具有变量的技术规则重要性衡量大于季度样本的平均值。最后,我想在整个期间获得减少的技术规则数据集来计算统计数据等。

鉴于重要技术规则的数量可能随时间而变化,包含最重要技术规则的阵列的尺寸从四分之一到另一个不同。因此,我无法将所有值都放在一个对象中。

是否有方便的方式存储我的所有季度数据集?

感谢。

1 个答案:

答案 0 :(得分: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之前,请保留NAs并处理它们。

在FUN中,您将删除包含NA的列(如果xq是包含仅四分之一数据的xts对象):

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

更新:重新阅读您的问题以及您的后续问题后,我认为以上问题解答了您没有的问题!我认为问题是你的TTR表中有NA,而且RandomForest不喜欢它们。

经过反思,我认为你的实际问题是“RandomForest从每个季度的分析中给出了不同数量的好指标,我该如何应对?”答案是一个参差不齐的数据结构,一个列表。每季度一个列表条目。列表条目本身可以是任何东西,甚至是xts对象,但在这种情况下,指示符名称的简单字符向量似乎是完美的。这在Zach's answer中很好地显示在您的另一个问题上。