我正在尝试根据过去几年的数据预测每小时销售额,使用x轴SaleDateTime显示预测图,并根据测试日期集检查准确性。我一直在遇到错误。
我尝试使用dput生成一小部分数据样本但由于某种原因,它仍尝试输出更多日期,然后我在子集样本数据中输出。
我的数据如下:SaleDateTime =“2015-01-02 23:00:00.000”和SaleCount =“1”。
看起来我的主要问题是如何将数据划分为训练和测试集。
另外我想在情节上的x轴有“2015-03-01 23:00:00”的形式。我对预测很陌生,所以非常感谢所有的帮助。
代码:
library("forecast")
library("zoo")
SampleData <- read.csv("SampleDataAll.csv")
Value<-SampleData[,c("SaleDateTime","SaleCount")]
rDateTime<-as.POSIXct(SampleData$SaleDateTime, format="%Y-%m-%d %H:%M:%S")
eventdata <- zoo(Value, order.by = rDateTime)
timeseries <- ts(eventdata$SaleCount, frequency=24)
##Partitioning data Training/Testing
ts1Train <- window(timeseries,start="2011-08-01 00:00:00", end="2014-08-01 00:00:00")
错误: window.default(x,...)出错:'start'不能在'end'之后 另外:警告信息: 在window.default(x,...)中:'end'值未更改
ts1Test <- window(timeseries,start="2014-08-01 01:00:00", end="2015-08-01 00:00:00")
window.default(x,...)出错:'start'不能在'end'之后 另外:警告信息: 在window.default(x,...)中:'end'值未更改
fcast2<-forecast(ts1Train,h=8764)
错误: 预测错误(ts1Train,h = 8764):找不到对象'ts1Train'
plot(fcast2)
accuracy(fcast2,ts1Test)
错误: 频率误差(x):未找到对象'ts1Test'
更新:
我根据建议对下面的更改进行了如何划分培训和测试数据。现在,当我尝试在ts1Test数据上运行准确性时,我收到以下错误消息。
新守则:
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 :(得分:0)
您可以在将数据转换为时间序列函数之前尝试拆分函数。例如:
train <- sampleData[1:100,] # choose the first 100 row as training set
test <- sampleData[101:200,] # choose the following 100 row as testing set
您的代码中存在以下几个问题:
start
函数中的window
参数接受整数(作为年份)或向量(年和月)。 ?window
会提供更多信息。
第一个window
函数的错误不会为以下代码提供预期的输入,特别是forecast
部分。
forecast
是一个预测函数。您需要在训练数据上构建时间序列模型(例如,使用arima
函数)。
我建议你阅读一些时间序列教程,这里是一个: https://a-little-book-of-r-for-time-series.readthedocs.org/en/latest/