Open In App

How to Calculate Autocorrelation in Python?

Correlation generally determines the relationship between two variables. Correlation is calculated between the variable and itself at previous time steps, such a correlation is called Autocorrelation.

Method 1 : Using lagplot()

The daily minimum temperatures dataset is used for this example. As the first step, the autocorrelation can be quickly checked using lagplot() function provided by pandas.



Syntax:

pd.plotting.lag_plot(data, lag=1)

where,



Data Used: daily-minimum-temperatures-in-blr




# import modules
import pandas as pd
 
# read the data from the csv
data = pd.read_csv("daily-minimum-temperatures-in-blr.csv",
                   header=0, index_col=0, parse_dates=True,
                   squeeze=True)
 
# display top 15 data
data.head(15)
 
# lagplot
pd.plotting.lag_plot(data, lag=1)

Output:

Method 2: Creating lagged variables at different time steps

As we are aware of the fact that, the values of the observation at the current and previous time steps are significant in predicting the future step, let’s create lagged variables at different timesteps say, t+1, t+2, t+3. This is done using pandas.concat() and shift() function. Shift function shifts the timestep by a specified value and the Concat function joins the lagged variables at different timesteps as shown below.  

Use pandas.corr() function on the new dataframe to calculate the correlation matrix.

Syntax:

pandas.DataFrame.corr(method = 'pearson')

where, method – pearson which is for calculating the standard correlation coefficient

 Example:   




data = pd.read_csv("daily-minimum-temperatures-in-blr.csv",
                   header=0, index_col=0, parse_dates=True,
                   squeeze=True)
 
# extracting only the temperature values
values = pd.DataFrame(data.values)
 
# using shift function to shift the values.
dataframe = pd.concat([values.shift(3), values.shift(2),
                       values.shift(1), values], axis=1)
# naming the columns
dataframe.columns = ['t', 't+1', 't+2', 't+3']
 
# using corr() function to compute the correlation
result = dataframe.corr()
 
print(result)

Output:

Method 3: Using plot_acf()

A plot of the autocorrelation of a time series by lag is called the AutoCorrelation Function (ACF). Such a plot is also called a correlogram. A correlogram plots the correlation of all possible timesteps. The lagged variables with the highest correlation can be considered for modeling. Below is an example of calculating and plotting the autocorrelation plot for the dataset chosen. 

Statsmodel library provides a function called plot_acf() for this purpose.

Syntax:

statsmodels.graphics.tsaplots.plot_acf(x,lags,alpha)

where,

Example:




# import the required modules
import pandas as pd
from statsmodels.graphics.tsaplots import plot_acf
 
# read the csv data
data = pd.read_csv("daily-minimum-temperatures-in-blr.csv",
                   header=0, index_col=0, parse_dates=True,
                   squeeze=True)
 
# plot the auto correlation
plot_acf(data)

Output:


Article Tags :