R:通过数据框的多个列运行预测功能

时间:2015-09-08 19:25:11

标签: r excel dataframe forecasting holtwinters

我使用以下命令将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功能有效,但是不能使用多列指标。

我尝试使用函数系列的所有东西都不起作用,也不是拆分函数。

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

1 个答案:

答案 0 :(得分:1)

R-bloggers的“批量预测R”博客文章在解释如何执行此操作方面表现非常出色。

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