Rolling Correlation in R, Correlations between two-time series on a rolling window are known as rolling correlations.
Correlations in time series are extremely valuable since they may be used to model and forecast if a relationship exists. But there’s a catch: a correlation isn’t static! It evolves over time.
The rolling correlation is one of the most important calculations in time series analysis.
This sort of correlation has the advantage of allowing you to visualize the correlation between two-time series across time.
This article will show you how to use R to calculate rolling correlations.
Rolling Correlation in R
In R, how do you calculate rolling correlations?
Consider the following data frame, which shows the total profit for two separate products (x and y) over the course of a 12-month period:
Let’s create a data frame
tsData <- data.frame(month=1:12, x=c(9, 12, 20, 12, 14, 15, 18, 12, 27, 33, 35, 21), y=c(19, 36, 29, 26, 33, 18, 15, 28, 18, 19, 14, 25)) head(tsData) month x y 1 1 9 19 2 2 12 36 3 3 20 29 4 4 12 26 5 5 14 33 6 6 15 18
The rollapply() function from the zoo package can be used to calculate a rolling correlation in R.
The syntax for this function is as follows:
rollapply(data, width, FUN, by.column=TRUE)
data: The data frame’s name
width: The window width for the rolling correlation is specified as an integer.
FUN: The function that will be used.
by.column: Specifies whether the function should be applied to each column separately. This is TRUE by default, but we need to set it to FALSE to calculate a rolling correlation.
To compute the 3-month rolling correlation in sales between x and y, use the following formula:
library(zoo) rollapply(tsData, width=3, function(x) cor(x[,2],x[,3]), by.column=FALSE)
To calculate correlations, the width (i.e. the rolling window) should be 3 or more.
Because the two columns we wanted to calculate correlations between were in positions 2 and 3, we used cor(x[,2],x) in the calculations above.
If the columns you’re interested in are in different places, change these numbers.
 0.3602064 -0.2250176 0.1595863 -0.3634274 -0.7970168 -0.9549191 -0.6518694 -0.9316225  -0.5447048 -0.9431854
This function returns the three-month correlation between product profit x and y. Consider the following scenario:
The correlation in profit during months 1 through 3 was 0. 3602064.
The correlation in profit during months 2 through 4 was -0. 2250176.
The correlation in profit during months 3 through 5 was -0. 1595863.
And so forth.
This formula can simply be changed to determine the rolling correlation over a different time period.
The following code, for example, demonstrates how to compute the 5-month rolling correlation in profit between the two products:
rollapply(tsData, width=5, function(x) cor(x[,2],x[,3]), by.column=FALSE)  0.3781826 -0.1882708 -0.1850412 -0.7344118 -0.5643492 -0.4000877 -0.6476290 -0.9401665
For the last 5 months, this function returns the correlation between the two product profits. Consider the following scenario,
The correlation in profit during months 1 through 5 was 0. 3781826.
The correlation in profit during months 2 through 6 was -0. 1882708.
The correlation in profit during months 3 through 7 was -0. 1850412.
And so on.