Диаграммы PerformanceAnalytics. RollingRegression отображает начальные значения окна. Как сделать, чтобы этого не было?

Я использую пакет PerformanceAnalytics для анализа некоторых ежемесячных доходов. Графики charts.RollingRegression должны отображать скользящую регрессию за n месяцев по отношению к некоторому контрольному показателю. Данные представляют собой всего 6 серий возвратов с 8 апреля по декабрь 2014 года, которые пытаются регрессировать по отношению к SPY.

indexReturns <- read.table("quantIndices.csv", stringsAsFactors = FALSE, sep = ",", fill = TRUE, row.names = 1, header=TRUE)
hfIndexReturns <- read.table("quantHFIndices.csv", stringsAsFactors = FALSE, sep = ",", fill = TRUE, row.names = 1, header=TRUE)
peerReturns <- read.table("quantPeers.csv", stringsAsFactors = FALSE, sep = ",", fill = TRUE, row.names = 1, header=TRUE)

splits <- as.data.frame(strsplit(rownames(indexReturns), "/"))
rownames(indexReturns) <- unname(sapply(splits, function(x) paste0(x[3], "-", x[1], "-", x[2])))

splits <- as.data.frame(strsplit(rownames(peerReturns), "/"))
rownames(peerReturns) <- unname(sapply(splits, function(x) paste0(x[3], "-", x[1], "-", x[2])))

Ret <- xts(peerReturns, order.by = as.Date(row.names(peerReturns)))
Rb <- xts(indexReturns, order.by = as.Date(row.names(indexReturns)))

charts.RollingRegression(Ret, Rb[,2, drop = FALSE], Rf = 0.001, na.pad = TRUE)

В результате получается следующая диаграмма: введите здесь описание изображения

Я бы хотел, чтобы «бессмысленные» первые 12 месяцев были опущены, но документации о том, как это делается, нет, и любое другое изображение этой диаграммы, которое я могу найти, выглядит так: введите здесь описание изображения

Глядя на исходник, в основном мясе функции вижу:

for (column.a in 1:columns.a) {
    for (column.b in 1:columns.b) {
        merged.assets = merge(Ra.excess[, column.a, drop = FALSE], 
            Rb.excess[, column.b, drop = FALSE])
        if (attribute == "Alpha") 
            column.result = rollapply(na.omit(merged.assets), 
              width = width, FUN = function(x) lm(x[, 1, 
                drop = FALSE] ~ x[, 2, drop = FALSE])$coefficients[1], 
              by = 1, by.column = FALSE, fill = na.pad, align = "right")
        if (attribute == "Beta") 
            column.result = rollapply(na.omit(merged.assets), 
              width = width, FUN = function(x) lm(x[, 1, 
                drop = FALSE] ~ x[, 2, drop = FALSE])$coefficients[2], 
              by = 1, by.column = FALSE, fill = na.pad, align = "right")
        if (attribute == "R-Squared") 
            column.result = rollapply(na.omit(merged.assets), 
              width = width, FUN = function(x) summary(lm(x[, 
                1, drop = FALSE] ~ x[, 2, drop = FALSE]))$r.squared, 
              by = 1, by.column = FALSE, align = "right")
        column.result.tmp = xts(column.result)
        colnames(column.result.tmp) = paste(columnnames.a[column.a], 
            columnnames.b[column.b], sep = " to ")
        column.result = xts(column.result.tmp, order.by = time(column.result))
        if (column.a == 1 & column.b == 1) 
            Result.calc = column.result
        else Result.calc = merge(Result.calc, column.result)
    }
}

И мы видим, что в последнюю функцию «R-Squared» не передается na.pad, что приводит к графику, который я ожидал увидеть для первых двух графиков. Я хотел бы это исправить, но не могу редактировать код пакета. Я пытался использовать «assignInNamespace», но это не сработало. Функция вроде работает, но код функции в пакете не меняется. Я также хотел бы удалить начальное пустое пространство на графиках, но если вы, ребята, могли бы сообщить мне, как это изменить, или знаете какие-либо обходные пути, пожалуйста, дайте мне знать. (И спасибо! Вы, ребята, боги!)

ОЙ! И PS - Почему, черт возьми, моя версия пакета кажется единственной, в которой есть эта проблема??? Почему мои графики по умолчанию выглядят неправильно?

РЕДАКТИРОВАТЬ: Это не единственный подозрительный фрагмент кода из этого пакета. У меня постоянно что-то ломается и не работает, как это, кажется, задокументировано (Error in R[, nc] - coredata(Rf) : non-numeric argument to binary operator, кажется, происходит с каждым другим вызовом функции). У кого-нибудь есть какие-либо предложения по лучшим пакетам для этого типа вещей?


person lukehawk    schedule 10.03.2015    source источник


Ответы (2)


Подмножество данных должно быть выполнено до перехода к функции charts.RollingRegression. Могучий xts обеспечивает эту функциональность:

charts.RollingRegression(Ret["2009-04::",], Rb["2009-04::",2, drop = FALSE], Rf = 0.001, na.pad = TRUE)

Вы можете узнать больше о том, как создать подмножество с помощью xts, посмотрев страницу справки в R через ?subset.xts.

person charliebone    schedule 10.03.2015
comment
Спасибо. Я могу подмножить данные перед тем, как передать их, но я все равно столкнусь с пустым пространством на графике из-за NA, сгенерированного тем фактом, что «fill = na.pad» отсутствует для третьего вызова функции диаграммы. - person lukehawk; 10.03.2015

Давайте немного разберем это: charts.RollingRegression — это просто оболочка для расчета скользящей бета-версии, а затем ее построения.

Вот пример со скользящими альфа- и бета-версиями:

require(PerformanceAnalytics)
data(managers)
capm_xts = xts(matrix(nrow=nrow(managers),ncol=2),order.by=index(managers))
for(i in 12:nrow(managers)){
  capm_xts[i,] = coef(lm(managers[(i-11):i,1]~managers[(i-11):i,4]))
}
colnames(capm_xts) = c('alpha','beta')
chart.TimeSeries(capm_xts[12:nrow(capm_xts),2])
person Kyle Balkissoon    schedule 10.03.2015
comment
Спасибо. Я могу создать большинство этих графиков самостоятельно, но я тратил слишком много времени на то, чтобы графики выглядели красиво, и не делал ничего значимого. Я использовал пакет PerformanceAnalytics как способ получить несколько довольно стандартных, прилично выглядящих графиков информации, которые могут оказаться полезными. По сути, я пытался не изобретать велосипед. Мне больше всего любопытно, почему этот пакет так широко используется, но многие его функции кажутся удивительно хрупкими. - person lukehawk; 10.03.2015
comment
Я бы проверил xtsExtra (github.com/joshuaulrich/xtsExtra) и dygraphs, если вы ищете хорошая визуализация, для меня основным вариантом использования PerformanceAnalytics являются все вычисления, которые он может выполнять, функции достаточно надежны, если у вас есть хорошие входные данные. - person Kyle Balkissoon; 10.03.2015