用 R 预测

forecast with R

我有登革热指数从2010年1月到2015年7月的每日数据:

date    dengue_index
1/1/2010    0.169194109
1/2/2010    0.172350434
1/3/2010    0.174939783
1/4/2010    0.176244642
1/5/2010    0.176658068
1/6/2010    0.177815751
1/7/2010    0.17893075
1/8/2010    0.1813232
1/9/2010    0.182199531
1/10/2010   0.185091158
1/11/2010   0.185267748
1/12/2010   0.185894524
1/13/2010   0.18511499
1/14/2010   0.188080728
1/15/2010   0.190019472
…   …
7/20/2015   0.112748885
7/21/2015   0.113246022
7/22/2015   0.111755091
7/23/2015   0.112164176
7/24/2015   0.11429011
7/25/2015   0.113951836
7/26/2015   0.11319131
7/27/2015   0.112918734

我想使用 R 预测到 2016 年底的值。

library(forecast)
setwd("...")
dengue_series <- read.csv(file="r_wikipedia-googletrends-model.csv",head=TRUE,sep=";")
dengue_index <- ts(dengue_series$dengue_index, frequency=7)
plot(dengue_index)
# lambda=0 -> predict positive values
fit <- auto.arima(dengue_index, lambda=0)
fit
# predict until December 2016
forecast_series <- forecast(fit, 500)
forecast_series
plot(forecast_series)

问题:预测不好!

如何改进预测?

Link转至数据源: https://www.dropbox.com/s/wnvc4e78t124fkd/r_wikipedia-googletrends-model.csv?dl=0

您可以尝试指定为多季节时间序列对象 msts,然后使用 tbats 进行预测。 tbats 在 David Arenburg 在评论中提到的论文中被引用。

这是从 forecast 数据包中的示例数据中提取的示例数据,用于 taylor 数据集,该数据集的季节性周期为一天 48 个半小时周期和 336 个半小时周期周(即 336 / 48 = 7)。

x <- msts(taylor, seasonal.periods=c(48,336), ts.frequency=48, start=2000+22/52)
fit <- tbats(x)
fc <- forecast(fit)

# not shown, but the forecast seems to capture both seasonal patterns
plot(fc)

有关 taylor

的更多信息,另请参阅 http://users.ox.ac.uk/~mast0315/CompareUnivLoad.pdf

对于包含每日数据和 daily/monthly 季节性模式的数据集,也许

tsdat <- msts(dat, seasonal.periods=c(7, 84), ts.frequency=7, start=2010)

 tsdat <- msts(dat, seasonal.periods=c(7, 365.25), ts.frequency=7, start=2010)

编辑

使用提供的数据,看起来像是一个不错的预测,具有 daily/weekly 季节性。

data <- read.table("r_wikipedia-googletrends-model.csv", header=TRUE, sep=";")
dengue_index <- msts(data$dengue_index, seasonal.periods=c(7, 365), ts.frequency=7)
fit <- tbats(dengue_index)

fc <- forecast(fit)
plot(fc)