状態空間モデルの
実行方法と
実行環境の比較
森林総合研究所
伊東宏樹
2014年3月16日 第61回日本生態学会大会(広島)
T13 生態学における状態空間モデルの利用
本日とりあつかうソフトウェア
• Rパッケージ
• dlm
• KFAS
• MCMC
• BUGS言語
• Stan
サンプルコードなどの置き場所
http://www001.upp.so-net.ne.jp/ito-hi/stat/2014ESJ/
Statistical
Software for
State Space
Models
Commandeur et al. (2011)

Journal of Statistical
Software 41(1)
State Space
Models in R
Petris & Petrone (2011)

Journal of Statistical
Software 41(4)
dlm
dlm
• Dynamic Linear Model (動的線形モデル)
• 線形+正規分布
• カルマンフィルタ
• パラメータ推定
• 最尤推定/ベイズ推定
dlmの記法
✓0 ⇠ N(m0, C0)
✓t = Gt✓t 1 + wt, wt ⇠ N(0, Wt)
t = 1, ... , n
データモデル
プロセスモデル
yt = Ft✓t + vt, vt ⇠ N(0, Vt)
ナイル川の流量の変化
data(Nile)
dlmによるLocal Level Model
Petris and Petrone (2011)より
## build functionの定義!
BuildLLM <- function(theta) {!
dlmModPoly(order = 1,!
dV = theta[1],!
dW = theta[2])!
}
このような関数を定義しておく。
dlmによるLocal Level Model
## パラメーターの最尤推定!
fit.llm <- dlmMLE(Nile, parm = c(100, 2),!
build = BuildLLM,!
lower = rep(1e-4, 2))!
!
## 推定したパラメーターをbuild functionで使用!
model.llm <- BuildLLM(fit.llm$par)!
!
## 平滑化!
smooth.llm <- dlmSmooth(Nile, model.llm)
平滑化
dlmSmooth()
ナイル川の流量の変化
data(Nile)
アスワンダム着工
dlmによる回帰モデル
# アスワンダム着工の前後を変数に!
x <- matrix(c(rep(0, 27),!
rep(1, length(Nile) - 27)),!
ncol = 1)
dlmによる回帰モデル
## モデル定義!
model.reg <- dlmModReg(x, dW = c(1, 0))!
BuildReg <- function(theta) {!
V(model.reg) <- exp(theta[1])!
diag(W(model.reg))[1] <- exp(theta[2])!
return(model.reg)!
}
dlmによる回帰モデル
## 最尤推定!
fit.reg <- dlmMLE(Nile,!
parm = rep(0, 2),!
build = BuildReg)!
model.reg <- BuildReg(fit.reg$par)!
smooth.reg <- dlmSmooth(Nile,!
mod = model.reg)
ナイル川の流量の変化
data(Nile)
アスワンダム着工
dlmの文献
• Petris G, Petrone S, Campagnoli (2009)
Dynamic Linear Models with R Springer
• 和合肇(監訳)・萩原淳一郎(訳)(2013)「R
によるベイジアン動的線形モデル」朝倉書店
• Petris G (2010) An R package for dynamic
linear models. Journal of Statistical
Software 36(12)
KFAS
KFAS
• Kalman Filter and Smoother for Exponential
Family State Space Models
• 正規分布以外の分布(ポアソン分布など)を扱
える
• 最尤推定
KFASの記法
t = 1, ..., n
↵1 ⇠ N(a1, P1)
プロセスモデル
データモデル
yt = Zt↵t + ✏t, ✏t ⇠ N(0, Ht)
↵t+1 = Tt↵t + Rt⌘t, ⌘t ⇠ N(0, Qt)
イギリスのバン運転手の死者・重傷者数
data(Seatbelts)
KFASによるポアソン分布の状態空間モデル
help(KFAS)より
model.van <- SSModel(VanKilled ~ law +!
SSMtrend(degree = 1,!
Q = list(matrix(NA))) +!
SSMseasonal(period = 12,!
sea.type = “dummy",!
Q = matrix(NA)),!
data = Seatbelts,!
distribution = "poisson")
KFASによるポアソン分布の
状態空間モデル
fit.van <- fitSSM(inits = c(-4, -7, 2),!
model = model.van,!
method = “BFGS")!
!
pred.van <- predict(fit.van$model,!
states = 1:2)
lawとSSMtrend()のみをつかう
季節変化をのぞいた予測値
シートベルト着用義務化
BUGS
WinBUGS, OpenBUGS, JAGS
BUGS
• MCMCによるベイズ推定
• 柔軟なモデリング
• Rパッケージでは対応できないモデル
例題
• ある生物の個体数を推定する。
• 一定の発見確率にしたがって発見される。
Kéry & Schaub (2011) Bayesian Population
Analysis using WinBUGS: A hierarchical
perspective Chapter 5を参考にした。
データ生成
set.seed(1234)!
n.t <- 50 # 観察回数!
N.lat <- rep(50, n.t) # 真の個体数!
p <- 0.7 # 発見確率!
N.obs <- rbinom(n.t, N.lat, p) # 観察個体数!
生成されたデータ
Binomial(50, 0.7)
真の個体数
観測された個体数
BUGSモデル
var!
N, # 観察回数!
y[N], # 観察された個体数!
y_hat[N], # 「真の個体数」の推定値!
lambda[N], # log(y_hat)!
p, # 発見確率!
tau, sigma;
BUGSモデル
model {!
## データモデル!
for (t in 1:N) {!
y[t] ~ dbin(p, y_hat[t]);!
y_hat[t] <- trunc(exp(lambda[t]));!
}!
## プロセスモデル!
for (t in 2:N) {!
lambda[t] ~ dnorm(lambda[t - 1], tau);!
}!
## 事前分布!
lambda[1] ~ dnorm(0, 1.0E-4);!
p ~ dbeta(2, 2);!
sigma ~ dunif(0, 100);!
tau <- 1 / (sigma * sigma);!
}
JAGSによる実行
inits <- list()!
inits[[1]] <- list(p = 0.9, sigma = 1,!
lambda = rep(log(max(N.obs) + 1), n.t))!
inits[[2]] <- list(p = 0.7, sigma = 3,!
lambda = rep(log(max(N.obs) + 1), n.t))!
inits[[3]] <- list(p = 0.8, sigma = 5,!
lambda = rep(log(max(N.obs) + 1), n.t))!
!
model <- jags.model("ks51.bug.txt",!
data = list(N = n.t, y = N.obs),!
inits = inits, n.chains = 3,!
n.adapt = 100000)!
samp <- coda.samples(model,!
variable.names = c("y_hat", “sigma",!
"p"),!
n.iter = 3000000, thin = 3000)!
推定結果
真の個体数
観測された個体数
「真の個体数」の推定値
Stan
http://mc-stan.org/
Stan
• MCMCによるベイズ推定
• Hamiltonian Monte Carlo (HMC)
• No U-Turn Sampling (NUTS)
• Stan → C++ → ネイティブバイナリ
Stan
• CmdStan
• コマンドラインから
• RStan
• Rから
• PyStan
• Pythonから
StanによるDLM
data(Nile)を使用
StanによるDLM
data {!
int<lower=0> N;!
matrix[1, N] y;!
}!
transformed data {!
matrix[1, 1] F;!
matrix[1, 1] G;!
vector[1] m0;!
cov_matrix[1] C0;!
!
F[1, 1] <- 1;!
G[1, 1] <- 1;!
m0[1] <- 0;!
C0[1, 1] <- 1.0e+6;!
}
データ
dlmと同様の
データを用意
StanによるDLM
parameters {!
real<lower=0> sigma[2];!
}!
transformed parameters {!
vector[1] V;!
cov_matrix[1] W;!
!
V[1] <- sigma[1] * sigma[1];!
W[1, 1] <- sigma[2] * sigma[2];!
}!
パラメータ
dlmと同様の
パラメータを
用意
StanによるDLM
model {!
y ~ gaussian_dlm_obs(F, G, V, W, m0, C0);!
sigma ~ uniform(0, 1.0e+6);!
}
モデル
StanによるDLM
library(rstan)!
!
model <- stan("kalman.stan",!
data = list(y = matrix(c(Nile),!
nrow = 1),!
N = length(Nile)),!
pars = c("sigma"),!
chains = 3,!
iter = 1500, warmup = 500,!
thin = 1)
MCMCの軌跡
traceplot(fit, pars = "sigma", inc_warmup = FALSE)
StanによるDLM
> print(fit)!
Inference for Stan model: kalman.!
3 chains, each with iter=1500; warmup=500; thin=1; !
post-warmup draws per chain=1000, total post-warmup draws=3000.!
!
mean se_mean sd 2.5% 25% 50% 75% 97.5% n_eff Rhat!
sigma[1] 121.2 0.5 13.8 92.6 112.7 121.5 130.3 148.4 889 1!
sigma[2] 45.5 0.6 17.6 18.3 32.7 43.2 55.7 85.2 833 1!
lp__ -541.6 0.0 1.1 -544.6 -542.0 -541.3 -540.9 -540.6 904 1!
!
Samples were drawn using NUTS(diag_e) at Sun Feb 9 06:06:42 2014.!
For each parameter, n_eff is a crude measure of effective sample size,!
and Rhat is the potential scale reduction factor on split chains (at !
convergence, Rhat=1).!
StanによるDLM
sigma <- apply(extract(fit, "sigma")$sigma, 2, mean)!
!
library(dlm)!
!
buildNile <- function(theta) {!
dlmModPoly(order = 1, dV = theta[1], dW = theta[2])!
}!
modNile <- buildNile(sigma^2)!
smoothNile <- dlmSmooth(Nile, modNile)
ベイズ推定されたパラメータをdlmで使用
平滑化
Stanでベイズ推定されたパラメータをdlmで使用
Stanによる状態空間モデルの解析
• gaussian_dlm_obs()でうまくいかないことも
• 自分でモデルを記述することも当然可能
Stanによる状態空間モデルの解析
data {!
int<lower=0> N;!
real y[N];!
}!
parameters {!
real theta[N];!
real<lower=0> sigma[2];!
}!
Stanによる状態空間モデルの解析
model {!
// データモデル!
for (t in 1:N) {!
y[t] ~ normal(theta[t], sigma[1]);!
}!
!
// プロセスモデル!
for (t in 2:N) {!
theta[t] ~ normal(theta[t - 1], sigma[2]);!
}!
!
// 事前分布!
theta[1] ~ normal(0, 1.0e+4);!
sigma ~ uniform(0, 1.0e+6);!
}
まとめ
状態空間モデルをあつかえるソフトウェア
• Rパッケージ: dlm, KFAS
• 関数に与える引数の意味を理解する。
• ベイズ推定: BUGS, Stan
• 柔軟なモデリングが可能。
• 計算時間はかかる。
• 上記以外のソフトウェアもある。

More Related Content

PDF
Rパッケージ“KFAS”を使った時系列データの解析方法
PPTX
StanとRでベイズ統計モデリング読書会(Osaka.stan) 第6章
PDF
パターン認識 第10章 決定木
PDF
PRML上巻勉強会 at 東京大学 資料 第2章2.3.3 〜 2.5.2
PDF
Stanの便利な事後処理関数
PDF
R実践 機械学習による異常検知 01
PDF
StanとRでベイズ統計モデリング 11章 離散値をとるパラメータ
PDF
Rによる分類木 入門
Rパッケージ“KFAS”を使った時系列データの解析方法
StanとRでベイズ統計モデリング読書会(Osaka.stan) 第6章
パターン認識 第10章 決定木
PRML上巻勉強会 at 東京大学 資料 第2章2.3.3 〜 2.5.2
Stanの便利な事後処理関数
R実践 機械学習による異常検知 01
StanとRでベイズ統計モデリング 11章 離散値をとるパラメータ
Rによる分類木 入門

What's hot (20)

PDF
PFI Seminar 2012/03/15 カーネルとハッシュの機械学習
PDF
公平性を保証したAI/機械学習
アルゴリズムの最新理論
ZIP
今さら聞けないカーネル法とサポートベクターマシン
PDF
Rで架空データの発生
PDF
Stanコードの書き方 中級編
PDF
Rの高速化
PDF
詳説word2vec
PPTX
MCMC法
PPTX
MCMCでマルチレベルモデル
PDF
統計モデリングで癌の5年生存率データから良い病院を探す
 
PDF
スパースモデリング、スパースコーディングとその数理(第11回WBA若手の会)
PPTX
主成分分析
PPTX
多目的強凸最適化のパレート集合のトポロジー
PDF
ggplot2をつかってみよう
PPTX
データサイエンス概論第一 5 時系列データの解析
PDF
Chapter9 一歩進んだ文法(前半)
PPTX
5分で分かる自己組織化マップ
PPTX
Sliced Wasserstein距離と生成モデル
PDF
数学プログラムを Haskell で書くべき 6 の理由
PDF
golang profiling の基礎
PFI Seminar 2012/03/15 カーネルとハッシュの機械学習
公平性を保証したAI/機械学習
アルゴリズムの最新理論
今さら聞けないカーネル法とサポートベクターマシン
Rで架空データの発生
Stanコードの書き方 中級編
Rの高速化
詳説word2vec
MCMC法
MCMCでマルチレベルモデル
統計モデリングで癌の5年生存率データから良い病院を探す
 
スパースモデリング、スパースコーディングとその数理(第11回WBA若手の会)
主成分分析
多目的強凸最適化のパレート集合のトポロジー
ggplot2をつかってみよう
データサイエンス概論第一 5 時系列データの解析
Chapter9 一歩進んだ文法(前半)
5分で分かる自己組織化マップ
Sliced Wasserstein距離と生成モデル
数学プログラムを Haskell で書くべき 6 の理由
golang profiling の基礎
Ad

Viewers also liked (17)

PPT
Hidrogeología básica de la Península de Yucatán
PDF
FCN-Based 6D Robotic Grasping for Arbitrary Placed Objects
PDF
生存時間分析の書き方
PDF
Data assim r
PDF
機械の代わりに人間が学習入門
PDF
5分でわかるかもしれないglmnet
PPTX
MCMCによる回帰分析@ベイズセミナー
ODP
PDF
分析のビジネス展開を考える―状態空間モデルを例に @TokyoWebMining #47
PPTX
カルマンフィルタについて
PDF
『予測にいかす統計モデリングの基本』の売上データの分析をトレースしてみた
 
PDF
R stan導入公開版
PDF
論文紹介 Combining Model-Based and Model-Free Updates for Trajectory-Centric Rein...
PPT
Agitacion
PDF
マルコフ連鎖モンテカルロ法入門-1
PDF
バンディットアルゴリズム入門と実践
PDF
機械学習によるデータ分析まわりのお話
Hidrogeología básica de la Península de Yucatán
FCN-Based 6D Robotic Grasping for Arbitrary Placed Objects
生存時間分析の書き方
Data assim r
機械の代わりに人間が学習入門
5分でわかるかもしれないglmnet
MCMCによる回帰分析@ベイズセミナー
分析のビジネス展開を考える―状態空間モデルを例に @TokyoWebMining #47
カルマンフィルタについて
『予測にいかす統計モデリングの基本』の売上データの分析をトレースしてみた
 
R stan導入公開版
論文紹介 Combining Model-Based and Model-Free Updates for Trajectory-Centric Rein...
Agitacion
マルコフ連鎖モンテカルロ法入門-1
バンディットアルゴリズム入門と実践
機械学習によるデータ分析まわりのお話
Ad

Similar to 状態空間モデルの実行方法と実行環境の比較 (20)

PDF
Stanとdlmによる状態空間モデル
PDF
RStanとShinyStanによるベイズ統計モデリング入門
PDF
みどりぼん9章前半
PPTX
NagoyaStat#7 StanとRでベイズ統計モデリング(アヒル本)4章の発表資料
PDF
Tokyo r94 beginnerssession3
PDF
データ解析のための統計モデリング入門9章後半
PDF
データ解析のための統計モデリング入門9章後半
PPTX
RとStanで分散分析
PDF
StanTutorial
PDF
モンテカルロサンプリング
PPTX
MCMC and greta package社内勉強会用スライド
PDF
R_note_01_ver1.1
PDF
Yamadai.Rデモンストレーションセッション
PPTX
Mplus tutorial
PDF
20140920 tokyo r43
PDF
SappoRo.R #2 初心者向けWS資料
PDF
MCMCサンプルの使い方 ~見る・決める・探す・発生させる~
 
PPTX
第七回統計学勉強会@東大駒場
PDF
空間統計を使って地価分布図を描いてみる
Stanとdlmによる状態空間モデル
RStanとShinyStanによるベイズ統計モデリング入門
みどりぼん9章前半
NagoyaStat#7 StanとRでベイズ統計モデリング(アヒル本)4章の発表資料
Tokyo r94 beginnerssession3
データ解析のための統計モデリング入門9章後半
データ解析のための統計モデリング入門9章後半
RとStanで分散分析
StanTutorial
モンテカルロサンプリング
MCMC and greta package社内勉強会用スライド
R_note_01_ver1.1
Yamadai.Rデモンストレーションセッション
Mplus tutorial
20140920 tokyo r43
SappoRo.R #2 初心者向けWS資料
MCMCサンプルの使い方 ~見る・決める・探す・発生させる~
 
第七回統計学勉強会@東大駒場
空間統計を使って地価分布図を描いてみる

状態空間モデルの実行方法と実行環境の比較