1

我使用以下方法将 csv 文件读入数据框:

dataxlsx <- read.csv(file.choose(), header = T)

数据框如下所示:

Year  Month Period X410     X430     X431
2005  1       1    3467748  4434879  1345638
2005  2       2    3626338  4311150  1167523
  .   .       .      .        .        . 
2015  7       127  2374105  1514540  1399804

我正在尝试运行我创建的名为 HWplot 的函数来预测输入数据并运行预测,并输出预测图。

我使用了 ggplot2、tseries、forecast 包。

HWplot <- function(dataxlsx,  n.ahead=12,  CI=.95,  error.ribbon='green', line.size=1) {

hw_object<-HoltWinters(dataxlsx)

forecast<-predict(hw_object,  n.ahead=24,  prediction.interval=T,  level=0.95)


for_values<-data.frame(time=round(time(forecast),  3),  value_forecast=as.data.frame(forecast)$fit,  dev=as.data.frame(forecast)$upr-as.data.frame(forecast)$fit)

fitted_values<-data.frame(time=round(time(hw_object$fitted),  3),  value_fitted=as.data.frame(hw_object$fitted)$xhat)

actual_values<-data.frame(time=round(time(hw_object$x),  3),  Actual=c(hw_object$x))


graphset<-merge(actual_values,  fitted_values,  by='time',  all=TRUE)
graphset<-merge(graphset,  for_values,  all=TRUE,  by='time')
graphset[is.na(graphset$dev),  ]$dev<-0

graphset$Fitted<-c(rep(NA,  NROW(graphset)-(NROW(for_values) + NROW(fitted_values))),  fitted_values$value_fitted,  for_values$value_forecast)


graphset.melt<-melt(graphset[, c('time', 'Actual', 'Fitted')], id='time')

p<-ggplot(graphset.melt,  aes(x=time,  y=value)) + geom_ribbon(data=graphset, aes(x=time, y=Fitted, ymin=Fitted-dev,  ymax=Fitted + dev),  alpha=.2,  fill=error.ribbon) + geom_line(aes(colour=variable), size=line.size) + geom_vline(x=max(actual_values$time),  lty=2) + xlab('Time') + ylab('Value') + theme(legend.position='bottom') + scale_colour_hue('')
return(p)

}

我面临的问题是我无法拆分此数据框以将 HWplot 函数应用于数据的单独列(预测 X410、X430、X431 等)。我将使用在列中具有不同数量的 X### 代码的数据帧,因此我将需要 R 脚本来合并动态数量的列。

最终的游戏是从数据框的不同列运行这些预测,并将预测和图表输出到 Excel 工作簿,列的名称作为每个工作表的名称。

旁注:当数据框只有一列指标时,HWplot 函数有效,但不适用于多列指标。

我用 apply 系列函数尝试过的一切都不起作用,拆分函数也不起作用。

希望这是有道理的——如果有人需要澄清,请告诉我。

4

1 回答 1

1

R-bloggers 中的“R 中的批量预测”博客文章很好地解释了如何做到这一点。

http://www.r-bloggers.com/batch-forecasting-in-r-2/

于 2016-07-29T20:30:03.213 回答