# 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** package.

## 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

plot(myts)

## Seasonal Decomposition

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* <- *myts***)**).

```
# Seasonal decomposition
```

fit <- stl(myts, s.window="period")

plot(fit)

# additional plots

monthplot(myts)

library(forecast)

seasonplot(myts)

## Exponential Models

Both the **HoltWinters()** function in the base installation, and the **ets()** function in the forecast package, can be used to fit exponential models.

```
# 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

library(forecast)

accuracy(fit)

# predict next three future values

library(forecast)

forecast(fit, 3)

plot(forecast(fit, 3))

## ARIMA Models

The **arima()** function can be used to fit an autoregressive integrated moving averages model. Other useful functions include:

lag(ts, k) |
lagged version of time series, shifted back k observations |

diff(ts, differences=d) |
difference the time series d times |

ndiffs(ts) |
Number of differences required to achieve stationarity (from the forecast package) |

acf(ts) |
autocorrelation function |

pacf(ts) |
partial autocorrelation function |

adf.test(ts) |
Augemented Dickey-Fuller test. Rejecting the null hypothesis suggests that a time series is stationary (from the tseries package) |

Box.test(x, type="Ljung-Box") |
Pormanteau test that observations in vector or time series x are independent |

Note that the **forecast** package has somewhat nicer versions of **pacf()** called **Acf()** and **Pacf()** respectively.

```
# 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))

## Automated Forecasting

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)

## Going Further

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.