Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

9,843 views

Published on

JaLTER 公開シンポジウム2015「生物・生態系情報の統合と時系列データの解析~生物や生態系の変化を読み解く~」における発表ファイル

Published in: Data & Analytics
  • Be the first to comment

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

  1. 1. Rパッケージ KFAS を使った 時系列データの解析方法 森林総合研究所 伊東宏樹 2015-09-15 JaLTER公開シンポジウム2015 生物・生態系情報の統合と時系列データの解析 ∼生物や生態系の変化を読み解く∼
  2. 2. • 時系列データを、何も考えずに扱うのがよくないの はわかった……
  3. 3. • 時系列データを、何も考えずに扱うのがよくないの はわかった…… • とはいえ、BUGSやStanはまだ敷居が高い……
  4. 4. • 時系列データを、何も考えずに扱うのがよくないの はわかった…… • とはいえ、BUGSやStanはまだ敷居が高い…… • Rパッケージで扱うには……
  5. 5. 時系列データを扱う Rパッケージ • CRAN Task View: Time Series Analysis https://cran.r-project.org/view=TimeSeries • 状態空間モデル (state space model) • dlm, KFAS など
  6. 6. 状態空間モデル yt-1 αt-1 yt αt yt+1 αt+1状態 観測値 ノイズノイズ ノイズ ノイズ ノイズ ノイズ
  7. 7. できること • 観測ノイズの除去 • 過去:平滑化 • 現在:フィルタ • 将来の予測 • システムの推測
  8. 8. KFAS • Kalman Filter and Smoother for Exponential Family State Space Models • ポアソン分布、二項分布など、正規分布以外の分布 を扱える。 • dlmパッケージとくらべると、参考文献は少ない。
  9. 9. 実際のデータを解析 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
  10. 10. フランス・ジュラ山脈におけるハヤブサのつがい数
  11. 11. ここですること • 平滑化(観測ノイズの除去) • 予測
  12. 12. とりあえず 正規分布を使用したモデリング 観測モデル システムモデル 観測ノイズ システムノイズ yt = ↵t + ✏t, ✏t ⇠ Normal(0, 2 ✏ ) ↵t = ↵t 1 + ⌘t, ⌘t ⇠ Normal(0, 2 ⌘)
  13. 13. 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としておく。 システムノイズ 観測ノイズ 初期値
  14. 14. 平滑化 > 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 状態の値を表示 平滑化
  15. 15. 平滑化された値 > 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 この場合、状態の値と平滑化された値は同じ。
  16. 16. 平滑化されていない……😭
  17. 17. ノイズの分散をみると…… > print(fit0$model$Q) , , 1 [,1] [1,] 113.038 > print(fit0$model$H) , , 1 [,1] [1,] 0.08911987 観測ノイズの値が小さい ←観測ノイズ ←システムノイズ
  18. 18. カウントデータなので
  19. 19. 観測モデルをポアソン分布に ↵t = ↵t 1 + ⌘t, ⌘t ⇠ Normal(0, 2 ⌘) yt = Poisson(exp(↵t)) 観測モデル システムモデル
  20. 20. モデリング > 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)は指定しない。 ポアソン分布
  21. 21. 状態と平滑化された値 > 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
  22. 22. 赤色の線が平滑化された値
  23. 23. 傾きを組み込んだモデル 観測モデル システムモデル yt = Poisson(exp(↵1t)) ↵1t = ↵1t 1 + ↵2t 1 + ⌘1t, ⌘1t ⇠ Normal(0, 2 ⌘1) ↵2t = ↵2t 1 + ⌘2t, ⌘2t ⇠ Normal(0, 2 ⌘2)傾き
  24. 24. モデリング > 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次のトレンドモデル
  25. 25. 状態 > 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
  26. 26. 赤色の線が平滑化された値
  27. 27. 状態
  28. 28. 予測 > n.prediction <- 5 > prd <- predict(fit2$model, n.ahead = n.prediction, + type = "response", + level = 0.95, + interval = "confidence", + nsim = 1000) 5年先まで予測 95%信頼区間を計算 シミュレーションの回数 応答変数のスケール
  29. 29. 予測値と95%信頼区間
  30. 30. KFASのモデリング関数 • SSMarima: ARIMA(自己回帰和分移動平均)モデル • SSMcustom: 状態空間モデルの一般式によるモデル • SSMcycle: 周期モデル • SSMregression: 回帰モデル • SSMseasonal: 季節調整モデル • SSMtrend: トレンドモデル
  31. 31. 参考文献
  32. 32. 状態空間モデルについては • 北川源四郎 (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/状態空間モデル/
  33. 33. 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/

×