moving_ave: Calculate date-based moving average

Description Usage Arguments Examples

View source: R/moving_average.R

Description

This function calculates a vector moving averages based on moving date ranges. The result is a vector containing one average per input value, or NA if the full range doesn't exist for a given input value. Not every day within a date range needs to be present.

Usage

1
moving_ave(date, value, range, center = TRUE)

Arguments

date

Vector of dates

value

Vector of values to average

range

Number of days to average over

center

Boolean, indicates whether the resulting average should be centered in the range (default) or placed at the end of the range

Examples

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
library(lubridate)

dow_jones_industrial %>% filter(date >= ymd("2009/01/01") & date <= ymd("2010/01/01")) %>%
  mutate(
    close_20d_ave = moving_ave(date, close, 20, center = FALSE),
    close_50d_ave = moving_ave(date, close, 50, center = FALSE),
    close_100d_ave = moving_ave(date, close, 100, center = FALSE)
  ) %>%
  ggplot(aes(date, close)) + 
  geom_line(aes(color = "closing"), size = .25) +
  geom_line(aes(date, close_20d_ave, color = "20d"), size = .75, na.rm = TRUE) +
  geom_line(aes(date, close_50d_ave, color = "50d"), size = .75, na.rm = TRUE) +
  geom_line(aes(date, close_100d_ave, color = "100d"), size = .75, na.rm = TRUE) +
  scale_color_manual(
    values = c(
      closing = "black", 
      `20d` = "#009e73",
      `50d` = "#d55e00",
      `100d` = "#0072b2"
    ),
    breaks = c("closing", "20d", "50d", "100d"),
    labels = c("closing price", "20 day average", "50 day average", "100 day average"),
    name = NULL,
    guide = guide_legend(override.aes = list(size = c(0.25, 0.75, 0.75, 0.75)))
  ) + 
  theme_dviz_grid()

# moving ave vs. LOESS (locally estimated scatterplot smoothing)

dow_jones_industrial %>% filter(date >= ymd("2009/01/01") & date <= ymd("2010/01/01")) %>%
  mutate(
    close_100d_ave = moving_ave(date, close, 100)
  ) %>%
  ggplot(aes(date, close)) + 
  geom_line(aes(color = "closing"), size = .25) +
  geom_line(aes(date, close_100d_ave, color = "100d"), size = .75, na.rm = TRUE) +
  geom_smooth(aes(color = "smooth"), size = .75, na.rm = TRUE, se = FALSE) +
  scale_color_manual(
    values = c(
      closing = "black", 
      `100d` = "#d55e00",
      smooth = "#0072b2"
    ),
    breaks = c("closing", "smooth", "100d"),
    labels = c("closing price", "LOESS smoother", "100 day average"),
    name = NULL,
    guide = guide_legend(override.aes = list(size = c(0.25, 0.75, 0.75)))
  ) + 
  theme_dviz_grid()

clauswilke/dviz.supp documentation built on Aug. 25, 2020, 2:12 a.m.