我使用以下命令将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功能有效,但是不能使用多列指标。
我尝试使用函数系列的所有东西都不起作用,也不是拆分函数。
希望这是有道理的 - 如果有人需要澄清,请告诉我。
答案 0 :(得分:1)
R-bloggers的“批量预测R”博客文章在解释如何执行此操作方面表现非常出色。