Opérations sur les données temporelles

Importation des données

library(tidyverse)
## ── Attaching packages ─────────────────────────────────────── tidyverse 1.3.2 ──
## ✔ ggplot2 3.4.0      ✔ purrr   1.0.0 
## ✔ tibble  3.1.8      ✔ dplyr   1.0.10
## ✔ tidyr   1.2.1      ✔ stringr 1.5.0 
## ✔ readr   2.1.3      ✔ forcats 0.5.2 
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
library(readxl)
DATA  <- read_excel("C:/Users/amous/OneDrive/Bureau/SAE - R - LAVAL.xlsx")

Vérification des données

glimpse(DATA)
## Rows: 311
## Columns: 6
## $ Période        <chr> "1997-01", "1997-02", "1997-03", "1997-04", "1997-05", …
## $ Indices        <dbl> 62.31, 57.57, 62.72, 64.88, 67.11, 63.00, 68.00, 70.35,…
## $ `Moy. Mobile`  <dbl> NA, NA, NA, NA, NA, NA, 66.66042, 66.93250, 67.02417, 6…
## $ CVS            <dbl> 66.20800, 68.71700, 65.15900, 66.83700, 67.97700, 64.57…
## $ `1er Lissage`  <dbl> 62.31000, 60.41400, 61.33640, 62.75384, 64.49630, 63.89…
## $ `2ème Lissage` <dbl> 62.31000, 61.55160, 61.46552, 61.98085, 62.98703, 63.35…

Modification de la données

library(lubridate)
## Le chargement a nécessité le package : timechange
## 
## Attachement du package : 'lubridate'
## Les objets suivants sont masqués depuis 'package:base':
## 
##     date, intersect, setdiff, union
DATA$Période <- ym(DATA$Période)
DATA <- DATA %>%
  filter(Période < as.Date("2022-01-01"))

Explorons graphiquement les données

DATA %>%
  ggplot(aes(x = Période, y = `Indices`)) +
  geom_line()

Indice de 2017 à 2022

DATA %>%
  filter(Période >= as.Date("2017-01-01")) %>%
  ggplot(aes(x = Période, y = `Indices`)) +
  geom_line()

Auto-corrélation

coeff <- acf(DATA$Indices, type="correlation", plot="FALSE")
coeff
## 
## Autocorrelations of series 'DATA$Indices', by lag
## 
##     0     1     2     3     4     5     6     7     8     9    10    11    12 
## 1.000 0.610 0.543 0.596 0.632 0.627 0.529 0.605 0.594 0.536 0.458 0.515 0.855 
##    13    14    15    16    17    18    19    20    21    22    23    24 
## 0.492 0.434 0.474 0.515 0.512 0.414 0.489 0.482 0.420 0.350 0.409 0.731

Graphique d’autocorrelation

plot(coeff)

Visualisation des composantes

# Charger les packages
library(readxl)
library(forecast)
## Registered S3 method overwritten by 'quantmod':
##   method            from
##   as.zoo.data.frame zoo
# Convertir les données en série chronologique
ts_data <- ts(DATA$Indices, start = c(1997,1), frequency = 12)

# Effectuer une ACS sur la série chronologique
stl_decomp <- stl(ts_data, s.window = "periodic")

# Afficher les composantes saisonnières, tendance et résiduelle
plot(stl_decomp)

Graphique des Courbes superposées

ggseasonplot(ts_data,  season.labels="month") +
  ylab("Effectif") +
  ggtitle("Seasonal plot: Indices de chiffre d'affaire") 
## Warning in ggseasonplot(ts_data, season.labels = "month"): Provided
## season.labels have length 1, but 12 are required. Ignoring season.labels.

Moyenne Mobile

library(forecast)
ts_data1 <- ts(DATA$`Moy. Mobile`, start = c(1997,1), frequency = 12)
autoplot(ts_data1)+
     ylab("Incices")

CVS

library(forecast)
ts_data1 <- ts(DATA$CVS, start = c(1997,1), frequency = 12)
autoplot(ts_data1)+
     ylab("Incices")

Lissage exponentielle simple

fc <- ses(ts_data, h=5)
round(accuracy(fc),2)
##                ME RMSE  MAE MPE MAPE MASE  ACF1
## Training set 1.34 8.28 5.28 0.9 5.48 1.87 -0.09
autoplot(fc) +
  autolayer(fitted(fc), series="Lissé") +
  ylab("Indices") + xlab("Year")

library(forecast)
ts_data1 <- ts(DATA$`1er Lissage`, start = c(1997,1), frequency = 12)
autoplot(ts_data1)+
  autolayer(ts_data1, series="Lissé")+
     ylab("Incices")

Lissage exponentielle double

library(forecast)
ts_data1 <- ts(DATA$`2ème Lissage`, start = c(1997,1), frequency = 12)
autoplot(ts_data1)+
     ylab("Incices")

Prévisions

autoplot(ts_data) +
  autolayer(meanf(ts_data, h=12), series="Moyenne", PI=FALSE) +
  autolayer(naive(ts_data, h=12), series="Naïve", PI=FALSE) +
  autolayer(snaive(ts_data , h=12), series="Naïve saisonnière", PI=FALSE) +
  autolayer(rwf(ts_data,12, drift=TRUE), series="Naïve dérive", PI=FALSE)+
  ggtitle("Prevision des indices de chiffre d'affaire mensuels pour l'année 2022") +
  xlab("Year") + 
  ylab("Indices") +
  guides(colour=guide_legend(title="Prevision"))