[R-SIG-Finance] PerformanceAnalytics - Style Analysis- plotting R squared over time
Peter Carl
peter at braverock.com
Tue Sep 6 23:01:14 CEST 2011
Take a look at the code itself - it implements what you are asking for.
In particular, pay attention to the rollapply functions.
> page.RollingStyle
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))
result = rollapply(data = merged.assets, FUN = function(x) {
t(style.fit(R.fund = x[, 1, drop = FALSE], R.style = x[,
-1, drop = FALSE], method = method, leverage = leverage,
selection = selection)$weights)
}, width = width, by = 1, by.column = FALSE, na.pad = FALSE,
align = "right")
fit = rollapply(data = merged.assets, FUN = function(x) {
t(style.fit(R.fund = x[, 1, drop = FALSE], R.style = x[,
-1, drop = FALSE], method = method, leverage = leverage,
selection = selection)$R.squared)
}, width = width, 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 = F], 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)
}
--
Peter Carl
http://www.braverock.com/~peter
> Hi Carl,
>
> Many thanks for your quick reply. Just a follow up on this. While I have
> installed PA pages I wasn't too successful in finding further information
> in respect of implementing the function.page RollingStyle which would
> allow
> me to plot the R-squared over time for my returns based analysis
> (Sharpe-model).Would you mind pointing me to some further information?
>
> Also, is there a straightforward way to chart or calculate each factor
> weight
> so that the values can be read easily (while chart.RollingStyle. gives a
> good graphical impression of the styles, I'd also be interested in
> obtaining an idea of the exact weightings at some point in time, e.g.
> showing min/max over time and potentially also some kind of summary
> statistics like avg or sd of the style attributes)
>
> Some help on this would be awesome - thks.
>
> Phil
>> -------- Original-Nachricht --------
>> Datum: Tue, 6 Sep 2011 09:38:37 -0500
>> Von: "Peter Carl" <peter at braverock.com>
>> An: "Philipp Haumueller" <phaumueller at gmx.net>
>> CC: r-sig-finance at r-project.org
>> Betreff: Re: [R-SIG-Finance] PerformanceAnalytics - Style Analysis-
>> plotting R squared over time
>>
>> Phil,
>>
>> The function page.RollingStyle in PApages (also on RForge) shows
>> something
>> of a brute-force way to do it. I'm sure there's a better way, but that
>> should work for you.
>>
>> pcc
>> --
>> Peter Carl
>> http://www.braverock.com/~peter
>>
>> > Dear all,
>> >
>> > I am running some analysis based on an asset factor model (Sharpe
>> model
>> -
>> > Style Analyses) in the Package PerformanceAnalytics/R-Forge.While
>> > calculating weights etc. works fine I would also like to
>> calculate/plot
>> > rolling R-squared values of the Sharpe model over time? Are there any
>> > suggestions how to run this?
>> >
>> > Your help is greatly appreciated - thx,
>> >
>> > Phil
>> > --
>> >
>> >
>> >
>> > [[alternative HTML version deleted]]
>> >
>> > _______________________________________________
>> > 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.
>> >
>>
>>
>>
>
> --
> Empfehlen Sie GMX DSL Ihren Freunden und Bekannten und wir
> belohnen Sie mit bis zu 50,- Euro! https://freundschaftswerbung.gmx.de
>
More information about the R-SIG-Finance
mailing list