Comment calculer une moyenne mobile en R (avec exemple)
Dans l’analyse des séries chronologiques, une moyenne mobile représente la valeur moyenne d’un certain nombre de périodes précédentes.
Le moyen le plus simple de calculer une moyenne mobile dans R est d’utiliser la fonction rollmean() du package zoo :
library(dplyr) library(zoo) #calculate 3-day rolling average df %>% mutate(rolling_avg = rollmean(values, k=3, fill=NA, align='right'))
Cet exemple particulier calcule une moyenne mobile sur 3 jours pour la colonne intitulée valeurs .
L’exemple suivant montre comment utiliser cette fonction dans la pratique.
Exemple : calculer la moyenne mobile en R
Supposons que nous ayons le bloc de données suivant dans R qui montre les ventes d’un produit pendant 10 jours consécutifs :
#create data frame df <- data.frame(day=c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), sales=c(25, 20, 14, 16, 27, 20, 12, 15, 14, 19)) #view data frame df day sales 1 1 25 2 2 20 3 3 14 4 4 16 5 5 27 6 6 20 7 7 12 8 8 15 9 9 14 10 10 19
Nous pouvons utiliser la syntaxe suivante pour créer une nouvelle colonne appelée avg_sales3 qui affiche la valeur moyenne mobile des ventes des 3 jours précédents dans chaque ligne du bloc de données :
library(dplyr)
library(zoo)
#calculate 3-day rolling average of sales
df %>%
mutate(avg_sales3 = rollmean(sales, k=3, fill=NA, align='right'))
day sales avg_sales3
1 1 25 NA
2 2 20 NA
3 3 14 19.66667
4 4 16 16.66667
5 5 27 19.00000
6 6 20 21.00000
7 7 12 19.66667
8 8 15 15.66667
9 9 14 13.66667
10 10 19 16.00000
Remarque : La valeur de k dans la fonction rollmean() contrôle le nombre de périodes précédentes utilisées pour calculer la moyenne mobile.
La colonne avg_sales3 affiche la valeur moyenne mobile des ventes pour les 3 périodes précédentes.
Par exemple, la première valeur de 19,66667 est calculée comme suit :
Moyenne mobile sur 3 jours = (25 + 20 + 14) / 3 = 19,66667
Vous pouvez également calculer plusieurs moyennes mobiles à la fois en utilisant plusieurs fonctions rollmean() dans la fonction mutate() .
Par exemple, le code suivant montre comment calculer la moyenne mobile des ventes sur 3 et 4 jours :
library(dplyr)
library(zoo)
#calculate 3-day and 4-day rolling average of sales
df %>%
mutate(avg_sales3 = rollmean(sales, k=3, fill=NA, align='right'),
avg_sales4 = rollmean(sales, k=4, fill=NA, align='right'))
day sales avg_sales3 avg_sales4
1 1 25 NA NA
2 2 20 NA NA
3 3 14 19.66667 NA
4 4 16 16.66667 18.75
5 5 27 19.00000 19.25
6 6 20 21.00000 19.25
7 7 12 19.66667 18.75
8 8 15 15.66667 18.50
9 9 14 13.66667 15.25
10 10 19 16.00000 15.00
Les colonnes avg_sales3 et avg_sales4 affichent respectivement la moyenne mobile des ventes sur 3 et 4 jours.
Ressources additionnelles
Les didacticiels suivants expliquent comment effectuer d’autres tâches courantes dans R :
Comment tracer plusieurs colonnes dans R
Comment faire la moyenne sur les colonnes dans R
Comment calculer la moyenne par groupe dans R