[R-SIG-Finance] RollingStyle in PApages?

Matt Considine matt at considine.net
Tue Mar 6 20:28:26 CET 2012


FWIW, this was the code that I eventually got to work 
(table.RollingStyle code was helpful here) :

page.RollingStyle2 <- function (R.fund, R.style, method = 
c("constrained", "unconstrained",
     "normalized"), leverage = FALSE, selection = "none", width = 12,
     main = paste(colnames(R.fund)[1], " Rolling ", width, "-Month Style 
Weights",
         sep = ""), space = 0, ...)
{
     R.fund = checkData(R.fund[, 1, drop = FALSE], method = "zoo")
     R.style = checkData(R.style, method = "zoo")
     method = method[1]
     columns.fund = ncol(R.fund)
     columns.style = ncol(R.style)
     columnnames.fund = colnames(R.fund)
     columnnames.style = colnames(R.style)
     merged.assets = na.omit(merge(R.fund, R.style))

     styleR <- function(x, method, leverage, selection) 
{t(style.fit(R.fund = x[, 1, drop = FALSE],
                                                 R.style = x[, -1, drop 
= FALSE],
                                                 method = method,
                                                 leverage = leverage,
                                                 selection = 
selection)$weights)}

     result = xts:::rollapply.xts(data = merged.assets,
                                 FUN = styleR,
                                 width = width,
                                 method = method,
                                 leverage = leverage,
                                 selection = selection,
                                 by = 1,
                                 by.column = FALSE,
                                 align = "right")

     styleRfit <- function(x, method, leverage, selection) 
{t(style.fit(R.fund = x[, 1, drop = FALSE],
                                                 R.style = x[, -1, drop 
= FALSE],
                                                 method = method,
                                                 leverage = leverage,
                                                 selection = 
selection)$R.squared)}

     fit = xts:::rollapply.xts(data = merged.assets,
                         FUN = styleRfit,
                         width = width,
                         method = method,
                         leverage = leverage,
                         selection = selection,
                         by = 1,
                         by.column = FALSE,
                         na.pad = FALSE,
                         align = "right")

     colnames(result) = columnnames.style
     rows = nrow(result)
     ymax = max(c(1, result))
     ymin = min(c(-1, result))
     op <- par(oma = c(2, 0, 4, 0), mar = c(0, 4, 0, 4))
     layout(matrix(c(1:columns.style, columns.style + 1, columns.style +
         2), nc = 1, byrow = TRUE))
     for (i in 1:columns.style) {
         if (even(i))
             yaxis.right = TRUE
         else yaxis.right = FALSE
         chart.TimeSeries(result[, i, drop = FALSE], type = "h", lend = 
"butt",
             xaxis = FALSE, main = "", ylab = colnames(result)[i],
             ylim = c(ymin, ymax), yaxis.right = yaxis.right,
             ...)
     }
     positives = result
     for (column in 1:ncol(result)) {
         for (row in 1:nrow(result)) {
             positives[row, column] = max(0, result[row, column])
         }
     }
     negatives = result
     for (column in 1:ncol(result)) {
         for (row in 1:nrow(result)) {
             negatives[row, column] = min(0, result[row, column])
         }
     }
     sumpositives = zoo(apply(positives, 1, sum), order.by = 
index(positives))
     sumnegatives = zoo(apply(negatives, 1, sum), order.by = 
index(negatives))
     net = apply(result, 1, sum)
     if (even(columns.style + 1))
         yaxis.right = TRUE
     else yaxis.right = FALSE
     chart.TimeSeries(cbind(sumpositives, sumnegatives), type = "h",
         lend = "butt", xaxis = FALSE, main = "", ylab = "Total",
         yaxis.right = yaxis.right, ...)
     lines(1:rows, net)
     if (even(columns.style + 2))
         yaxis.right = TRUE
     else yaxis.right = FALSE
     chart.TimeSeries(fit, type = "l", xaxis = TRUE, main = "",
         ylab = "AdjR^2", ylim = c(0, 1), yaxis.right = yaxis.right,
         ...)
     mtext(main, side = 3, outer = TRUE, font = 2, cex = 1.2,
         line = 1)
     par(op)
}

Regards,
Matt



More information about the R-SIG-Finance mailing list