Séries temporelles et prévisions en R
R dispose de nombreux outils pour analyser les données de séries temporelles. Cette section décrit la création d'une série temporelle, la décomposition saisonnière, la modélisation avec les modèles exponentiels et ARIMA, et les prévisions avec le module de prévision.
Création d'une série temporelle
La fonction ts() convertit un tableau numérique en un objet de série temporelle R. Le format est ts(vector, start=, end=, frequency=) où start et end sont les heures de la première et de la dernière observation et où frequency est le nombre d'observations par unité de temps (1=annuel, 4=quotidien, 12=mensuel, 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)
Décomposition saisonnière
Une série temporelle avec des tendances additives, des composantes saisonnières et irrégulières peut être décomposée à l'aide de la fonction stl(). Notez qu'une série avec des effets multiplicatifs peut souvent être transformée en série avec des effets additifs par le biais d'une transformation logarithmique (c.-à-d., newts <- log(myts)).
# Seasonal decomposition
fit <- stl(myts, s.window="period")
plot(fit)
# additional plots
monthplot(myts)
library(forecast)
seasonplot(myts)
Modèles exponentiels
La fonction HoltWinters() de l'installation de base et la fonction ets() du module de prévision peuvent toutes deux être utilisées pour ajuster des modèles exponentiels.
# 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))
Modèles ARIMA
La fonction arima() peut être utilisée pour ajuster un modèle de moyennes mobiles intégrées autorégressives. Parmi les autres fonctions utiles, citons
lag(ts, k) | version retardée de la série temporelle, décalée de k observations |
diff(ts, differences= d) | différence entre les séries temporelles d fois |
ndiffs(ts) | Nombre de différences nécessaires pour atteindre la stationnarité (à partir du module de prévision ) |
acf(ts) | fonction d'autocorrélation |
pacf(ts) | fonction d'autocorrélation partielle |
adf.test(ts) | Test de Dickey-Fuller amélioré. Le rejet de l'hypothèse nulle suggère qu'une série temporelle est stationnaire (à partir du package tseries ) |
Box.test(x, type="Ljung-Box") | Test de Pormanteau selon lequel les observations d'un vecteur ou d'une série temporelle x sont indépendantes |
Notez que le module de prévision possède des versions plus agréables de acf() et pacf() appelées respectivement Acf() et Pacf().
# 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))
Prévisions automatisées
Le module de prévision fournit des fonctions pour la sélection automatique des modèles exponentiels et ARIMA. La fonction ets() prend en charge les modèles additifs et multiplicatifs. La fonction auto.arima() peut traiter les modèles ARIMA saisonniers et non saisonniers. Les modèles sont choisis pour maximiser l'un des critères d'adéquation.
library(forecast)
# Automated forecasting using an exponential model
fit <- ets(myts)
# Automated forecasting using an ARIMA model
fit <- auto.arima(myts)
Aller plus loin
Il existe de nombreuses bonnes ressources en ligne pour apprendre l'analyse des séries temporelles avec R. Il s'agit notamment de A little book of R for time series par Avril Chohlan et du cours manipuler les séries temporelles en R de DataCamp par Jeffrey Ryan.