与 zoo::rollapply 一起使用时 PerformanceAnalytics 包中的某些功能失败

Posted

技术标签:

【中文标题】与 zoo::rollapply 一起使用时 PerformanceAnalytics 包中的某些功能失败【英文标题】:Some functions in PerformanceAnalytics package are failing when use with zoo::rollapply 【发布时间】:2020-07-12 01:45:48 【问题描述】:

我正在尝试使用 zoo::rollapply 函数使用包 PerformanceAnalytics 按时间顺序计算 Sterling Ratio。以下是我的计算 -

library(zoo)
library(PerformanceAnalytics)

Orig_Data = structure(c(12.05, 12.75, 12.75, 12.55, 13.05, 14.15, 16.2, 16.5, 
15.95, 16.9, 17.3, 17.5, 16.2, 16.7, 16.4, 15.95, 17.15, 16.2, 
16.5, 15.35, 15.8, 16.1, 16.35, 18.3, 18.2, 17.35, 17.95, 18.35, 
18.3, 17.9, 18.1, 20.65, 20.45, 20.3, 20.65, 18.7, 18.95, 18.3, 
16.65, 17.05, 17.15, 16.9, 17.15, 16.55, 16.2, 16, 16.8, 16.8, 
16.9, 16.75, 16.4, 15.8, 15.2, 15.15, 16.5, 16.75, 16.5, 15.85, 
15.75, 15.15, 15.2, 15.45, 16.15, 16.1, 16.05, 15.7, 15.75, 15.85, 
15.9, 15.5, 15.5, 15.7, 15.55, 15.45, 15.2, 14.75, 14.7, 14.1, 
14.2, 14.1, 14.25, 14.35, 14, 13.4, 13.4, 13.05, 12.9, 12.8, 
12.5, 12.45, 12.45, 12.6, 12.15, 12, 12.1, 12.4, 13, 12.9, 12.9, 
12.7, 13.15, 11.75, 11.25, 11.05, 10.95, 11.4, 11.4, 11.45, 11.2, 
10.95, 10.65, 9.9, 9.65, 9.65, 9.05, 8.6, 8.75, 8.8, 9.3, 9.85, 
10.15, 9.7, 9.8, 9.85, 10.25, 11.15, 12.25, 12.75, 12.55, 12, 
12.85, 12.5, 12.3, 12.6, 12.25, 11.65, 11.4, 11.2, 11.15, 10.75
), index = structure(c(15341, 15342, 15343, 15344, 15345, 15348, 
15349, 15350, 15351, 15352, 15355, 15356, 15357, 15358, 15359, 
15362, 15363, 15364, 15366, 15369, 15370, 15371, 15372, 15373, 
15376, 15377, 15378, 15379, 15380, 15383, 15384, 15385, 15386, 
15387, 15391, 15392, 15393, 15394, 15397, 15398, 15399, 15400, 
15401, 15404, 15405, 15406, 15408, 15411, 15412, 15413, 15414, 
15415, 15418, 15419, 15420, 15421, 15422, 15425, 15426, 15427, 
15428, 15429, 15432, 15433, 15434, 15439, 15440, 15441, 15442, 
15443, 15446, 15447, 15448, 15449, 15450, 15453, 15454, 15455, 
15456, 15457, 15460, 15462, 15463, 15464, 15467, 15468, 15469, 
15470, 15471, 15474, 15475, 15476, 15477, 15478, 15481, 15482, 
15483, 15484, 15485, 15488, 15489, 15490, 15491, 15492, 15495, 
15496, 15497, 15498, 15499, 15502, 15503, 15504, 15505, 15506, 
15509, 15510, 15511, 15512, 15513, 15516, 15517, 15518, 15519, 
15520, 15523, 15524, 15525, 15526, 15527, 15530, 15531, 15532, 
15533, 15534, 15537, 15538, 15539, 15540, 15541, 15544), class = "Date"), class = "zoo")

rollapply(Orig_Data,
            width = 132,
            align = 'right',
            function(Data) 
                    Start = as.character(index(Data)[1])
                    End   = as.character(last(index(Data)))

                    SterlingRatio = as.vector(SterlingRatio(R = diff(log(Data))))

                    return(data.frame('Start' = Start,
                                        'End' = End,
                                        'SterlingRatio' = SterlingRatio, check.names = FALSE))

                )

此代码因错误而失败 -

Error in try.xts(x, error = "'x' needs to be timeBased or xtsible") : 
  'x' needs to be timeBased or xtsible

结果的几个问题 -

    即使我不使用函数SterlingRatio(),上面的代码也不会重新调整StartEnd 的正确值 上述错误与SterlingRatio()SharpeRatio() 函数有关。如果我使用其他功能,例如SortinoRatio() 工作正常。

知道出了什么问题会很有帮助。

感谢和问候,

【问题讨论】:

【参考方案1】:

SterlingRatioSharpeRatio 都有一些使用 xts 包中的函数 xtsible 的内部检查。这只是检查数据是否为 ​​xts 格式。在这种情况下它不是,它是一个动物园对象。下面的示例将返回数据。

rollapply(xts::as.xts(Orig_Data),
          width = 132,
          align = 'right',
          SterlingRatio)

但是在上面创建的函数中使用as.xts 会返回错误,因为您会尝试将 data.frame 与 xts 对象合并。所以首先你需要知道你希望你的输出是什么样子。

【讨论】:

以上是关于与 zoo::rollapply 一起使用时 PerformanceAnalytics 包中的某些功能失败的主要内容,如果未能解决你的问题,请参考以下文章

PP和PE料的区别?

尝试将 maven 与 android eclipse 项目一起使用不起作用?

无法让 React-redux 与 redux-persist 一起使用

第13章:PE文件格式

让 Select2 Gem 与 A​​ctiveAdmin“添加新”按钮一起使用

2018/10/30-PE文件-导出函数