¿Cómo calcular una media móvil exponencial en R?

En este artículo, veremos cómo calcular una media móvil exponencial en el lenguaje de programación R. 

La media móvil exponencial (EMA) nos dice la media ponderada de los K puntos de datos anteriores. EMA otorga un mayor peso e importancia a los puntos de datos más recientes. Para obtener la EMA utilizaremos el paquete pracma en el lenguaje de programación R. Para instalar ejecute los siguientes comandos:

install.packages("pracma")

Creando Dataframe para demostración

R

# create data frame
df <- data.frame(Rank=1:10,
                 Marks=c(65, 60, 54, 46, 37,
                         30, 29, 25, 24, 19))
  
# Display data frame
print(df)

Producción:

   Rank Marks
1     1    65
2     2    60
3     3    54
4     4    46
5     5    37
6     6    30
7     7    29
8     8    25
9     9    24
10   10    19

Calcular una media móvil exponencial en R

La función movavavg() se utiliza para calcular la EMA en R.

movavag(x, n, tipo=c(“s”, “t”, “w”, “m”, “e”, “r”))

Argumentos

  • x: serie temporal como vector numérico.
  • n: longitud de la ventana hacia atrás.
  • tipo: uno de “s”, “t”, “w”, “m”, “e” o “r”.

R

library(pracma)
  
df <- data.frame(Rank=1:10,
                 Marks=c(65, 60, 54, 46, 37,
                         30, 29, 25, 24, 19))
  
# Exponentially weighted moving average 
# using the 3 previous marks
df$EMA <- movavg(df$Marks, n=3, type='e')
  
# Display DataFrame 
print(df)

Producción:

   Rank Marks      EMA
1     1    65 65.00000
2     2    60 62.50000
3     3    54 58.25000
4     4    46 52.12500
5     5    37 44.56250
6     6    30 37.28125
7     7    29 33.14062
8     8    25 29.07031
9     9    24 26.53516
10   10    19 22.76758

Visualización de EMA

Aquí, visualizaremos las marcas en comparación con el promedio móvil ponderado exponencialmente de 3 días a través del gráfico de líneas.

R

library(ggplot2)
library(reshape2)
library(pracma)
  
  
df <- data.frame(Rank=1:10,
                 Marks=c(65, 60, 54, 46, 37, 
                         30, 29, 25, 24, 19))
  
# Exponentially weighted moving average
# using the 3 previous marks
df$EMA <- movavg(df$Marks, n=3, type='e')
  
df <- melt(df ,  id.vars = 'Rank', variable.name = 'series')
  
ggplot(df, aes(Rank, value)) +
  geom_line(aes(colour = series))

Producción:

Publicación traducida automáticamente

Artículo escrito por skrg141 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *