我正在尝试使用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完成该操作?