winbugs入門cse.fra.affrc.go.jp/okamura/bayes/winbugs.pdf · 2007-07-31 · winbugsとは • bugs...

41
WinBUGS入門 遠洋水産研究所 外洋資源部 鯨類管理研究室 岡村 水産資源学におけるベイズ統計の 応用ワークショップ 200782-3日,中央水研

Upload: others

Post on 04-Apr-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: WinBUGS入門cse.fra.affrc.go.jp/okamura/bayes/winbugs.pdf · 2007-07-31 · WinBUGSとは • BUGS (Bayesian Inference Using Gibbs Sampling)のWindowsバージョン フリーのソフトウェア

WinBUGS入門

遠洋水産研究所 外洋資源部

鯨類管理研究室

岡村 寛

水産資源学におけるベイズ統計の応用ワークショップ

2007年8月2-3日,中央水研

Page 2: WinBUGS入門cse.fra.affrc.go.jp/okamura/bayes/winbugs.pdf · 2007-07-31 · WinBUGSとは • BUGS (Bayesian Inference Using Gibbs Sampling)のWindowsバージョン フリーのソフトウェア

WinBUGSとは

• BUGS (Bayesian Inference Using Gibbs Sampling)のWindowsバージョン

フリーのソフトウェア

Gibbs samplingを利用した事後確率からのサ

ンプリングを行う

Page 3: WinBUGS入門cse.fra.affrc.go.jp/okamura/bayes/winbugs.pdf · 2007-07-31 · WinBUGSとは • BUGS (Bayesian Inference Using Gibbs Sampling)のWindowsバージョン フリーのソフトウェア

WinBUGS

• プログラムコードはRとよく似ている

• それゆえ,Rでプログラムが書けると理解が早いし,何かと便利

• R2WinBUGSというRからWinBUGSを呼び出して実行するプログラムも開発されている

• 様々な状況に自動で対応して適当なサンプリング法を選んでくれる

例. log-concave → adaptive rejection sampling範囲を制限したとき → スライスサンプラー

範囲制約がないとき → Metropolis法

Page 4: WinBUGS入門cse.fra.affrc.go.jp/okamura/bayes/winbugs.pdf · 2007-07-31 · WinBUGSとは • BUGS (Bayesian Inference Using Gibbs Sampling)のWindowsバージョン フリーのソフトウェア

WinBUGS画面

Page 5: WinBUGS入門cse.fra.affrc.go.jp/okamura/bayes/winbugs.pdf · 2007-07-31 · WinBUGSとは • BUGS (Bayesian Inference Using Gibbs Sampling)のWindowsバージョン フリーのソフトウェア

WinBUGSプログラム

基本的に,model.odc,data.dat,inits.inの3つのファイルからなる.

model.odcの中身の例model{…for (i in 1:N){Y[i] ~ dnorm(mu[i],tau)mu[i] <- a + b*x[i] # a + b*(x[i]-mean(x)) is better.

}…}

Page 6: WinBUGS入門cse.fra.affrc.go.jp/okamura/bayes/winbugs.pdf · 2007-07-31 · WinBUGSとは • BUGS (Bayesian Inference Using Gibbs Sampling)のWindowsバージョン フリーのソフトウェア

WinBUGSプログラミングの注意1• 変数を2度定義できない

x <- 1x <- 3 × ベクトルや行列で対応

• if文は使えない

X = (3, NA, 2) X=cbind(c(1,3),c(3,2))X[t,2]~dpois(N[X[t,1]]) (ただし,この場合はNAのままでもOK)

• × Y ~ dnorm(log(N), sigma)○ Y ~ dnorm(LN, sigma)

LN <- log(N)

Page 7: WinBUGS入門cse.fra.affrc.go.jp/okamura/bayes/winbugs.pdf · 2007-07-31 · WinBUGSとは • BUGS (Bayesian Inference Using Gibbs Sampling)のWindowsバージョン フリーのソフトウェア

WinBUGSプログラミングの注意2

• 最初に少ないパラメータからスタートして(いくつかのパラメータをfix),段々複雑にする

• R2WinBUGSを使うとデータの扱いなど便利

• bugs(data, inits,… , debug=TRUE,…) • Trapというエラーメッセージが出ることがある

→ 初期値がおかしい

事前分布を少し狭く ~ 徐々に広げる

