Как решить это упражнение? - PullRequest
0 голосов
/ 30 июня 2018

Это упражнение от Hadley Wickham auth. ggplot2 Элегантная графика для анализа данных

Финальный график показывает много краткосрочных шумов в общем тренде. Как вы могли бы сгладить это дальше, чтобы сосредоточиться на долгосрочных изменениях?

Окончательный сюжет здесь.

library(tidyverse)
deseas <- function(x, month) {
  resid(lm(x ~ factor(month), na.action = na.exclude))
}
txhousing <- txhousing %>%
  group_by(city) %>%
  mutate(rel_sales = deseas(log(sales), month))
ggplot(txhousing, aes(date, rel_sales)) +
  geom_line(aes(group = city), alpha = 1/5) +
  geom_line(stat = "summary", fun.y = "mean", colour = "red")

enter image description here

Этот код удаляет сезонные эффекты.

Последовательное увеличение по сравнению с 2000–2007 гг. падение до 2010 года (с небольшим шумом), а затем постепенный отскок.

Любая помощь приветствуется!

1 Ответ

0 голосов
/ 30 июня 2018

Вас интересует только плавная линия на графике или вы ищете сглаженные значения?

Если вы только после черчения, вы можете использовать функцию geom_smooth:

ggplot(txhousing, aes(date, rel_sales)) +
  geom_line(aes(group = city), alpha = 1/5) +
  geom_smooth(stat = "smooth", colour = "red", method="auto")

Или вызвать его по определенной формуле с пакетом splines. Это позволяет регулировать степени свободы и степень кусочно-полинома.

ggplot(txhousing, aes(date, rel_sales)) +
  geom_line(aes(group = city), alpha = 1/5) +
  geom_smooth(method = "lm", formula = y ~ splines::bs(x, df = 15, degree = 3), se = FALSE)
...