我的格式为SaleDateTime ='2015-01-02 23:00:00.000'SalendCount = 4。
我正在尝试使用下面的代码创建未来12小时的每小时预测。
我是预测新手,非常感谢一些建议。
我正在尝试对数据进行分区,训练模型,使用“2015-01-02 23:00:00.000”形式的x轴绘制预测,并在测试时间序列上测试模型的准确性
当我尝试运行如图所示的精度时,我收到以下错误消息。有谁知道为什么我收到下面的错误信息?
当我运行如下图所示的情节时,它有一个0到400的x轴,有没有人知道如何显示像'2015-01-02 23:00:00.000'?我还希望将情节缩小到最后说3个月。
我的理解是,如果您没有为预测指定模型,那么它会尝试将最佳模型与预测数据相匹配。这是对的吗?
我如何使用预测作为ts1Test过滤相同的时间序列范围,我正在尝试运行准确度,是否类似于ts(fcast2,start = 2001,end = 8567)?
由于我正在使用zoo包,因此不需要as.POSIXct步骤,我可以只执行eventdata< - zoo(Value,order.by = SaleDateTime)吗?
library("forecast")
library("zoo")
SampleData<-SampleData
Value<-SampleData[,c("SaleDateTime","SaleCount")]
rDateTime<-as.POSIXct(SampleData$SaleDateTime, format="%Y-%m-%d %H:%M:%S")
eventdata <- zoo(Value, order.by = rDateTime)
##Partitioning data Training/Testing
ts1SampleTrain<-eventdata[1:2000,]
ts1Train<-ts(ts1SampleTrain$SaleCount, frequency=24)
ts1SampleTest<-eventdata[2001:28567,]
ts1Test<-ts(ts1SampleTest$SaleCount, frequency=24)
#Training Model
fcast2<-forecast(ts1Train,h=8567)
plot(fcast2)
accuracy(fcast2,ts1Test)
新错误:
-.default中的错误(xx,ff [1:n]):二元运算符的非数字参数
答案 0 :(得分:1)
要进行准确度测试,您应确保测试数据ts1Test
的长度和h
中预测范围fcast2<-forecast(ts1Train,h=8567)
的长度相同。现在您有26567
数据点与8567
。
按照您的方法,下一个玩具示例将起作用:
library(forecast)
library(zoo)
Value <- rnorm(1100)
rDateTime <- seq(as.POSIXct('2012-01-01 00:00:00'), along.with=Value, by='hour')
eventDate <- ts(zoo(Value, order.by=rDateTime), frequency = 24)
tsTrain <-eventDate[1:1000]
tsTest <- eventDate[1001:1100]
fcast<-forecast(tsTrain,h=100)
accuracy(fcast, tsTest)
ME RMSE MAE MPE MAPE MASE ACF1
Training set -2.821378e-04 9.932745e-01 7.990188e-01 1.003861e+02 1.007542e+02 7.230356e-01 4.638487e-02
Test set 0.02515008 1.02271839 0.86072703 99.79208174 100.14023919 NA NA
关于你的另外两个问题:
使用POSIX
时间戳和zoo
包。你不需要他们
使用forecast
。 ts(Value, frequency)
就足够了。
使用日期时间作为标签绘制时间序列对象。该
以下代码片段应该让您从这个方向开始。寻找
提供所需行为的axis
函数:
par(mar=c(6,2,1,1)) # bottom, left, top, right margins
plot(tsTrain, type="l", xlab="", xaxt="n")
axis(side=1, at=seq(1,1000,100), label=format(rDateTime[seq(1,1000,100)], "%Y-%m-%d"), las=2)