Page 8: WinBUGS入門cse.fra.affrc.go.jp/okamura/bayes/winbugs.pdf · 2007-07-31 · WinBUGSとは • BUGS (Bayesian Inference Using Gibbs Sampling)のWindowsバージョン フリーのソフトウェア

WinBUGSプログラミングの注意3

• まず最尤法を用いた簡単なプログラムであたりをつける

• プロット!プロット!プロット!

• あまり洗練されたプログラムを書こうとしないこと

• よく使う人と友達になる

• 仲間を増やす

Page 9: WinBUGS入門cse.fra.affrc.go.jp/okamura/bayes/winbugs.pdf · 2007-07-31 · WinBUGSとは • BUGS (Bayesian Inference Using Gibbs Sampling)のWindowsバージョン フリーのソフトウェア

例題1(検定)

• 池A,池Bの中のある場所をランダムに選ん

で毎回同じ時間調査し,その中にいるメダカの数を数えた結果,下のようなデータが得られた(池Bは行きにくいので3回しか調査できなかった).池Aと池Bのメダカの数は違うであろうか?

Page 10: WinBUGS入門cse.fra.affrc.go.jp/okamura/bayes/winbugs.pdf · 2007-07-31 · WinBUGSとは • BUGS (Bayesian Inference Using Gibbs Sampling)のWindowsバージョン フリーのソフトウェア

検定仮説

• 検定したい仮説:

池Aの平均メダカ数 = 池Bの平均メダカ数

池Aと池Bの平均メダカ数は,

池A: 平均 1.5,分散 1.7池B: 平均 0.0,分散 0.0

Page 11: WinBUGS入門cse.fra.affrc.go.jp/okamura/bayes/winbugs.pdf · 2007-07-31 · WinBUGSとは • BUGS (Bayesian Inference Using Gibbs Sampling)のWindowsバージョン フリーのソフトウェア

t検定

池Bはメダカのサンプルなしなので,池Aの平均

が0と有意に違うかどうかを見るt検定を行う

> x <- c(1,1,0,4,2,2,0,2)> t.test(x)…t = 3.2404, df = 7, p-value = 0.01425 有意

Page 12: WinBUGS入門cse.fra.affrc.go.jp/okamura/bayes/winbugs.pdf · 2007-07-31 · WinBUGSとは • BUGS (Bayesian Inference Using Gibbs Sampling)のWindowsバージョン フリーのソフトウェア

通常の検定の何が問題か?

• 池Bはすべて0の観測値であるが,3回0が続いただけである.これは10回0が続いたのと

は証拠の大きさが異なるはずである.先の検定は,そこのとこを考慮していない.

• 3回とも0だったので分散は0となり,0確実である.しかし,3回しかやってないので,たまたま0が続いたということもあるのでは?

> rpois(3,1.5)[1] 0 0 0 なんていこうともありうる.

Page 13: WinBUGS入門cse.fra.affrc.go.jp/okamura/bayes/winbugs.pdf · 2007-07-31 · WinBUGSとは • BUGS (Bayesian Inference Using Gibbs Sampling)のWindowsバージョン フリーのソフトウェア

GLMしてみる

• カウントデータであるし,池Aの平均と分散は

およそ等しいのでポアソン分布を仮定してGLMしてみる

a <- factor(c(rep("A",8),rep("B",3)))x1 <- data.frame(area=a, med=c(x,rep(0,3)))res <-

glm(med~area,family=poisson,data=x1)

Page 14: WinBUGS入門cse.fra.affrc.go.jp/okamura/bayes/winbugs.pdf · 2007-07-31 · WinBUGSとは • BUGS (Bayesian Inference Using Gibbs Sampling)のWindowsバージョン フリーのソフトウェア

GLM結果

> summary(res)…Coefficients:

Estimate Std. Error z value Pr(>|z|)(Intercept) 0.4055 0.2887 1.405 0.160areaB -19.7081 5442.46 -0.004 0.997

収束していない.これは池Bが全部0だからである

Page 15: WinBUGS入門cse.fra.affrc.go.jp/okamura/bayes/winbugs.pdf · 2007-07-31 · WinBUGSとは • BUGS (Bayesian Inference Using Gibbs Sampling)のWindowsバージョン フリーのソフトウェア

こんなふうに考えてみる

池Aから3回続けてサンプルしたとき,すべ

て0となる確率はどうなるか?これがすごく

小さかったら,池Bは池Aよりメダカが少な

