Une série temporelle est une séquence de données qui est enregistrée et organisée dans l’ordre chronologique. Elle est généralement collectée à des intervalles réguliers, tels que toutes les heures, tous les jours, tous les mois, etc. Chaque observation dans une série temporelle est associée à un moment spécifique dans le temps.
Les séries temporelles sont couramment utilisées dans de nombreux domaines, tels que l’économie, les sciences sociales, la météorologie, la finance et l’analyse des données. Elles permettent d’analyser et de modéliser le comportement d’une variable au fil du temps, en identifiant les tendances, les motifs saisonniers, les cycles ou les événements spécifiques.
L’analyse des séries temporelles comprend souvent des méthodes telles que la visualisation graphique des données, la détection des valeurs aberrantes, la modélisation des tendances et des composantes saisonnières, ainsi que la prévision des valeurs futures. Ces techniques sont utilisées pour extraire des informations utiles à partir des données temporelles et pour prendre des décisions éclairées basées sur les modèles identifiés dans la série temporelle.
Voici quelques exemples courants de séries temporelles :
Données météorologiques : Les mesures quotidiennes de température, d’humidité, de précipitations, de vent, etc., enregistrées à des intervalles réguliers sur une période de temps donnée.
Données financières : Les cours de clôture des actions ou des indices boursiers, les taux de change des devises, les prix des matières premières, enregistrés quotidiennement, hebdomadairement ou mensuellement.
Données de vente : Les ventes quotidiennes, hebdomadaires ou mensuelles d’un produit ou d’un service spécifique dans un magasin ou en ligne.
Données de trafic : Le nombre de véhicules traversant un point spécifique d’une autoroute à des intervalles réguliers pendant la journée.
Données démographiques : La population d’une ville, d’un pays ou d’une région enregistrée chaque année ou à des intervalles réguliers.
Données de consommation énergétique : La consommation d’électricité ou de carburant enregistrée chaque heure, chaque jour ou chaque mois.
Données de santé : Les mesures quotidiennes de la pression artérielle d’un patient, les niveaux de glucose dans le sang, les relevés de fréquence cardiaque, etc.
Ces exemples illustrent comment une série temporelle peut représenter différentes variables et être collectée à différents intervalles en fonction du contexte spécifique.
Les principales caractéristiques d’une série temporelle sont les suivantes :
Ordre chronologique : Les observations dans une série temporelle sont enregistrées dans un ordre séquentiel, généralement de manière régulière, en fonction du temps. L’ordre des observations est essentiel pour analyser et modéliser correctement la série temporelle.
Dépendance temporelle : Les observations d’une série temporelle sont généralement interdépendantes, ce qui signifie que la valeur d’une observation est influencée par les observations précédentes ou futures. Cette dépendance temporelle est une caractéristique clé des séries temporelles.
Tendance : La tendance représente la direction générale dans laquelle la série temporelle évolue sur une période de temps prolongée. Elle peut être ascendante (croissante), descendante (décroissante) ou stable. La tendance peut être linéaire ou non linéaire.
Saisonnalité : La saisonnalité se réfère aux variations cycliques régulières qui se produisent dans la série temporelle à des intervalles de temps fixes, tels que des modèles saisonniers hebdomadaires, mensuels ou annuels. Les motifs saisonniers peuvent être dus à des facteurs tels que les variations climatiques, les comportements d’achat saisonniers, etc.
Variabilité : La variabilité fait référence à l’amplitude des fluctuations et des écarts dans la série temporelle. Une série temporelle peut avoir une variabilité élevée avec des fluctuations importantes, ou une variabilité faible avec des valeurs plus constantes.
Bruit : Le bruit représente les variations aléatoires et non systématiques présentes dans la série temporelle. Il peut être dû à des facteurs imprévisibles, des erreurs de mesure ou d’autres influences aléatoires. Le bruit peut rendre l’analyse et la modélisation de la série temporelle plus complexes.
Stationnarité : La stationnarité se réfère à une propriété souhaitable d’une série temporelle, où les propriétés statistiques de la série ne varient pas avec le temps. La stationnarité facilite l’analyse et la modélisation des séries temporelles car elle permet d’appliquer des méthodes et des modèles qui reposent sur des hypothèses stationnaires.
Ces caractéristiques aident à comprendre le comportement et les modèles sous-jacents d’une série temporelle, et elles sont prises en compte lors de l’analyse, de la modélisation et de la prévision des données temporelles.
ts dans RDans R, il existe plusieurs classes pour représenter des objets de
série chronologique. Parmi ces classes, ts est l’un des
principaux formats principalement en raison de sa simplicité et de la
large adoption de cette classe par les principaux packages de R pour
l’analyse des séries temporelles.
# Chargement de la série sur la consommation totale mensuelle de gas naturel aux USA
data(USgas)
# Affichage des données
USgas
## Jan Feb Mar Apr May Jun Jul Aug Sep Oct
## 2000 2510.5 2330.7 2050.6 1783.3 1632.9 1513.1 1525.6 1653.1 1475.0 1567.8
## 2001 2677.0 2309.5 2246.6 1807.2 1522.4 1444.4 1598.1 1669.2 1494.1 1649.1
## 2002 2487.6 2242.4 2258.4 1881.0 1611.5 1591.4 1748.4 1725.7 1542.2 1645.9
## 2003 2700.5 2500.3 2197.9 1743.5 1514.7 1368.4 1600.5 1651.6 1428.6 1553.2
## 2004 2675.8 2511.1 2100.9 1745.2 1573.0 1483.7 1584.9 1578.0 1482.2 1557.2
## 2005 2561.9 2243.0 2205.8 1724.9 1522.6 1534.1 1686.6 1695.1 1422.5 1428.2
## 2006 2165.3 2144.4 2126.4 1681.0 1526.3 1550.9 1758.7 1751.7 1462.1 1644.2
## 2007 2475.6 2567.0 2128.8 1810.1 1559.1 1555.2 1659.9 1896.1 1590.5 1627.8
## 2008 2734.0 2503.4 2278.2 1823.9 1576.4 1604.2 1708.6 1682.9 1460.9 1635.8
## 2009 2729.7 2332.5 2170.7 1741.3 1504.0 1527.8 1658.0 1736.5 1575.0 1666.5
## 2010 2809.8 2481.0 2142.9 1691.8 1617.3 1649.5 1825.8 1878.9 1637.5 1664.9
## 2011 2888.6 2452.4 2230.5 1825.0 1667.4 1657.3 1890.5 1891.8 1655.6 1744.5
## 2012 2756.2 2500.7 2127.8 1953.1 1873.8 1868.4 2069.8 2008.8 1807.2 1901.1
## 2013 2878.8 2567.2 2521.1 1967.5 1752.5 1742.9 1926.3 1927.4 1767.0 1866.8
## 2014 3204.1 2741.2 2557.9 1961.7 1810.2 1745.4 1881.0 1933.1 1809.3 1912.8
## 2015 3115.0 2925.2 2591.3 2007.9 1858.1 1899.9 2067.7 2052.7 1901.3 1987.3
## 2016 3091.7 2652.3 2356.3 2083.8 1965.8 2000.7 2186.6 2208.4 1947.8 1925.2
## 2017 2914.2 2340.6 2523.7 1932.5 1892.5 1910.9 2142.1 2094.3 1920.9 2032.0
## 2018 3335.0 2705.9 2792.6 2346.3 2050.9 2058.7 2344.6 2307.7 2151.5 2279.1
## 2019 3399.9 2999.2 2899.9 2201.1 2121.0 2115.2 2407.5 2437.2 2215.6 2472.3
## Nov Dec
## 2000 1908.5 2587.5
## 2001 1701.0 2120.2
## 2002 1913.6 2378.9
## 2003 1753.6 2263.7
## 2004 1782.8 2327.7
## 2005 1663.4 2326.4
## 2006 1765.4 2122.8
## 2007 1834.5 2399.2
## 2008 1868.9 2399.7
## 2009 1776.2 2491.9
## 2010 1973.3 2714.1
## 2011 2031.9 2541.9
## 2012 2167.8 2503.9
## 2013 2316.9 2920.8
## 2014 2357.5 2679.2
## 2015 2249.1 2588.2
## 2016 2159.4 2866.3
## 2017 2357.7 3084.5
## 2018 2709.9 2993.1
## 2019
class(USgas)
## [1] "ts"
USgas est bel et bien un objet time serie (“ts”).
plot.ts(
USgas,
main = "Consommation totale mensuelle de Gas naturel aux USA entre 2000 et 2019",
ylab = "Milliard de pieds cubes"
)
# Nombre d'observations
length(USgas)
## [1] 238
La fonction ts_info() du package TSstudio
fournit un résumé des caractéristiques de la série temporelle :
ts_info(USgas)
## The USgas series is a ts object with 1 variable and 238 observations
## Frequency: 12
## Start time: 2000 1
## End time: 2019 10
Il existe une hypothèse pour créer des modèles de séries chronologiques. Les données doivent être stationnaires. Les données stationnaires existent lorsque leur moyenne et leur variance ne changent pas en fonction du temps. Si vous décomposez une série chronologique et observez une tendance, une composante saisonnière ou les deux, vous disposez de données non stationnaires. Vous pouvez les transformer en données stationnaires afin de répondre à l’hypothèse requise.
my_ts <- ts(
data = 1:60, # Valeurs de la série
start = c(2010, 1), # Le temps de la première observation
end = c(2014, 12), # Le temps de la dernière observation
frequency = 12 # La fréquence de la série
)
my_ts
## Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
## 2010 1 2 3 4 5 6 7 8 9 10 11 12
## 2011 13 14 15 16 17 18 19 20 21 22 23 24
## 2012 25 26 27 28 29 30 31 32 33 34 35 36
## 2013 37 38 39 40 41 42 43 44 45 46 47 48
## 2014 49 50 51 52 53 54 55 56 57 58 59 60
# Caractéristiques de l'objet my_ts
ts_info(my_ts)
## The my_ts series is a ts object with 1 variable and 60 observations
## Frequency: 12
## Start time: 2010 1
## End time: 2014 12
EN réalité, il est fort probable que les données brutes ne soient pas au format ts et certaines étapes de prétraitement peuvent être nécessaires avant de les transformer en objet ts. Dans l’exemple ci-dessous, nous allons voir comment transformer en un objet ts une dataframe présentant un horodatage au format date :
# Chargement du jeu de données US_indicators (package TSstudio)
data(US_indicators)
# Affichage
head(US_indicators)
## Date Vehicle Sales Unemployment Rate
## 1 1976-01-31 885.2 8.8
## 2 1976-02-29 994.7 8.7
## 3 1976-03-31 1243.6 8.1
## 4 1976-04-30 1191.2 7.4
## 5 1976-05-31 1203.2 6.8
## 6 1976-06-30 1254.7 8.0
# Structure du jeu de données
str(US_indicators)
## 'data.frame': 528 obs. of 3 variables:
## $ Date : Date, format: "1976-01-31" "1976-02-29" ...
## $ Vehicle Sales : num 885 995 1244 1191 1203 ...
## $ Unemployment Rate: num 8.8 8.7 8.1 7.4 6.8 8 7.8 7.6 7.4 7.2 ...
L’ensemble de données US_indicators est une dataframe
comportant deux séries : les ventes mensuelles totales de véhicules et
le taux de chômage aux États-Unis. De plus, les données incluent
l’horodatage des deux séries au format date.
Supposons que nous voulons convertir la variable Vehicle Sales en un objet ts :
# Extraction
vehicle_sales <- US_indicators %>%
select(Date, `Vehicle Sales`) %>%
arrange(Date)
head(vehicle_sales)
## Date Vehicle Sales
## 1 1976-01-31 885.2
## 2 1976-02-29 994.7
## 3 1976-03-31 1243.6
## 4 1976-04-30 1191.2
## 5 1976-05-31 1203.2
## 6 1976-06-30 1254.7
Avant de convertir une dataframe (ou un tibble) en un objet
ts, il faut arranger la variable indiquant le temps dans l’ordre
chronologique. C’est ce qui a été effectué avec la fonction
arrange().
start (ou
end) et frequency de l’objet tspoint_depart <- c(year(min(vehicle_sales$Date)), month(min(vehicle_sales$Date)))
print(point_depart) # La série a commencer en Janvier 1976
## [1] 1976 1
frequence <- 12 # Il s'agit s'une série au pas mensuel donc la fréquence est 12
vehicle_sales_ts <- ts(
data = vehicle_sales$`Vehicle Sales`,
start = point_depart,
frequency = frequence
)
ts_info(vehicle_sales_ts)
## The vehicle_sales_ts series is a ts object with 1 variable and 528 observations
## Frequency: 12
## Start time: 1976 1
## End time: 2019 12
head(vehicle_sales_ts)
## Jan Feb Mar Apr May Jun
## 1976 885.2 994.7 1243.6 1191.2 1203.2 1254.7
Il est également possible de convertir toute la dataframe
US_indicators en un objet mts (Multivariate Time
Serie) c’est-à-dire un objet ts avec au moins 2 variables. Le processus
est le même que précédemment :
US_indicators_ts <- US_indicators %>%
arrange(Date) %>%
select(-Date)
US_indicators_ts <- ts(
data = US_indicators_ts[, names(US_indicators_ts)],
start = point_depart,
frequency = frequence
)
ts_info(US_indicators_ts)
## The US_indicators_ts series is a mts object with 2 variables and 528 observations
## Frequency: 12
## Start time: 1976 1
## End time: 2019 12
head(US_indicators_ts)
## Vehicle Sales Unemployment Rate
## Jan 1976 885.2 8.8
## Feb 1976 994.7 8.7
## Mar 1976 1243.6 8.1
## Apr 1976 1191.2 7.4
## May 1976 1203.2 6.8
## Jun 1976 1254.7 8.0
L’une des manipulations courantes appliquée sur une série temporelle
est l’extraction d’un sous-ensemble de cette série afin d’effectuer
l’analyse des données sur une période précise. Cette opération peut être
réalisée grâce à la fonction window() du package
stats :
# Extraction des données sur la Consommation totale mensuelle
# de Gas naturel aux USA entre Janvier 2010 et Avril 2015
window(USgas, start = c(2010, 1), end = c(2015, 4))
## Jan Feb Mar Apr May Jun Jul Aug Sep Oct
## 2010 2809.8 2481.0 2142.9 1691.8 1617.3 1649.5 1825.8 1878.9 1637.5 1664.9
## 2011 2888.6 2452.4 2230.5 1825.0 1667.4 1657.3 1890.5 1891.8 1655.6 1744.5
## 2012 2756.2 2500.7 2127.8 1953.1 1873.8 1868.4 2069.8 2008.8 1807.2 1901.1
## 2013 2878.8 2567.2 2521.1 1967.5 1752.5 1742.9 1926.3 1927.4 1767.0 1866.8
## 2014 3204.1 2741.2 2557.9 1961.7 1810.2 1745.4 1881.0 1933.1 1809.3 1912.8
## 2015 3115.0 2925.2 2591.3 2007.9
## Nov Dec
## 2010 1973.3 2714.1
## 2011 2031.9 2541.9
## 2012 2167.8 2503.9
## 2013 2316.9 2920.8
## 2014 2357.5 2679.2
## 2015
Les séries chronologiques peuvent contenir de grandes observations couvrant de nombreuses années. Vous voudrez peut-être travailler sur une partie spécifique de la série chronologique ; par exemple, trouver les ventes des 3 premiers mois, ou les ventes des 3 derniers mois, ou les ventes entre 2007 et 2009, etc. Cette section explorera différentes manières d’obtenir les données ou sous-ensembles requis ou souhaités à partir de la série chronologique.
# Un autre exemple : cours de l'action d'une entreprise
# dans la fourchette de 2 500 à 4 000 à partir de 2011
my_vector = sample(2500:4000, 72, replace=T)
my_series = ts(my_vector, start=c(2011,1), end=c(2016,12), frequency = 12)
my_series
## Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
## 2011 3860 3445 2962 2702 3991 3825 3461 3014 3324 3898 3385 3034
## 2012 2731 2993 2647 3476 3476 3274 3292 3481 2677 3123 3352 2741
## 2013 3477 3957 3794 3077 3702 3372 3142 3881 2863 3862 3996 3484
## 2014 3262 3682 3480 3189 3225 2539 3025 2797 2702 2611 3815 3395
## 2015 3289 2929 2527 3205 2554 3702 3659 3144 3004 3254 2553 3235
## 2016 3339 3464 3041 3077 3001 3886 3954 3536 3184 3577 3396 2514
first(my_series) # fonction de dplyr
## [1] 3860
last(my_series) # fonction de dplyr
## [1] 2514
Par exemple, utilisons la fonction d’agrégation
aggregate () du package stats pour transformer la
série USgas d’une fréquence trimestrielle en une fréquence
annuelle :
# Consommation annuelle de Gas naturel aux USA entre 2000 et 2018
USgas_year <- aggregate(USgas, nfrequency = 1, FUN = "sum")
USgas_year
## Time Series:
## Start = 2000
## End = 2018
## Frequency = 1
## [1] 22538.6 22238.8 23027.0 22276.5 22402.5 22014.5 21699.2 23103.8 23276.9
## [10] 22910.1 24086.8 24477.4 25538.6 26155.2 26593.4 27243.7 27444.3 27145.9
## [19] 30075.3
Lags : Les Lags représentent un décalage dans la série de n pas en arrière, par rapport à la série d’origine.
Leads : Les Leads représentent un décalage dans la série de n pas en avant, par rapport à la série d’origine.
La figure ci-dessous présente un example de lag et de lead d’une série temporelle :
La fonction lag() du package stats peut être
utilisée pour créer à la fois des lags et des leads d’un objet ts.
USgas_year_lag1 <- stats::lag(USgas_year, k = -1)
USgas_year_lag1
## Time Series:
## Start = 2001
## End = 2019
## Frequency = 1
## [1] 22538.6 22238.8 23027.0 22276.5 22402.5 22014.5 21699.2 23103.8 23276.9
## [10] 22910.1 24086.8 24477.4 25538.6 26155.2 26593.4 27243.7 27444.3 27145.9
## [19] 30075.3
USgas_year_lag3 <- stats::lag(USgas_year, k = -3)
USgas_year_lag3
## Time Series:
## Start = 2003
## End = 2021
## Frequency = 1
## [1] 22538.6 22238.8 23027.0 22276.5 22402.5 22014.5 21699.2 23103.8 23276.9
## [10] 22910.1 24086.8 24477.4 25538.6 26155.2 26593.4 27243.7 27444.3 27145.9
## [19] 30075.3
USgas_year_lead1 <- stats::lag(USgas_year, k = 1)
USgas_year_lead1
## Time Series:
## Start = 1999
## End = 2017
## Frequency = 1
## [1] 22538.6 22238.8 23027.0 22276.5 22402.5 22014.5 21699.2 23103.8 23276.9
## [10] 22910.1 24086.8 24477.4 25538.6 26155.2 26593.4 27243.7 27444.3 27145.9
## [19] 30075.3
USgas_year_lead3 <- stats::lag(USgas_year, k = 3)
USgas_year_lead3
## Time Series:
## Start = 1997
## End = 2015
## Frequency = 1
## [1] 22538.6 22238.8 23027.0 22276.5 22402.5 22014.5 21699.2 23103.8 23276.9
## [10] 22910.1 24086.8 24477.4 25538.6 26155.2 26593.4 27243.7 27444.3 27145.9
## [19] 30075.3
Pour une visualisation rapide d’objets ts, nous pouvons utiliser la
fonction plot.ts() du package stats :
plot.ts(
vehicle_sales_ts,
main = "Ventes mensuelles totales de véhicules aux États-Unis",
xlab = "Temps",
ylab = "Milliers de véhicules"
)
De la même manière, nous pouvons visualiser des objets mts :
plot.ts(
US_indicators_ts,
plot.type = "multiple",
main = "Ventes mensuelles totales de véhicules aux USA VS Taux de chômage",
xlab = "Temps"
)
Utilisez l’argument plot.type = "multiple lorsque les
séries ne sont pas à la même échelle. Dans le cas contraire (séries à la
même échelle), vous pouvez utiliser plot.type = "single
afin de tracer les séries dans un même graphique.
Une autre option pour visualiser les séries temporelles est
l’utilisation de la fonction dygraph du packages
dygraphs :
dygraph(
vehicle_sales_ts,
main = "Ventes totales mensuelles de véhicules aux USA",
xlab = "Temps",
ylab = "Milliers de véhicules"
)
Comme vous le constatez, le résultat est un graphique interactif ce qui est beaucoup plus adapté aux applications web.
Vous pouvez aussi ajouter un sélecteur de période à votre graphique
en utilisant la fonction dyRangeSelector() :
dygraph(
vehicle_sales_ts,
main = "Ventes totales mensuelles de véhicules aux USA",
xlab = "Temps",
ylab = "Milliers de véhicules"
) %>%
dyRangeSelector()
Toujours avec a fonction dygraph(), vous pouvez
visualiser les objets mts :
dygraph(
US_indicators_ts,
main = "Ventes totales mensuelles de véhicules aux USA VS Taux de chômage"
) %>%
dyAxis("y", label = "Ventes de voitures") %>%
dyAxis("y2", label = "Taux de chômage") %>%
dySeries("Vehicle Sales", axis = "y", color = "green") %>%
dySeries("Unemployment Rate", axis = "y2", color = "red") %>%
dyLegend(width = 400) %>%
dyRangeSelector()
En jetant un rapide coup d’œil au graphique, vous pouvez voir que, généralement, le chômage augmente lorsque les ventes de véhicules diminuent. Bien qu’il ne s’agisse pas d’une preuve concluante de la relation entre les deux, cela vous fournit un chemin directionnel lors du démarrage de l’analyse.
La fonction ts_plot() permet aussi de visualiser de
manière interactive une série temporelle mais cette fois-ci en utilisant
en backend le package Plotly :
ts_plot(
vehicle_sales_ts,
title = "Ventes totales mensuelles de véhicules aux USA",
Xtitle = "Temps",
Ytitle = "Milliers de véhicules",
slider = TRUE
)
ts_plot(
US_indicators_ts,
title = "Ventes totales mensuelles de véhicules aux USA VS Taux de chômage",
Xtitle = "temps",
type = "multiple"
)
cycle(AirPassengers)
## Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
## 1949 1 2 3 4 5 6 7 8 9 10 11 12
## 1950 1 2 3 4 5 6 7 8 9 10 11 12
## 1951 1 2 3 4 5 6 7 8 9 10 11 12
## 1952 1 2 3 4 5 6 7 8 9 10 11 12
## 1953 1 2 3 4 5 6 7 8 9 10 11 12
## 1954 1 2 3 4 5 6 7 8 9 10 11 12
## 1955 1 2 3 4 5 6 7 8 9 10 11 12
## 1956 1 2 3 4 5 6 7 8 9 10 11 12
## 1957 1 2 3 4 5 6 7 8 9 10 11 12
## 1958 1 2 3 4 5 6 7 8 9 10 11 12
## 1959 1 2 3 4 5 6 7 8 9 10 11 12
## 1960 1 2 3 4 5 6 7 8 9 10 11 12
boxplot(AirPassengers~cycle(AirPassengers), xlab = "month", main = "Box plot to see month wise pattern")
La décomposition d’une série temporelle est un processus qui vise à séparer les différentes composantes d’une série temporelle, notamment la tendance, la saisonnalité et les résidus (ou les fluctuations irrégulières). Cela permet d’analyser et de modéliser chaque composante séparément, ce qui facilite la compréhension des motifs et des structures présents dans la série temporelle.
La décomposition peut être réalisée en utilisant différentes approches, mais l’une des plus courantes est la décomposition additive. Selon cette approche, une série temporelle est considérée comme la somme de sa tendance, de sa saisonnalité et des résidus. Formellement, la décomposition additive peut être exprimée comme suit :
Y(t) = Tendance(t) + Saisonnalité(t) + Résidus(t)
Tendance : La tendance représente la composante à long terme de la série temporelle, qui indique la direction générale de l’évolution de la série sur une période prolongée. Elle peut être croissante, décroissante ou stable. La tendance peut être linéaire ou non linéaire. La décomposition permet d’isoler la tendance pour mieux comprendre son comportement et son impact sur la série temporelle.
Saisonnalité : La saisonnalité fait référence aux variations cycliques régulières qui se produisent dans une série temporelle à des intervalles fixes, tels que des modèles saisonniers quotidiens, mensuels ou annuels. La composante de saisonnalité est souvent représentée par des effets périodiques. Elle peut être décomposée en termes de ses motifs récurrents, ce qui facilite la compréhension des variations saisonnières dans la série temporelle.
Résidus : Les résidus, également appelés fluctuations irrégulières, représentent les variations non expliquées par la tendance et la saisonnalité. Ils comprennent généralement les composantes aléatoires et les influences imprévisibles. Les résidus peuvent contenir des informations importantes, par exemple des événements exceptionnels ou des erreurs de modèle. L’analyse des résidus est utile pour évaluer la qualité du modèle et pour détecter des comportements inhabituels dans la série temporelle.
La décomposition d’une série temporelle permet de mieux comprendre la structure sous-jacente des données et d’analyser chaque composante séparément. Cela facilite l’identification des tendances, des motifs saisonniers et des fluctuations aléatoires, et peut être utilisé comme point de départ pour la modélisation et la prévision des séries temporelles.
# Chargement du jeu de données sur les venstes mensuelles de véhicules aux USA
data(USVSales) # package TSstudio
# Informations sur la série
ts_info(USVSales)
## The USVSales series is a ts object with 1 variable and 528 observations
## Frequency: 12
## Start time: 1976 1
## End time: 2019 12
# Visualisation de la série
dygraph(
USVSales,
main = "Ventes totales mensuelles de véhicules aux USA",
xlab = "Temps",
ylab = "Milliers de véhicules"
)
usv_decompose <- stats::decompose(USVSales)
str(usv_decompose)
## List of 6
## $ x : Time-Series [1:528] from 1976 to 2020: 885 995 1244 1191 1203 ...
## $ seasonal: Time-Series [1:528] from 1976 to 2020: -225.2 -102.4 143 34.5 147.9 ...
## $ trend : Time-Series [1:528] from 1976 to 2020: NA NA NA NA NA ...
## $ random : Time-Series [1:528] from 1976 to 2020: NA NA NA NA NA ...
## $ figure : num [1:12] -225.2 -102.4 143 34.5 147.9 ...
## $ type : chr "additive"
## - attr(*, "class")= chr "decomposed.ts"
La fonction decompose() du package stats
appliquée sur une série temporelle retourne une liste de 6 objets :
x : Un objet ts qui est la série originelle ;
seasonal : c’est une estimation de la composante saisonnière de l’objet ts ;
trend : c’est une estimation de la composante tendance de l’objet ts ;
random c’est une estimation de la composante irrégulière de l’objet ts ;
type : type de la décomposaition (“additive” ou “multiplicative”).
# Visualisation des composantes
plot(usv_decompose)
Autre exemple :
autoplot(AirPassengers) # fonction du package forecast
L’ensemble de données AirPassenger a également une composante saisonnière très forte avec des pics chaque été. La période saisonnière, ici, est également annuelle.
air_decompose <- decompose(AirPassengers, type = "multiplicative")
autoplot(air_decompose, main = "Decomposition of the AirPassengers series")
Le processus de décomposition semble avoir séparé une très belle composante saisonnière et identifié une tendance plutôt linéaire.