Comment calculer une moyenne mobile par groupe dans R



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.

Vous pouvez utiliser la syntaxe de base suivante pour calculer une moyenne mobile par groupe dans R :

library(dplyr)
library(zoo)

#calculate moving average by group
df %>%
  group_by(variable1)
  mutate(moving_avg = rollmean(variable2, k=3, fill=NA, align='right'))

Cet exemple particulier calcule une moyenne mobile sur 3 périodes de variable2 , regroupée par variable1 .

Ce code utilise la fonction group_by() du package dplyr et la fonction rollmean() du package zoo .

L’exemple suivant montre comment utiliser cette fonction dans la pratique.

Exemple : calculer la moyenne mobile par groupe dans R

Supposons que nous ayons le bloc de données suivant dans R qui montre les ventes d’un produit pendant des jours consécutifs dans deux magasins différents :

#create data frame
df <- data.frame(store=rep(c('A', 'B'), each=7),
                 sales=c(4, 4, 3, 5, 6, 5, 7, 4, 8, 7, 2, 5, 4, 6))

#view data frame
df

   store sales
1      A     4
2      A     4
3      A     3
4      A     5
5      A     6
6      A     5
7      A     7
8      B     4
9      B     8
10     B     7
11     B     2
12     B     5
13     B     4
14     B     6

Nous pouvons utiliser la syntaxe suivante pour créer une nouvelle colonne appelée moving_avg3 qui affiche la valeur moyenne mobile des ventes sur 3 jours pour chaque magasin :

library(dplyr)
library(zoo)

#calculate 3-day moving average of sales, grouped by store
df %>%
  group_by(store) %>%
  mutate(moving_avg3 = rollmean(sales, k=3, fill=NA, align='right'))

# A tibble: 14 x 3
# Groups:   store [2]
   store sales moving_avg3
           
 1 A         4       NA   
 2 A         4       NA   
 3 A         3        3.67
 4 A         5        4   
 5 A         6        4.67
 6 A         5        5.33
 7 A         7        6   
 8 B         4       NA   
 9 B         8       NA   
10 B         7        6.33
11 B         2        5.67
12 B         5        4.67
13 B         4        3.67
14 B         6        5

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 moving_avg3 affiche la valeur moyenne mobile des ventes pour les 3 périodes précédentes.

Par exemple, la moyenne mobile des ventes sur 3 premiers jours pour le magasin A est calculée comme suit :

Moyenne mobile sur 3 jours = (4 + 4 + 3) / 3 = 3,67

La moyenne mobile des ventes sur les 3 prochains jours pour le magasin A est calculée comme suit :

Moyenne mobile sur 3 jours = (4 + 3 + 5) / 3 = 4

Et ainsi de suite.

Notez que les deux premières valeurs de la moyenne mobile pour chaque magasin sont NA car il n’y avait pas suffisamment de périodes précédentes à utiliser pour la moyenne mobile.

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

Ajouter un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *