В анализе временных рядов скользящая средняя — это просто среднее значение определенного количества предыдущих периодов.
Экспоненциальное скользящее среднее — это тип скользящего среднего, который придает больший вес недавним наблюдениям, что означает, что он может быстрее фиксировать последние тенденции.
В этом руководстве объясняется, как рассчитать экспоненциальное скользящее среднее в R.
Пример: экспоненциальная скользящая средняя в R
Предположим, у нас есть следующий фрейм данных в R:
#create data frame
df <- data.frame(period=1:10,
sales=c(25, 20, 14, 16, 27, 20, 12, 15, 14, 19))
#view data frame
df
period 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
Мы можем использовать функцию movavg() из пакета pracma для вычисления экспоненциально взвешенной скользящей средней за определенное количество предыдущих периодов.
Эта функция использует следующий синтаксис:
movavg(x, n, type=c("s", "t", "w", "m", "e", "r"))
куда:
- x: временной ряд как числовой вектор
- n: количество предыдущих периодов для использования в качестве среднего
- type: тип скользящей средней для расчета. Мы будем использовать «e» для экспоненциально взвешенной скользящей средней.
Например, вот как рассчитать экспоненциально взвешенную скользящую среднюю, используя четыре предыдущих периода:
library (pracma)
#create new column to hold 4-day exponentially weighted moving average
df$EWM_4day <- movavg (df$sales, n=4, type='e')
#view DataFrame
df
period sales 4dayEWM
0 1 25 25.000000
1 2 20 23.000000
2 3 14 19.400000
3 4 16 18.040000
4 5 27 21.624000
5 6 20 20.974400
6 7 12 17.384640
7 8 15 16.430784
8 9 14 15.458470
9 10 19 16.875082
Мы также можем использовать библиотеку визуализации ggplot2 для визуализации продаж по сравнению с 4-дневной экспоненциально взвешенной скользящей средней:
library (ggplot2)
library (reshape2)
#melt data into format for easy plotting
df <- melt (df , id.vars = 'period', variable.name = 'series')
#plot sales vs. 4-day exponentially weighted moving average
ggplot(df, aes (period, value)) +
geom_line( aes (colour = series))

Красная линия отображает продажи за каждый период, а синяя линия отображает экспоненциально взвешенное скользящее среднее.
Дополнительные ресурсы
Как построить несколько столбцов в R
Как усреднить по столбцам в R
Как рассчитать среднее значение по группе в R