用 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)
我有登革热指数从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
对于包含每日数据和 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)