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: