我对R.很新。所以这是183列和多行的数据。我正在尝试进行批量预测,但是我收到了错误消息:
" Raw.Data_timeseries_forecast [,i]< - forecast(Raw.Data_timeseries_fit)$ mean中的错误: 要替换的项目数量不是替换长度的倍数"
有人可以帮我看一下吗?
谢谢!
Raw.Data[is.na(Raw.Data)]<-0
library(forecast)
Raw.Data_timeseries<-msts(Raw.Data[,-1],seasonal.periods = c(7,12,365.25),start=1/1/2014)
ns<-ncol(Raw.Data_timeseries)
h<-365
Raw.Data_timeseries_forecast<-matrix(nrow=h,ncol=ns,byrow =FALSE)
for (i in 1:ns)
{
Raw.Data_timeseries_fit<-stlf(Raw.Data_timeseries[,i])
Raw.Data_timeseries_forecast[,i]<-forecast(Raw.Data_timeseries_fit)$mean
}
write.csv(Raw.Data_timeseries_forecast,"rawdata_stlf.csv")
答案 0 :(得分:1)
问题是(据我所知,Raw.Data看起来有什么样的例子可以帮助清除它)是你的代码行:
Raw.Data_timeseries_fit<-stlf(Raw.Data_timeseries[,i])
实际上返回一个ts
对象,其长度等于整个原始时间序列(我假设它超过365天)。然后将其插入forcast()
函数,该函数将输出另一个具有原始长度的ts
对象。但是,然后您尝试将该ts
对象插入到只有365行的矩阵列中,这就是为什么要抛出&#34;要替换的项目数不是替换长度的倍数&#34;错误。
查看预测函数的documentation,您会发现它可以同时使用ts和模型。在stlf函数中查看相同的文档,您会发现它实际上是一个创建stl模型然后执行预测的函数,因此您实际上不需要调用:
Raw.Data_timeseries_forecast[,i]<-forecast(Raw.Data_timeseries_fit)$mean
或者您可以拨打stlm()
而不是stlf
,然后继续致电forecast
。无论哪种方式,我都非常确定根本问题在于预测矩阵的行数与原始时间序列对象中的观测数量之间的不匹配。
答案 1 :(得分:0)
看一下h
函数中的forecast
参数,它返回的是你的时间序列长度的2倍,这是你想要的吗?如果没有明确定义。
您还可以解决将结果存储到列表中的问题:
Raw.Data_timeseries_forecast<-list()
for (i in 1:ns)
{ # i=1
Raw.Data_timeseries_fit<-stlf(Raw.Data_timeseries[,i])
Raw.Data_timeseries_forecast[[i]]<-forecast(Raw.Data_timeseries_fit)$mean
}
Raw.Data_timeseries_forecast_f <- t(do.call("rbind",Raw.Data_timeseries_forecast))
#write.csv(Raw.Data_timeseries_forecast,"rawdata_stlf.csv")