首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PerformanceAnalytics中冒号的碰撞

PerformanceAnalytics中冒号的碰撞
EN

Stack Overflow用户
提问于 2013-12-04 08:04:26
回答 1查看 91关注 0票数 1

我最近发现了PerformanceAnalytics,发现它对我的研究非常有用。然而,我发现了一种奇怪的行为。我试图扩展InformationRatio()以接受零基准返回:

代码语言:javascript
复制
InformationRatio <- function(Ra, Rb=NULL, scale=NA) {
  if (is.null(Rb)) {
    Rb <- Ra[, 1, FALSE]
    Rb[] <- 0
  }
  PerformanceAnalytics::InformationRatio(Ra, Rb, scale)
}

InformationRatio(managers[, 1:6])

返回

代码语言:javascript
复制
                        HAM1     HAM2    HAM3      HAM4      HAM5    HAM6
Information Ratio: HAM1  Inf 1.373211 1.19553 0.6592017 0.2355561 1.66417

Inf不是我所期望的那样。结果(在浏览源代码之后),它的起源包含在Return.excess()中。

代码语言:javascript
复制
    coln.Rf = colnames(Rf)
    Rft = cbind(R, Rf)
    Rft = na.locf(Rft[, make.names(coln.Rf)])
    Rf = Rft[which(index(R) %in% index(Rft))]

如果资产回报(Ra==R)和基准回报(Rb==Rf)之间存在名字冲突,则Rf被分配给R,最终导致除以零。

这里有一个解决办法:

代码语言:javascript
复制
InformationRatio <- function(Ra, Rb=NULL, scale=NA) {
  if (is.null(Rb)) {
    Rb <- Ra[, 1, FALSE]
    Rb[] <- 0
    colnames(Rb) <- "zero"
  }
  PerformanceAnalytics::InformationRatio(Ra, Rb, scale)
}

InformationRatio(managers[, 1:6])

返回

代码语言:javascript
复制
                            HAM1     HAM2    HAM3      HAM4      HAM5    HAM6
Information Ratio: zero 1.549119 1.373211 1.19553 0.6592017 0.2355561 1.66417

这是窃听器还是我漏掉了什么?如果是的话,我该怎么报告?我通过不了此页,没有任何窃听器。我想写一封电子邮件,但我在这里见过开发人员,所以发布可能是一个很好的选择,不是吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-12-04 11:24:12

Rb不应该是标量,它应该是一个时间序列。

经常预算在文件中被描述为

代码语言:javascript
复制
Rb: return vector of the benchmark asset

因此,我认为文档可能会更清楚,我将改进它,专门处理一个时间序列。我们需要将基准收益的时间序列合并为资产回报的时间序列来进行计算。

下面是一个为Rb输入时间序列的工作示例

代码语言:javascript
复制
data(managers)
rb<-xts( rep(0,nrow(managers)), order.by=index(managers) )
colnames(rb)<-'zero'
InformationRatio(managers,rb)

生产:

代码语言:javascript
复制
                            HAM1     HAM2    HAM3      HAM4      HAM5    HAM6 EDHEC LS EQ  SP500 TR US 10Y TR US 3m TR
Information Ratio: zero 1.549119 1.373211 1.19553 0.6592017 0.2355561 1.66417    1.665694 0.6448502 0.7265079 7.620057

至于Return.excess,,我认为不允许冒号碰撞是有意义的,因为您试图确定一个系列对另一个系列的超额回报。上面粘贴的代码旨在合并该系列,并创建一个与输入系列具有相同索引的输出序列。与最初编写函数时(在xts之前)相比,现在可以更有效地完成该操作,我也将看一看。

通常,R包的bug报告应该转到软件包网站或包维护人员那里。电子邮件会很好的。所以应该针对使用问题,而不是bug报告,通常情况下,bug会被修复,而因此仍然使用陈旧的数据。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20370099

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档