時系列予測の問題


8

Rでの時系列のモデリングについて質問を受けました。私のデータは次のマトリックスで構成されています。

1   0.03333333 0.01111111 0.9555556
2   0.03810624 0.02309469 0.9387991
3   0.00000000 0.03846154 0.9615385
4   0.03776683 0.03119869 0.9310345
5   0.06606607 0.01201201 0.9219219
6   0.03900325 0.02058505 0.9404117
7   0.03125000 0.01562500 0.9531250
8   0.00000000 0.00000000 1.0000000
9   0.04927885 0.01802885 0.9326923
10  0.06106870 0.02290076 0.9160305
11  0.03846154 0.00000000 0.9615385
12  0.00000000 0.00000000 1.0000000
13  0.06028636 0.03843256 0.9012811
14  0.09646302 0.05144695 0.8520900
15  0.04444444 0.06666667 0.8888889

これらのマトリックスには合計200行あります。

各状況でわかるように、各行の合計は1です。これは、値が全体のパーセンテージであるためです。たとえば、行1には、変数aが3.33%、変数2が1.11%、検証可能な変数3が95.5%含まれています。最初の列は、値が測定された年を示しています。

私の目標は、今後5年間、つまり200年から205年までの予測を行うことです。

3つの通常の時系列予測を行うことで、それを実行できます。しかし、その予測では、合計が1になることはありません。これは非常に重要です。通常は、有馬や指数平滑法などの手法を使用します。

誰かがそのような問題を予測する方法を知っていますか?


これらが個別の比率(たとえば、ユニットの総数を指定した場合のカテゴリーA、B、およびCのユニット数)または連続比率であるかどうかを知っていますか?それらが離散している場合、各時点での合計ユニット数を知っていますか?
ガン-モニカの回復

はい、これらの値は個別の単位に基づいています。合計数を使用してこれらの比率を計算しました。
karmabob 2015年

回答:


8

構成的な時系列を予測しようとしています。つまり、3つのコンポーネントがあり、それらはすべて0と1の間にあり、合計が1になるように制約されています。

この問題は、適切な一般化されたロジスティック変換を使用することにより、標準の指数平滑法を使用して対処できます。2010年の予測に関する国際シンポジウム、ケーラー、スナイダー、オード&ボーモントによるこれに関するプレゼンテーションがあり、それが論文になりました(Snyder et al。、2017、International Journal of Forecasting)。

データを使ってこれを見ていきましょう。データをobs時系列の行列に読み込みます。

obs <- structure(c(0.03333333, 0.03810624, 0, 0.03776683, 0.06606607, 
0.03900325, 0.03125, 0, 0.04927885, 0.0610687, 0.03846154, 0, 
0.06028636, 0.09646302, 0.04444444, 0.01111111, 0.02309469, 0.03846154, 
0.03119869, 0.01201201, 0.02058505, 0.015625, 0, 0.01802885, 
0.02290076, 0, 0, 0.03843256, 0.05144695, 0.06666667, 0.9555556, 
0.9387991, 0.9615385, 0.9310345, 0.9219219, 0.9404117, 0.953125, 
1, 0.9326923, 0.9160305, 0.9615385, 1, 0.9012811, 0.85209, 0.8888889
), .Dim = c(15L, 3L), .Dimnames = list(NULL, c("Series 1", "Series 2", 
"Series 3")), .Tsp = c(1, 15, 1), class = c("mts", "ts", "matrix"
))

次のように入力して、これが機能したかどうかを確認できます

obs

ϵϵ

epsilon <- 0.0001
obs[obs<epsilon] <- epsilon

これで、変更された行の合計が1になりません。これを修正できます(ただし、これにより予測が悪化する可能性があります)。

obs <- obs/matrix(rowSums(obs),nrow=nrow(obs),ncol=ncol(obs),byrow=FALSE)

次に、プレゼンテーションの35ページに従ってデータを変換します。

zz <- log(obs[,-ncol(obs)]/obs[,ncol(obs)])
colnames(zz) <- head(colnames(obs),-1)
zz

forecastパッケージをロードし、5つの時点の範囲を設定します。

library(forecast)
horizon <- 5

次に、変換されたデータを列ごとにモデル化して予測します。ここでは、単にを呼び出していますets()。これは、状態空間指数平滑化モデルに適合しようとします。3つの系列すべてに対して単一の指数平滑法を使用していることがわかりますが、特に15を超える期間がある場合は、傾向モデルが選択される可能性があります。または、月次データがある場合は、ts()with を使用して、潜在的な季節性があることをRに説明しますfrequency=12-次にets()季節モデルを調べます。

baz <- apply(zz,2,function(xx)forecast(ets(xx),horizon=horizon)["mean"])
forecasts.transformed <- cbind(baz[[1]]$mean,baz[[2]]$mean)

次に、プレゼンテーションの38ページに従って予測を逆変換します。

forecasts <- cbind(exp(forecasts.transformed),1)/(1+rowSums(exp(forecasts.transformed)))

最後に、履歴と予測をプロットしましょう。

plot(obs[,1],ylim=c(0,1),xlim=c(1,nrow(obs)+horizon),type="n",ylab="")
for ( ii in 1:ncol(obs) ) {
    lines(obs[,ii],type="o",pch=19,col=ii)
    lines(forecasts[,ii],type="o",pch=21,col=ii,lty=2)
}
legend("left",inset=.01,lwd=1,col=1:ncol(obs),pch=19,legend=colnames(obs))

組成予測

編集:構成時系列予測に関する論文がちょうど登場しました。読んだことはありませんが、興味があるかもしれません。


@stephan Kolassaさん、ありがとうございます。Rに構成的時系列で予測を行うためのツールパックがあるかどうか誰もが知っていますか
karmabob 2015年

私はそうは思わない、そしてこれらの作者は「どんな出版物にも常にコンパニオンRパッケージを書く」人々の中にはいない。しかし、彼らのアプローチは非常に簡単であり、あなたが(例えば、標準的なツールを使用することができた後、あなたの時系列を前処理するために以上の5行を必要としないはずets()forecast状態空間指数平滑用パッケージ)。
Stephan Kolassa、2015年

私の数学的知識はそれほど良くありません。データの前処理を支援できますか?データが正しい形式の場合、予測プロセスを実行できます。
karmabob 2015年

私が作曲時系列で抱えていた問題を解決するための時間を見つけたなら、私はさまよっていましたか?
karmabob 2015

どうぞ。すみません、しばらくかかりました。私は実際にプレゼンテーションを理解することに行き詰まり、頭をクリアしなければなりませんでした。
Stephan Kolassa、2015
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.