いと考えてもおかしくないであろう.確率が

大きければ,池Aと池Bが違うと考える根

拠は希薄であることになる.

Page 16: WinBUGS入門cse.fra.affrc.go.jp/okamura/bayes/winbugs.pdf · 2007-07-31 · WinBUGSとは • BUGS (Bayesian Inference Using Gibbs Sampling)のWindowsバージョン フリーのソフトウェア

事後予測分布

ベイズ推定で考えると,池Aのデータが与えられたとき,

新たな調査を行って3回続けて0となる確率を推定す

れば良い

y = {新たに調査したら3回続けて0}とするとき,事後予

測分布P(y|x) = ∫ P(y|θ)P(θ|x)dθを推定する

ポアソン分布を仮定すると3回続けて0= {exp(-θ)}3 = exp(-3θ)

Page 17: WinBUGS入門cse.fra.affrc.go.jp/okamura/bayes/winbugs.pdf · 2007-07-31 · WinBUGSとは • BUGS (Bayesian Inference Using Gibbs Sampling)のWindowsバージョン フリーのソフトウェア

WinBUGSコード

model{Jm ~ dunif(0,100) mu <- pow(Jm,-2) for (i in 1:N){x[i] ~ dpois(mu) # likelihood

}Prob <- exp(-3*mu)}list(x = c(1,1,0,4,2,2,0,2), N=8) # data

Page 18: WinBUGS入門cse.fra.affrc.go.jp/okamura/bayes/winbugs.pdf · 2007-07-31 · WinBUGSとは • BUGS (Bayesian Inference Using Gibbs Sampling)のWindowsバージョン フリーのソフトウェア

WinBUGS実行

1. プログラムをWinBUGS上で開く

2. ツールバーのModelのSpecification…を選択

3. プログラムのmodel部分を選んで,Specification Toolのcheck modelをクリック

4. データ先頭のlistを選んで,Specification Toolのload dataをクリック

5. compileをクリック

Page 19: WinBUGS入門cse.fra.affrc.go.jp/okamura/bayes/winbugs.pdf · 2007-07-31 · WinBUGSとは • BUGS (Bayesian Inference Using Gibbs Sampling)のWindowsバージョン フリーのソフトウェア

WinBUGS実行

6. 初期値を自動生成するため,今回はgen initsをクリック

7. ツールバーInferenceをクリックして,Samples…を選択

8. Sample Monitor Toolのnodeにmuと入れて,setをクリック

9. Sample Monitor ToolのnodeにProbと入れて,setをクリック

Page 20: WinBUGS入門cse.fra.affrc.go.jp/okamura/bayes/winbugs.pdf · 2007-07-31 · WinBUGSとは • BUGS (Bayesian Inference Using Gibbs Sampling)のWindowsバージョン フリーのソフトウェア

WinBUGS実行

10. 再びツールバーのModelをクリックし,今度はUpdate…を選択

11. Update Toolのupdateボタンをクリック

12. Sample Monitor Toolに行って,nodeにmuと入れる.下のボタンがactiveになる

13. densityやstatsボタンを押して結果を見る

14. nodeにProbを入れて同じことをする

Page 21: WinBUGS入門cse.fra.affrc.go.jp/okamura/bayes/winbugs.pdf · 2007-07-31 · WinBUGSとは • BUGS (Bayesian Inference Using Gibbs Sampling)のWindowsバージョン フリーのソフトウェア

WinBUGS実行

と文章や口で言っても分かりにくいので,実際

にやってみる

実演

WinBUGS – the movie!というページもある.動画で紹介.http://www.mrc-bsu.cam.ac.uk/bugs/winbugs/winbugsthemovie.html

Page 22: WinBUGS入門cse.fra.affrc.go.jp/okamura/bayes/winbugs.pdf · 2007-07-31 · WinBUGSとは • BUGS (Bayesian Inference Using Gibbs Sampling)のWindowsバージョン フリーのソフトウェア

事後分布

平均 1.43 95%CI[0.72, 2.38]

平均 0.03 95%CI[0.001, 0.11]

Page 23: WinBUGS入門cse.fra.affrc.go.jp/okamura/bayes/winbugs.pdf · 2007-07-31 · WinBUGSとは • BUGS (Bayesian Inference Using Gibbs Sampling)のWindowsバージョン フリーのソフトウェア

まとめ

