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 関数は、メトリックの列が 1 つしかないデータ フレームがある場合に機能しますが、メトリックの複数の列では機能しません。

関数の適用ファミリーで試したすべてが機能せず、分割機能も機能しません。

これが理にかなっていることを願っています-誰かが明確にする必要がある場合は、私に知らせてください.

4

1 に答える 1

1

R-bloggers の「R でのバッチ予測」ブログ投稿は、これを行う方法を説明する優れた仕事をしています。

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

于 2016-07-29T20:30:03.213 に答える