Come calcolare una media mobile in r (con esempio)


Nell’analisi delle serie temporali, una media mobile rappresenta il valore medio di un numero di periodi precedenti.

Il modo più semplice per calcolare una media mobile in R è utilizzare la funzione rollmean() dal pacchetto zoo :

 library (dplyr)
library (zoo)

#calculate 3-day rolling average
df %>%
  mutate(rolling_avg = rollmean(values, k= 3 , fill=NA, align=' right '))

Questo particolare esempio calcola una media mobile di 3 giorni per la colonna denominata Values .

L’esempio seguente mostra come utilizzare questa funzione nella pratica.

Esempio: calcolare la media mobile in R

Supponiamo di avere il seguente frame di dati in R che mostra le vendite di un prodotto per 10 giorni consecutivi:

 #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

Possiamo utilizzare la seguente sintassi per creare una nuova colonna denominata avg_sales3 che visualizza il valore delle vendite della media mobile per i 3 giorni precedenti in ciascuna riga del frame di dati:

 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

Nota : il valore di k nella funzione rollmean() controlla il numero di periodi precedenti utilizzati per calcolare la media mobile.

La colonna avg_sales3 mostra il valore delle vendite della media mobile per i 3 periodi precedenti.

Ad esempio, il primo valore di 19.66667 viene calcolato come segue:

Media mobile a 3 giorni = (25 + 20 + 14) / 3 = 19,66667

Puoi anche calcolare più medie mobili contemporaneamente utilizzando più funzioni rollmean() all’interno della funzione mutate() .

Ad esempio, il codice seguente mostra come calcolare la media mobile delle vendite su 3 e 4 giorni:

 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

Le colonne avg_sales3 e avg_sales4 mostrano rispettivamente la media mobile delle vendite di 3 e 4 giorni.

Risorse addizionali

I seguenti tutorial spiegano come eseguire altre attività comuni in R:

Come tracciare più colonne in R
Come calcolare la media sulle colonne in R
Come calcolare la media per gruppo in R

Aggiungi un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *