次を使用して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 つしかないデータ フレームがある場合に機能しますが、メトリックの複数の列では機能しません。
関数の適用ファミリーで試したすべてが機能せず、分割機能も機能しません。
これが理にかなっていることを願っています-誰かが明確にする必要がある場合は、私に知らせてください.