[R-SIG-Finance] PerformanceAnalytics - Style Analysis- plotting R squared over time
Peter Carl
peter at braverock.com
Wed Sep 7 15:00:33 CEST 2011
The error, "The data cannot be converted into a time series," is thrown by
checkData, a function that makes sure the data is xtsible. It won't throw
the error if it is a timeseries that can be converted to xts. If you are
seeing a different error, please follow the posting guidelines and provide
a reproducible example.
pcc
--
Peter Carl
http://www.braverock.com/~peter
> 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