Получение разных результатов при использовании `facet_wrap ()` в `ggplot`

Я использую этот код для загрузки данных из yahoo finance и построения графика некоторых акций относительно S & P500 после нормализации цен adjusted.

Следующий код возвращает;

Ra <- c("NFLX") %>%
  tq_get(get = "stock.prices",
         from = "2013-01-01",
         to = "2016-12-31")

Rb <- "SPY" %>%
  tq_get(get = "stock.prices",
         from = "2013-01-01",
         to = "2016-12-31")

stock_returns_daily <- Ra
benchmark_returns_daily <- Rb  

RaRb <- left_join(stock_returns_daily, benchmark_returns_daily, by = c("date" = "date"))
normalise_series <- function(xdat) xdat / coredata(xdat)[1]


RaRb %>%
  ggplot(aes(x = date)) +
  geom_line(aes(y = normalise_series(adjusted.x)-1), linetype = "dashed") +
  geom_line(aes(y = normalise_series(adjusted.y)-1), color = "red") +
  labs(title = "Daily Stock Prices",
       x = "", y = "Adjusted Prices", color = "") +
 #facet_wrap(~ symbol, ncol = 2, scales = "free_y") +
  scale_y_continuous(labels = scales::dollar) +
  theme_tq() +
  scale_color_tq()

Эта цифра (которая является нормализованной ценой акций Netflix по отношению к S & P500):

введите описание изображения здесь

Мне это кажется интуитивно понятным и правильным, оба начинаются с начала 0, однако, когда я пытаюсь добавить другие акции AMZN, FB, GOOG и NFLX, а также раскомментируя facet_wrap(~ symbol, ncol = 2, scales = "free_y") +, я больше не получаю тот же сюжет. Я использую один и тот же код, и он дает мне два разных результата.

Ra <- c("AMZN","FB","GOOG", "NFLX") %>%
  tq_get(get = "stock.prices",
         from = "2013-01-01",
         to = "2016-12-31")


Rb <- "SPY" %>%
  tq_get(get = "stock.prices",
         from = "2013-01-01",
         to = "2016-12-31")

stock_returns_daily <- Ra
benchmark_returns_daily <- Rb  

RaRb <- left_join(stock_returns_daily, benchmark_returns_daily, by = c("date" = "date"))
normalise_series <- function(xdat) xdat / coredata(xdat)[1]


RaRb %>%
  ggplot(aes(x = date)) +
  geom_line(aes(y = normalise_series(adjusted.x) -1), color = "red") +
  geom_line(aes(y = normalise_series(adjusted.y) -1), linetype = "dashed") +
  labs(title = "Daily Stock Prices",
       x = "", y = "Adjusted Prices", color = "") +
  facet_wrap(~ symbol, ncol = 2, scales = "free_y") +
  scale_y_continuous(labels = scales::dollar) +
  theme_tq() +
  scale_color_tq()

Давая мне следующее:

введите описание изображения здесь

Теперь NFLX отрицательно и дает мне другой сюжет.


person user113156    schedule 13.07.2018    source источник
comment
Я предполагаю, что это связано с normalize series, который может нормализовать комбинацию всех четырех акций вместе, а не по отдельности. Масштаб оси Y также намекает на это. Попробуйте ввести набор данных как данные, нормализованные для каждой акции, а не использовать функцию normalize.series в вызове gpplot. Это нормализует весь набор данных вместе, а не по переменным фасетирования. Вы должны сделать эту нормализацию вне ggplot.   -  person Noah    schedule 13.07.2018


Ответы (1)


Чтобы ответить на свой вопрос благодаря комментарию от @Noah в этом вопросе и некоторым рекомендациям от @MrFlick в опубликованном мной вопросе здесь.

Следующий код, кажется, получил то, что я хочу.

Ra <- c("AMZN","FB","GOOG", "NFLX") %>%
  tq_get(get = "stock.prices",
         from = "2013-01-01",
         to = "2016-12-31")


Rb <- "SPY" %>%
  tq_get(get = "stock.prices",
         from = "2013-01-01",
         to = "2016-12-31")

stock_returns_daily <- Ra
benchmark_returns_daily <- Rb  

RaRb <- left_join(stock_returns_daily, benchmark_returns_daily, by = c("date" = "date"))
normalise_series <- function(xdat) xdat / coredata(xdat)[1]

RaRb <- RaRb %>% 
  group_by(symbol) %>%
  select(symbol, date, adjusted.x, adjusted.y) %>%
  mutate(adj.x = normalise_series(adjusted.x)) %>%
  mutate(adj.y = normalise_series(adjusted.y))


RaRb %>%
  ggplot(aes(x = date)) +
  geom_line(aes(y = adj.x -1), color = "red") +
  geom_line(aes(y = adj.y -1), linetype = "dashed") +
  labs(title = "Daily Stock Prices",
       x = "", y = "Adjusted Prices", color = "") +
  facet_wrap(~ symbol, ncol = 2, scales = "free_y") +
  scale_y_continuous(labels = scales::dollar) +
  theme_tq() +
  scale_color_tq()

Что это за результат:

введите описание изображения здесь

NFLX теперь идентичен первому сюжету в исходном сообщении.

person user113156    schedule 13.07.2018