我的交通流量时间序列很短,我想使用简单指数平滑方法预测交通流量,以便与ARIMA模型进行比较。
我已经完成了ARIMA模型的一部分,但是我对如何格式化数据以应用简单指数平滑模型感到困惑。
之所以使用“简单指数平滑”,是因为我读到它适用于没有趋势或季节性的短时间序列。 我的时间序列为4个月,每小时阅读一次。
我的数据如下:
Date_Hour Traffic_Flow
2017-07-17 00:00:00 50
2017-07-17 01:00:00 80
2017-07-17 02:00:00 77
2017-07-17 03:00:00 89
2017-07-17 04:00:00 61
2017-07-17 05:00:00 64
我有2175个观测值,对于训练,将使用1522个观测值(3/4),对于测试,将使用653个观测值。
View(SES_Data)
SES_DataXTS <- as.xts(x= SES_Data[,-1], order.by = as.POSIXct(SES_Data$Date_Hour), frequency = 4)
# Split the Data
training_indices <- 1:floor(0.7 * nrow(SES_DataXTS))
training_data <- SES_DataXTS[training_indices]
test_data <- SES_DataXTS[-training_indices]
#Fit mode:
fit_Model_SES <- ses(training_data ,beta=FALSE, gamma=FALSE)
# Do forecasting
forecast_SES <- forecast(fit_Model_SES,h=653)
进行预测时,出现此错误:
Error in forecast.forecast(fit_Model_SES, h = 653) :
Please select a longer horizon when the forecasts are first computed
每小时读取一次数据时如何指定开始和结束? 我找不到如何与xts和zoo对象一起使用简单指数平滑的示例。 如果我将数据转换为ts(),它将忽略每小时的读数。
我尝试了此命令,但我认为它不正确。
tsfunction <- ts(SES_Data, frequency=24, start=2017-07-17 00:00:00, end= 2017-10-15 14:00:00, beta=FALSE, gamma=FALSE)
有什么建议吗?或我可以在短时间序列中使用的其他任何预测技术,将其与ARIMA进行比较
更新:
因此我将命令编辑为:
#Fit mode:
fit_Model_SES <- ses(SES_DataXTS ,beta=FALSE, gamma=FALSE, h=653)
#fit_Model_SES <- ses(training_data1 ,beta=FALSE, gamma=FALSE, h = 653)
#Model 1: Exponential State Smoothing
f_ets = forecast(fit_Model_SES) # forecast 4 months into the future
plot(f_ets, col="blue")
但是当我绘制预测时,它读取的日期时间格式不正确。
我正在寻找使用ARIMA模型绘制具有相同数据的预测图:
答案 0 :(得分:0)
您需要在函数h
中指定ses()
参数(它将计算预测值)。对于某些功能,例如ses()
,您无需在之后调用forecast()
。
forecast_SES <- forecast(fit_Model_SES, h = 600)