Time Series and Forecasting
R has extensive facilities for analyzing time series data. This section describes the creation of a time series, seasonal decompostion, modeling with exponential and ARIMA models, and forecasting with the forecast pacakge.
Creating a time series
The ts() function will convert a numeric vector into an R time series object. The format is ts(vector, start=, end=, frequency=) where start and end are the times of the first and last observation and frequency is the number of observations per unit time (1=annual, 4=quartly, 12=monthly, etc.).
# save a numeric vector containing 48 monthly observations
# from Jan 2009 to Dec 2014 as a time series object
myts <- ts(myvector, start=c(2009, 1), end=c(2014, 12), frequency=12)
# subset the time series (June 2014 to December 2014)
myts2 <- window(myts, start=c(2014, 6), end=c(2014, 12))
# plot series
A time series with additive trend, seasonal, and irregular components can be decomposed using the stl() function. Note that a series with multiplicative effects can often by transformed into series with additive effects through a log transformation (i.e., newts <- Both the HoltWinters() function in the base installation, and the ets() function in the forecast package, can be used to fit exponential models. The arima() function can be used to fit an autoregressive integrated moving averages model. Other useful functions include:
# Seasonal decompostion
fit <- stl(myts, s.window="period")
# additional plots
# simple exponential - models level
fit <- HoltWinters(myts, beta=FALSE, gamma=FALSE)
# double exponential - models level and trend
fit <- HoltWinters(myts, gamma=FALSE)
# triple exponential - models level, trend, and seasonal components
fit <- HoltWinters(myts)
# predictive accuracy
# predict next three future values
lagged version of time series, shifted back k observations
difference the time series d times
Number of differences required to achieve stationarity (from the forecast package)
partial autocorrelation function
Augemented Dickey-Fuller test. Rejecting the null hypothesis suggests that a time series is stationary (from the tseries package)
Pormanteau test that observations in vector or time series x are independent
Both the HoltWinters() function in the base installation, and the ets() function in the forecast package, can be used to fit exponential models.
The arima() function can be used to fit an autoregressive integrated moving averages model. Other useful functions include:
Note that the forecast package has somewhat nicer versions of
# fit an ARIMA model of order P, D, Q fit <- arima(myts, order=c(p, d, q) # predictive accuracy library(forecast) accuracy(fit) # predict next 5 observations library(forecast) forecast(fit, 5) plot(forecast(fit, 5))
The forecast package provides functions for the automatic selection of exponential and ARIMA models. The ets() function supports both additive and multiplicative models. The auto.arima() function can handle both seasonal and nonseasonal ARIMA models. Models are chosen to maximize one of several fit criteria.
library(forecast) # Automated forecasting using an exponential model fit <- ets(myts) # Automated forecasting using an ARIMA model fit <- auto.arima(myts)
There are many good online resources for learning time series analysis with R. These include A little book of R for time series by Avril Chohlan, and Forecasting: principles and practice by Rob Hyndman and George Athanasopoulos. Vito Ricci has created a time series reference card. There are also a time series tutorial by Walter Zucchini, Oleg Nenadic that is quite useful.
See also the comprehensive book Time Series Analysis and its Applications with R Examples by Robert Shunway and David Stoffer.