rパッケージ“kfas”を使った時系列データの解析方法

33
Rパッケージ“KFAS”を使った 時系列データの解析方法 森林総合研究所 伊東宏樹 2015-09-15 JaLTER公開シンポジウム2015 生物・生態系情報の統合と時系列データの解析 ~生物や生態系の変化を読み解く~

Upload: hiroki-ito

Post on 11-Apr-2017

4.656 views

Category:

Data & Analytics


1 download

TRANSCRIPT

Page 1: Rパッケージ“KFAS”を使った時系列データの解析方法

Rパッケージ“KFAS”を使った 時系列データの解析方法

森林総合研究所 伊東宏樹

2015-09-15 JaLTER公開シンポジウム2015 生物・生態系情報の統合と時系列データの解析 ~生物や生態系の変化を読み解く~

Page 2: Rパッケージ“KFAS”を使った時系列データの解析方法

• 時系列データを、何も考えずに扱うのがよくないのはわかった……

Page 3: Rパッケージ“KFAS”を使った時系列データの解析方法

• 時系列データを、何も考えずに扱うのがよくないのはわかった……

• とはいえ、BUGSやStanはまだ敷居が高い……

Page 4: Rパッケージ“KFAS”を使った時系列データの解析方法

• 時系列データを、何も考えずに扱うのがよくないのはわかった……

• とはいえ、BUGSやStanはまだ敷居が高い……

• Rパッケージで扱うには……

Page 5: Rパッケージ“KFAS”を使った時系列データの解析方法

時系列データを扱う Rパッケージ

• CRAN Task View: Time Series Analysis https://cran.r-project.org/view=TimeSeries

• 状態空間モデル (state space model) • dlm, KFAS など

Page 6: Rパッケージ“KFAS”を使った時系列データの解析方法

状態空間モデル

yt-1

αt-1

yt

αt

yt+1

αt+1状態

観測値

ノイズノイズ ノイズ

ノイズ ノイズ ノイズ

Page 7: Rパッケージ“KFAS”を使った時系列データの解析方法

できること• 観測ノイズの除去

• 過去:平滑化

• 現在:フィルタ

• 将来の予測

• システムの推測

Page 8: Rパッケージ“KFAS”を使った時系列データの解析方法

KFAS

• Kalman Filter and Smoother for Exponential Family State Space Models

• ポアソン分布、二項分布など、正規分布以外の分布を扱える。

• dlmパッケージとくらべると、参考文献は少ない。

Page 9: Rパッケージ“KFAS”を使った時系列データの解析方法

実際のデータを解析

Kéry & Schaub “Bayesian Population Analysis Using WinBUGS” 第3章のハヤブサのデータ(falcons.txt)を使用

• http://www.vogelwarte.ch/de/projekte/publikationen/bpa/complete-code-and-data-files-of-the-book.html

Page 10: Rパッケージ“KFAS”を使った時系列データの解析方法

フランス・ジュラ山脈におけるハヤブサのつがい数

Page 11: Rパッケージ“KFAS”を使った時系列データの解析方法

ここですること

• 平滑化(観測ノイズの除去)

• 予測

Page 12: Rパッケージ“KFAS”を使った時系列データの解析方法

とりあえず 正規分布を使用したモデリング観測モデル

システムモデル

観測ノイズ

システムノイズ

yt = ↵t + ✏t, ✏t ⇠ Normal(0,�2✏ )

↵t = ↵t�1 + ⌘t, ⌘t ⇠ Normal(0,�2⌘)

Page 13: Rパッケージ“KFAS”を使った時系列データの解析方法

KFASでモデリング

> mdl0 <- SSModel(Pairs ~ SSMtrend(degree = 1,

+ Q = list(matrix(NA, 1, 1))),

+ data = falcons, H = matrix(NA, 1, 1),

+ distribution = "gaussian")

