Estimate and Plot the Autocorrelation Function (ACF) in R

Your goal

You need to estimate and plot either the autocorrelation function (also known as a correlogram) or else the autocovariance function for time series data.

Step-by-step tutorial

Use the acf function from the stats package to estimate and plot the autocorrelation and autocovariance functions in R.

First, let's load some hygrometer data into a data frame, and plot it.

> hygrometer.df <- read.csv('hygrometer.csv')
> head(hygrometer.df)
       Interval Humidity.Average Temperature.Average
1 11/12/20 1:00         55.50117            21.93301
2 11/12/20 1:12         57.07868            19.70803
3 11/12/20 1:24         56.20748            19.85207
4 11/12/20 1:36         56.12080            19.87645
5 11/12/20 1:48         57.92270            19.32857
6 11/12/20 2:00         57.70622            19.19605
> temp <- hygrometer.df[, 'Temperature.Average']
> plot(temp, type='l')
Temperature time series

This time series has an obvious anomalous spike around index 100. This happened when I put the hygrometer in sleep mode by mistake. So let's subset the time series before we continue. The anomaly ends at index 109, so we'll remove elements 1-109 from the vector:

> temp.clean <- temp[-(1:109)]
> plot(temp.clean, type='l')
Cleaned-up temperature time series

Looks good, so let's estimate and plot both the autocorrelation and autocovariance functions.

Autocorrelation function

First, let's estimate and plot the autocorrelation function. The plot is also known as a correlogram.

> acf(temp.clean)
Temperature data ACF

Use the lag.max parameter to check for autocorrelation at larger lags. Since the data interval is 12 minutes and temperature data has a daily cycle, we expect to see peaks at multiples of 5 · 24 = 120. Set the lag.max parameter to 6 · 24 to check:

> acf(temp.clean, lag.max=6*24)
Temperature data ACF, larger lags

As expected, there's a peak at 120 lags.

Autocovariance function

You can also estimate and plot the autocovariance function:

> acf(temp.clean, type='covariance', lag.max=6*24)
Temperature data autocovariance function