我最近发现了 PerformanceAnalytics,发现它对我的研究非常有用。但是,我发现了一个奇怪的行为。我正在尝试扩展InformationRatio()
以接受零基准回报:
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])
返回
HAM1 HAM2 HAM3 HAM4 HAM5 HAM6
Information Ratio: HAM1 Inf 1.373211 1.19553 0.6592017 0.2355561 1.66417
Inf 不是我所期望的。原来(浏览源代码后),它的起源包含在Return.excess()
:
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,最终导致除以零。
这是一个解决方法:
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])
返回
HAM1 HAM2 HAM3 HAM4 HAM5 HAM6
Information Ratio: zero 1.549119 1.373211 1.19553 0.6592017 0.2355561 1.66417
这是一个错误还是我错过了什么?如果是,我该如何举报?我无法通过此页面,没有任何错误跟踪器。我想写一封电子邮件,但我在这里见过开发人员,所以 SO post 可能是一个不错的选择,不是吗?