Столкновение имен столбцов в PerformanceAnalytics

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


person tonytonov    schedule 04.12.2013    source источник


Ответы (1)


Rb не должен быть скаляром, это должен быть временной ряд.

Rb описывается в документации как

Rb: return vector of the benchmark asset

Поэтому я полагаю, что документация может быть более ясной, я постараюсь улучшить ее, чтобы указать временной ряд. Нам нужно объединить временной ряд эталонной доходности с временным рядом доходности активов, чтобы выполнить расчет.

вот рабочий пример с вводом временных рядов для Rb:

data(managers)
rb<-xts( rep(0,nrow(managers)), order.by=index(managers) )
colnames(rb)<-'zero'
InformationRatio(managers,rb)

производит:

                            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 следует отправлять на веб-сайт пакета или сопровождающему пакету. электронная почта была бы в порядке. SO следует использовать для вопросов об использовании, а не для отчетов об ошибках, поскольку ошибки исправляются, а SO остается с устаревшими данными.

person Brian G. Peterson    schedule 04.12.2013