[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