【问题标题】:Create Forecast and Check Accuracy创建预测并检查准确性
【发布时间】:2016-02-15 06:21:20
【问题描述】:

我有 SaleDateTime = '2015-01-02 23:00:00.000' SaleCount=4 形式的数据。

我正在尝试使用以下代码创建未来 12 小时的每小时预报。

我是预测的新手,我肯定会很感激一些建议。

我正在尝试对数据进行分区、训练模型、使用“2015-01-02 23:00:00.000”形式的 x 轴绘制预测,并在测试时间序列上测试模型的准确性.

当我尝试运行如图所示的准确性时,我收到以下错误消息。有谁知道为什么我会收到下面的错误消息?

当我运行如下所示的绘图时,它的 x 轴从 0 到 400,有谁知道如何将其显示为“2015-01-02 23:00:00.000”之类的东西?我还想将情节缩小到最后说的 3 个月。

我的理解是,如果您不指定预测模型,那么它会尝试将最佳模型拟合到预测数据。对吗?

如何过滤与我试图运行准确性的 ts1Test 预测相同的时间序列范围,是否类似于 ts(fcast2, start=2001, end = 8567) ?

由于我使用的是 zoo 包,所以不需要 as.POSIXct 步骤,我可以只做 eventdata

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]) 中的错误:二元运算符的非数字参数

【问题讨论】:

标签: r forecasting


【解决方案1】:

要进行准确性测试,您应该确保测试数据的长度ts1Test 和预测范围fcast2&lt;-forecast(ts1Train,h=8567) 中的h 长度相同。现在你有 26567 数据点 vs 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 包。你不需要他们 使用forecastts(Value, frequency) 就足够了。

以日期时间为标签绘制时间序列对象。这 以下代码 sn-p 应该让您开始朝这个方向发展。寻找 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)

【讨论】:

    猜你喜欢
    • 2016-06-03
    • 1970-01-01
    • 2018-09-23
    • 1970-01-01
    • 2015-06-18
    • 2019-04-23
    • 1970-01-01
    • 2012-07-10
    • 1970-01-01
    相关资源
    最近更新 更多