Mathematica Rolling Correlation Function

Rolling Correlation

This is a quick post, with a little code snippit I found useful. I'm a big Mathematica user and found that surprisingly, Mathematica doesn't have a function for rolling correlations on time series. For instance, suppose I have two daily stock prices and I want to see a 30d rolling window of how they're correlated - no function (that I could find exists).

RollingCorrelation[ts1_, ts2_, windowsize_] := TimeSeries[
  MapThread[
   Correlation[#1, #2] &, {
    Table[
     ts1["Values"][[n - windowsize ;; n]], {n, windowsize + 1, 
      Length[ts1["Values"]]}],
    Table[
     ts2["Values"][[n - windowsize ;; n]], {n, windowsize + 1, 
      Length[ts2["Values"]]}]
    }
   ], {ts1["Times"][[windowsize + 1 ;; Length[ts1["Times"]]]]}
  ]

Inputs into the function are two time series objects and the # of days you want this rollover. So if it's 30, at each point it will compute the correlation for the past 30 days.

Code in Use

Here's a quick example which does two stock prices:

yelp = TimeSeries[FinancialData["F", "2014-06-01"]]
twtr = TimeSeries[FinancialData["GM", "2014-06-01"]]
DateListPlot[RollingCorrelation[yelp, twtr, 28],
 PlotLabel -> "Ford vs GM 28d Rolling Correlations",
 Filling -> Axis]

Which gives us this chart

Rolling Correlation

Interesting drop in Q2-3 2015 where the correlation flips on the two stocks.

comments powered by Disqus