• ベイズ推定によって,うまいこと問題(池Bのサンプルサイズを考慮,観測したどのデータも0,など)を回避していることに注意

• 池Bの結果を,池Aの結果が与えられたという条件のもとで,池A=池Bとしたとき,池Bの結

果と同じようになる確率で評価した.他にどんなモデリングが考えられるか?(例.池Bの方も池Aと同じようにモデル化して,二つの平均を比較するとか)

Page 24: WinBUGS入門cse.fra.affrc.go.jp/okamura/bayes/winbugs.pdf · 2007-07-31 · WinBUGSとは • BUGS (Bayesian Inference Using Gibbs Sampling)のWindowsバージョン フリーのソフトウェア

例題2(階層ベイズ)

大西洋ビンナガマグロの漁獲量と

CPUEのデータにプロダクションモデ

ルをフィットし,そのパラメータの推定

結果を用いて,MSYを計算せよ.

最近の漁獲量は適切な水準にあると

言えるか?

Page 25: WinBUGS入門cse.fra.affrc.go.jp/okamura/bayes/winbugs.pdf · 2007-07-31 · WinBUGSとは • BUGS (Bayesian Inference Using Gibbs Sampling)のWindowsバージョン フリーのソフトウェア

CPUE (Catch Per Unit Effort)CPUE = 漁獲量 / 努力量

CPUE = qPq:漁獲効率,P:資源量(個体数 or 個体重量)

CPUEを使って個体群の増減が分かる

年トレンドの推定 → CPUEの標準化(GLM等)

CPUE = qPx (Hilborn & Walters 1992)

Page 26: WinBUGS入門cse.fra.affrc.go.jp/okamura/bayes/winbugs.pdf · 2007-07-31 · WinBUGSとは • BUGS (Bayesian Inference Using Gibbs Sampling)のWindowsバージョン フリーのソフトウェア

MSYの考え方

個体群の増加率(ロジスティック曲線)

dP/dt = rP(1-P/K)P:資源量,r:内的自然増加率, K:環境収容量

MSY(Maximum Sustainable Yield):dP/dtが最大になるのは,P=K/2のとき

P=K/2になるように魚を獲っていたら,最大の収穫を得

ながら,個体群を健全に維持できる!

0 KP

Page 27: WinBUGS入門cse.fra.affrc.go.jp/okamura/bayes/winbugs.pdf · 2007-07-31 · WinBUGSとは • BUGS (Bayesian Inference Using Gibbs Sampling)のWindowsバージョン フリーのソフトウェア

状態空間モデル

• State-Space Model

Xt-1 Xt Xt+1

Yt-1 Yt Yt+1

プロセス方程式: Xt = G(Xt-1, wt)

観測方程式: Yt = F(Xt, vt)

Page 28: WinBUGS入門cse.fra.affrc.go.jp/okamura/bayes/winbugs.pdf · 2007-07-31 · WinBUGSとは • BUGS (Bayesian Inference Using Gibbs Sampling)のWindowsバージョン フリーのソフトウェア

個体群動態モデルのパラメータ推定

ロジスティックモデル

Bt+1 = {Bt + rBt(1-Bt/K)-Ct}exp(ut)It = qBtexp(wt)

ut ~ N(0,sA2), wt ~ N(0,sO

2)MSY = rK/4BMSY = K/2EMSY = r/(2q)

プログラム中では,rとKの相関を弱めるため,Pt = Bt/Kを使う

Page 29: WinBUGS入門cse.fra.affrc.go.jp/okamura/bayes/winbugs.pdf · 2007-07-31 · WinBUGSとは • BUGS (Bayesian Inference Using Gibbs Sampling)のWindowsバージョン フリーのソフトウェア

状態空間モデルの特徴

• 観測誤差とプロセス誤差を同時に推定することが可能

• 計算機集約的な方法と組み合わせることにより,柔軟なモデリング・推定が可能

• カルマン・フィルタは状態空間モデルの特殊な場合と考えられる

• 一般に計算大変

Page 30: WinBUGS入門cse.fra.affrc.go.jp/okamura/bayes/winbugs.pdf · 2007-07-31 · WinBUGSとは • BUGS (Bayesian Inference Using Gibbs Sampling)のWindowsバージョン フリーのソフトウェア

データ:漁獲量とCPUE

南大西洋ビンナガマグロのデータ

