[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