Недавно я открыл для себя 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, вероятно, является хорошим вариантом, не так ли?