我有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)
如何改进预测?
链接到数据源: https://www.dropbox.com/s/wnvc4e78t124fkd/r_wikipedia-googletrends-model.csv?dl=0
答案 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
对于包含每日数据和每日/每月季节性模式的数据集,可能
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)