Я пытаюсь сравнить результаты прогноза моделей нескольких временных рядов с истинными значениями, используя метод tidyverse.
У меня есть данные в следующем формате:
forecast.data <- rbind(
data.frame(date = seq(as.Date("2018-1-1"), as.Date("2018-5-1"), by = "days"),
model = "true",
value = runif(length(seq(as.Date("2018-1-1"), as.Date("2018-5-1"), by = "days")))*100),
data.frame(
date = seq(as.Date("2018-4-1"), as.Date("2018-5-1"), by = "days"),
model = "tslm",
value = runif(length(seq(as.Date("2018-4-1"), as.Date("2018-5-1"), by = "days")))*100),
data.frame(
date = seq(as.Date("2018-4-1"), as.Date("2018-5-1"), by = "days"),
model = "arima",
value = runif(length(seq(as.Date("2018-4-1"), as.Date("2018-5-1"), by = "days")))*100)
)
Данные таковы, что достоверных данных больше, чем прогнозных данных, поскольку некоторые из них используются для подгонки моделей.
Из этого я хотел бы получить метрики прогноза из этих моделей при сравнении с истинными значениями, такими же для тех же временных отметок:
library(forecast)
true <- forecast.data[forecast.data$model == "true" & forecast.data$date >= as.Date("2018-4-1") , c("date", "value")]
for (i in c("tslm", "arima")) {
print(accuracy(ts(forecast.data[forecast.data$model == i, c("date", "value")]),
ts(true)))
}
, и связать эти метрики с data.frame длядальнейший анализ.
Полагаю, это выглядело бы примерно так, основываясь на похожих вопросах:
forecast.data %>%
group_by(model) %>%
mutate(accuracy = accuracy(ts(value[model != "true"]), ts(value[model == "true"])))
Как бы это было сделано красноречиво / правильно с использованием стилей tidyverse и / или dplyr?Будет ли это сделано с помощью функции mutate или nest / unnest?