【问题标题】:Error: number of items to replace is not a multiple of replacement length错误:要替换的项目数不是替换长度的倍数
【发布时间】:2016-06-03 16:36:40
【问题描述】:

我对 R 很陌生。所以这是一个 183 列和多行的数据。我正在尝试进行批量预测,但是,我收到错误消息:

“Raw.Data_timeseries_forecast[, i] 中的错误

谁能帮我看看?

谢谢!

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")

【问题讨论】:

  • 如果你不显示一些数据,就无法提供帮助:Raw.Data 中的内容是什么?
  • 抱歉,这是一个包含 183 个变量(列,代表不同产品)和 883 个 obs(行,代表自 2014/01/01 以来的历史日交易量)的表格。

标签: r


【解决方案1】:

问题是(据我所知,Raw.Data 的一个示例将有助于清除它)是您的代码行:

 Raw.Data_timeseries_fit<-stlf(Raw.Data_timeseries[,i])

实际上返回一个ts 对象,其长度等于整个原始时间序列(我假设它长于 365 天)。然后将其插入forcast() 函数,该函数将输出另一个具有原始长度的ts 对象。但是,然后您尝试将 ts 对象插入只有 365 行的矩阵列中,这就是为什么它会抛出“要替换的项目数不是替换长度的倍数”错误。

查看预测函数的documentation,你会发现它可以同时接受一个ts和一个模型。查看 stlf 函数的相同文档,您会发现它实际上是一个创建 stl 模型然后执行预测的函数,因此您实际上不需要调用:

Raw.Data_timeseries_forecast[,i]<-forecast(Raw.Data_timeseries_fit)$mean

或者您可以拨打stlm() 而不是stlf,然后继续拨打forecast afterwords。不管怎样,我很确定根本问题在于预测矩阵的行数与原始时间序列对象中的观察数之间的不匹配。

【讨论】:

    【解决方案2】:

    看看forecast函数里面的h参数,它返回的时间序列长度是你的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")
    

    【讨论】:

      猜你喜欢
      • 2021-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-05
      • 1970-01-01
      相关资源
      最近更新 更多