用R预测

时间:2015-09-21 10:33:58

标签: r forecasting

我有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)

问题:预测不好! enter image description here

如何改进预测?

链接到数据源: https://www.dropbox.com/s/wnvc4e78t124fkd/r_wikipedia-googletrends-model.csv?dl=0

1 个答案:

答案 0 :(得分:2)

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

以下是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

对于包含每日数据和每日/每月季节性模式的数据集,可能

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)

修改

使用提供的数据,看起来像每日/每周季节性的体面预测。

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)

enter image description here