Series temporales y previsión en R
R dispone de amplias funciones para analizar datos de series temporales. Esta sección describe la creación de una serie temporal, la descomposición estacional, la modelización con modelos exponenciales y ARIMA, y la previsión con el paquete de previsión.
Crear una serie temporal
La función ts( ) convertirá un vector numérico en un objeto R de series temporales. El formato es ts(vector, inicio=, fin=, frecuencia=) donde inicio y fin son las horas de la primera y la última observación y frecuencia es el número de observaciones por unidad de tiempo (1=anual, 4=cuatrimestral, 12=mensual, etc.).
# save a numeric vector containing 72 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)
Descomposición estacional
Una serie temporal con componentes aditivos de tendencia, estacionales e irregulares puede descomponerse mediante la función stl(). Ten en cuenta que, a menudo, una serie con efectos multiplicativos puede transformarse en una serie con efectos aditivos mediante una transformación logarítmica (es decir, newts <- log(myts)).
# Seasonal decomposition
fit <- stl(myts, s.window="period")
plot(fit)
# additional plots
monthplot(myts)
library(forecast)
seasonplot(myts)
Modelos exponenciales
Tanto la función HoltWinters() de la instalación base, como la función ets() del paquete de previsión, pueden utilizarse para ajustar modelos exponenciales.
# 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
La función arima() puede utilizarse para ajustar un modelo autorregresivo de medias móviles integradas. Otras funciones útiles son:
lag(ts, k) | versión retardada de la serie temporal, desplazada hacia atrás k observaciones |
diff(ts, diferencias= d) | diferencia la serie temporal d veces |
ndiffs(ts) | Número de diferencias necesarias para alcanzar la estacionariedad (del paquete de previsiones ) |
acf(ts) | función de autocorrelación |
pacf(ts) | función de autocorrelación parcial |
adf.test(ts) | Prueba de Dickey-Fuller aumentada. Rechazar la hipótesis nula sugiere que una serie temporal es estacionaria (del paquete tseries ) |
Box.test(x, type="Ljung-Box") | Prueba de Pormanteau de que las observaciones del vector o serie temporal x son independientes |
Ten en cuenta que el paquete previsión tiene versiones algo más agradables de acf( ) y pacf() llamadas Acf() y Pacf() respectivamente.
# 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))
Previsión automatizada
El paquete de previsión proporciona funciones para la selección automática de modelos exponenciales y ARIMA. La función ets( ) admite modelos aditivos y multiplicativos. La función auto.arima() puede manejar modelos ARIMA estacionales y no estacionales. Los modelos se eligen para maximizar uno de varios criterios de ajuste.
library(forecast)
# Automated forecasting using an exponential model
fit <- ets(myts)
# Automated forecasting using an ARIMA model
fit <- auto.arima(myts)
Ir más lejos
Hay muchos buenos recursos en línea para aprender análisis de series temporales con R. Entre ellos están A little book of R for time series, de Avril Chohlan, y el curso de DataCamp Manipulating time series in R, de Jeffrey Ryan.