【问题标题】:Forecast multiple columns with for-loop使用 for 循环预测多列
【发布时间】:2013-09-08 23:38:12
【问题描述】:

我是 R(和编程)的新手,我必须对 216 种不同的产品进行简单的指数平滑预测。

示例:

items <- dataset 

Date     A      B      C  
01-10    3      1      7 
02-10    4      2      0  
03-10    9      2      1 
04-10    8      1      3  

我明白了:

for(i in 1:ncol(items)) { 
  col <- ts(items[,i]) 
  fcast <- ses(col, h=12) 
  write.table(fcast, file ="test.csv",sep=";", dec=",") 
} 

Error: not compatible with REALSXP

我做错了什么,还是我在正确的轨道上?...请帮助我

【问题讨论】:

  • 您的示例似乎没有产生您提到的错误。如果您提供traceback() 的输出,将会很有用;这有助于定位实际问题。顺便说一句,你也在预测第一列(日期)——这有意义吗?此外,错误消息表明您正在尝试使用不是数字的数据,而该数据不是预期的数字。也许您将 ses() 或 ts() 应用于字符列?
  • > traceback() 6: stop(list(message = "与 REALSXP 不兼容", call = NULL, cppstack = NULL)) 5: etsTargetFunctionInit(par = par, y = y, nstate = nstate,错误类型 = 错误类型,趋势类型 = 趋势类型,季节类型 = 季节类型,阻尼 = 阻尼,par.noopt = par.noopt,lowerb = 下,upperb = 上,opt.crit = opt.crit,nmse = nmse,边界 = 边界, m = m, pnames = names(par), pnames2 = names(par.noopt)) 4: etsmodel(y, errortype[i], trendtype[j], seasontype[k], damped[l], alpha, beta, gamma, phi, lower = lower, upper = upper,
  • opt.crit = opt.crit, nmse = nmse, bounds = bounds, ...) 3: ets(x, "ANN", alpha = alpha, opt.crit = "mse") 2: 预测(ets(x, "ANN", alpha = alpha, opt.crit = "mse"), h, level = level, fan = fan, ...) 1: ses(col, h = 12) at #3
  • 听起来很有可能,但我该如何改变呢?

标签: r smoothing forecasting


【解决方案1】:

这应该可行:

# library("forecast")
for(i in 1:ncol(items)) { 
  col <- ts(items[,i]) 
  fcast <- ses(col, h=12) 
  write.table(fcast, file =paste("test", i, ".csv", sep="") ,sep=";", dec=",") 
} 

尽管您的代码没有任何错误。

对于我的示例 itemdata.frame 看看 dput 输出:

structure(list(Date = structure(1:4, .Label = c("01-10", "02-10", 
"03-10", "04-10"), class = "factor"), A = c(3L, 4L, 9L, 8L), 
    B = c(1L, 2L, 2L, 1L), C = c(7L, 0L, 1L, 3L)), .Names = c("Date", 
"A", "B", "C"), class = "data.frame", row.names = c(NA, -4L))

第一列是factor,其他列是integer

【讨论】:

  • 会不会,数据被读取为45x216字符矩阵??
  • 好的,我想我明白你在做什么,但我有 216 行。那么我如何使第一行因子和其余行整数?还是我必须手动引用所有这些?
  • 只需要输入'items=as.data.frame(items)'...非常感谢各位,你们太棒了!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-11
  • 1970-01-01
  • 1970-01-01
  • 2021-07-20
  • 2021-06-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多