Page 31: WinBUGS入門cse.fra.affrc.go.jp/okamura/bayes/winbugs.pdf · 2007-07-31 · WinBUGSとは • BUGS (Bayesian Inference Using Gibbs Sampling)のWindowsバージョン フリーのソフトウェア

WinBUGS実行

実演

Page 32: WinBUGS入門cse.fra.affrc.go.jp/okamura/bayes/winbugs.pdf · 2007-07-31 · WinBUGSとは • BUGS (Bayesian Inference Using Gibbs Sampling)のWindowsバージョン フリーのソフトウェア

事後分布

110,000万回計算して,最初の10,000回をburn-inとして取り除いた

Page 33: WinBUGS入門cse.fra.affrc.go.jp/okamura/bayes/winbugs.pdf · 2007-07-31 · WinBUGSとは • BUGS (Bayesian Inference Using Gibbs Sampling)のWindowsバージョン フリーのソフトウェア

RとKの相関

相関係数 = -0.84

r 0.0 0.2 0.4

K

200.0

300.0

400.0

500.0

600.0

Page 34: WinBUGS入門cse.fra.affrc.go.jp/okamura/bayes/winbugs.pdf · 2007-07-31 · WinBUGSとは • BUGS (Bayesian Inference Using Gibbs Sampling)のWindowsバージョン フリーのソフトウェア

自己相関thinningなし thinning=50

thinning=100 thinning=200

Page 35: WinBUGS入門cse.fra.affrc.go.jp/okamura/bayes/winbugs.pdf · 2007-07-31 · WinBUGSとは • BUGS (Bayesian Inference Using Gibbs Sampling)のWindowsバージョン フリーのソフトウェア

2本のchainでやってみる

R = V/WV = poolしたchainの変動W = 個々のchainの平均変動

R

WV

Page 36: WinBUGS入門cse.fra.affrc.go.jp/okamura/bayes/winbugs.pdf · 2007-07-31 · WinBUGSとは • BUGS (Bayesian Inference Using Gibbs Sampling)のWindowsバージョン フリーのソフトウェア

2本のchainでやってみる

Page 37: WinBUGS入門cse.fra.affrc.go.jp/okamura/bayes/winbugs.pdf · 2007-07-31 · WinBUGSとは • BUGS (Bayesian Inference Using Gibbs Sampling)のWindowsバージョン フリーのソフトウェア

R2WinBUGS

• RからWinBUGSを呼び出して解析を実行し,Rの中でoutputを操作

• データや初期値の作成が楽ちん

• 即codaを使える

• 最初は少ない繰り返し数で

Page 38: WinBUGS入門cse.fra.affrc.go.jp/okamura/bayes/winbugs.pdf · 2007-07-31 · WinBUGSとは • BUGS (Bayesian Inference Using Gibbs Sampling)のWindowsバージョン フリーのソフトウェア

R2WinBUGSでやってみる

Page 39: WinBUGS入門cse.fra.affrc.go.jp/okamura/bayes/winbugs.pdf · 2007-07-31 · WinBUGSとは • BUGS (Bayesian Inference Using Gibbs Sampling)のWindowsバージョン フリーのソフトウェア

coda

Page 40: WinBUGS入門cse.fra.affrc.go.jp/okamura/bayes/winbugs.pdf · 2007-07-31 · WinBUGSとは • BUGS (Bayesian Inference Using Gibbs Sampling)のWindowsバージョン フリーのソフトウェア

まとめ

• 個体群動態モデルでは,従来観測誤差かプロセス誤差のどちらか一方だけを仮定することが多かったが,ベイズ型状態空間モデルを使うことによってどちらの誤差も考慮した分析が比較的容易に行える

• いろいろプロットして,うまくいっているか確認することが大事

• R2WinBUGSを使うといろいろ便利なことが

Page 41: WinBUGS入門cse.fra.affrc.go.jp/okamura/bayes/winbugs.pdf · 2007-07-31 · WinBUGSとは • BUGS (Bayesian Inference Using Gibbs Sampling)のWindowsバージョン フリーのソフトウェア

参考文献

Meyer, R., and Millar, R. B. 1999. BUGS in Bayesian stock assessments. CJFAS 56: 1078-1086.

Plummer, M. 2006. CODA: convergence diagnosis and output analysis for MCMC. R News 6(1): 7-11.

Spiegelhalter et al. 2003. WinBUGS user manual version 1.4.