объединение автозапуска ggfortify с функциями пакета изменений (cpt.meanvar)

#r #ggplot2 #forecast

#r #ggplot2 #прогноз

Вопрос:

Я использую функцию автоматической выборки в пакете ggfortify для построения графика временных рядов с прогнозом и подгонкой, вот как я это делаю

 library(forecast)
library(ggplot2)
library(ggfortify)
fc <- forecast(fdeaths)
autoplot(fc)
autoplot(fc)   geom_line(aes(y = fitted(fc)), col = "red")
  

Теперь я хочу показать период времени, у которого есть сдвиг в среднем, а также показать среднее значение до и после сдвига, все на графике выше

Я могу сделать это отдельно, используя пакет ‘точка изменения’, синтаксис такой, как показано ниже

 library(changepoint)
autoplot(cpt.mean(fdeaths))

plot(cpt.mean(fdeaths),cpt.col='blue')
  

объединенный просмотр всего этого дал бы очень мощную информацию, запрашивающую помощь![введите описание изображения здесь]1

Комментарии:

1. Я не смог четко понять ваши сомнения. Не могли бы вы предоставить образец изображения? Все, что угодно, использует сайт imgur для размещения изображения.

2. @ bbiasi … пожалуйста, найдите изображение, которое я ищу, это диаграмма справа, которая представляет собой комбинацию всех 3 диаграмм слева

Ответ №1:

Вот небольшой пример. Но это должно быть автоматизировано с циклическим построением графика сегментов ( geom_segment ) и vline ( geom_vline ).

 library(forecast)
library(ggplot2)
library(ggfortify)
library(changepoint)
library(lubridate)

fc <- forecast(fdeaths)
cp <- changepoint::cpt.mean(fdeaths)
plot(cp,cpt.col='blue')
# plot(x = 1:length(c(fdeaths)), y = c(fdeaths), type = "l")
Vikram <- data.frame(ts = c(fdeaths),
                     Obs = seq(lubridate::ymd('1974-01-01'),
                               lubridate::ymd('1979-12-01'), by = "1 month"),
                     fitted = fitted(fc))
Vikram_md <- changepoint::param.est(cp)[[1]] # mean
# cp@cpts  # change-points
cp_ <- cp@cpts

autoplot(fc)   geom_line(aes(y = fitted(fc)), col = "red")  
  geom_segment(x = Vikram$Obs[1], 
               y = Vikram_md[1], yend = Vikram_md[1],
               xend = Vikram$Obs[1] %m % months(cp_[1]), 
               size = 1.2, col = "blue")  
  geom_segment(x = Vikram$Obs[1] %m % months(cp_[1]), 
               y = Vikram_md[2], yend = Vikram_md[2],
               xend = Vikram$Obs[1] %m % months(cp_[2]), 
               size = 1.2, col = "blue")  
  geom_vline(aes(xintercept = Vikram$Obs[1] %m % months(cp_[2])),
             linetype = "dashed", colour = "red")
  

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