[R-SIG-Finance] PerformanceAnalytics - Style Analysis- plotting R squared over time

Kent Russell kent.russell at live.com
Wed Sep 7 13:28:26 CEST 2011


I got the same error and data is definitely xts.  I will try to debug today.  Looks like my function works fine on a cumulative basis or if I use for loop but does not work with rollapply.

Kent

On Sep 7, 2011, at 6:13 AM, "Peter Carl" <peter at braverock.com> wrote:

> Phil,
> 
> I think the error message is clear - the data series you're using as the
> "fund" data, Rfund.z, isn't being recognized as a format that is
> convertible to a time series object (for conversion into an xts object). 
> Look at ?as.xts and consider constructing xts objects for both timeseries.
> Or you might use Return.read from PerformanceAnalytics to load the series
> in from a csv file.
> 
> pcc
> -- 
> Peter Carl
> http://www.braverock.com/~peter
> 
>> Many thanks. I tried to implement this, but still seem to miss something.
>> 
>> Here's a contrived example.Using 10.5 years of monthly fund data, I use
>> a stock market and a real estate index to "explain" the returns of the
>> fund. What I would like to do is to plot the R-squared over time with the
>> function.RollingStyle I proceed as follows:
>> Â 
>> head(Rfund.z)
>> Â  2000-01-31Â Â  2000-03-02Â Â  2000-03-31Â Â  2000-05-01Â Â 
>> 2000-05-31Â Â  2000-07-01
>> -0.033951898Â  0.052783466 -0.020335698 -0.006613730Â  0.008663712Â 
>> 0.091497179
>> 
>> Â head(Rstyle.z)
>>                Stocks.z        RE.z
>> 2000-01-31 -0.058851033Â  0.01968497
>> 2000-03-02Â  0.002817568 -0.03427083
>> 2000-03-31Â  0.066951099Â  0.06969885
>> 
>> Applying the page.RollingStyle function yields an error message
>> 
>>> page.RollingStyle (Rfund.z, Rstyle.z, method="constrained",
>> leverage=FALSE)
>> 
>> Error in checkData(R.fund) :
>>   The data cannot be converted into a time series.  If you are trying to
>> pass in names from a data object with one column, you should use the form
>> 'data[rows, columns, drop = FALSE]'.  Rownames should have standard date
>> formats, such as '1985-03-15'.
>> In addition: Warning message:
>> In rollapply.zoo(data = merged.assets, FUN = function(x) { :
>> Â  na.pad argument is deprecated
>> 
>> 
>> Would be great, if someone could provide me with a brief explanation of
>> what exactly is going wrong here. Many thanks, Cheers,
>> Phil
>> 
>> 
>> 
>> 
>>> 
>>> -------- Original-Nachricht --------
>>> Datum: Tue, 6 Sep 2011 16:01:14 -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
>>> 
>>>            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
>>>> 
>>> 
>>> 
>>> 
>> 
>> --
>> Empfehlen Sie GMX DSL Ihren Freunden und Bekannten und wir
>> belohnen Sie mit bis zu 50,- Euro! https://freundschaftswerbung.gmx.de
>> 
> 
> _______________________________________________
> 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