Я создал функцию, которая позволяет мне выполнять прогнозирование временных рядов с помощью пакета fable
. Идея функции заключалась в том, чтобы анализировать наблюдаемые и прогнозируемые значения после определенной даты / события. Вот фиктивный фрейм данных, который генерирует столбец дат: -
set.seed(1)
df <- data.frame(Date = sort(sample(seq(as.Date('2018/01/01'), as.Date('2020/09/17'), by="day"),1368883, replace = T)))
А вот и созданная мной функция. Вы указываете данные, затем дату события, затем период прогноза в днях и, наконец, заголовок для вашего графика.
event_analysis<-function(data,eventdate,period,title){
require(dplyr)
require(tsibble)
require(fable)
require(fabletools)
require(imputeTS)
require(ggplot2)
data_count<-data%>%
group_by(Date)%>%
summarise(Count=n())
data_count<-as_tsibble(data_count)
data_count<-na_mean(data_count)
train <- data_count %>%
#sample_frac(0.8)
filter(Date<=as.Date(eventdate))
fit <- train %>%
model(
ets = ETS(Count),
arima = ARIMA(Count),
snaive = SNAIVE(Count)
) %>%
mutate(mixed = (ets + arima + snaive) / 3)
fc <- fit %>% forecast(h = period)
forecastplot<-fc %>%
autoplot(data_count, level = NULL)+ggtitle(title)+
geom_vline(xintercept = as.Date(eventdate),linetype="dashed",color="red")+
labs(caption = "Red dashed line = Event occurrence")
fc_accuracy<-accuracy(fc,data_count)
#obs<-data_count
#colnames(obs)[2]<-"Observed"
#obs_pred<-merge(data_count,fc_accuracy, by="Date")
return(list(forecastplot,fc_accuracy,fc))
}
И за один прогон я указываю df
, дату события, количество дней, которые я хочу спрогнозировать (3 недели), а затем заголовок: -
event_analysis(df, "2020-01-01",21,"Event forecast")
Что напечатает этот результат и построит график: -
Я признаю, что созданные мной фиктивные данные не совсем идеальны, но эта функция хорошо работает с моими реальными данными.
Вот чего я хочу добиться. Я хотел бы, чтобы этот результат был получен из функции, но, кроме того, мне нужен дополнительный график, увеличивающий прогнозируемый период по двум причинам:
- для простоты интерпретации
- Я хочу видеть количество дней N до и количество дней N после даты события (N представляет период прогноза, т.е. 21).
Итак, дополнительный график (вместе с исходным полным прогнозом), который будет выглядеть так, возможно, в стиле одного вывода и нескольких графиков: -
Другой вариант - напечатать другой вывод, который показывает наблюдаемые значения в тестовом наборе в сравнении с предсказанными значениями из моделей, используемых в прогнозировании.
По сути, это две дополнительные вещи, которые я хочу добавить к своей функции, но я не уверен, как это сделать. Любая помощь очень ценится :).
coord_cartesian
вы сможете увеличивать масштаб вашего графика. В качестве альтернативы вы можете преобразовать свою диаграмму в диаграммуplotly
, и вы можете увеличивать масштаб так, как вам нужно. - person Edo   schedule 16.10.2020df <- data.frame(Date = sort(sample(seq(as.Date('2018/01/01'), as.Date('2020/09/17'), by="day"),1368883, replace = T)))
. На данный момент выдает ошибку - person Edo   schedule 16.10.2020