> fit0 <- fitSSM(mdl0, inits = c(10,10), method = “BFGS")

推定するパラメーターをNAとしておく。

システムノイズ

観測ノイズ

初期値

Page 14: Rパッケージ“KFAS”を使った時系列データの解析方法

平滑化> out0 <- KFS(fit0$model, smoothing = c("state", "mean")) > coef(out0) Time Series: Start = 1 End = 40 Frequency = 1 [1] 34.00869 44.98658 39.00235 35.98974 20.01106 18.00396 20.99684 [8] 19.99842 17.00474 20.00000 23.00079 26.99843 29.00632 38.99526 [15] 43.00000 47.00473 56.99132 56.00631 63.00001 70.00395 81.99684 [22] 89.99763 95.00553 106.99605 114.00000 121.00315 131.99290 134.00552 [29] 142.99842 149.99764 154.01104 171.97868 163.00788 163.99683 160.98343 [36] 137.03474 156.98109 153.03315 190.97158 192.99840

状態の値を表示平滑化

Page 15: Rパッケージ“KFAS”を使った時系列データの解析方法

平滑化された値> fitted(out0) Time Series: Start = 1 End = 40 Frequency = 1 [1] 34.00869 44.98658 39.00235 35.98974 20.01106 18.00396 20.99684 [8] 19.99842 17.00474 20.00000 23.00079 26.99843 29.00632 38.99526 [15] 43.00000 47.00473 56.99132 56.00631 63.00001 70.00395 81.99684 [22] 89.99763 95.00553 106.99605 114.00000 121.00315 131.99290 134.00552 [29] 142.99842 149.99764 154.01104 171.97868 163.00788 163.99683 160.98343 [36] 137.03474 156.98109 153.03315 190.97158 192.99840

この場合、状態の値と平滑化された値は同じ。

Page 16: Rパッケージ“KFAS”を使った時系列データの解析方法

平滑化されていない……😭

Page 17: Rパッケージ“KFAS”を使った時系列データの解析方法

ノイズの分散をみると……> print(fit0$model$Q) , , 1

[,1] [1,] 113.038

> print(fit0$model$H) , , 1

[,1] [1,] 0.08911987

観測ノイズの値が小さい

←観測ノイズ

←システムノイズ

Page 18: Rパッケージ“KFAS”を使った時系列データの解析方法

カウントデータなので

Page 19: Rパッケージ“KFAS”を使った時系列データの解析方法

観測モデルをポアソン分布に

↵t = ↵t�1 + ⌘t, ⌘t ⇠ Normal(0,�2⌘)

yt = Poisson(exp(↵t))

観測モデル

システムモデル

Page 20: Rパッケージ“KFAS”を使った時系列データの解析方法

モデリング

> mdl1 <- SSModel(Pairs ~ SSMtrend(degree = 1,

+ Q = list(matrix(NA, 1, 1))),

+ data = falcons, distribution = "poisson")

> fit1 <- fitSSM(mdl1, inits = c(1), method = “BFGS")

ポアソン分布なので、観測ノイズの分散(H)は指定しない。

ポアソン分布

Page 21: Rパッケージ“KFAS”を使った時系列データの解析方法

状態と平滑化された値> out2 <- KFS(fit2$model, smoothing = c("state", “mean")) > coef(out1) Time Series: Start = 1 End = 40 Frequency = 1 [1] 3.600436 3.646996 3.575282 3.444877 3.231464 3.112745 3.073864 3.046119 3.036783 [10] 3.095805 3.192318 3.312783 3.441466 3.609914 3.742080 3.859742 3.985474 4.054406 [19] 4.152740 4.261904 4.387899 4.486665 4.564497 4.660396 4.732748 4.798104 4.868454 [28] 4.905312 4.960069 5.007768 5.047816 5.117825 5.098279 5.091911 5.062397 4.978895 [37] 5.043466 5.072529 5.218736 5.252747 > fitted(out1) Time Series: Start = 1 End = 40 Frequency = 1 [1] 36.61420 38.35927 35.70468 31.33942 25.31670 22.48267 21.62529 21.03356 [9] 20.83810 22.10502 24.34479 27.46143 31.23270 36.96287 42.18565 47.45311 [17] 53.81081 57.65089 63.60806 70.94497 80.47118 88.82469 96.01433 105.67792 [25] 113.60727 121.28031 130.11957 135.00500 142.60367 149.57048 155.68215 166.97180 [33] 163.73988 162.70046 157.96874 145.31379 155.00634 159.57731 184.70053 191.09040

Page 22: Rパッケージ“KFAS”を使った時系列データの解析方法

赤色の線が平滑化された値

Page 23: Rパッケージ“KFAS”を使った時系列データの解析方法

傾きを組み込んだモデル観測モデル

システムモデル

yt = Poisson(exp(↵1t))

↵1t = ↵1t�1 + ↵2t�1 + ⌘1t, ⌘1t ⇠ Normal(0,�2⌘1)

↵2t = ↵2t�1 + ⌘2t, ⌘2t ⇠ Normal(0,�2⌘2)傾き

Page 24: Rパッケージ“KFAS”を使った時系列データの解析方法

モデリング

> mdl2 <- SSModel(Pairs ~ SSMtrend(degree = 2,

+ Q = list(matrix(NA, 1, 1),

+ matrix(NA, 1, 1))),

+ data = falcons, distribution = "poisson")

> fit2 <- fitSSM(mdl2, inits = c(1, 1), method = "BFGS")

2次のトレンドモデル

Page 25: Rパッケージ“KFAS”を使った時系列データの解析方法

状態> out2 <- KFS(fit2$model, smoothing = c("state", "mean")) > coef(out2) Time Series: Start = 1 End = 40 Frequency = 1 level slope 1 3.722354 -0.101679163 2 3.620679 -0.115350974 3 3.505328 -0.128485351 4 3.376839 -0.130461354 5 3.246370 -0.108773871 6 3.137591 -0.074006144 7 3.063584 -0.035537613 8 3.028045 0.005883994 9 3.033929 0.049039924 10 3.082971 0.086906959 (中略)

39 5.181215 0.078153433 40 5.259369 0.078153433

Page 26: Rパッケージ“KFAS”を使った時系列データの解析方法

赤色の線が平滑化された値

Page 27: Rパッケージ“KFAS”を使った時系列データの解析方法

状態

Page 28: Rパッケージ“KFAS”を使った時系列データの解析方法

予測> n.prediction <- 5

> prd <- predict(fit2$model, n.ahead = n.prediction,

+ type = "response",

+ level = 0.95,

+ interval = "confidence",

+ nsim = 1000)

5年先まで予測

95%信頼区間を計算

シミュレーションの回数

応答変数のスケール

Page 29: Rパッケージ“KFAS”を使った時系列データの解析方法

予測値と95%信頼区間

Page 30: Rパッケージ“KFAS”を使った時系列データの解析方法

KFASのモデリング関数• SSMarima: ARIMA(自己回帰和分移動平均)モデル

• SSMcustom: 状態空間モデルの一般式によるモデル

• SSMcycle: 周期モデル

• SSMregression: 回帰モデル

• SSMseasonal: 季節調整モデル

• SSMtrend: トレンドモデル

Page 31: Rパッケージ“KFAS”を使った時系列データの解析方法

参考文献

Page 32: Rパッケージ“KFAS”を使った時系列データの解析方法

状態空間モデルについては• 北川源四郎 (2005) 時系列解析入門. 岩波書店

• Commandeur, J.F. and Koopman, S.J. (2007) An introduction to state space time series analysis. Oxford University Press(和合肇訳 『状態空間時系列分析入門』 シーエーピー出版, 2008年)

• Petris, G., Petrone S., and Campagnoli P. (2009) Dynamic linear models with R. Springer(和合肇監訳 萩原淳一郎訳 『Rによるベイジアン動的線形モデル』 朝倉書店, 2013年)

• 馬場真哉「状態空間モデル」http://logics-of-blue.com/category/統計・r/状態空間モデル/

Page 33: Rパッケージ“KFAS”を使った時系列データの解析方法

KFAS関連

• Helske J. “KFAS: Exponential family state space models in R” https://cran.r-project.org/web/packages/KFAS/vignettes/KFAS.pdf

• 小野滋「Commandeur & Koopman『状態空間時系列分析入門』をRで再現する」http://elsur.jpn.org/ck/