Как рассчитать экспоненциальную скользящую среднюю в R

Как рассчитать экспоненциальную скользящую среднюю в R

В анализе временных рядов скользящая средняя — это просто среднее значение определенного количества предыдущих периодов.

Экспоненциальное скользящее среднее — это тип скользящего среднего, который придает больший вес недавним наблюдениям, что означает, что он может быстрее фиксировать последние тенденции.

В этом руководстве объясняется, как рассчитать экспоненциальное скользящее среднее в 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
Как рассчитать среднее значение по группе в R

Замечательно! Вы успешно подписались.
Добро пожаловать обратно! Вы успешно вошли
Вы успешно подписались на кодкамп.
Срок действия вашей ссылки истек.
Ура! Проверьте свою электронную почту на наличие волшебной ссылки для входа.
Успех! Ваша платежная информация обновлена.
Ваша платежная информация не была обновлена.