[R-SIG-Finance] RollingStyle in PApages?

Peter Carl peter at braverock.com
Wed Mar 7 13:01:42 CET 2012


Matt,

Thanks for this.  The package description notes that this code is
"considered EXPERIMENTAL CODE and WILL NOT BE SUPPORTED."  The shouting
parts of that statement should probably be interpreted as "much of it is
broken and is not being worked on or maintained currently."

Specifically, the style analysis parts are deprecated and will eventually
be replaced by functionality in FactorAnalytics.  The current style code
is proof of concept and should be taken with a large grain of salt.

Still, I appreciate your interest.  Feel free to contact me offline and
I'd be happy to discuss how to move forward.

pcc
-- 
Peter Carl
http://www.braverock.com/~peter

> 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
>
> _______________________________________________
> R-SIG-Finance at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-sig-finance
> -- Subscriber-posting only. If you want to post, subscribe first.
> -- Also note that this is not the r-help list where general R questions
> should go.
>



More information about the R-SIG-Finance mailing list