115
部会資料 WinBUGS の使い方 平成 26 7 医薬品評価委員会 データサイエンス部会

WinBUGS の使い方 - JPMA...WinBUGS の良いところ 2 σ2 IG ~ (10,9) この例は,データが正規分布に従い,更に,そのパラメータである平均が正規分布,分散

  • Upload
    others

  • View
    5

  • Download
    0

Embed Size (px)

Citation preview

Page 1: WinBUGS の使い方 - JPMA...WinBUGS の良いところ 2 σ2 IG ~ (10,9) この例は,データが正規分布に従い,更に,そのパラメータである平均が正規分布,分散

部会資料

WinBUGS の使い方

平成 26 年 7 月

日 本 製 薬 工 業 協 会

医薬品評価委員会 データサイエンス部会

Page 2: WinBUGS の使い方 - JPMA...WinBUGS の良いところ 2 σ2 IG ~ (10,9) この例は,データが正規分布に従い,更に,そのパラメータである平均が正規分布,分散

目 次 1. はじめに ............................................................................................................................ 1

1.1 WinBUGSとは ............................................................................................................. 1 1.2 WinBUGSで何ができるのか ..................................................................................... 1 1.3 WinBUGSの良いところ ............................................................................................. 2 1.4 どのような分野で使用されているか ...................................................................... 2

2. WinBUGSの基本的な使い方 .......................................................................................... 4 2.1 WinBUGSのダウンロードとインストール ............................................................. 4 2.2 使用するモデルとデータセットおよびパラメータの初期値の準備 .................. 5 2.3 モデルのチェックと読み込み .................................................................................. 5 2.4 チェーンの本数のセットとモデル,データのコンパイル .................................. 6 2.5 パラメータの初期値のセット .................................................................................. 7 2.6 初期値の影響があるイタレーション(反復)の破棄 .......................................... 8 2.7 出力結果パラメータの設定 ...................................................................................... 9 2.8 イタレーション(反復)の実行 ............................................................................ 10 2.9 結果を表示する ........................................................................................................ 10 2.10 結果の見方 ............................................................................................................ 11 2.11 モデル,データ,解析結果の保存 .................................................................... 14 2.12 その他 .................................................................................................................... 14

3. モデル,データ,初期値 .............................................................................................. 15 3.1 ファイルの作成と保存 ............................................................................................ 15 3.2 モデル ........................................................................................................................ 15 3.3 データ ........................................................................................................................ 29 3.4 欠損値 ........................................................................................................................ 32 3.5 初期値 ........................................................................................................................ 33

4. WinBUGSによる解析事例 ............................................................................................ 34 4.1 二項分布と予測分布 ................................................................................................ 34 4.2 毒性試験データ ........................................................................................................ 36 4.3 繰り返し測定データの解析 .................................................................................... 39 4.4 生物学的同等性試験 ................................................................................................ 43 4.5 NDLM ........................................................................................................................ 46 4.6 生存時間解析 ............................................................................................................ 50 4.7 カウントデータの解析 ............................................................................................ 54 4.8 メタアナリシス ........................................................................................................ 58 4.9 コンパートメントモデルによる薬物動態解析 .................................................... 60

5. スクリプトによる実行 .................................................................................................. 65 5.1 モデルファイル ........................................................................................................ 65 5.2 データファイル ........................................................................................................ 65 5.3 初期値ファイル ........................................................................................................ 65 5.4 スクリプトファイル ................................................................................................ 65 5.5 スクリプトの実行 .................................................................................................... 66

Page 3: WinBUGS の使い方 - JPMA...WinBUGS の良いところ 2 σ2 IG ~ (10,9) この例は,データが正規分布に従い,更に,そのパラメータである平均が正規分布,分散

6. 他のソフトウエアからのWinBUGSの実行 ................................................................ 67 6.1 RからのWinBUGSの実行 ........................................................................................ 67 6.2 SASからのWinBUGSの実行 ................................................................................... 71

7. Doodle............................................................................................................................... 79 7.1 解析データとモデル ................................................................................................ 79 7.2 モデルの作成方法 .................................................................................................... 79 7.3 プレートの作成 ........................................................................................................ 80 7.4 実行方法 .................................................................................................................... 83

8. マルコフ連鎖モンテカルロ法(MCMC)とWinBUGS .......................................... 85 8.1 マルコフ連鎖 ............................................................................................................ 85 8.2 マルコフ連鎖モンテカルロ法 ................................................................................ 85 8.3 事前分布と事後分布 ................................................................................................ 86 8.4 メトロポリス・ヘイスティング法 ........................................................................ 86 8.5 ギブス・サンプリングと条件付き事後分布 ........................................................ 90 8.6 WinBUGSで用いられるサンプリング方法 ........................................................... 93 8.7 収束診断 .................................................................................................................... 94

9. 付録 .................................................................................................................................. 96 9.1 WinBUGS実行のためのSASマクロ ....................................................................... 96 9.2 Gibbs SamplingのRのソース ................................................................................. 105 9.3 WinBUGSメニュー,コマンド一覧 ..................................................................... 106 9.4 WinBUGSの主なエラーメッセージ ..................................................................... 109

10. 参考資料 ........................................................................................................................ 110

Page 4: WinBUGS の使い方 - JPMA...WinBUGS の良いところ 2 σ2 IG ~ (10,9) この例は,データが正規分布に従い,更に,そのパラメータである平均が正規分布,分散

WinBUGS とは

1

1. はじめに

1.1 WinBUGS とは

BUGS(Bayesian inference Using Gibbs Sampling)は,マルコフ連鎖モンテカルロ(Markov chain Monte Carlo; MCMC)法によりベイズ階層モデルの解析を行うソフトウェアです.開発

は 1989 年にケンブリッジ大学の MRC Biostatistics Unit で始まり,その後,ロンドンのイン

ペリアルカレッジにおいて WinBUGS が開発されました.現在,ソフトウェアの中心部分は

Open BUGS としてヘルシンキのフィンランド大学を中心に開発されています. WinBUGS は,BUGS を MS-Windows 上へ移植し,グラフイカルユーザーインターフェース

を実装したソフトウェアです.更に,文字入力によるモデルの記述方法以外にも,Doodle と

呼ばれる有向グラフによるグラフィカルな方法でのモデルの記述が可能です.また,

WinBUGS の拡張機能パッケージとして,空間疫学に用いる"GeoBUGS",Population PK/PD を

行う"PKBugs"等が開発されています. WinBUGSの 2014 年 6 月時点での最新の安定バージョンは,Version 1.4.3 です.これ

は http://www.mrc-bsu.cam.ac.uk/bugs/ から入手できます.OpenBUGSは,http://www.openbugs.net/w/ から入手できます.OpenBUGSは,WinBUGSの開発バージョ

ンとして位置づけられていましたが,WinBUGSが 2007 年以降開発を停止しているので,今

後はOpenBUGSが主流となると考えられます.その他,類似ソフトウェアにはJAGSがありま

す.JAGSは http://mcmc-jags.sourceforge.net/ から入手できます.実行環境や,インストール

方法の詳細は入手先URLを参照してください. WinBUGSはデータの加工を行う機能が無く,結果の出力も単純なものであるため,実際の

作業においてWinBUGSを直接扱うことはあまり効率が良くありません.よって,SASやR等さまざまな統計パッケージより BUGSを実行し,結果を取得するための方法が考えられてい

ます.特に,RからWinBUGSを用いるR2WinBUGSはよく用いられています(詳細は「6他の

ソフトウエアからのWinBUGSの実行」).近年は,SASからの使用経験についての報告も増

加しています.

1.2 WinBUGS で何ができるのか

WinBUGS は,上述のように MCMC 法によるデータ解析を行うことのできるソフトウェア

であり,複雑なデータ解析モデルの一つであるベイズ階層モデルの解析ができます.これは,

「データ,それを説明する分布,分布のパラメータ,分布のパラメータの分布,分布のパラ

メータの分布のパラメータ,....」とデータの定義が階層的な構造となっているモデルです.

次に簡単な例を示します.

),(~ 2σμNYi

)7,10(~ Nμ

Page 5: WinBUGS の使い方 - JPMA...WinBUGS の良いところ 2 σ2 IG ~ (10,9) この例は,データが正規分布に従い,更に,そのパラメータである平均が正規分布,分散

WinBUGS の良いところ

2

)9,10(~2 IGσ

この例は,データが正規分布に従い,更に,そのパラメータである平均が正規分布,分散

が逆ガンマ分布に従うとした 2 段階のモデルです.ベイズ統計では,このモデルを非サイク

ル有向グラフ(DAG)と呼ばれる以下の形式の図で表現します.

まず,μ,σ2 に対して事前にある情報があり,その情報を事前分布(主観確率)として表現

することとします.つまり,μ,σ2 は確率的に変動すると考えます.そして,このモデルに

対して,データ Yi を与えると,ベイズの定理に従ってμ,σ2 の分布が変化します.いわゆる

事後分布です.WinBUGS では,この事後分布を MCMC 法を用いて推定することができます.

1.3 WinBUGS の良いところ

ベイズ統計を使う利点を含め,WinBUGS で解析することには,以下の様な利点があります. 1) 仮説検定での p 値と比べ,結果の解釈が自然です.「差が 0 以上である確率」などを

求めることができます. 2) 事前に入手している情報を,事前分布として使用できます.必要なサンプルサイズを

少なくすることが可能かもしれません.逆に,客観的な立場をとって,事前分布を無

情報事前分布とすることもできます. 3) 事後分布から,予測分布を求めることができます.中間解析の結果から,試験の成否

をうまく予測できるかもしれません. 4) 解析が困難であったモデルも扱えます.ただし,モデルの妥当性,推定値の信頼性は

別途留意する必要があります. 5) 線形あるいは非線形,正規分布モデルあるいは,その他の分布モデル,共分散構造な

どを,モデルで表現するだけで解析することができます.オプションの使い方などの,

本質的でないことを覚える必要はありません. 反面,事前分布の設定方法,マルコフ連鎖の収束診断,結果の安定性,初期値等の設定は,

解析担当者の経験や,主観的な考えによって変わってくるため,結果の解釈を難しくさせま

す.

1.4 どのような分野で使用されているか

近年,ベイズ統計は医薬品開発を含む様々な分野で利用されるようになりました.生態学,

経済学,金融工学,物理学,心理学,社会学,疫学などが挙げられます.医薬品開発に関連

する分野では,ベイズ統計を用いた新たな手法とその報告は多岐にわたります.第 I 相試験

における用量漸増のための方法論,抗がん剤での Continual Reassessment Method,母集団

Page 6: WinBUGS の使い方 - JPMA...WinBUGS の良いところ 2 σ2 IG ~ (10,9) この例は,データが正規分布に従い,更に,そのパラメータである平均が正規分布,分散

どのような分野で使用されているか

3

toxokintic 解析,第 II 相試験におけるアダプティブ用量反応試験,2 ステージデザイン,アダ

プティブ無作為化割付け,第 III 相試験におけるサロゲートマーカーを用いた薬効評価,試験

をモニタリングするための方法論,欠測値を含む経時データの解析,同等性試験,クラスタ

ー分析,施設間差,生存時間解析などに関する報告がされています.また,メタアナリシス,

分子遺伝学,薬剤経済学でも応用が進められています. これら全てで WinBUGS が使用できるわけではありませんが,WinBUGS の適用例は増加し

ています.

Page 7: WinBUGS の使い方 - JPMA...WinBUGS の良いところ 2 σ2 IG ~ (10,9) この例は,データが正規分布に従い,更に,そのパラメータである平均が正規分布,分散

WinBUGS のダウンロードとインストール

4

2. WinBUGSの基本的な使い方 WinBUGS の使用方法として,次の 3 つの方法があります.

1) WinBUGS のグラフィカルインターフェース 2) BUGS スクリプトによる一括実行 3) 他のソフトウェア(SAS, R/S-plus, MS-Excel)から WinBUGS を制御する

2.2章以降で基本的なWinBUGSのグラフィカルインターフェースを使う方法を説明します.

また,WinBUGSは,モデルの作成を視覚的に行うDoodleと呼ばれるグラフィカルモデリング

ツールが存在します.これについては 7章で説明します.スクリプトからの一括実行は 5章で,

他のアプリケーションソフトウェアから使用する方法は 6章でRとSASについて説明します. OpenBUGSは,WinBUGSと少しメニューが異なりますが,基本的な操作は同じです.

WinBUGSとの相違は http://www.openbugs.net/w/ を確認して下さい.

2.1 WinBUGS のダウンロードとインストール

WinBUGSは,Microsoft Windowsプラットホーム上にインストールできます.BUGSのウェ

ブサイト(http://www.mrc-bsu.cam.ac.uk/bugs/)から,WinBUGS14.exeをダウンロードしてイ

ンストールします.同じページにあるキーをファイルに記載されている通りにインストール

することによって制限が解除されます.ユーザー登録などの必要はありません. OpenBUGSについては, http://www.openbugs.net/w/ の文書を参照してください.OpenBUGS

は,MS-Windows以外にも,Linux/Unix環境や,限定的ですがMacOS上にもインストールでき

ます.

Page 8: WinBUGS の使い方 - JPMA...WinBUGS の良いところ 2 σ2 IG ~ (10,9) この例は,データが正規分布に従い,更に,そのパラメータである平均が正規分布,分散

使用するモデルとデータセットおよびパラメータの初期値の準備

5

2.2 使用するモデルとデータセットおよびパラメータの初期値の準備

メニューバーより, File - New でエディターを開き,モデル,データセット,初期値を

入力します.特に入力の順番に制限はありません.以下の解析は,「4.3繰り返し測定データ

の解析」を例としています. データはlist(変数名=c(数値,…))の形式で入力します.行列の場合はlist(変数名

=strcuture(.Data=c(数値, …), .Dim=c(行の数, 列の数)))の形式で指定します.初期値もデータ同

様に,list(変数名=数値,…))と入力します.チェーン(ある初期値から始まる乱数列)を複

数設定する場合には別々にlist文を作成します.データ作成の詳細は「3モデル,データ,初

期値」を参照してください.

2.3 モデルのチェックと読み込み

モデルを入力したエディタウィンドをアクティブにし,メニューバーより Model -

Specification... を選択,[Specification Tool] を立ち上げて, check model ボタンをクリックし

ます.同じファイル(あるいはウインド)に複数のモデルが記載されている場合には,それ

Page 9: WinBUGS の使い方 - JPMA...WinBUGS の良いところ 2 σ2 IG ~ (10,9) この例は,データが正規分布に従い,更に,そのパラメータである平均が正規分布,分散

チェーンの本数のセットとモデル,データのコンパイル

6

らを別々にモデルチェックするために,入力した「model」の文字をマウスで選択しハイライ

トしてから check model ボタンをクリックしてください.

モデルの記述が正しければ,WinBUGS の画面左下に「model is syntactically correct」と表示

されます.異常がある場合は,その箇所へカーソルが移動し,エラーの内容が画面左下に表

示されます.メッセージの内容に沿ってモデルを修正してください.モデルが正しいと認識

されるまで次のステップへは進めません(ボタンをクリックできません).

次に,上記画面で入力したデータをマウスで選択しハイライトさせ load data をクリック

します.ハイライトさせた箇所をデータの開始とし,終了は自動的に判定されるので,最初

の「list」の文字だけでも問題はありません.

問題無く読み込めていれば WinBUGS の画面下に「data loaded」と表示されます.問題があ

る場合の例として,list 以下の記述に,行列次元の設定の矛盾がある場合は「node dimension does not match」と表示されます.

2.4 チェーンの本数のセットとモデル,データのコンパイル

[num of chains] に,後に発生させるチェーンの数を入力します.複数設定しておくと,

Gelman-Rubin 診断のような収束診断を行うことができます.次に[Specification Tool] の compile をクリックします.

Page 10: WinBUGS の使い方 - JPMA...WinBUGS の良いところ 2 σ2 IG ~ (10,9) この例は,データが正規分布に従い,更に,そのパラメータである平均が正規分布,分散

パラメータの初期値のセット

7

モデルに問題が無ければ,画面下に「model compiled」と表示されます.解析モデルの要因に

対してデータが存在しない場合は,「variable 要因名 is not defined in model or in data set」と表

示されます.

2.5 パラメータの初期値のセット

入力した初期値をマウスでハイライトさせ, load inits をクリックします.データと同様

に「list」の文字だけを反転させても認識してくれます. 複数のチェーンを設定している場合は,チェーンの数だけ「list」の選択後, load inits を

クリックする操作を繰り返します.必要な全てのパラメータの初期値が list で設定されてい

ない場合は,画面下に「this chain contains uninitialized variables」と表示されます.また,初期

値の list 以下の記述に矛盾がある場合には,「invalid or unexpected token scanned」と表示され

ます. 全てのパラメータが設定されていない場合は, gen inits をクリックして設定されていない

パラメータの初期値を自動的に作成することもできます.

問題が無ければ画面下に「initial values generated, model initialized」と表示されます.

Page 11: WinBUGS の使い方 - JPMA...WinBUGS の良いところ 2 σ2 IG ~ (10,9) この例は,データが正規分布に従い,更に,そのパラメータである平均が正規分布,分散

初期値の影響があるイタレーション(反復)の破棄

8

2.6 初期値の影響があるイタレーション(反復)の破棄

メニューバーから model → Update で[Update Tool] を開きます.その後, update をクリ

ックし[iteration]が 1000 になるまで待ちます.1000 回では,まだ初期値の影響があり定常状

態に達していないと考えられる場合には [updates] の回数を調整する必要があります.この

期間はバーンイン期間と呼び,事後分布の推定には用いません.バーンイン期間の設定は,

一度実行してチェーンのプロットや,収束診断を行う必要があるので,まずは適当な数字を

入力しましょう.

表 2-1 Update Tool の入力項目 入力欄 意味

updates イタレーション回数

refresh 結果をモニターする時,このイタレーションの間隔で表示が描き直されま

す.特に結果に影響はありません.

update イタレーションの開始のボタン.イタレーション中にクリックすると Updateを中断することができ,「Refresh」,「Update」の値を変更することができ

ます.

Page 12: WinBUGS の使い方 - JPMA...WinBUGS の良いところ 2 σ2 IG ~ (10,9) この例は,データが正規分布に従い,更に,そのパラメータである平均が正規分布,分散

出力結果パラメータの設定

9

入力欄 意味

thin この間隔で,ベイズ階層モデルイタレーションがセーブされます.Updatesが 1000 で thin が 2 の場合は,1 つおき(1,3,5・・)にイタレーションが

セーブされ,実際は 2000 回のイタレーションが行われ,最終的に 1000 個の

データが得られます.最初は 1 で良いでしょう. ただし,MCMC によるサンプリングは,1 つ前の値と相関を有するため,自

己相関を積極的に排除したいという場合には 1 以外の値を設定する場合も

あります.

iteration MCMC アルゴリズムの現在のイタレーション数を示すカウンターです.た

だし,MCMC により実際に実行された数を示すのではなく保存されたイタ

レーション回数が示されています. よって,「Iteration」に 1000 回と表示され,「thin」を 2 と設定している場

合には,実際に MCMC の実行数は 2000(=1000×2)となります.

over relax チェックすると,次のサンプリング時に複数サンプルを発生させ 1 つ前に生

成された乱数と逆相関の値を選択します.通常,選択しなくとも良いでしょ

う.

adapting Metropolis もしくは slice-sampling アルゴリズムを用いる際に利用できます.

生成されたチェーン情報を用いて乱数が生成されます.

2.7 出力結果パラメータの設定

メニューバーから Inference → Samples… をクリックして[Sample Monitor Tool]を表示さ

せます.その後,推定したいパラメータを設定するために[Sample Monitor Tool] の[node]欄に

キーボードからパラメータの名称を入力して set をクリックします.この作業を推定したい

パラメータの数だけ繰り返します.

Page 13: WinBUGS の使い方 - JPMA...WinBUGS の良いところ 2 σ2 IG ~ (10,9) この例は,データが正規分布に従い,更に,そのパラメータである平均が正規分布,分散

イタレーション(反復)の実行

10

2.8 イタレーション(反復)の実行

推定したいパラメータがセットされたら,再び[Update Tool] に戻り,[updates]を 10000 にして update をクリックします.そして,[iteration]が 11000 になるまで待ちます.必要に応

じて[updates] の回数を増やします. これも,バーンイン期間と同様に一度実行して,チェーンをプロットしたり,収束診断を

行う必要があるので,まずは適当な数字を入力しましょう.thin も初めは 1 で良いでしょう.

[over relax]や[adapting]は無視して問題ありません.

2.9 結果を表示する

推定したいパラメータの結果を表示させるために再び[Sample Monitor Tool] に戻り,[node]欄から先ほどセットしたパラメータのうち,表示させたいパラメータを選択します.なお,

設定したパラメータを全て表示させたい場合には[node]欄に「*」を入力します.

表 2-2 Sample Monitor Tool の入力項目 入力欄 意味

node 事後分布を分析するパラメータ名を入力します.「*」を入力すると設定し

たパラメータ全てが選択されます.

chains , to 複数のチェーンを設定した場合,分析に使用するチェーン番号を指定しま

す.チェーンが 3 つある場合に全てを選択するには,1 と 3 を指定します.

beg , end 事後分布の分析に用いるイタレーション結果の開始と終了を指定します.

clear 作成されたデータを全て消去します.

trace [Update Tool]の[refresh]の値ごとにプロットを表示します.

history 作成されたデータの全てを用いてプロットします.

Page 14: WinBUGS の使い方 - JPMA...WinBUGS の良いところ 2 σ2 IG ~ (10,9) この例は,データが正規分布に従い,更に,そのパラメータである平均が正規分布,分散

結果の見方

11

入力欄 意味

density 事後分布,確率密度のプロットを表示します.

stats 事後分布について以下の統計量を出力します.

(mean, sd, MC error, quantile, start, sample)

percentiles stats の quantile を設定します.CTRL キーと同時にクリックすることによっ

て,複数の%点を設定できます.

coda CODA フォーマットでイタレーション結果を出力します.CODA は収束診断

を行う R/S-plus のライブラリです.

qunatiles quantlie (median, 2.5%, 97.5%) をプロットします.

bgr diag 複数のチェーンを用いた場合の収束診断(Gelman-Rubin 診断)を行う際に使

用します.

auto cor パラメータの自己相関をプロットします.

2.10 結果の見方

2.10.1 収束(Convergence)の確認

history ボタンをクリックして,横軸をイタレーション回数としたチェーンのプロットを

表示し,パラメータの動きにパターンやイレギュラーな動きがないかを確認します.複数の

チェーンを設定している場合は,全てのチェーンが同程度に収束しているかを確認します.

Page 15: WinBUGS の使い方 - JPMA...WinBUGS の良いところ 2 σ2 IG ~ (10,9) この例は,データが正規分布に従い,更に,そのパラメータである平均が正規分布,分散

結果の見方

12

beta0 chains 1:3

iteration

1001 2500 5000 7500 10000

25.0

30.0

35.0

40.0

45.0

下記のように,初期値の影響が残っていて,サンプルが収束していないとみなされる場合は

バーンイン期間を再度検討します.

beta1

iteration3001 5000 7500 10000 12500

30.0

40.0

50.0

60.0

70.0

2.10.2 自己相関(Auto correlation)の確認

auto cor ボタンをクリックして,独立したサンプルが得られているかを確認します. 図の縦軸は相関係数,横軸の lag は乱数と乱数の間隔を示しており(例,lag=1:t 番目と t+1番目),MCMC によるサンプリングのため,lag の値が小さいほど相関が高く,lag が大きい

ほど独立したサンプルが得られていることがわかります. デフォルトでは 1 から 50 の lag に対して自己相関を計算します.下の図の様に,ほぼ 0.0

付近に値が近づいていることを確認しましょう.

この例ではイタレーションの 30 から 40 回以降に相関が低くなったと判断できますので,

[Sample Monitor Tool]の[thin]を 30 などに設定して再度イタレーションを実行するのが最適で

はありますが,thin を多くすると必要なイタレーションが膨大になり,計算時間が増加して

しまいます.また,未収束の可能性も考えられるので,バーンイン期間を長くすることを優

先すべきでしょう. 再サンプリングしたものが以下の図です.また,図そのものをダブルクリックし図を選択

した後,CTL キーを押しながら左マウスボタンで,lag 毎の相関係数を表示できます.

Page 16: WinBUGS の使い方 - JPMA...WinBUGS の良いところ 2 σ2 IG ~ (10,9) この例は,データが正規分布に従い,更に,そのパラメータである平均が正規分布,分散

結果の見方

13

2.10.3 Quantilesが安定しているかを確認

quantiles ボタンをクリックしてイタレーションから得られたサンプルの中央値,2.5%点,

97.5%点のプロットを確認し,水平にプロットされ安定しているかを確認します.

2.10.4 統計量を表示

stats ボタンをクリックして,標本標準偏差(sd)と MC error から精度を確認します.MC error は事後分布のパラメーターの平均のばらつきを表す指標です.MC error が推定された sdよりも小さいことは,精度よく事後分布の平均が推定されたことを意味します.MC error はsd の 5%より小さくなるようにしましょう.MC error が大きい場合は,イタレーションの回

数を増やすことで値を小さくできます.精度が良いなら推定値を吟味します.

2.10.5 事後分布を確認

density ボタンをクリックし事後分布を確認します.

node mean sd MC error 2.5% median 97.5% start sample beta0 33.64 1.948 0.05443 29.75 33.67 37.46 1001 30000 beta1 1.876 0.2217 0.006207 1.442 1.872 2.323 1001 30000

Page 17: WinBUGS の使い方 - JPMA...WinBUGS の良いところ 2 σ2 IG ~ (10,9) この例は,データが正規分布に従い,更に,そのパラメータである平均が正規分布,分散

モデル,データ,解析結果の保存

14

2.11 モデル,データ,解析結果の保存

[Sample Monitor Tool]で得た図や表は,基本的にコピー&ペーストによって他の文書に貼り

付けることによって保存します.これらの図や表は,マウスで選択後右クリック,ドロップ

ダウンメニューから Properties... で[Plot Properites]を開き,パラメータを変更することによっ

てある程度加工できます. モデルとデータは,メニューバーより File - Save か, File - Save As... で保存します.

2.12 その他

2.12.1 Seed

メニューバーより Model - Seed... により乱数のシードを設定できます.

WinBUGS は,MCMC によって事後分布を推定するため,解析を実行するたびに推定値が

変わります.ただし,乱数生成には擬似乱数を使用しているので,同じ値のシードを与えれ

ば,同じ推定値を得ることができます.

2.12.2 DIC

WinBUGS では,モデル診断のために DIC(deviance information criterion)を算出できます.

[Update Tool]の update をクリックする前に,メニューバーより Inference - DIC... をクリッ

クし[DIC Tool]を開き set をクリックします.update を実行後,[DIC Tool]の DIC ボタンを

クリックすると,DIC が表示されます.

以上で,WinBUGS の基本的な使い方は終了です.

Dbar = post.mean of -2logL; Dhat = -2LogL at post.mean of stochastic nodes Dbar Dhat pD DIC Y 236.282 225.262 11.020 247.302 total 236.282 225.262 11.020 247.302

Page 18: WinBUGS の使い方 - JPMA...WinBUGS の良いところ 2 σ2 IG ~ (10,9) この例は,データが正規分布に従い,更に,そのパラメータである平均が正規分布,分散

ファイルの作成と保存

15

3. モデル,データ,初期値

3.1 ファイルの作成と保存

WinBUGS でモデルを作成するには,メニューバーより File - New を実行し,空のエデ

ィタをオープンし,モデルとデータ,必要ならば初期値を記載します. File - Save ,あ

るいは File - Save as....によりファイルへ出力できます.この場合,拡張子が ODC と表示

されるバイナリ形式のファイルとなります. このファイルは長くなりがちなので,ファイルを読み易くするために"fold"を用いて不必要

な部分を隠すことができます.メニューバーより, Tool - Create Fold で作成した矢印の

内側にデータ等を記載します.矢印をクリックすることによって,記載した内容が隠されま

す.

3.2 モデル

3.2.1 全体の構造

まず"model"と入力し,モデルの内容は以下のような弓括弧{ }の内部に入力します.記

載すべきモデルの内容は,大きく分けて次の 3 つとなります. 1) 観測値の確率分布 (尤度となる) 2) 確率分布のパラメータの構造 3) パラメータの事前分布

3.2.2 モデル記述の注意点

原則として行末が文の終了となりますが,ある程度前後の記載から数行を 1 文と解釈しま

す.明示的に文の終了を記載する場合は,セミコロン ; を付けることができます. このモデル構文は厳密にはプログラミング言語ではありません.ブロック(弓括弧でくく

られた部分)内の文の順番に大きな意味はなく,順番を変えても結果には影響しません.ま

た,普通のプログラミング言語に存在するような IF 文などもありません.その他に注意する

点として,英字の大文字と小文字が区別されます. 注釈としてコメントを挿入したい場合は,#を記載し,それ以後の行末までがコメントとな

ります.

3.2.3 ノード

WinBUGS では,パラメータや変数などをノードと呼び,以下の 3 種類があります.

model { モデル構文 ・・・・・ # コメント

}

Page 19: WinBUGS の使い方 - JPMA...WinBUGS の良いところ 2 σ2 IG ~ (10,9) この例は,データが正規分布に従い,更に,そのパラメータである平均が正規分布,分散

モデル

16

3.2.3.1 定数: Constant

定数は通常,データ(「3.3 データ」を参照)として設定する場合が多いでしょう.モデル

の構文として次のように入力することもできます.値の代入には <- を使います.定数とし

て値を代入できるのは 1 度だけです.

3.2.3.2 モデルの確率的な要素:Stochastic or Random component 分布により規定される確率変数は,事前分布 )(θf と応答分布 )( θiyf により記述されるモ

デルパラメータθ ,応答変数(データ) iy 等があり,~ を使い次の形式で入力します.

例えば,y が平均μ(mu),精度(分散σ2の逆数)τ(tau)の正規分布をとる場合

τσ

σμ

/1

),(~2

2

=

Nyi

次のように入力します.

注意すべき点として,上で説明されている通りWinBUGSでの正規分布のパラメータは平均と

分散ではなく,平均と分散の逆数である精度をとります.他の分布も,使用されるパラメー

タについて注意が必要です.詳細は「3.2.7 確率分布」を確認してください.

3.2.3.3 モデルの論理的要素

論理的要素は,数式や関数(「3.2.6 関数」を参照)を使った他のノード変数からの変換を

定義したものです.定数と同じように <- で指定します.下記の場合,標準偏差(sigma)を

求めるための精度(tau)からの変換です.

3.2.4 ベクトル,行列,配列の計算

変数はスカラー以外にベクトル,行列,配列などの型で指定できます.行列は「表 3-1 ベクトル,行列の表現方法」で示す形式で指定します.配列も次元が増加しただけで同様です.

ベクトル(行列,配列)同士の計算はできません.関数を使うか,または,以下の for 構

文を使う必要があります.

インデックス変数は,任意の名前を付けることができます.開始と終了の値は定数として与

えることもできます.ベクトル(行列,配列)の各次元のインデックスの大きさは,自動的

に設定されます.次の例は 10 行 1 列ベクトルの加算です.

for ( インデックス変数 in 開始値 : 終了値 ) { モデル構文 ・・・・・

}

p <- 0.01

y ~ dnorm(mu, tau)

変数名 ~ 分布名(パラメータ 1, パラメータ 2, ..... )

sigma <- 1.0 / sqrt(tau)

Page 20: WinBUGS の使い方 - JPMA...WinBUGS の良いところ 2 σ2 IG ~ (10,9) この例は,データが正規分布に従い,更に,そのパラメータである平均が正規分布,分散

モデル

17

行列または配列の場合,for 構文を重ねて入れ子構造にできます.下記は,m 行 n 列の加算で

す.

ベクトル yiが平均 mu,精度 tau の正規分布に従うことを表現したければ,次のように入力し

ます.

表 3-1 ベクトル,行列の表現方法

v [] ベクトル v の全ての要素

v [ i ] ベクトル v の i 番目の要素

v [n:m] ベクトル v の n 番目から m 番目の要素

M [,] 行列 M の全ての要素

M [ i, j ] 行列 M の i 番目の行の,j 番目の列の要素

M [ i, ] 行列 M の i 番目の行

M [ , j ] 行列 M の j 番目の列

M [ n:m, ] 行列 M の n 番目から m 番目の行の要素

M [ , n:m ] 行列 M の n 番目から m 番目の列の要素

M [ n:m, j ] 行列 M の n 番目から m 番目の行の,j 番目の列の要素

M [ i, n:m ] 行列 M の i 番目の行の,n 番目から m 番目の列の要素

M [ n:m,k:l ] 行列 M の n 番目から m 番目の行の,k 番目から l 番目の列の要素

x [ v[ i ] ] ベクトル x の v[i]番目の要素

多変量正規分布などのようにベクトルを返す場合は,平均ベクトル mu,精度行列ベクトル

omega とすると次のように入力できます.

3.2.5 演算子

既に例として記載していますが,中置記法の二項演算子として,加算(+),減算(−),乗算(*),除算(/)が使用できます.

for ( i in 1:10 ) { a[ i ] <- b[ i ] + c[ i ] }

for ( i in 1:m ) { for ( j in 1:n ) { a[ i, j ] <- b[ i, j ] + c[ i, j ] } }

for ( i in 1:m ) { y[ i , ] ~ dmnorm( mu[], omega[,] ) }

x <- a + b * c / d - e

for ( i in 1:n ) { y[ i ] ~ dnorm( mu , tau ) }

Page 21: WinBUGS の使い方 - JPMA...WinBUGS の良いところ 2 σ2 IG ~ (10,9) この例は,データが正規分布に従い,更に,そのパラメータである平均が正規分布,分散

モデル

18

3.2.6 関数

WinBUGSでは,基本的な算術関数のように一つのスカラーをパラメータとする関数,べき

関数のような複数のスカラーをパラメータとする関数,統計関数のようなベクトルをとる関

数,更に,行列をパラメータとする関数があります.WinBUGSでは,「表 3-2 WinBUGSで利用可能な関数」の関数が利用可能です.

3.2.6.1 基本的な算術関数

絶対値(abs),正弦関数,余弦関数(sin, cos),指数,自然対数(exp, log),整数の階乗

の対数(logfact),ガンマ関数の対数(loggam),平方根(sqrt),べき関数(pow),最大

値と最小値(max,min)などがあります. x の絶対値 |x| に等しい y を設定する場合は以下のように指定します.

3.2.6.2 統計関数

標本平均(mean),標本標準偏差(sd),ベクトルの和(sum),最小値(min),最大値

(max),phi(標準正規変量の累積分布関数)などが利用できます.ベクトル V の平均と等

しい y を設定する場合は,以下のように入力します.この場合引数はベクトルを表すために

V[ ]と,ノード名の後に空の角括弧を指定する必要があります.

最小値(min)および最大値(max)の関数は 2 つの値の最小値および最大値が算出可能です.

3 つ以上の値の最小値および最大値を算出するには ranked 関数が利用できます.

また,中央値を算出する関数は用意されていないため,最小値および最大値の算出と同様に

ranked 関数を利用します.

さらに,代表的な分布に関する分布関数の指定も可能であり,標準正規分布の累積分布関数

(CDF) dzzxyx

⎥⎦

⎤⎢⎣

⎡−=Φ= ∫ ∞− 2

exp21)(

2

π  に対しては

で指定します.

表 3-2 WinBUGS で利用可能な関数

WinBUGS の構文 関数 説明

abs (x) |x| 絶対値

cloglog (x) log (-log (1 – x)) Complementary log-log 関数

# nが奇数 y <- ranked (v [], (n+1) / 2) # nが偶数 y <- 0.5*(ranked (v[], n/ 2)+ranked (v[], n / 2 +1))

y <- phi (x)

y <- ranked (v[], 1) # 最小値 y <- ranked (v[], n) # 最大値 (nは別に与える必要がある)

y <- mean( V[] )

y <- abs(x)

Page 22: WinBUGS の使い方 - JPMA...WinBUGS の良いところ 2 σ2 IG ~ (10,9) この例は,データが正規分布に従い,更に,そのパラメータである平均が正規分布,分散

モデル

19

WinBUGS の構文 関数 説明

cos (x) cos (x) 余弦関数

cut (x) x の事後分布は尤度による更

新なし

equals (x1, x2) x1 = x2 の場合 1,それ以外 0 2 つのノードが等しいかどう

exp (x) ex 指数値

inprod (v[], w[]) ∑=

n

iiiWV

1 2 つのベクトルの内積

interp.lin (x, v1[ ],

v2 [ ] ) ii

iiii vv

vxvvv11

1)22(21

1 −−

×−++

+ 線形補間

inverse ( M [,] ) M-1 対称正定値行列の逆行列

log (x) log (x) 自然対数

logdet (M[,]) log |M| 対称正定値行列の対数行列式

logfact (k) log(k!) 整数の階乗の対数をとる

loggam (x) log(Γ(x)) ガンマ関数の対数をとる

logit (x) log )1/( xx − ロジット関数

max (x1, x2) max ( x1, x2 ) 2 つの値の最大値

mean ( v [ ] ) ∑==

n

i i nvv1

/ n はベクトルの

長さ

標本平均

min (x1, x2) min ( x1, x2 ) 2 つの値の最小値

phi (z) ∫ ∞−=≤

xdzzzZP )()( ϕ 標準正規分布の累積分布関数

)(xϕ は標準正規分布密度関

pow (x, z) xz べき関数

sin (x) sin (x) 正弦関数

sqrt (x) x 平方根

rank (v [ ], k ) ベクトル v の k 番目の要素の

ランク

ranked (v [ ], k ) ベクトル v の k ランク目の要

round (x) 整数に四捨五入

sd (v [ ] ) ∑= −−n

ii

nvv

1

2

1)(

n はベクトルの長さ

標本標準偏差

step (x) x ≥ 0 の場合 1,その他は 0 x が正であるかどうか確認

Page 23: WinBUGS の使い方 - JPMA...WinBUGS の良いところ 2 σ2 IG ~ (10,9) この例は,データが正規分布に従い,更に,そのパラメータである平均が正規分布,分散

モデル

20

WinBUGS の構文 関数 説明

sum (v [ ]) ∑n

i iv n はベクトルの長さ ベクトル v の要素の和

trunc (x) x 以下のもっとも大きい整数

x, z, k:スカラー, v, w:ベクトル, M:行列

3.2.6.3 リンク関数

リンク関数として使える関数には cloglog,logit,probit と log が用意されています.これら

の関数は <- の左側でも利用可能です.例えば,以下は同等です.

これらは一般化線形モデルにおけるリンク関数を指定する際に利用できます.

3.2.6.4 ベクトル,行列関数

対称正定値行列の逆行列式および対数行列式を以下の構文で算出できます.

行列 M1 と行列 M2 は K × K 次元の対称正定値行列であり,y はスカラーです.逆行列の算

出式における左側の行列は,角括弧の中の次元を含め指定することが必要です.

x と y のベクトルが同じ長さのとき,2 つのベクトルの内積 xTy の計算は次のように指定し

ます.

この関数を用いて標本共分散を算出することができます.

3.2.6.5 その他

関数 equals は,2 つの数値を比較し,その 2 つの値が等しい場合は 1 を返し,それ以外の

場合は 0 を返します.

⎩⎨⎧

=≠

=zxifzxif

y  

  

10

関数 step は,0 以上の場合 1 を,それ以外は 0 を返します.

⎩⎨⎧

≥<

=0100

xifxif

y  

  

以下の式では x > zの場合 yは1となります.これで,x > zが正しいかどうかを確認できます.

step と equals は他のプログラミング言語における if 条件文に相当する処理を指定したい場合

に利用できます.また,ベクトル計算や分布のトランケーションにも利用できます.

logit(y) <- x y <- exp(x) / (1+ exp(x))

y <- step( x - z ) - equals( x, z )

y <- step( x )

y <- equals( x, z )

cov <- (inprod(v[], w[]) – n * mean(v[]) * mean(w[])) / (n – 1)

z <- inprod( x[] , y[] )

M2 [ 1:K, 1:K ] <- inverse ( M1 [ , ] ) y <- logdet ( M1 [ , ] )

Page 24: WinBUGS の使い方 - JPMA...WinBUGS の良いところ 2 σ2 IG ~ (10,9) この例は,データが正規分布に従い,更に,そのパラメータである平均が正規分布,分散

モデル

21

3.2.6.6 cut関数

この関数は,パラメータの事後分布の尤度による更新を行いたくない場合に用います.次

の theta の事後分布は観測値 2 を得た場合の尤度の影響を受けず,平均 0,分散 1 の正規分布

のままです.

3.2.7 確率分布

WinBUGSでは尤度,または事前分布の記載に,「表 3-3 単変量分布」,「表 3-4 多変量分

布」が使用できます.注意する点として,パラメータとして式や関数を使うことはできませ

ん.また,現在のWinBUGSのバージョンでは,分布のパラメータの数値として科学表記は出

来ないようです.以下の記載はエラーとなります.

次の様に記載する必要があります.

表 3-3および 表 3-4に各分布に関する説明を記載していますが,以下に特にベイズ流解析

を行うにあたり,使用頻度の高い分布について説明します.

3.2.7.1 正規分布

x の範囲は ∞<<∞− x をとる連続分布です.第 1 パラメータ(mu)を平均,第 2 パラメー

タ(tau)を分散の逆数とします.tau>0 としてください.

3.2.7.2 二項分布

x は 0,…,n をとる離散分布です.第 1 パラメータ(p)をベルヌーイ試行の生起確率,第 2

パラメータ(n)を試行回数とします. 10 ≤≤ p ,n は 1 以上の整数です.

3.2.7.3 ガンマ分布

x の範囲は 0>x をとる連続分布です.第 1 パラメータ(a)を形状パラメータ,第 2 パラ

メータ(b)を尺度パラメータの逆数とします.a>0,b>0 としてください.

model { y <- 2 y ~ dnorm(theta.cut, 1) theta.cut <- cut(theta) theta ~ dnorm(0, 1)

}

for (i in 1:N) { y[i] ~ dnorm(alpha + beta*x[i], tau)

} alpha ~ dnorm(0, 1E-3)

x ~ dnorm( mu , tau )

x ~ dbin( p , n )

x ~ dgamma(a, b)

for (i in 1:N) { mu[i] <- alpha + beta*x[i]

y[i] ~ dnorm(mu[i], tau) } alhpa ~ dnorm(0, 0.001)

Page 25: WinBUGS の使い方 - JPMA...WinBUGS の良いところ 2 σ2 IG ~ (10,9) この例は,データが正規分布に従い,更に,そのパラメータである平均が正規分布,分散

モデル

22

3.2.7.4 ベータ分布

10 << x の範囲をとる連続分布です.それぞれ a>0,b>0 とします.

3.2.7.5 多変量正規分布

ベクトル X の各要素の範囲は ∞<<∞− x をとる連続分布です.第 1 パラメータ(mu[])を

平均ベクトル,第 2 パラメータ(T[,])を分散共分散行列の逆行列とします.第 2 パラメータ

に対しては,ウィシャート分布等に従う変数の行列を,そのまま使えます.

3.2.7.6 ウィシャート分布

行列 X は p 次元の正方行列となります.R は p 次元の対称正定値行列,k は自由度で pk ≥

である必要があります.この分布はガンマ分布やχ2分布を多変量に拡張したものと考えられ

ます.

3.2.8 尤度

反応変数が N 個の要素を持つベクトル y として保管されている場合,次のような形式で記

載します.

反応変数として Y が与えられている二項分布のモデル,

),(~ iii npBinomialY

を考え,さらに,ロジスティックモデルを仮定する場合,WinBUGS のコードは次のように

定義されます.

3.2.9 事前分布

パラメータの事前分布は,次の形式で記載します.

パラメータがベクトルの場合は,for 文を使用できます.

ここでは詳細に述べませんが,ベイズ統計において,事前分布の選択と設定は大きなテー

マの一つです.無情報な分布とするか,あるいは事前の情報を基に分布を仮定するか.自然

for (i in 1:10) { y[i] ~ dgamma(0.001 , 0.001)

}

パラメータ 1 ~ 分布名 1(ハイパーパラメータ 1, ハイパーパラメータ 2, ....) パラメータ 2 ~ 分布名 2(ハイパーパラメータ 3, ハイパーパラメータ 4, ....)

x ~ dbeta(a, b)

X[] ~ dmnorm(mu[], T[,])

X [1:p, 1:p] ~ dwish(R[,], k)

for (i in 1:N) { パラメータ 1 <- 式 パラメータ 2 <- 式 y[i] ~ 分布名(パラメータ 1, パラメータ 2, ....)

}

for (i in 1:N) { logit(p[i]) <- alpha + beta * x[i]

Y[i] ~ dbin( p[i] , n[i] ) }

Page 26: WinBUGS の使い方 - JPMA...WinBUGS の良いところ 2 σ2 IG ~ (10,9) この例は,データが正規分布に従い,更に,そのパラメータである平均が正規分布,分散

モデル

23

共役事前分布(8.3節参照)とするか,しないか.通常,積極的に事前の情報を使う意思が無

い場合は,無情報な事前分布とするようです.以下に良く使われている無情報な事前分布と

そのパラメータの例を挙げます.

1) パラメータが ∞<<∞− x の範囲となる場合.

2) パラメータが ∞<< x0 の範囲となる場合.

3) パラメータが 10 << x の範囲となる場合.Beta(1,1)は一様分布となります.

3.2.10 打ち切りとトランケート

生存時間解析などのデータにある打ち切り(Censoring)は,次の構文を使います.

L と U は定数ノードです.L は範囲の下限値,U は上限値を指定します.片一方を省略す

ることが可能です.次の例では x と,x の 0 以下を欠損値(NA)とした y について,パラメ

ータを推定します.y が欠損値の場合は上限値を 0,その他は上限値を 100 としています.

データ

mu ~ dnorm(0, 0.001)

tau ~ dgamma(0, 0.001)

p ~ dbeta(1, 1)

x ~ dnorm( mu, tau) I(L,U)

list(N=30, x =c(-1.68,1.19 ,0.12 ,0.28 ,0 ,0.22,0.27 ,1.7 ,0.04,-0.18,-0.25, 0.15 ,1.14 ,0.62 ,0.25 ,0.6 ,-0.86 ,0.07 ,-0.27 ,0.57 ,-0.77 , -1.11 ,-0.08 ,-0.36 ,-1.14 ,-0.53 ,0.62 ,0.34 ,-0.45 ,-0.46 ), y =c(NA ,1.19 ,0.12 ,0.28 ,NA ,0.22 ,0 .27 ,1.7 ,0.04 ,NA ,NA , 0.15 ,1.14 ,0.62 ,0.25 ,0.6 ,NA ,0.07 ,NA ,0.57 ,NA ,NA ,NA ,NA , NA ,NA ,0.62 ,0.34 ,NA ,NA ), cens =c(0 ,100 ,100 ,100 ,0 ,100 ,100 ,100 ,100 ,0 ,0 ,100 ,100 ,100 ,100 ,100 ,0 ,100 ,0 ,100 ,0 ,0 ,0 ,0 ,0 ,0 ,100 ,100 ,0 ,0 ))

Page 27: WinBUGS の使い方 - JPMA...WinBUGS の良いところ 2 σ2 IG ~ (10,9) この例は,データが正規分布に従い,更に,そのパラメータである平均が正規分布,分散

モデル

24

結果

mean sd MC_error val2.5pc median val97.5pc

mu.x 0.003277 0.1372 0.001304 -0.2663 0.002562 0.2714

mu.y -0.00926 0.1681 0.003253 -0.3865 0.004829 0.2852

sigma.x 0.7427 0.1007 0.001076 0.5773 0.732 0.9705

sigma.y 0.7431 0.164 0.003898 0.502 0.7169 1.136

打ち切りによく似た概念にトランケートがあり,打ち切りと同じ構文を使います.以下の

例では,I(0,)を記載しない場合,エラーとなりパラメータの推定ができないでしょう.

初期値

データ

打ち切り,トランケート共に多変量正規分布を除く多変量の分布には使えません.またこ

の構文は,OpenBUGS や JAGS などの類似のソフトウエアと異なっているので,注意が必要

です.

3.2.11 新しい確率分布の構成

WinBUGS には,新しい確率分布を作成する方法は有りませんが,以下のポアソン分布の性

質を使うことによって,自作の確率密度関数に従う確率分布を構成出来ます. ポアソン分布の確率密度関数は以下の様に定義されます.

model { for (i in 1:N) { x[i] ~ dnorm(mu.x, tau.x); y[i] ~ dnorm(mu.y, tau.y)I(,cens[i]); } mu.x ~ dnorm(0, 0.001); mu.y ~ dnorm(0, 0.001); tau.x ~ dgamma(0.001, 0.001); tau.y ~ dgamma(0.001, 0.001); sigma.x <- 1/sqrt(tau.x); sigma.y <- 1/sqrt(tau.y); }

model { for (i in 1:N) { y[i] ~ dnorm(logmu, tau); } mu ~ dnorm(0,0.001)I(0,); logmu <- log(mu); tau ~ dgamma(0.001,0.001); sigma <- 1/sqrt(tau); }

list(mu=1,tau=1)

list(N=20, y=c(0.51, -1.94, -0.31, 0.5, -0.32, 1.71, 0.39, -1.91, 0.49, 1.55, 0.09, -0.85, 0.22, -0.4, 1.83, -0.26, -0.78, -0.08, 0.36, 0.35))

Page 28: WinBUGS の使い方 - JPMA...WinBUGS の良いところ 2 σ2 IG ~ (10,9) この例は,データが正規分布に従い,更に,そのパラメータである平均が正規分布,分散

モデル

25

!)exp()|(

xxf

xλλλ −=

観測値 x=0 とした場合,その対数尤度関数は以下となります. λλ −=)(l

よって,応答変数ベクトルを 0 と固定し,ポアソン分布のパラメータλを目的の分布の確率

密度関数として定義することによって,新しい確率分布を構成できます.以下は,あまり実

用的ではありませんが,正規分布を再構成したモデルのコードです.

正規分布乱数 x ~ N(111,11)を発生させ実行した結果を下に示します.採択率が低く階段状

のプロットとなっていますが,概ね予測通りの値となっています. mu

iteration1001 1250 1500 1750 2000

109.0

110.0

111.0

112.0

113.0

v

iteration1001 1250 1500 1750 2000

5.0 10.0 15.0 20.0 25.0 30.0

mean sd MC_error val2.5pc median val97.5pc

mu 111.1 0.4672 0.03066 110.2 111.1 112.0

v 11.58 2.418 0.07438 7.873 11.16 16.99

この方法は,簡単に新しい分布を構成できるのですが,質の良いチェーンが得られない場

合が多いでしょう.

model { C <- 100; # lambda > 0を確実にするための適当な定数 for (i in 1:N) { zeros[i] <- 0; zeros[i] ~ dpois( lambda[i] ); lambda[i] <- -l[i] + C; l[i] <- -0.5*(log(v) + pow(x[i]-mu,2)/v); # 対数をとった密度関数

} mu ~ dnorm(0, 0.001); tau ~ dgamma(0.001, 0.001); v <- 1/tau;

}

Page 29: WinBUGS の使い方 - JPMA...WinBUGS の良いところ 2 σ2 IG ~ (10,9) この例は,データが正規分布に従い,更に,そのパラメータである平均が正規分布,分散

モデル

26

表 3-3単変量分布 分布名 WinBUGS の構文 確率(密度)関数 平均 分散

離散分布 ベルヌーイ x ~ dbern(p)

xx pp −− 1)1( , x=0,1 p )1( pp −

二項分布 x ~ dbin(p, n)

)!(!)1(!

xnxppn xnx

−− −

, x=0,.....,n np )1( pnp −

Categorical x ~ dcat(p[]) ][xppx = , x=1,2,...length(p)

1=∑i ip ∑=

n

xxxp

1 ∑

=

−n

xxpxEx

1

2))((

負の二項分布 x ~ dnegbin(p, r)

)!1(!)1()!1(

−−−+

rxpprx xr

, x=0,1,.... ppr /)1( −

2/)1( ppr −

ポアソン x ~ dpois(lambda)

!)exp(

x

xλλ− , x=0,1,..... λ λ

連続分布 ベータ x ~ dbeta(a , b)

)()()()1( 11

babaxx ba

ΓΓ+Γ− −−

, 0<x<1 baa+

)1()( 2 +++ baba

ab

χ2 x ~ dchisqr(k)

( )2/)2/exp(2 12/2/

kxxkk

Γ−−−

, x>0 k k2

二重指数 x ~ ddexp(mu, tau) |)|exp(2

μττ−− x μ

22τ

指数 x ~ dexp(lambda) )exp( xλλ − , x>0 λ/1 2/1 λ

ガンマ x ~ dgamma(a , b)

)()exp(1

abxxb aa

Γ−−

, x>0 ba / 2/ ba

Page 30: WinBUGS の使い方 - JPMA...WinBUGS の良いところ 2 σ2 IG ~ (10,9) この例は,データが正規分布に従い,更に,そのパラメータである平均が正規分布,分散

モデル

27

(表つづき)

分布名 WinBUGS の構文 確率(密度)関数 平均 分散

一般化ガンマ x ~ gen.gamma(a, b, r ) ( ))(

)(exp)( 1

abxbxrb rra

Γ−−

, x>0 )()/1(

abra

Γ+Γ

対数正規 x ~ dlnorm(mu, tau) ( )⎟⎟⎠

⎞⎜⎜⎝

⎛ −−

2)log(exp1

2

2μτπτ x

x , x>0 ⎟

⎠⎞

⎜⎝⎛ +

τμ

21exp ⎟

⎠⎞

⎜⎝⎛ +−⎟

⎠⎞

⎜⎝⎛ +

τμ

τμ 12exp22exp

Logistic x ~ dlogis(mu, tau) ( )2))(exp(1

))(exp(μτμττ

−+−

xx

μ 2

2

3τπ

正規 x ~ dnorm(mu, tau) ⎟⎟⎠

⎞⎜⎜⎝

⎛ −−

2)(exp

2

2μτπτ x

μ

τ1

パレート x ~ dpar(a, c) )1( +− aa xac , x>c 1−a

ac

)2()1( 2

2

−− aaac

スチューデント t x ~ dt(mu, tau, k) 2

)1(2)(1

2

21 +

⎟⎟⎠

⎞⎜⎜⎝

⎛ −+

⎟⎠⎞

⎜⎝⎛Γ

⎟⎠⎞

⎜⎝⎛ +

Γ k

kx

kk

kμτ

πτ

μ )2( −k

ワイブル x ~ dweib(v, lambda) )exp(1 vv xxv λλ −− , x>0 ⎟⎠⎞

⎜⎝⎛ +Γ

vv 111

λ ⎟⎟⎠

⎞⎜⎜⎝

⎛⎟⎠⎞

⎜⎝⎛ +Γ−⎟

⎠⎞

⎜⎝⎛ +Γ

−22 1121

vvvλ

一様 x ~ dunif(a, b) )/(1 ab − , a<x<b 2/)( ba + 12/)( 2ab −

Page 31: WinBUGS の使い方 - JPMA...WinBUGS の良いところ 2 σ2 IG ~ (10,9) この例は,データが正規分布に従い,更に,そのパラメータである平均が正規分布,分散

モデル

28

表 3-4多変量分布

分布名 WinBUGS の構文 確率(密度)関数

離散分布

多項分布 x[] ~ dmulti(p[] , N) ( )∏∏

∑i

xi

i i

i i ipxx

!!

, Nxi i =∑ , 1=∑i ip , 10 << iP

連続分布

ディリクレ p[] ~ ddirch(a[]) ( )( )∏∏

∑ −

Γ

Γi

ai

i i

i i ipaa 1 , 1=∑i ip , 10 << iP

多変量正規 x[] ~ dmnorm(mu[],

T[,]) ( ) ( ) ( )⎟

⎠⎞

⎜⎝⎛ −−−− μμπ xTxTd '

21exp2 2/12/

多変量 Student-t x[] ~ dmt(mu[], T[,],

k) ( ) 22/1

2/2/)('11

2

2dk

ddxTx

kT

kk

dk +−

⎥⎦⎤

⎢⎣⎡ −−+

⎟⎠⎞

⎜⎝⎛Γ

⎟⎠⎞

⎜⎝⎛ +

Γμμ

π , 2≥k

ウィシャート x[,] ~ dwish(R[,], k) ( ) ( )

⎟⎠⎞

⎜⎝⎛Γ

⎟⎠⎞

⎜⎝⎛−−−

22

21exp

2/

2/12/

k

RxTrxR

ppk

pkk

)(⋅Tr は行列のトレース )(⋅Γp は多変量ガンマ関数

Page 32: WinBUGS の使い方 - JPMA...WinBUGS の良いところ 2 σ2 IG ~ (10,9) この例は,データが正規分布に従い,更に,そのパラメータである平均が正規分布,分散

データ

29

3.3 データ

WinBUGS は,データのフォーマットとしてリストフォーマット及び矩形フォーマットを取

り込むことができます.扱うことのできるデータは数値型のみです.カテゴリー変数を扱い

たい場合には,あらかじめ適当なダミー変数を作成しておく必要があります.

3.3.1 リストフォーマット

リストフォーマットは,R/S-plus で用いられている list オブジェクトと似ています.このフ

ォーマットでは,スカラー,ベクトル,行列,配列を扱うことができます.このフォーマッ

トの構文は,"list"から開始し,データを丸括弧で囲み,括弧内ではカンマによって各変数と

その定義を区切って入力します.

以下はそれぞれの型毎の定義方法です.

1) スカラー

2) ベクトル

3) 行列

".Data"で定義された行列の値で,まず,最初の行を埋め,順に次の行を埋めます.".Dim"

で行と列の数を指定します.

この構文の行列 M は,2 行 3 列の次のデータを意味します.

データは,モデルをコンパイルした後,メニューバーから Info - Node info... により

WinBUGS 内で見ることができ,次の形式で示されます.

4) 配列

list(スカラー名 = 値)

list(ベクトル名 = c(値 1, 値 2, 値 3, .....))

list(行列名 = structure ( .Data = c(値 1, 値 2, ..... , ), .Dim = c(行数, 列数) ))

M = structure ( .Data = c(1,2,3,4,5,6), .Dim = c(2,3) )

[,1] [,2] [,3] [1, ] 1 2 3 [2, ] 4 5 6

M [1, 1] 1.0 M [1, 2] 2.0 M [1, 3] 3.0 M [2, 1] 4.0 M [2, 2] 5.0 ....

list( 変数名 1=定義 , 変数名 2=定義 , ........)

Page 33: WinBUGS の使い方 - JPMA...WinBUGS の良いところ 2 σ2 IG ~ (10,9) この例は,データが正規分布に従い,更に,そのパラメータである平均が正規分布,分散

データ

30

行列と同様の構文を用います.ただし.Dim はそれぞれ対応する次元を特定するため少なく

とも 3 つの値を指定する必要があります.以下の例では配列の次元 d(h 層,i 行,j 列),セル

の数 p,データの合計 n も与えています. 4×3×2 の 3 元テーブルでは,最初に j=1 に対して 1 行 1 列目のデータ )2,1;( 11 =jx j が読み

込まれ,次に同一行の列方向データが順に )2,1;( 12 =jx j , )2,1;( 13 =jx j 読み込まれます.次

に 2 行のデータが 1 列目から順に同様に読み込まれていきます.その後,j=2 に対しても同

様に読み込まれます.

この配列は以下の様な内容となります.

3.3.2 矩形フォーマット

矩形フォーマットでは,最初の行に角括弧 [ ]をつけた変数名を入力します.次の行から各

オブザベーションの値をスペースで区切って入力します.最後には必ず"END"を入力し,次

に少なくとも 1 つの空白行を入れます.

高次元の配列では,最初のインデックスを空欄にして,後の全てのインデックスを明示的

に記載することで定義できます.3 × 2 × 2 の配列 A に対しては,以下のように入力します.

list( d = c(4, 3, 2), p = 24, n = 300, X = structure(.Data=c(1,2,3,4,5,6,7,8,9,10,11,12,

13,14,15,16,17,18,19,20,21,22,23,24), .Dim = c(4,3,2))

Y[ ] X[ ] Z[ ] 1 5 9 2 6 10 3 7 11 4 8 12 END

空白行

, , 1 [,1] [,2] [,3] [1, ] 1 3 5 [2, ] 7 9 11 [3, ] 13 15 17 [4, ] 19 21 23 , , 2 [,1] [,2] [,3] [1, ] 2 4 6 [2, ] 8 10 12 [3, ] 14 16 18 [4, ] 20 22 24

A[,1,1] A[,1,2] A[,2,1] A[,2,2] 11 12 13 14 21 22 23 24 31 32 33 34 END

空白行

Page 34: WinBUGS の使い方 - JPMA...WinBUGS の良いところ 2 σ2 IG ~ (10,9) この例は,データが正規分布に従い,更に,そのパラメータである平均が正規分布,分散

データ

31

3.3.3 データの記述例

3.3.3.1 行列データの場合

Y X1 X2 site weight

15 43 44 1 56

45 21 31 2 76

44 34 56 1 55

23 33 33 2 67

このサンプルデータを記述する場合,行列として次のように記述できます.上記のデータ

以外に,サンプルサイズ(n=4)と変数の数(p=5)も定義しています

なお,このデータは行列ではなくベクトルとして定義することも可能です.

リストフォーマットと矩形フォーマットの 2 つのデータフォーマットでデータを定義する

こともできます.この方法では,行列や配列の複雑な記述を避けることができます.

リストフォーマットと矩形フォーマットを用いる場合は,データそのものを矩形フォーマ

ットで記述し,リストフォーマットによりデータのサンプルサイズ等の追加データを指定す

ると理解し易い記述となります.この場合,[Specification Tool]の load data ボタンを複数回

クリックすることにより別々に各データセットを WinBUGS にロードする必要があります. 下記は,上記の例を矩形フォーマットを用いて変数 y, x1, x2, site, weight を定義し,さらに

リストフォーマットを用いて定数 n と p を定義しています.

list (n = 4, p = 5, y = c(15, 45, 44, 23), x1 = c(43, 21, 34, 33), x2 = c(44, 31, 56, 33), site = c(1, 2, 1, 2), weight = c(56, 76, 55, 67) )

Y[ ] X1[ ] X2[ ] site[ ] weight[ ] 15 43 44 1 56 45 21 31 2 76 44 34 56 1 55 23 33 33 2 67 END

空白行list (n = 4, p = 5)

list (n = 4, p = 5, M = structure ( .Data = c(15, 43, 44, 1, 56, 45, 21, 31, 2, 76,

44, 34, 56, 1, 55, 23, 33, 33, 2, 67), .Dim = c(4, 5) )

Page 35: WinBUGS の使い方 - JPMA...WinBUGS の良いところ 2 σ2 IG ~ (10,9) この例は,データが正規分布に従い,更に,そのパラメータである平均が正規分布,分散

欠損値

32

3.3.3.2 配列データの入力

配列データも行列データと同様に,リストフォーマットと矩形フォーマットを組み合わせ

て入力可能です.例えば,4×3×2 行列の場合では,次の様に配列を定義することができま

す.

大きな配列に対しては,データを幾つかに分割し別々の矩形フォーマットで定義する方が

便利です.例えば,この 4×3×2 行列では,以下のように記載することができます.

この場合,最も高いインデックスを持つデータセットを最初のデータとして,WinBUGS へ

読み込ませなければなりません.ここでは x[, 3 2]を含むデータセットを最初に WinBUGS に

読み込ませた後に,他のデータを読み込みます.

3.4 欠損値

欠損値は"NA"の記号を入力します.矩形フォーマットでは以下の様になります.

同じデータをリストフォーマットでは以下となります.

ただし,多項分布と多変量スチューデント t 分布では欠損値の使用に制限があります.

x[,1] x[,2] x[,3] 105 NA 116 117 116 NA NA 115 112 END

空白行

list(x=structrue( .Data=c(105,NA,116, 117,116,NA, NA,115,112), .Dim=c(3,3)))

x[,1,2] x[,2,2] x[,3,2] 2 4 6 8 10 12 14 16 18 20 22 24 END

空白行x[,1,1] x[,2,1] x[,3,1] 1 3 5 7 9 11 13 15 17 19 12 23 END

空白行

x[,1,1] x[,2,1] x[,3,1] x[,1,2] x[,2,2] x[,3,2] 1 3 5 2 4 6 7 9 11 8 10 12 13 15 17 14 16 18 19 21 23 20 22 24 END

空白行list (d = c(4, 3, 2), p = 24, n = 300)

Page 36: WinBUGS の使い方 - JPMA...WinBUGS の良いところ 2 σ2 IG ~ (10,9) この例は,データが正規分布に従い,更に,そのパラメータである平均が正規分布,分散

初期値

33

3.5 初期値

MCMC を行う場合のチェーンの初期値を決める必要があります.初期値のフォーマットは

データのリストフォーマットと同じです.初期値は,応答変数を除く全ての Stochastic ノー

ドに対して与える必要があります.しかし,全ての初期値を指定する必要はなく,全て,あ

るいは一部の初期値は[Specification Tool]上の gen inits をクリックすることによって自動的

に割り当てることができます. しかし,自動的に作成した初期値を用いる場合,収束に問題があることや,数学的なエラ

ーが発生する場合があるので注意する必要があります.

Page 37: WinBUGS の使い方 - JPMA...WinBUGS の良いところ 2 σ2 IG ~ (10,9) この例は,データが正規分布に従い,更に,そのパラメータである平均が正規分布,分散

二項分布と予測分布

34

4. WinBUGSによる解析事例

4.1 二項分布と予測分布

4.1.1 データ

Spiegelhalter et al (2004)で紹介された事例を紹介します.試行回数 20 回中,15 回が生起し

た状況を考えます.奏功あり,あるいは奏功なしの二値をエンドポイントとした臨床試験な

どが当てはまります.

奏功あり 奏功なし 被験者数

15 人 5 人 20 人

4.1.2 モデル

反応変数 y は,生起確率θ,試行回数 m をパラメータに持つ二項分布に従うとします.例

えば,被験者数 m,奏効率θ,奏功ありの被験者数 y などを考えます. ),(~ mBinomialyi θ

生起確率θの事前分布は自然共役事前分布であるベータ分布とします.この例ではベータ分

布のパラメータをデータ(a=9.2, b=13.8)として与えています. )8.13,2.9(~ Betaθ

また,生起確率θの事後分布を求めることと同時に,y.pred として,この事後分布のもとで

40 回試行した場合の y の予測も行っています.この値を用い,y.pred がある閾値以上になる

場合を成功と考え,成功確率(p.crit)の分布も求めています.

Page 38: WinBUGS の使い方 - JPMA...WinBUGS の良いところ 2 σ2 IG ~ (10,9) この例は,データが正規分布に従い,更に,そのパラメータである平均が正規分布,分散

二項分布と予測分布

35

この例では,生起確率θの事後分布は MCMC を使わずとも簡単に導出できます.

),(~ bymayBeta +−+θ つまり,事後分布はベータ分布となります.ここで,ベータ分布 ),( baBeta の期待値と分散

は以下となるので,

baaE+

=][θ , )1()(

][ 2 +++=

babaabV θ

MCMC の平均を ][θE ,分散を ][θV とし,事後分布 ),( 22 baBeta のパラメータを導きます.

][])[])[1]([]([

2 θθθθθ

VVEEEa −−

= , ][

])[])[1]([])([1(2 θ

θθθθV

VEEEb −−−=

),( 22 baBeta を別の試験のθの事前分布とすることが出来ます.

4.1.3 結果

イタレーション回数を 4000回とし,初期の 1000回をバーンイン期間として除去しました.

θと y.pred のチェーンのプロットを示します. theta

iteration1001 1500 2000 2500 3000

0.2

0.4

0.6

0.8

y.pred

iteration1001 1500 2000 2500 3000

0.0

10.0

20.0

30.0

40.0

model { theta ~ dbeta(a, b) y ~ dbin(theta, m) # サンプルを増加した場合の予測分布 y.pred ~ dbin(theta, n) # 成功確率(ncritは閾値) p.crit <-step(y.pred - ncrit + 0.5) } # 初期値 list(theta=0.1) # データ list(a=9.2, b=13.8, y=15, m=20, n=40, ncrit=25)

Page 39: WinBUGS の使い方 - JPMA...WinBUGS の良いところ 2 σ2 IG ~ (10,9) この例は,データが正規分布に従い,更に,そのパラメータである平均が正規分布,分散

毒性試験データ

36

node mean sd MC error 2.5% median 97.5% start sample

p.crit 0.3305 0.4704 0.01038 0.0 0.0 1.0 1001 2000

theta 0.5633 0.07543 0.001382 0.4165 0.5647 0.7077 1001 2000

y.pred 22.59 4.297 0.09852 14.0 23.0 31.0 1001 2000

以上の結果から,生起確率θの事後確率の平均値は 0.5633,m=40 とした場合の反応変数 y

の予測事後分布の平均値は 22.59,25 超過を閾値とした場合の事後成功確率は 0.3305 と推定

されました. 以下にθの事前分布 )8.13,2.9(Beta ,事後分布 )8.131520,2.915( +−+Beta と MCMC によ

る事後分布のプロットを示します.

0.0 0.2 0.4 0.6 0.8 1.0

01

23

45

theta

Den

sity

MCMC posteriorPrior

~Beta(9.2,13.8)posterior

4.2 毒性試験データ

4.2.1 データ

以下は,丹後 (2000)において,一般化線形モデルの解説に使用している毒性試験データで

す.用量毎に死亡数が調査されています.最終的に半数致死量(LD50)の事後分布を求める

ことを目的とします.

log10(用量) 標本サイズ 死亡数

1.691 59 4 1.724 60 10 1.755 62 19 1.784 56 31

Page 40: WinBUGS の使い方 - JPMA...WinBUGS の良いところ 2 σ2 IG ~ (10,9) この例は,データが正規分布に従い,更に,そのパラメータである平均が正規分布,分散

毒性試験データ

37

log10(用量) 標本サイズ 死亡数

1.811 63 52 1.837 59 53 1.861 62 60 1.884 60 60

4.2.2 モデル ),(~ iii npBinomiald

ii

ii x

pp

P 101log)(logit ββ +=

−=

死亡数 diは投与群 i の死亡確率 pi,各用量群の標本サイズ niをパラメータとする二項分布

に従うとします.xiは投与群 i の対数変換した用量です.用量反応モデルはロジスティックモ

デルとしました.LD50( 1050ˆ/ˆlog ββ−=d )の事後分布を求めるためにβ0,β1の事後分布を求め

ることとします.

事前分布はβ0,β1ともに正規分布としています.ただし,事前分布には無情報な分布を仮

定します. )0001.0/1,0(~0 Normalβ

)0001.0/1,0(~1 Normalβ

Page 41: WinBUGS の使い方 - JPMA...WinBUGS の良いところ 2 σ2 IG ~ (10,9) この例は,データが正規分布に従い,更に,そのパラメータである平均が正規分布,分散

毒性試験データ

38

4.2.3 結果

初期の 10000 回を除外し,残りの 20000 回×3 チェーンの乱数列について分布を確認しま

した.自己相関が認められますが,推定値自体に問題は無さそうです.

node mean sd MC error 2.5% median 97.5% start sample

beta0 -67.36 4.882 0.2334 -76.86 -66.91 -57.66 10001 60000

beta1 37.99 2.744 0.1312 32.54 37.74 43.33 10001 60000

ld50 59.31 0.4942 0.003535 58.34 59.31 60.28 10001 60000

以上の結果より,LD50の事後平均値は 59.31,95%信用区間は(58.34, 60.28)であると推定され

model{ for (i in 1:N) { d[i] ~ dbin(p[i], n[i]); logit(p[i]) <- beta0 + beta1*x[i]; }

beta0 ~ dnorm(0, 0.0001); # 正規分布 beta1 ~ dnorm(0, 0.0001); # 正規分布 ld50 <- pow(10, -beta0/beta1); # LD50の算出式

} list(N=8, x=c(1.691,1.724,1.755,1.784,1.811,1.837,1.861,1.884), n=c(59,60,62,56,63,59,62,60), d=c(4,10,19,31,52,53,60,60))

Page 42: WinBUGS の使い方 - JPMA...WinBUGS の良いところ 2 σ2 IG ~ (10,9) この例は,データが正規分布に従い,更に,そのパラメータである平均が正規分布,分散

繰り返し測定データの解析

39

ました.

4.2.4 プロビットモデル

このデータは,用量反応モデルをプロビットモデルとして解析することも可能です. ),(~ iii npBinomiald

ii xP 10)(probit ββ +=

事前分布はβ0,β1ともに無情報な正規分布としています. )001.0/1,0(~0 Normalβ

)001.0/1,0(~1 Normalβ

WinBUGS で解析する上の注意点として,リンク関数に probit を用いると解析できない場合

があります.

以下の様に phi 関数を用いる方が良いでしょう.phi は標準正規分布の累積分布関数です.

node mean sd MC error 2.5% median 97.5% start sample

beta0 -36.45 2.696 0.1669 -41.33 -36.69 -31.36 10001 60000

beta1 20.56 1.514 0.09378 17.7 20.7 23.31 10001 60000

ld50 59.22 0.5059 0.00533 58.23 59.22 60.21 10001 60000

LD50の事後平均値は 59.22,95%信用区間は(58.23, 60.21)であると推定されました.この値は

ロジスティックモデルとほぼ同じ値です.

4.3 繰り返し測定データの解析

4.3.1 データ

これは,WinBUGS Examples Volume 2 の Jaw: repeated measures analysis of variance より,

Elston and Grizzle (1962)が報告している,20 人の少年について 18 ヶ月の期間にわたって 1 人

あたり各 4 時点の調査を行った ramus(jaw)骨高のデータです.

Subject Age

8.0 8.5 9.0 9.5

1 47.8 48.8 49.0 49.7 2 46.4 47.3 47.7 48.4

probit(p[i]) <- beta0 + beta1*x[i];

model{ for (i in 1:N) { d[i] ~ dbin(p[i], n[i]); p[i] <- phi(beta0 + beta1*x[i]); }

beta0 ~ dnorm(0, 0.001); beta1 ~ dnorm(0, 0.001); ld50 <- pow(10, -beta0/beta1);

}

Page 43: WinBUGS の使い方 - JPMA...WinBUGS の良いところ 2 σ2 IG ~ (10,9) この例は,データが正規分布に従い,更に,そのパラメータである平均が正規分布,分散

繰り返し測定データの解析

40

Subject Age

8.0 8.5 9.0 9.5

3 46.3 46.8 47.8 48.5

19 46.2 47.5 48.1 48.4 20 46.3 47.6 51.3 51.8

Mean 48.7 49.6 50.6 51.5 Variance 6.4 6.5 6.9 7.5

4.3.2 モデル

ii xE 10)( ββμ += ( 4,3,2,1=i ) ),(~ 4 ΣμNMultiYk ( 20,,2,1 K=k )

⎟⎟⎟⎟⎟

⎜⎜⎜⎜⎜

=

4

3

2

1

μμμμ

μ

⎟⎟⎟⎟⎟

⎜⎜⎜⎜⎜

44434241

14333231

14232221

14131211

ssssssssssssssss

μiの期待値は線形成長曲線モデルとします.骨高 Ykは平均値ベクトルをμ,分散共分散行

列をΣとする多変量正規分布に従うとします.xiは年齢とします.事前分布は,β0とβ1は無

情報な正規分布とします.分散共分散行列の事前分布は逆ウィシャート分布を仮定します. )001.0/1,0(~0 Normalβ

)001.0/1,0(~1 Normalβ

⎟⎟⎟

⎜⎜⎜

⎟⎟⎟

⎜⎜⎜

⎛Σ − 4,~

1000010000100001

1Wishart

ここでは一次式を仮定していますが,成長曲線を二次式に拡張することも可能でしょう. 2

210 iii xx βββμ ++= ( 4,3,2,1=i )

Page 44: WinBUGS の使い方 - JPMA...WinBUGS の良いところ 2 σ2 IG ~ (10,9) この例は,データが正規分布に従い,更に,そのパラメータである平均が正規分布,分散

繰り返し測定データの解析

41

BUGS の多変量正規分布 dmnorm は,第 1 パラメータに平均値ベクトル,第 2 パラメータ

に分散共分散行列の逆行列をとります.分散共分散行列は逆ウィシャート分布に従うとする

と,分散共分散行列の逆行列がウィシャート分布に従います. 最後に inverse 関数で Omega の逆行列を算出し,分散共分散行列(Sigma)の事後分布も推

定しています.

model{ # 標本分布(尤度)から得られる関係式 for (i in 1:N) {

# 多変量正規分布(平均値ベクトル, 分散共分散行列の逆行列) Y[i, 1:M] ~ dmnorm(mu[], Omega[ , ])

}

# 線形成長曲線モデル for(j in 1:M) {

mu[j] <- beta0 + beta1 * age[j] }

# 事前分布 beta0 ~ dnorm(0, 0.001) # 正規分布 beta1 ~ dnorm(0, 0.001) # 正規分布 Omega[1 : M , 1 : M] ~ dwish(R[ , ], 4)

# 分散共分散行列の逆数(ウィッシャート分布)

# 分散共分散行列へ変換 Sigma[1 : M , 1 : M] <- inverse(Omega[ , ])

}

Page 45: WinBUGS の使い方 - JPMA...WinBUGS の良いところ 2 σ2 IG ~ (10,9) この例は,データが正規分布に従い,更に,そのパラメータである平均が正規分布,分散

繰り返し測定データの解析

42

4.3.3 データと初期値

目的変数 Y は 20×4 の行列で定義しています.要因として年齢を設定しています.事前分

布であるウィシャート分布のパラメータもデータとして与えています.初期値として beta0と beta1 を設定しています.しかしこの初期値には Omega[]がない(分散に初期値を設定して

いない)ため,初期値を[get intis]を用いて自動作成させる必要があります.

4.3.4 結果

node mean sd MC error 2.5% median 97.5% start sample

Sigma[1,1] 6.69 2.332 0.0159 3.549 6.246 12.53 1001 24000

Sigma[1,2] 6.488 2.307 0.0156 3.371 6.042 12.19 1001 24000

Sigma[1,3] 6.064 2.278 0.01583 2.97 5.616 11.72 1001 24000

Sigma[1,4] 5.824 2.285 0.01581 2.696 5.373 11.46 1001 24000

Sigma[2,1] 6.488 2.307 0.0156 3.371 6.042 12.19 1001 24000

Sigma[2,2] 6.806 2.378 0.01607 3.603 6.342 12.68 1001 24000

Sigma[2,3] 6.459 2.363 0.01627 3.248 5.992 12.34 1001 24000

Sigma[2,4] 6.23 2.373 0.01618 2.982 5.765 12.1 1001 24000

Sigma[3,1] 6.064 2.278 0.01583 2.97 5.616 11.72 1001 24000

Sigma[3,2] 6.459 2.363 0.01627 3.248 5.992 12.34 1001 24000

Sigma[3,3] 7.295 2.549 0.01767 3.852 6.784 13.62 1001 24000

Sigma[3,4] 7.283 2.595 0.01765 3.761 6.771 13.73 1001 24000

# データ list(M = 4, # 時点数 N = 20, # 被験者数 # 目的変数 Y Bone Height :20例(Row),各年齢 4データ(Col) Y = structure(.Data =

c(47.8, 48.8, 49.0, 49.7, 46.4, 47.3, 47.7, 48.4, 46.3, 46.8, 47.8, 48.5, 45.1, 45.3, 46.1, 47.2, 47.6, 48.5, 48.9, 49.3, 52.5, 53.2, 53.3, 53.7, 51.2, 53.0, 54.3, 54.5, 49.8, 50.0, 50.3, 52.7, 48.1, 50.8, 52.3, 54.4, 45.0, 47.0, 47.3, 48.3, 51.2, 51.4, 51.6, 51.9, 48.5, 49.2, 53.0, 55.5, 52.1, 52.8, 53.7, 55.0, 48.2, 48.9, 49.3, 49.8, 49.6, 50.4, 51.2, 51.8, 50.7, 51.7, 52.7, 53.3, 47.2, 47.7, 48.4, 49.5, 53.3, 54.6, 55.1, 55.3, 46.2, 47.5, 48.1, 48.4, 46.3, 47.6, 51.3, 51.8), .Dim = c(20, 4)),

# 年齢が 8.0, 8.5, 9.0, 9.5の 4区分 age = c(8.0, 8.5, 9.0, 9.5), # Wishart行列 事前分布のパラメータをデータとして与えている R = structure(.Data = c(1, 0, 0, 0,

0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1), .Dim = c(4, 4)))

# 初期値 list(beta0 = 40 beta1 = 1)

Page 46: WinBUGS の使い方 - JPMA...WinBUGS の良いところ 2 σ2 IG ~ (10,9) この例は,データが正規分布に従い,更に,そのパラメータである平均が正規分布,分散

生物学的同等性試験

43

node mean sd MC error 2.5% median 97.5% start sample

Sigma[4,1] 5.824 2.285 0.01581 2.696 5.373 11.46 1001 24000

Sigma[4,2] 6.23 2.373 0.01618 2.982 5.765 12.1 1001 24000

Sigma[4,3] 7.283 2.595 0.01765 3.761 6.771 13.73 1001 24000

Sigma[4,4] 7.884 2.751 0.01843 4.144 7.348 14.81 1001 24000

beta0 33.59 1.956 0.0622 29.67 33.63 37.42 1001 24000

beta1 1.881 0.2225 0.007092 1.447 1.877 2.334 1001 24000

deviance 236.3 4.792 0.04425 228.9 235.7 247.3 1001 24000

Ageを表す beta1の事後平均は 1.881であり,半年ごとに 1.881 単位の成長が推定されました.

Sigma[ ,]は時点間の分散共分散行列の推定値を示しています.

25 30 35 40

0.00

0.10

0.20

beta0

N = 24000 Bandwidth = 0.2323

Den

sity

1.0 1.5 2.0 2.5 3.0

0.0

1.0

beta1

N = 24000 Bandwidth = 0.02636

Den

sity

4.4 生物学的同等性試験

4.4.1 データと背景

試験デザインは,この分野で標準的な 2 群 2 期のクロスオーバー試験です.被験者数は 19名,全データ数は 38 です.

被験者番号

id

投与群

sequence

時期

period

薬剤

treatment log(Cmax)

y

1 0 0 1 1.7783364 2 0 0 1 3.8375150 3 0 0 1 1.6272778 4 0 0 1 2.6581594

id は被験者番号,sequence は投与群=(0,1),period は時期=(0,1),treatment は薬剤=(0,1)とし

ています.反応変数 y は自然対数変換した Cmaxです.

Page 47: WinBUGS の使い方 - JPMA...WinBUGS の良いところ 2 σ2 IG ~ (10,9) この例は,データが正規分布に従い,更に,そのパラメータである平均が正規分布,分散

生物学的同等性試験

44

4.4.2 モデル

投与群(sequence),時期(period),treatment(薬剤)を要因に持つ,混合効果モデルと

します.反応変数 yijは,平均μij,分散σ2をパラメータに持つ正規分布,変量効果は平均 0,分散ω2を持つ正規分布に従うとします.

),(~ 2σμijij Normaly

iijijijij treatmentperiodsequence ηββββμ ++++= 3210

),0(~ 2ωη Normali

事前分布は,切片(beta0),群効果(beta1),時期効果(beta2)および薬剤効果(beta3)が正規分布,個体間変動の逆数(rho)と残差変動の逆数(tau)がガンマ分布としています.

それぞれの事前分布パラメータは事前に行われた予備試験の結果から求めた値としています. 2)1/28.09300 3.070137,(~0 Normalβ

8)19.69373081,1/ -0.0467863(~1 Normalβ 951)1/46.06144 ,0.01898462(~2 Normalβ 021)1/46.57592 ,0.05705471(~3 Normalβ

0)0.00130264 1,0.14763780(~/1 2 Gammaωρ = 0.2986549) 3.6047133,(~/1 2 Gammaστ =

# データ list(N=38, M=19, y=c(1.7783364,3.8375150,1.6272778,2.6581594,2.8780742, 3.5743100,2.5771819,1.9473377,3.9023766,3.6990773, 2.5273274,2.6665335,2.7581094,2.5610958,1.9960599, 2.5185026,2.6713862,2.9134370,0.9858168,2.2544447, 2.6253930,2.6837575,2.7688317,2.3155013,1.4973884, 2.3776926,3.0842009,1.8547343,2.2375131,3.3864221, 2.1306098,2.7669478,2.7813007,3.0791539,2.8075938, 1.3584092,3.4759956,3.0896779), sequence=c(0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0), period=c(0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,

0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1), treatment=c(1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0), id=c(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19, 11,12,13,14,15,16,17,18,19,1,2,3,4,5,6,7,8,9,10)) # 初期値 list(beta0=0, beta1=0, beta2=0, beta3=0, rho=1, tau=1,

eta=c(1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1))

Page 48: WinBUGS の使い方 - JPMA...WinBUGS の良いところ 2 σ2 IG ~ (10,9) この例は,データが正規分布に従い,更に,そのパラメータである平均が正規分布,分散

生物学的同等性試験

45

反応変数に対数変換を行わない場合は,正規分布 dnorm(mu,tau)の代わりに,対数正規分布

dlnorm(mu,tau)を使います.しかし,dlnorm は dnorm に比べて計算に時間がかかります.最後

に幾何平均比(theta)が 0.8 から 1.25 の間にある確率を求めています.

4.4.3 結果

バーンイン期間を 3000,イタレーション回数を 10000 回,チェーンを 1 とした結果を示し

ます. beta0

iteration3001 5000 7500 10000 12500

2.0

2.5

3.0

3.5

beta1

iteration3001 5000 7500 10000 12500

-1.0

-0.5

0.0

0.5

model { for (j in 1:M) { eta[j] ~ dnorm(0,rho); } for (i in 1:N) { mu[i] <- beta0 + beta1*sequence[i] + beta2*period[i] + beta3*treatment[i] + eta[id[i]]; y[i] ~ dnorm(mu[i],tau); } beta0 ~ dnorm( 3.070137, 28.093002 ); beta1 ~ dnorm( -0.04678631, 19.69373088 ); beta2 ~ dnorm( 0.01898462, 46.06144951 ); beta3 ~ dnorm( 0.05705471, 46.57592021 ); rho ~ dgamma( 0.147637801, 0.001302640 ); tau ~ dgamma( 3.6047133, 0.2986549 ); omega <- 1/sqrt(rho); sigma <- 1/sqrt(tau); theta <- exp(beta3); equivalence <- step(theta-0.8) - step(theta-1.25); }

Page 49: WinBUGS の使い方 - JPMA...WinBUGS の良いところ 2 σ2 IG ~ (10,9) この例は,データが正規分布に従い,更に,そのパラメータである平均が正規分布,分散

NDLM

46

beta2

iteration3001 5000 7500 10000 12500

-0.6 -0.4 -0.2

5.55112E-17 0.2 0.4

beta3

iteration3001 5000 7500 10000 12500

-0.4 -0.2 0.0 0.2 0.4 0.6

omega

iteration3001 5000 7500 10000 12500

0.0

0.5

1.0

1.5

sigma

iteration3001 5000 7500 10000 12500

0.2

0.4

0.6

0.8

薬剤間の幾何平均比(theta)の分布は以下となり,中間値は 1.055,(5%,95%)点は(0.9155 , 1.208)でした.

パラメータの推定値は以下となりました.equivalence は 0.9769 と,高い確率で同等であると

の結果になりました.

node mean sd MC error 5.0% median 95.0% start sample

beta0 2.861 0.1332 0.003502 2.647 2.858 3.083 3001 10000

beta1 -0.2724 0.1684 0.004059 -0.5478 -0.2714 0.001668 3001 10000

beta2 -0.05754 0.08438 9.323E-4 -0.1968 -0.05712 0.0809 3001 10000

beta3 0.05037 0.08471 8.59E-4 -0.08831 0.05153 0.1886 3001 10000

omega 0.5931 0.1273 0.002412 0.415 0.5785 0.8216 3001 10000

sigma 0.3304 0.04915 8.551E-4 0.2615 0.3236 0.4196 3001 10000

theta 1.055 0.08953 8.918E-4 0.9155 1.053 1.208 3001 10000

equivalence 0.9769 0.1502 0.001361 1.0 1.0 1.0 3001 10000

4.5 NDLM

4.5.1 データと背景

用量反応曲線の推定に対して,単調性を仮定しない時系列解析で開発された方法である

Normal Dynamic Linear Model(NDLM)による解析の例です. 近年,ベイズ流の用量反応試験が提案され,Neutrophils 阻害剤による急性ストローク治療

に対する ASTIN study に適用された例が報告されています(Andrew P Grieve, Clinical Trials 2005).本試験の基本的な考え方は,用量反応曲線に事前分布を設定して,中間解析データ

に基づき逐次更新し,事後分布に基づいて,より有効と考えられる用量に多くの症例を割り

Page 50: WinBUGS の使い方 - JPMA...WinBUGS の良いところ 2 σ2 IG ~ (10,9) この例は,データが正規分布に従い,更に,そのパラメータである平均が正規分布,分散

NDLM

47

付けるべく,割付比率を更新する Adaptive デザインとなっています.後述する WinBUGS の

ソースコードは,Smith et al. (2006)に掲載されているコードを一部変更したものです.

4.5.2 モデル

NDLM モデルは

jjj

jjjj

EquationSystemic

EquationnObservatio

εδδ

ωδθθ

+=

++=

−−

1

11

:

:

),0(~

),0(~2

2

σε

σω

WN

WN

j

j

各用量のパラメータは以下の分布に従うこととし,

jjj

ij

base

Ny

⋅+= βθμ

σμ ),(~ 2

事前分布は以下のように設定しました.

)100,001.0(~)001.0,001.0(~

)1000,0(~)1000,0(~)1000,0(~

2

1

1

UWIG

NNN

σ

βδθ

Page 51: WinBUGS の使い方 - JPMA...WinBUGS の良いところ 2 σ2 IG ~ (10,9) この例は,データが正規分布に従い,更に,そのパラメータである平均が正規分布,分散

NDLM

48

4.5.3 シミュレーション

以下の条件で,データを作成し解析しました.MCMC の条件は,イタレーション回数 3000回,初期の 1000 回をバーンイン期間として削除しました.

用量群 K 12 被験者数 J 120

Slope delta [0,1,2,3,4,4,3,3,2,1,0,0] ベースライン Base log(Base) ~ N(log(7) , 0.2)

Smoothing factor W 0 誤差分散σ2 sigma σ2 ~ N(0,5)

θjの事後平均と事後分布,および用量反応曲線を以下に示しました.

model{ for (j in 1:J){

base[j] <- BASE[j] - mean(BASE[]) y[j] ~ dnorm(mu[j], sigma2inv) mu[j] <- theta[dose[j]]+ beta*base[j]

} for(k in 2:K){

theta[k] ~ dnorm(mu.theta[k], prec.theta[k]) mu.theta[k] <- theta[k-1] + delta[k-1] delta[k] ~ dnorm(delta[k-1], prec.delta[k]) prec.theta[k] <- 1/(W * sigma * sigma) prec.delta[k] <- 1/(W * sigma * sigma)

} theta[1] ~ dnorm(0,1.0E-3) delta[1] ~ dnorm(0, 1.0E-3) beta ~ dnorm(0,1.0E-3) sigma2inv ~ dgamma (0.001, 0.001) sigma <- 1/sqrt(sigma2inv) W ~ dunif(0.001,100)

}

Page 52: WinBUGS の使い方 - JPMA...WinBUGS の良いところ 2 σ2 IG ~ (10,9) この例は,データが正規分布に従い,更に,そのパラメータである平均が正規分布,分散

NDLM

49

Page 53: WinBUGS の使い方 - JPMA...WinBUGS の良いところ 2 σ2 IG ~ (10,9) この例は,データが正規分布に従い,更に,そのパラメータである平均が正規分布,分散

生存時間解析

50

2 4 6 8 10 12

010

2030

40

dose

y

Estimate

Quantile(10%,90%)

赤線で示した値が NDLM によって推定された各用量の有効性(y)を示しています.NDLMにより,用量反応曲線が仮定通りに推定されていることがわかります.

4.6 生存時間解析

4.6.1 データ

ある薬剤(Test)と対照薬(Control)使用時の生存時間(ある起点からイベント発生まで

の時間)の長さを評価します.この試験では,最長 5 年まで調査を行っています.この様な

データでは,ある時点まではイベント発生が無いことが確認されていますが,その後の結果

が不明な「打ち切り例」が存在し,単純な比較が出来ません.打ち切りデータに対応するた

めに WinBUGS では特殊な構文が用意されています.

ID 生存時間

イベント発生 投与薬剤 日 年

1 234 0.641 死亡 Control 2 720 1.973 死亡 Test 3 52 0.142 死亡 Control 4 1737 4.759 死亡 Test 5 57 0.156 死亡 Control 6 1400 3.836 死亡 Test

Page 54: WinBUGS の使い方 - JPMA...WinBUGS の良いところ 2 σ2 IG ~ (10,9) この例は,データが正規分布に従い,更に,そのパラメータである平均が正規分布,分散

生存時間解析

51

ID 生存時間

イベント発生 投与薬剤 日 年

7 6 0.016 死亡 Control

86 163 0.447 死亡 Test 87 185 0.507 打ち切り Control 88 1825 5.000 打ち切り Test 89 147 0.403 死亡 Control 90 69 0.189 死亡 Test

生存時間(t)は単位を年とし,打ち切りデータでは欠損(NA)とします.代わりに打ち

切り例は,打ち切りを示す変数(cens)に打ち切り時間を入力します.イベント発生(死亡)

は,この変数を 0 とします.使用薬剤を区別する変数(x)には,Control 投与時は 0,Test投与時は 1 を入力しています.

4.6.2 モデル

生存時間はワイブル分布に従うとします.

)exp(),(~

10 ii

ii

xWeibullt

ββμμα

+=

事前分布はαが無情報なガンマ分布,β0,β1が無情報な正規分布とします. )001.0/1,0(~0 Normalβ

)001.0/1,0(~1 Normalβ

Weibull 分布の確率密度関数は次式となります. )exp(),|( 1 vv xxvvxf λλλ −= −

list(N=90, t=c(0.641,1.973,0.142,4.759,0.156,3.836,0.016,1.701,0.211,NA,0.129,4.770,0.542,1.219,NA,1.214,NA,3.540,1.342,2.726,1.649,NA,0.162,1.679,3.214,NA,0.266,NA,4.537,4.047,2.726,0.005,NA,2.049,NA,1.400,0.592,3.463,0.973,1.189,NA,NA,1.899,4.044,0.551,NA,0.236,NA,4.271,0.942,NA,NA,1.693,0.879,NA,NA,0.630,3.833,0.973,1.222,NA,4.132,0.570,3.833,1.951,3.904,4.468,NA,1.584,2.507,0.959,2.326,NA,NA,0.299,0.216,0.008,1.000,1.759,1.422,NA,2.729,1.126,0.047,0.912,0.447,NA,NA,0.403,0.189), cens=c(0,0,0,0,0,0,0,0,0,5,0,0,0,0,0.077,0,5,0,0,0,0,1.110,0,0,0,5,0,5,0,0,0,0,1.129,0,0.460,0,0,0,0,0,0.315,5,0,0,0,5,0,5,0,0,5,5,0,0,0.074,5,0,0,0,0,0.564,0,0,0,0,0,0,5,0,0,0,0,5,0.370,0,0,0,0,0,0,0.389,0,0,0,0,0,0.507,5,0,0), x=c(0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1))

# 初期値 list(alpha=1,beta0=0,beta1=0)

Page 55: WinBUGS の使い方 - JPMA...WinBUGS の良いところ 2 σ2 IG ~ (10,9) この例は,データが正規分布に従い,更に,そのパラメータである平均が正規分布,分散

生存時間解析

52

Weibull 分布に従う場合,生存関数 S(x)とハザード関数 h(x)は次式となります. )exp(),|( vxvxS λλ −=

1),|( −= vxvvxh λλ

生存時間が Weibull 分布に従う場合 vの値によって,ハザード関数の形状が変わります. 1<vの場合は単調減少, 1>v の場合は単調増加, 1=v の場合は時間によらずハザードが一定と

なります.

4.6.3 結果

バーンイン期間を 1000 回,イタレーション回数を 4000 回,チェーンを 1 とした結果を示

します.

node mean sd MC error 2.5% median 97.5% start sample

alpha 0.9211 0.09142 0.002422 0.7535 0.9191 1.106 1001 4000

beta0 -0.5347 0.1937 0.006803 -0.928

6 -0.5305 -0.166 1001 4000

beta1 -0.7103 0.2463 0.008215 -1.19 -0.7171 -0.2146 1001 4000

theta 0.5067 0.1278 0.004272 0.3041 0.4882 0.8069 1001 4000

alpha

iteration1001 2000 3000 4000 5000

0.6

0.8

1.0

1.2

1.4

beta0

iteration1001 2000 3000 4000 5000

-1.5

-1.0

-0.5

0.0

0.5

beta1

iteration1001 2000 3000 4000 5000

-2.0 -1.5 -1.0 -0.5 0.0 0.5

theta

iteration1001 2000 3000 4000 5000

0.0 0.25 0.5 0.75 1.0 1.25

thetaの事後平均は 0.5067,95%信用区間は(0.3041,0.8069)であり,Test薬剤の効果が認めら

れました.推定されたパラメータによる薬剤毎の生存関数の曲線とKaplan Meier法による生存

関数曲線を 図 4-1に示します.

model{ for (i in 1:N) { mu[i] <- exp(beta0 + beta1*x[i]); t[i] ~ dweib(alpha, mu[i])I(cens[i],) } alpha ~ dgamma(0.001, 0.001); beta0 ~ dnorm(0,0.001); beta1 ~ dnorm(0,0.001); theta <- exp(beta1); }

Page 56: WinBUGS の使い方 - JPMA...WinBUGS の良いところ 2 σ2 IG ~ (10,9) この例は,データが正規分布に従い,更に,そのパラメータである平均が正規分布,分散

生存時間解析

53

図 4-1 Kaplan Meier法によって得た推定値とWeibull分布を仮定して得たパラメータ

による生存関数

4.6.4 Cox回帰

このデータは Cox 回帰モデルとして解析することもできます.obs.t は生存時間,cens は打

ち切り情報(cens=1:イベント,cens=0:打ち切り),t は時点(obs.t の重複を除きソート),Tは時点数-1 です.ここでは,モデルの記述内でデータを加工しています.

WinBUGS Examples Volume 1 の Leuk: Survival analysis using Cox regression を参考にすると

良いでしょう.解析結果は省略します.

list(N=90,T=74,eps=1.0E-10, obs.t=c(0.641,1.973,0.142,4.759,0.156,3.836,0.016,1.701,0.211,5.000, 0.129,4.770,0.542,1.219,0.077,1.214,5.000,3.540,1.342,2.726,1.649, 1.110,0.162,1.679,3.214,5.000,0.266,5.000,4.537,4.047,2.726,0.005, 1.129,2.049,0.460,1.400,0.592,3.463,0.973,1.189,0.315,5.000,1.899, 4.044,0.551,5.000,0.236,5.000,4.271,0.942,5.000,5.000,1.693,0.879, 0.074,5.000,0.630,3.833,0.973,1.222,0.564,4.132,0.570,3.833,1.951, 3.904,4.468,5.000,1.584,2.507,0.959,2.326,5.000,0.370,0.299,0.216, 0.008,1.000,1.759,1.422,0.389,2.729,1.126,0.047,0.912,0.447,0.507, 5.000,0.403,0.189), cens=c(1,1,1,1,1,1,1,1,1,0,1,1,1,1,0,1,0,1,1,1,1,0,1,1,1,0,1,0,1,1,1,1,0,1,0,1,1,1,1,1,0,0,1,1,1,0,1,0,1,1,0,0,1,1,0,0,1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,0,0,1,1,1,1,1,1,0,1,1,1,1,1,0,0,1,1), x=c(0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1), t=c(0.005,0.008,0.016,0.047,0.074,0.077,0.129,0.142,0.156,0.162, 0.189,0.211,0.216,0.236,0.266,0.299,0.315,0.370,0.389,0.403,0.447, 0.460,0.507,0.542,0.551,0.564,0.570,0.592,0.630,0.641,0.879,0.912, 0.942,0.959,0.973,1.000,1.110,1.126,1.129,1.189,1.214,1.219,1.222, 1.342,1.400,1.422,1.584,1.649,1.679,1.693,1.701,1.759,1.899,1.951, 1.973,2.049,2.326,2.507,2.726,2.729,3.214,3.463,3.540,3.833,3.836, 3 904,4 044,4 047,4 132,4 271,4 468,4 537,4 759,4 770,5 000))

Page 57: WinBUGS の使い方 - JPMA...WinBUGS の良いところ 2 σ2 IG ~ (10,9) この例は,データが正規分布に従い,更に,そのパラメータである平均が正規分布,分散

カウントデータの解析

54

4.7 カウントデータの解析

4.7.1 データ

113 名の被験者に対して試験期間中に発現した血圧低下症状の回数が調査されています.

投与薬剤間の発現回数の違いを調べます.

ID 発現回数 試験期間(日) 投与薬剤

1 0 36 Control 2 0 36 Test 3 3 35 Control 4 1 35 Test

112 3 34 Control 113 1 33 Test

発現回数の要約は次表となっています.

# 初期値 list(beta=0,dL0=c(1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1)

model { # データの変換 for(i in 1:N) { for(j in 1:T) { Y[i,j] <- step(obs.t[i] - t[j] + eps) dN[i,j] <- Y[i,j] * cens[i] * step(t[j+1] - obs.t[i] - eps) } } # 尤度 for(j in 1:T) { for(i in 1:N) { dN[i,j] ~ dpois(Idt[i,j]); Idt[i,j] <- Y[i,j] * exp(beta*x[i]) * dL0[j]; } } # 事前分布 for (j in 1:T) { dL0[j] ~ dgamma(0.01,0.01); } beta ~ dnorm(0.0, 0.01); }

Page 58: WinBUGS の使い方 - JPMA...WinBUGS の良いところ 2 σ2 IG ~ (10,9) この例は,データが正規分布に従い,更に,そのパラメータである平均が正規分布,分散

カウントデータの解析

55

投与薬剤 平均 標準偏差 中央値 N

Control 8.1 9.15 4.5 58

Test 7.0 9.02 3.0 55

投与薬剤群毎にヒストグラムを描くと次の図となります.

4.7.2 モデル ポアソン分布に従う,以下の 3 モデルで解析を行っています. iy は症状発現回数, it は試験

期間(日), ix は投与薬剤(Control=0,Test=1)とします.

Model 1: シンプルなポアソン回帰モデル

list( y=c( 0, 0, 3, 1, 4, 3, 0, 1, 6, 5,21,15, 1, 6,10, 5, 1, 0,30,22, 36,36, 7, 0,27,12,20,11, 1, 1, 5, 2,14,24, 3, 0, 6, 4, 0, 1, 2,12, 4, 1, 0, 4, 8, 5, 0, 0, 8,25,20, 9, 2, 1, 0, 0, 0,12, 15,11,11,12, 6,18, 3, 9,14, 0, 0, 1, 4, 4, 7, 6, 8, 2, 0, 2, 1, 0, 0, 8, 5, 3, 2, 2, 0,18, 3, 0, 0, 1, 1,14, 2, 1, 1,22, 34,24,10,28,32,14,19, 5, 4, 5, 0, 3, 1), t=c(36,36,35,35,36,36,36,36,36,36,36,36,36,36,24,24,36,36,36,36, 36,36,36,36,36,36,36,36,24,24,36,36,36,36,36,36,26,33,36,36, 36,36,36,36,14,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36, 36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36, 35,11,34,33,34,33,34,36,36,34,35,34,34,34,33,36,36,34,23,33, 34,34,33,33,34,33,34,34,33,26,28,34,33), x=c(0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1, 0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1, 0,1,0,1,0,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0, 1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0, 1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0, 1,0,1,0,1,0,1,0,1,0,0,0,1), N=113)

Page 59: WinBUGS の使い方 - JPMA...WinBUGS の良いところ 2 σ2 IG ~ (10,9) この例は,データが正規分布に従い,更に,そのパラメータである平均が正規分布,分散

カウントデータの解析

56

)(~)exp( 10

ii

iii

Poissonyxt

λββλ +=

0β と 1β の事前分布は無情報な正規分布とします.

Model 2: 過分散を考慮したポアソン回帰モデル

)(~),(~

)exp( 10

ii

i

iiii

PoissonyGamma

xt

λααε

εββλ +=

0β と 1β の事前分布は無情報な正規分布,α の事前分布はは無情報なガンマ分布とします.

Model 3: 0 の過剰を考慮したポアソン回帰モデル

)(~)(~

)exp(000

10

ii

iii

PoissonypBernoulli

xt

λρ

ββρρ

λ⎩⎨⎧

+≠=

=

0β と 1β の事前分布は無情報な正規分布とします, p の事前分布はベータ分布としています

が, )1,1(Beta は一様分布と考えることができます.このモデルについては,岩崎 (2010)を参照

されるとよいでしょう.「3.2.11 新しい確率分布の構成」を使った混合分布モデルとしてコ

ーディングすることもできます.

Model 1 model { for (i in 1:N) { lambda[i] <- t[i] * exp(beta0 + beta1*x[i]) ; y[i] ~ dpois(lambda[i]); } beta0 ~ dnorm(0,0.001); beta1 ~ dnorm(0,0.001); }

Model 2 list(beta0=0, beta1=0, alpha=1) model { for (i in 1:N) { eps[i] ~ dgamma(alpha, alpha); lambda[i] <- t[i] * exp(beta0 + beta1*x[i]) * eps[i]; y[i] ~ dpois(lambda[i]); } alpha ~ dgamma(0.001, 0.001); beta0 ~ dnorm(0, 0.001); beta1 ~ dnorm(0, 0.001); }

Page 60: WinBUGS の使い方 - JPMA...WinBUGS の良いところ 2 σ2 IG ~ (10,9) この例は,データが正規分布に従い,更に,そのパラメータである平均が正規分布,分散

カウントデータの解析

57

4.7.3 解析結果

3 モデルとも 3000 回繰り返した乱数列の最初の 1000 回をバーンイン期間として削除しま

した.どのモデルも視覚的には収束に達していると考えられます.

Model 1

node mean sd MC error 2.5% median 97.5% start sample

beta0 -1.427 0.04637 0.001563 -1.519 -1.425 -1.337 1001 2000

beta1 -0.1821 0.069 0.0024 -0.3205 -0.1818 -0.04143 1001 2000

beta0

iteration1001 1500 2000 2500 3000

-1.6

-1.5

-1.4

-1.3

-1.2

beta1

iteration1001 1500 2000 2500 3000

-0.6

-0.4

-0.2

5.55112E-17

0.2

Model 2

node mean sd MC error 2.5% median 97.5% start sample

alpha 0.651 0.09933 0.003207 0.4811 0.6451 0.8756 1001 2000

beta0 -1.423 0.1816 0.02089 -1.739 -1.438 -1.06 1001 2000

beta1 -0.1582 0.2406 0.02643 -0.5809 -0.1699 0.3113 1001 2000

alpha

iteration1001 1500 2000 2500 3000

0.2 0.4 0.6 0.8 1.0 1.2

beta0

iteration1001 1500 2000 2500 3000

-2.0 -1.75 -1.5 -1.25 -1.0 -0.75

beta1

iteration1001 1500 2000 2500 3000

-1.0

-0.5

0.0

0.5

1.0

Model 3

node mean sd MC error 2.5% median 97.5% start sample

Model 3 list(beta0=0, beta1=0, p=0.5) model { for (i in 1:N) { rho[i] ~ dbern(p); lambda[i] <- t[i] * exp(beta0 + beta1*x[i]) *rho[i]; y[i] ~ dpois(lambda[i]); } p ~ dbeta(1,1); beta0 ~ dnorm(0, 0.001); beta1 ~ dnorm(0, 0.001); }

Page 61: WinBUGS の使い方 - JPMA...WinBUGS の良いところ 2 σ2 IG ~ (10,9) この例は,データが正規分布に従い,更に,そのパラメータである平均が正規分布,分散

メタアナリシス

58

node mean sd MC error 2.5% median 97.5% start sample

beta0 -1.262 0.04692 0.001654 -1.354 -1.262 -1.17 1001 2000

beta1 -0.09352 0.0697 0.002466 -0.2288 -0.09447 0.04048 1001 2000

p 0.801 0.03759 8.406E-4 0.7234 0.8032 0.869 1001 2000

beta0

iteration1001 1500 2000 2500 3000

-1.5

-1.4

-1.3

-1.2

-1.1

beta1

iteration1001 1500 2000 2500 3000

-0.4

-0.2

0.0

0.2

p

iteration1001 1500 2000 2500 3000

0.6

0.7

0.8

0.9

1β の事後分布より )0Pr( 1 <β を求めると以下となります.Model 1 では,薬剤間に差があ

る確率が高いとなりましたが,それ以外ではそれほどでもない結果となっています.

Model 1 Model 2 Model 3 )0Pr( 1 <β 0.9996 0.7375 0.9055

4.8 メタアナリシス

4.8.1 データ

このデータは,コクラン共同計画の早産による新生児の死亡に対するコルチコステロイド

の効果を調べる 7 つの無作為化臨床試験の結果です.各試験のオッズ比の統合を行います. DerSimonian-Laird の方法によるオッズ比は,0.53(95%信頼区間は 0.37 から 0.78)と推定

されます.

試験 投与あり コントロール

死亡数 N 死亡数 N

1 Auckland 36 532 60 538

2 Block 1 69 5 61

3 Doran 4 81 11 63

4 Gamsu 14 131 20 137

5 Morrison 3 67 7 59

6 Papageorgiou 1 71 7 75

7 Tauesch 8 56 10 71

Page 62: WinBUGS の使い方 - JPMA...WinBUGS の良いところ 2 σ2 IG ~ (10,9) この例は,データが正規分布に従い,更に,そのパラメータである平均が正規分布,分散

メタアナリシス

59

図 4-2 各試験のオッズ比と DerSimonian-Laird 法によるメタアナリシスの結果

4.8.2 モデル ),(~ ijijij npBinomialr

jiiij xp θφ +=)logit(

),(~ 2σμθ Normali

rijは試験 i の処置 j の死亡数, nijは試験 i の処置 j の新生児の数,x は投与の有無(x=0,投与

なし,x=1 は投与あり)です. )exp(μ が目的とする統合されたオッズ比となります.

事前分布は,φiが無情報な正規分布,μが無情報な正規分布,σ2が無情報な逆ガンマ分布とし

ています. )001.0/1,0(~ Normaliφ

)001.0/1,0(~ Normalμ )001.0,001.0(~/1 2 Gammaτσ =

# データ list(r=structure(.Data=c(36,60,1,5,4,11,14,20,3,7,1,7,8,10), .Dim=c(7,2)),n=structure(.Data=c(532,538,69,61,81,63,131,137,67,59,71,75,56,71), .Dim=c(7,2)), x=c(1,0),N=7)

Page 63: WinBUGS の使い方 - JPMA...WinBUGS の良いところ 2 σ2 IG ~ (10,9) この例は,データが正規分布に従い,更に,そのパラメータである平均が正規分布,分散

コンパートメントモデルによる薬物動態解析

60

4.8.3 結果

8000 回繰り返した乱数列の最初の 3000 回をバーンイン期間として削除しました.

node mean sd MC error 2.5% median 97.5% start sample

mu -0.6991 0.2511 0.01317 -1.251 -0.6841 -0.2712 3001 5000

OR 0.5122 0.1256 0.006811 0.2863 0.5046 0.7624 3001 5000

sigma 0.2607 0.268 0.015 0.02829 0.1667 0.9982 3001 5000

tau 174.8 347.2 14.66 1.004 36.06 1253.0 3001 5000

theta.new -0.7017 0.4494 0.01316 -1.721 -0.6711 0.09388 3001 5000

統合されたオッズ比は 0.5122(95%信用区間は 0.2863 から 0.7624)でした.

mu

iteration3001 4000 6000 8000

-3.0

-2.0

-1.0

0.0

1.0

tau

iteration3001 4000 6000 8000

0.0

2.00E+3

4.00E+3

6.00E+3

4.9 コンパートメントモデルによる薬物動態解析

WinBUGS には PKBUGS と呼ばれる追加パッケージがあり,コンパートメントモデルによ

る薬物動態の解析を行うことができます.ここでは,このパッケージを使わずに薬物動態モ

デルを構築し,パラメータの推定を行います.

4.9.1 データ

18 人の被験者に対して 100μg の錠剤を経口投与後,経時的に 10 回の採血が行われ,血漿

中薬物濃度が測定されました.

model { for (i in 1:N) { for (j in 1:2) { r[i,j] ~ dbin(p[i,j] , n[i,j]); logit(p[i,j]) <- phi[i] + theta[i] * x[j] ; } theta[i] ~ dnorm(mu, tau); phi[i] ~ dnorm(0, 0.001); } mu ~ dnorm(0.0, 0.001); OR <- exp(mu); tau ~ dgamma(0.001, 0.001); sigma <- 1/sqrt(tau); theta.new ~ dnorm(mu, tau); }

# 初期値 list(mu=1,tau=1,theta.new=1,theta=c(1,1,1,1,1,1,1),phi=c(1,1,1,1,1,1,1))

Page 64: WinBUGS の使い方 - JPMA...WinBUGS の良いところ 2 σ2 IG ~ (10,9) この例は,データが正規分布に従い,更に,そのパラメータである平均が正規分布,分散

コンパートメントモデルによる薬物動態解析

61

4.9.2 解析モデル

薬物動態モデルとして 1 次吸収過程のある線形の 1 コンパートメントモデルを用います.

CL はクリアランス,F はバイオアベイラビリティ,V は分布容積,Dose は投与量,Ka は吸

収速度定数,t は時間を表しています. KeKa > を保証するために, 0* >Ka と 0>Ke から Kaを定義しています.

( ))exp()exp( tKatKeKeKa

KaVDoseFCp ii

ii

i

i

ipredit ⋅−−⋅−

−⋅

=

iii VCLKe /=

iii KaKeKa *+=

測定誤差は指数誤差モデルとします.ここでは,対数を取り正規分布として解析します. )),(log(~)log( 2σpred

itit CpNCp

薬物動態パラメータの個体間変動は指数誤差モデルとします.対数を取り多変量正規分布に

従うとします.

⎟⎟⎟⎟

⎜⎜⎜⎜

Ω⎟⎟⎟⎟

⎜⎜⎜⎜

⎟⎟⎟

⎜⎜⎜

⎛,

)log()/log()/log(

~)log()/log()/log(

*3

* KaFVFCL

NKa

FVFCL

i

i

i

4.9.3 事前分布

⎟⎟⎟

⎜⎜⎜

⎟⎟⎟

⎜⎜⎜

⎛Ω− 3,

100010001

~

)001.0,001.0(~/1)1000,0(~)log()1000,0(~)/log()1000,0(~)/log(

1

2

*

W

GaNKaNFVNFCL

i

i

i

σ

Page 65: WinBUGS の使い方 - JPMA...WinBUGS の良いところ 2 σ2 IG ~ (10,9) この例は,データが正規分布に従い,更に,そのパラメータである平均が正規分布,分散

コンパートメントモデルによる薬物動態解析

62

4.9.4 モデルとデータ

4.9.5 結果

20000 回繰り返した乱数列の最初の 10000 回をバーンイン期間として削除しました.

node mean sd MC error 2.5% median 97.5%

CL 19.46 1.384 0.01654 16.84 19.39 22.34

model { for (i in 1:N) { eta[i,1:p] ~ dmnorm(theta[1:p], rho[1:p,1:p]); cl[i] <- exp(eta[i,1]); v[i] <- exp(eta[i,2]); ke[i] <- cl[i]/v[i]; ka[i] <- ke[i] + exp(eta[i,3]); for (j in 1:M) { log.mu[i,j] <- log(dose/v[i] * ka[i]/(ka[i]-ke[i]) * (exp(-ke[i]*t[j])-exp(-ka[i]*t[j]))); log.y[i,j] ~ dnorm(log.mu[i,j] , tau); } } tau ~ dgamma(0.001, 0.001); rho[1:p, 1:p] ~ dwish(R[1:p,1:p], p); theta[1] ~ dnorm(0, 0.001); theta[2] ~ dnorm(0, 0.001); theta[3] ~ dnorm(0, 0.001); CL <- exp(theta[1]); V <- exp(theta[2]); KA <- CL/V + exp(theta[3]); sigma <- 1/sqrt(tau); Omega[1:p,1:p] <- inverse(rho[1:p, 1:p]); }

list(N=18, M=10, dose=100, p=3, R=structure(.Data=c(1,0,0,0,1,0,0,0,1),.Dim=c(3,3)), t=c(1,2,3,4,5,6,8,10,12,24), log.y=structure(.Data=c( -0.5711,-0.5897,-0.6281,-0.8616,-0.8933,-1.2765,-1.4405,-1.7988,-2.3330,-4.1669, -1.5082,-1.2087,-1.0683,-0.9824,-1.0978,-1.1783,-1.2715,-1.3587,-1.6750,-2.7599, -1.3016,-1.1664,-0.9357,-0.9558,-1.0683,-1.1600,-1.3356,-1.4000,-1.6597,-2.6780, -0.7681,-0.8994,-0.8862,-1.0498,-0.9460,-1.3736,-1.5357,-1.7481,-2.2509,-3.9221, -1.2816,-1.0048,-1.0877,-1.3610,-1.2458,-1.4606,-1.6180,-1.6988,-2.0219,-3.0597, -1.4250,-0.9924,-1.0183,-1.1904,-1.5779,-1.3042,-1.7339,-1.8780,-1.9668,-3.2468, -1.0683,-0.8025,-0.6559,-0.9916,-0.9991,-1.1937,-1.2972,-1.6099,-1.9762,-3.9021, -0.8142,-0.7610,-0.7438,-0.8807,-0.7350,-0.9506,-1.1221,-1.3295,-1.4997,-2.4068, -1.2816,-0.9517,-1.0348,-1.2150,-1.2396,-1.0211,-1.4482,-1.6230,-1.8911,-3.4265, -1.1276,-0.7572,-0.7540,-0.9160,-0.9613,-1.0832,-1.1081,-1.5128,-1.7994,-2.8700, -1.0436,-0.8059,-0.7340,-0.6929,-1.0120,-1.0619,-1.4250,-1.5219,-1.9704,-3.4933, -1.0211,-0.9367,-1.2708,-1.2087,-1.2249,-1.4196,-1.5064,-1.8799,-1.7407,-2.7489, -0.8975,-1.0090,-0.7978,-1.0948,-1.0323,-1.0709,-1.3390,-1.5187,-1.8502,-3.0241, -1.0194,-0.8639,-0.9983,-0.9710,-1.0264,-1.4225,-1.5592,-1.2662,-1.7814,-2.7615, -1.3571,-1.2427,-1.2171,-1.1593,-1.2570,-1.3720,-1.2563,-1.7265,-1.7844,-2.4511, -1.0455,-0.9120,-0.7954,-0.8065,-0.8999,-1.1394,-1.3216,-1.4533,-1.5385,-2.9838, -1.3967,-0.9715,-1.0396,-1.1654,-1.2276,-1.2903,-1.3529,-1.4512,-1.6613,-2.4499, -0.7119,-0.4225,-0.8975,-0.7222,-1.0005,-1.0800,-1.5376,-1.5779,-1.5702,-2.9262), .Dim=c(18,10)))

Page 66: WinBUGS の使い方 - JPMA...WinBUGS の良いところ 2 σ2 IG ~ (10,9) この例は,データが正規分布に従い,更に,そのパラメータである平均が正規分布,分散

コンパートメントモデルによる薬物動態解析

63

node mean sd MC error 2.5% median 97.5%

V 192.5 15.35 0.1941 164.0 191.9 224.7

KA 1.236 0.1588 0.00473 0.9646 1.222 1.594

Omega[1,1] 0.08948 0.03467 4.517E-4 0.04462 0.0826 0.1763

Omega[2,1] -0.001893 0.02618 3.321E-4 -0.05498 -0.001785 0.05187

Omega[2,2] 0.1119 0.04253 4.785E-4 0.05675 0.1029 0.2185

Omega[3,1] -0.008394 0.04171 6.305E-4 -0.09761 -0.007413 0.07414

Omega[3,2] 0.01749 0.04698 0.00103 -0.07003 0.01489 0.12

Omega[3,3] 0.27 0.1306 0.005687 0.1079 0.2408 0.5993

sigma 0.1062 0.006698 1.69E-4 0.09401 0.1058 0.1203

Page 67: WinBUGS の使い方 - JPMA...WinBUGS の良いところ 2 σ2 IG ~ (10,9) この例は,データが正規分布に従い,更に,そのパラメータである平均が正規分布,分散

コンパートメントモデルによる薬物動態解析

64

Page 68: WinBUGS の使い方 - JPMA...WinBUGS の良いところ 2 σ2 IG ~ (10,9) この例は,データが正規分布に従い,更に,そのパラメータである平均が正規分布,分散

モデルファイル

65

5. スクリプトによる実行 WinBUGSでは,グラフィカルインターフェースを使わずに,一連の処理コマンドをスクリ

プトとして記載し,一括処理することもできます.後述の「6.1 RからのWinBUGSの実行」な

どは,内部でこの機能を使用しています. 実行には以下の 4 種類のテキスト形式のファイルが必要です.

1) モデルファイル 2) データファイル 3) チェーンの数だけ初期値ファイル(省略可能) 4) スクリプトファイル

5.1 モデルファイル

モデルのみを記載したファイルです.例では C:¥bugs¥model.txt として保存します.

5.2 データファイル

例では C:¥bugs¥data.txt として保存します.

5.3 初期値ファイル

チェーンの数だけファイルが必要です.例では C:¥bugs¥init1.txt,C:¥bugs¥init2.txt, C:¥bugs¥init3.txt として同一内容のファイルを保存します.

5.4 スクリプトファイル

例は必要最小限のコードです.先頭が#の行はコメントとして無視されます.ただし,例の

ような日本語の文字列は WinBUGS に読み込むと判別不能な文字になります.その他,注意

する点として,ファイル名を指定する場合,パスの区切り文字として¥を使うとエラーを発生

することがあります.例のように/を使う方が良いでしょう.以下のスクリプトを,

C:¥bugs¥script.txt として保存します.

model { for (i in 1:N) { y[i] ~ dnorm(mu, tau); } mu ~ dnorm(0, 0.001); tau ~ dgamma(0.001, 0.001); sigma <- 1/sqrt(tau); }

list(y=c(107.54,108.30,106.96,115.08,113.76,115.51,110.54,110.52,100.94,112.06),N=10)

list(mu=1, tau=1)

Page 69: WinBUGS の使い方 - JPMA...WinBUGS の良いところ 2 σ2 IG ~ (10,9) この例は,データが正規分布に従い,更に,そのパラメータである平均が正規分布,分散

スクリプトの実行

66

5.5 スクリプトの実行

WinBUGS のアイコンまたは WinBUGS の起動後にウインドウ上に,スクリプトファイル

のアイコンをドラッグするか,起動後メニューバーより File - Open すれば,ファイルを

オープンできます.その後,メニューバーより Model - Script によりスクリプトを実行で

きます. また,コマンドプロンプトなどのシェルから以下のコマンドでも実行できます(WinBUGS

の実行ファイルの位置は各ユーザーの環境に合わせてください).この場合もスクリプトフ

ァイルのパス区切り文字に¥は使えません.

display('log') # windowを指定すると結果が window別に表示 # モデルとデータの読み込み check('c:/bugs/model.txt') # パスの区切りとして\は使わない方が良い data('c:/bugs/data.txt') compile(3) # チェーンの数を 3とする # 初期値の読み込みと作成 inits(1, 'c:/bugs/inits1.txt') # チェーンの数だけ必要 inits(2, 'c:/bugs/inits2.txt') inits(3, 'c:/bugs/inits3.txt') gen.inits() # 初期値の作成.この例では全て指定しているので不要 # burn in 回数の指定 update(1000) # モニターするパラメータの指定 set(mu) set(sigma) # 乱数の発生 update(10000) # 結果の表示 stats(*) # *を指定すると全パラメータ history(*) density(*) save('c:/bugs/log txt') # 結果をファイルへ出力する

c:¥> C:¥usr¥WinBUGS14¥WinBUGS14.exe /PRT C:/bugs/script.txt

Page 70: WinBUGS の使い方 - JPMA...WinBUGS の良いところ 2 σ2 IG ~ (10,9) この例は,データが正規分布に従い,更に,そのパラメータである平均が正規分布,分散

R からの WinBUGS の実行

67

6. 他のソフトウエアからのWinBUGSの実行

6.1 R からの WinBUGS の実行

現在の最新のバージョン(1.4.3)においても,WinBUGS には,RDBMS へのアクセス,デ

ータの加工,結果を編集する機能がなく,実用的な業務を行うには限度があります. 現在では,SAS,R/S plus,MS-Excel などから WinBUGS(あるいは BUGS の類似ソフトウエ

ア)を使う方法が開発されており,この中で最も情報の多い R から WinBUGS を使用する方

法(R2WinBUGS)を説明します. Rは,ニュージーランドのAuckland大学のRoss IhakaとRobert Gentlemanにより作られ,現在

ではR Development Core Teamによって,メンテナンスされているオープンソースの統計解析

環境です.S(S-plus)と多くの互換性があります.R2WinBUGSはWinBUGSを操作するため

のRの追加パッケージです.Rは http://www.r-project.org/ より入手することができます.

R2WinBUGSは,Rのパッケージ管理ツールよりインストールできます.

6.1.1 Rのソースファイル例

プログラム 6-1に,二値データについて有効率の事後分布を求める簡単な例を記載しまし

た.

6.1.2 実行例

1) テキスト形式のファイルとして既にソースファイルを作成している場合は,R 起動後,

ファイル-スクリプトを開くで,ソースファイルを開き,必要ならば修正します.新し

く作成する場合は,ファイル-新しいスクリプトで,エディターを開きプログラムを入

力します. 2) ソースファイルを開いたエディター上で右クリックし,全て選択を選択します. 3) 再度右クリックし,カーソル行または選択中の R コードを実行を選択します.

特に修正が必要でなければファイル-R コードのソースを読み込み....でも同様です.以下

は例を解析した結果です.

3 chains, each with 12000 iterations (first 2000 discarded), n.thin = 10 n.sims = 3000 iterations saved mean sd 2.5% 25% 50% 75% 97.5% Rhat n.eff p 0.8274 0.0763 0.6562 0.7812 0.8367 0.8837 0.9490 1.0013 2500 deviance 18.1735 1.3571 17.2300 17.3200 17.6500 18.4800 21.9512 1.0031 3000 For each parameter, n.eff is a crude measure of effective sample size, and Rhat is the potential scale reduction factor (at convergence, Rhat=1). DIC info (using the rule, pD = Dbar-Dhat) pD = 0.8 and DIC = 19.0 DIC is an estimate of expected predictive error (lower deviance is better).

Page 71: WinBUGS の使い方 - JPMA...WinBUGS の良いところ 2 σ2 IG ~ (10,9) この例は,データが正規分布に従い,更に,そのパラメータである平均が正規分布,分散

R からの WinBUGS の実行

68

プログラム 6-1

6.1.3 bugs関数のパラメータと返り値

R の関数の呼び出しは次のように記載します."パラメータ名=値" の形式で値を指定する

ことで,関数の定義とは異なる順番で値を与えることができます.

WinBUGSへデータを送り,MCMCを実行する関数は"bugs()"です.主な関数"bugs()"のパラメ

ータを 表 6-1に示します.

表 6-1 主な bugs 関数のパラメータ

引数 規定値 内容

data なし WinBUGS のモデルで使われるノード名

と同じ名前を持つデータのリスト.

# BUGSとの連携パッケージの呼び出し library(R2WinBUGS) # モデルの作成とファイルへの出力 model <- function() { for (i in 1:N) { y[i] ~ dbin(p,1) } p ~ dbeta(1,1) } filename <- file.path(tempdir(), "1.bug") write.model(model, filename) # 結果ベクトル 1:有効, 0:無効, N=21 y <- c(1,0,1,1,1, 0,1,1,1,1, 1,1,1,0,1, 1,1,1,1,1,1) # WinBUGSの実行 r <- bugs(data=list(y=y, N=21), inits=list(list(p=0.1),list(p=0.5),list(p=0.9)), parameters.to.save=c("p"), working.directory="C:/R/winbugs", model.file=filename, bugs.directory="C:/usr/WinBUGS14", n.chains=3, n.burnin=2000, n.thin=10, n.iter=12000) # 結果の出力 print(r, digits.summary=4) # モデルファイルの削除 file remove(filename)

変数 1 <- 関数名(値 1 , 値 2 , .....) 変数 2 <- 関数名(パラメータ名 2=値 2, パラメータ名 1=値 1 , .....)

Page 72: WinBUGS の使い方 - JPMA...WinBUGS の良いところ 2 σ2 IG ~ (10,9) この例は,データが正規分布に従い,更に,そのパラメータである平均が正規分布,分散

R からの WinBUGS の実行

69

引数 規定値 内容

inits なし WinBUGS のモデルで使われるノード名

と同じ名前を持つ連鎖毎の初期値のリ

ストのリスト.連鎖の数だけリストが必

要です.inits=NULL を指定した場合,分

布から適当に作成されます.

parameters.to.save なし モニター,取得するパラメータ名のベク

トル

model.file "model.bug" モデルを記載したファイル名

n.chains 3 マルコフ連鎖の数

n.iter 2000 マルコフ連鎖当りの繰り返し回数

n.burnin floor(n.iter/2) n.iter で指定した回数中 burn in の回数

n.thin max(1,

floor(n.chains *

(n.iter - n.burnin) /

n.sims))

間引く間隔

debug FALSE debug=FALSE ならば,終了後 WinBUGS

を終了する.

working.directory NULL WinBUGS の入出力ファイルが置かれる

ディレクトリ.指定しなくとも問題ない

が,後でファイルを確認する場合に便利

です.

bugs.directory "c:/Program

Files/WinBUGS14/"

WinBUGS をインストールしたディレク

トリ.

n.sims 1000 間引いた後のデータ数.n.iter, n.burin,

n.thin 等が設定してあれば不要.

DIC TRUE deviance, pD, DIC を計算する

digits 5 表示有効桁数

関数"bugs()"の返値は,いくつかの結果と設定値を要素とするリストです.リスト型の変数の

操作は次のよう行います.

# リストの作成(要素として n,age,sex を作成) a <- list( n=4, age=c(21,22,23,24), sex=c("F","M","M") ) # 要素を取り出す a$n a$sex[2] # 1番最初の要素 a[[1]]

Page 73: WinBUGS の使い方 - JPMA...WinBUGS の良いところ 2 σ2 IG ~ (10,9) この例は,データが正規分布に従い,更に,そのパラメータである平均が正規分布,分散

R からの WinBUGS の実行

70

"bugs()"の返値の重要な要素を表 6-2 に示します.これらを使い収束判定や,結果のプロット

を行うことができます.

表 6-2 bugs()の返値の主な要素

sims.array[行番号, 連鎖番号, パラメータ名] 連鎖毎の乱数列の配列

sims.matrix[行番号, パラメータ名] 連鎖をまとめた乱数列の行列

sims.list$パラメータ名[行番号] 連 鎖 を ま と め た 乱 数 列 の リ ス ト .

sims.matrix と内容は同じ

last.values[[連鎖番号]] チェーン毎の最後の乱数のリスト

summary パラメータ毎の結果の要約

DIC DIC の値

mean$パラメータ名 事後分布の平均のリスト.

median$パラメータ名 事後分布の中央値のリスト.

sd$パラメータ名 事後分布の標準偏差のリスト.

6.1.4 結果の出力

関数"bugs()"の返値を関数 print,関数 plot へ渡すと,MCMC の要約を出力します.print 関数の digits.summary=桁数の指定で,表示の桁数を調整できます.

6.1.5 収束診断

追加パッケージの"CODA"を使うことによって,収束診断を行うことができます.

r <- bugs(......) print(r, digits.summary=4) plot(r)

# MCMC実施 r <- bugs(......) # CODAパッケージの呼び出し library(coda) # R2WinBUGS内で呼ばれているので,続けて解析するならば不要 # CODAで使用できる形式へ変換 m1 <- mcmc.list( as.mcmc(res$sims.array[,1,]), as.mcmc(res$sims.array[,2,]), as.mcmc(res$sims.array[,3,])) # プロット plot(m1) # 収束診断 gelman.diag(m1) gelman.plot(m1)

Page 74: WinBUGS の使い方 - JPMA...WinBUGS の良いところ 2 σ2 IG ~ (10,9) この例は,データが正規分布に従い,更に,そのパラメータである平均が正規分布,分散

SAS からの WinBUGS の実行

71

表 6-3 主な収束診断関数

関数名 内容

autocorr 自己相関関数

autocorr.diag 自己相関の診断

autocorr.plot 自己相関のプロット

gelman.diag Gelman & Rubin の収束診断

gelman.plot Gelman-Rubin-Brooks プロット

geweke.diag Geweke の収束診断

geweke.plot Geweke-Brooks プロット

heidel.diag Heidelberger & Welch 収束診断

raftery.diag Raftery & Lewis の診断

6.2 SAS からの WinBUGS の実行

6.1節ではRからWinBUGSを操作する方法を紹介しましたが,本節ではSASからWinBUGSを操作する方法を紹介します.

SASには,Rによる操作のように特別なコマンドは存在しません.そのため,WinBUGSの操作は,5.1節で説明したスクリプトによる実行と同様の操作をSASにより行います.つまり,

モデル,データ,初期値をテキストファイルで予め作成し,Xコマンドを利用してWinBUGSによる解析を実行します. 以下では,初めに SAS から WinBUGS を実行し結果を保存する方法を紹介し,次に

WinBUGS の解析結果を CODA 書式にて出力後に,SAS により事後分布等を求めるプログラ

ムを紹介します.なお,SAS データを WinBUGS で使用するためには,あらかじめ WinBUGS形式に変換する必要があります.そのためのプログラムについても言及します.

6.2.1 XコマンドによるWinBUGSの実行

6.2.1.1 SASのソースファイル例

プログラム 6-2に,「6.1 RからのWinBUGSの実行」で用いた二値データについての有効率

の事後分布を推定するプログラムを記載しました.

6.2.1.2 実行例

1) モデル,データ,初期値データの作成: プログラム 6-2ではモデルおよびデータをテキ

ストファイルとして作成しています.SASによる実行は,スクリプトによる実行と本質

的に同じですから,初期値が複数ある場合は複数のテキストファイルを作成します. 2) スクリプトファイルの作成: WinBUGS のスクリプトファイルを作成します.指定する

WinBUGS のコマンドは,スクリプトによる実行で利用できるコマンド用います. 3) Xコマンドによる実行: XコマンドでWinBUGSを 2)で作成したスクリプトファイルを

Page 75: WinBUGS の使い方 - JPMA...WinBUGS の良いところ 2 σ2 IG ~ (10,9) この例は,データが正規分布に従い,更に,そのパラメータである平均が正規分布,分散

SAS からの WinBUGS の実行

72

引数として実行すると,結果は指定されたディレクトリにodcファイルとして保存されま

す.解析結果はWinBUGSを起動後,odcファイルを開くことにより確認できます(図 6-1 WinBUGSによる解析結果(odcファイル)).

プログラム 6-2

/* モデルの作成 */ data null ; input line $char79.; file 'c:/bugs/sas2bugs/bin_model.txt'; put line; cards4; model { for (i in 1:N) { y[i] ~ dbin (p,1) } p ~ dbeta(1,1) } ;;;; run; /* データの作成 */ data _null_ ; file 'c:/bugs/sas2bugs/bin_data.txt'; put 'list(N=21,y=c(1,0,1,1,1,0,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1))' ; run;

Page 76: WinBUGS の使い方 - JPMA...WinBUGS の良いところ 2 σ2 IG ~ (10,9) この例は,データが正規分布に従い,更に,そのパラメータである平均が正規分布,分散

SAS からの WinBUGS の実行

73

プログラム 6-2 (続き)

/* 初期値ファイルの作成 */ data _null_ ; file 'c:/bugs/sas2bugs/bin_inits1.txt'; put 'list(p=0.1)'; run; data _null_ ; file 'c:/bugs/sas2bugs/bin_inits2.txt'; put 'list(p=0.3)'; run; data _null_ ; file 'c:/bugs/sas2bugs/bin_inits3.txt'; put 'list(p=0.5)'; run;

/* スクリプトファイルの作成 */ data _null_; file 'c:/bugs/sas2bugs/batchfile.txt' ; put "display( 'log' )"; put "check( 'c:/bugs/sas2bugs/bin_model.txt')"; put "data( 'c:/bugs/sas2bugs/bin_data.txt')"; put "compile(3)"; put "inits(1,'c:/bugs/sas2bugs/bin_inits1.txt')"; put "inits(2,'c:/bugs/sas2bugs/bin_inits2.txt')"; put "inits(3,'c:/bugs/sas2bugs/bin_inits3.txt')"; put "update(500)"; put "thin.updater(1)"; put "set(p)"; put "update(1000)"; put "stats(*)"; put "history(*)"; put "density(*)"; put "save( 'c:/bugs/sas2bugs/bin_result.odc')"; put "quit()"; run; /* WinBUGSの実行 (各ユーザーの環境によって WinBUGSの実行コマンドを設定する) */ OPTIONS XSYNC ; " /b / i 14 / /b / 2b /b hfil "

Page 77: WinBUGS の使い方 - JPMA...WinBUGS の良いところ 2 σ2 IG ~ (10,9) この例は,データが正規分布に従い,更に,そのパラメータである平均が正規分布,分散

SAS からの WinBUGS の実行

74

図6-1 WinBUGS による解析結果(odc ファイル)

6.2.2 CODAデータへの出力とSASによるデータの要約

次に,解析結果を CODA データとして出力後,SAS により事後平均などを求めるプログラ

ムを紹介します.

6.2.2.1 SASのソースファイル例

CODA データによる出力は,先に紹介した odc による解析結果のように統計量や事後分布

は保存されず,サンプリングされたモンテカルロ標本が保存されます.モンテカルロ標本は

設定されたチェーンごとにサンプリングされますので,チェーンごとに CODA データを操作

するプログラムが必要です.本節では,マクロプログラムを作成し利用しました.マクロプ

ログラムは付録を参照ください.付録では,SAS データを WinBUGS の形式のデータに変換

する%make_bugsdata,WinBUGS を実行する%exec_bugs,要約統計量を算出する%summary,モンテカルロ標本の時系列プロットを作製する%history,事後分布をプロットする%densityを紹介しています.

Page 78: WinBUGS の使い方 - JPMA...WinBUGS の良いところ 2 σ2 IG ~ (10,9) この例は,データが正規分布に従い,更に,そのパラメータである平均が正規分布,分散

SAS からの WinBUGS の実行

75

6.2.2.2 実行例

1) モデル,データ,初期値:モデル,データ,初期値は プログラム 6-2で紹介した方法で

テキストデータを作成します.例では,データおよび初期値をSASデータからWinBUGSの形式に変換するマクロプログラムを利用しています(%make_bugsdata).

2) WinBUGS の実行:WinBUGS による実行コマンドのスクリプトを作成し,実行します.

結果は,チェーンごとにモンテカルロ標本が CODA データとして保存されます.CODA

データはモンテカルロ標本を含むデータとデータの内容を示すインデックスデータから

構成されます.マクロ%exe_bugs では,インデックスデータの情報を自動で取得し,モ

ンテカルロ標本を SAS データに変換します(%exec_bugs). 3) 事後分布などの吟味:最後のステップでは,SAS データに変換されたモンテカルロ標本

より統計量や事後分布を吟味します.例では,ベイズ統計の標準的な結果を出力するマ

クロ%summary,モンテカルロ標本の時系列プロットを作製する%history,密度曲線をプ

ロットする%density を利用しています.

表 6-4 SAS による統計量の出力

name Mean SD SE Q2_5 Q50 Q97_5 sample

alpha 11.7288 0.15973 0.002916 11.4200 11.7300 12.0600 3000

beta 0.1092 0.31666 0.005781 -0.5149 0.1103 0.7379 3000

tau 2.1803 0.71679 0.013087 0.9846 2.1100 3.7535 3000

Page 79: WinBUGS の使い方 - JPMA...WinBUGS の良いところ 2 σ2 IG ~ (10,9) この例は,データが正規分布に従い,更に,そのパラメータである平均が正規分布,分散

SAS からの WinBUGS の実行

76

図6-2 モンテカルロ標本の時系列プロットおよび事後分布

Page 80: WinBUGS の使い方 - JPMA...WinBUGS の良いところ 2 σ2 IG ~ (10,9) この例は,データが正規分布に従い,更に,そのパラメータである平均が正規分布,分散

SAS からの WinBUGS の実行

77

プログラム 6-3 CODA ファイルへの出力と SAS によるデータの要約

/* モデルファイルの作成 */ data _null_ ; input line $char79.; file 'c:/bugs/sas2bugs/model.txt'; put line ; cards4; model { x.bar <- mean(x[]) for (i in 1:N) { mu[i] <- alpha + beta*(x[i] - x.bar) Y[i] ~ dnorm(mu[i], tau) } alpha ~ dnorm(0, 0.001) beta ~ dnorm(0, 0.001) tau ~ dgamma(0.001, 0.001) sigma <- 1.0/sqrt(tau) } ;;;; run; /* データの作成 */ data D1 ; N = 20 ; run; data D2 ; input x y @@; label y='Y' ; cards; 0 11.385 0 11.482 0 12.228 0 12.769 0 11.499 0 11.572 0 10.760 0 11.914 0 11.018 0 12.104 1 13.157 1 12.299 1 11.969 1 11.214 1 12.414 1 11.429 1 10.456 1 12.115 1 11.367 1 11.491 ; run; /* SASデータから WinBUGSのデータに変換 */ %make_bugsdata( D1 , c:/bugs/sas2bugs/data1.txt ); %make_bugsdata( D2 , c:/bugs/sas2bugs/data2.txt ); /* 初期値ファイルの作成 */ data B ; alpha=0; beta=0; tau=1 ; output ; run; %make_bugsdata( B , c:/bugs/sas2bugs/inits1.txt ); %make_bugsdata( B , c:/bugs/sas2bugs/inits2.txt ); %make_bugsdata( B , c:/bugs/sas2bugs/inits3.txt ); /* WinBUGSの実行 */ %exec_bugs( out = mcmc , work = c:/bugs/sas2bugs , model = model.txt , data1 = data1.txt , data2 = data2.txt , init1 = inits1.txt , init2 = inits2.txt , init3 = inits3.txt , nchain = 3 , burnin = 500 , niter = 1000 , node1 = alpha , node2 = beta , node3 = tau ,

Page 81: WinBUGS の使い方 - JPMA...WinBUGS の良いところ 2 σ2 IG ~ (10,9) この例は,データが正規分布に従い,更に,そのパラメータである平均が正規分布,分散

SAS からの WinBUGS の実行

78

プログラム 6-3 CODAファイルへの出力とSASによるデータの要約(続き)

/* 要約 */ %summary( mcmc ); %history( mcmc , beta , 3 , c:/bugs/sas2bugs/sample1.jpeg , dev= jpeg , hsize= 12 cm , vsize= 5 cm ) ; %history( mcmc , alpha , 3 , c:/bugs/sas2bugs/sample2.jpeg , dev= jpeg , hsize= 12 cm , vsize= 5 cm ) ; %history( mcmc , tau , 3 , c:/bugs/sas2bugs/sample3.jpeg , dev= jpeg , hsize= 12 cm , vsize= 5 cm ) ; %density( mcmc , beta , c:/bugs/sas2bugs/sample4.jpeg , dev= jpeg , hsize= 10 cm , vsize= 10 cm ) ; %density( mcmc , alpha , c:/bugs/sas2bugs/sample5.jpeg , dev= jpeg , hsize= 10 cm , vsize= 10 cm ) ; %density( mcmc , tau , c:/bugs/sas2bugs/sample6.jpeg , dev= jpeg , hsize= 10 cm , vsize= 10 cm ) ;

Page 82: WinBUGS の使い方 - JPMA...WinBUGS の良いところ 2 σ2 IG ~ (10,9) この例は,データが正規分布に従い,更に,そのパラメータである平均が正規分布,分散

Error! Use the Home tab to apply 見出し 2 to the text that you want to appear

here.

79

7. Doodle WinBUGS には Doodle と呼ばれる有向グラフによるモデルの構築機能があります.マウス

を用いてノード,プレート,エッジを配置することによって視覚的にモデルを作成できます.

7.1 解析データとモデル

次のデータとモデルを解析します.

X Y

X=0 19.8 22.1 21.4 20.4 20.4

X=1 25.3 22.7 25.5 24.5 24.1 ),(~ 2σμ ii NY

ii x⋅+= βαμ

事前分布は次の様にします. )100,0(~ Nα )100,0(~ Nβ

)001.0,001.0(~ Gaτ , τσ /12 =

7.2 モデルの作成方法

7.2.1 開始

WinBUGS のメニューバーより, Doodle – New .ウインドウの大きさを決めるダイア

ログボックスがでたら OK を押します.

7.2.2 ノードの作成

Doodle のウインドウ上でマウスをクリックするとノードができます.

ウインドウ上部の青ラベルをクリックすると,ノードの名前やタイプなどが入力できます.

name はノード名を文字列として入力できます.type は,(stochastic , logical , Constant )から選

択できます.type の選択によって後の項目が変化します.

Page 83: WinBUGS の使い方 - JPMA...WinBUGS の良いところ 2 σ2 IG ~ (10,9) この例は,データが正規分布に従い,更に,そのパラメータである平均が正規分布,分散

Error! Use the Home tab to apply 見出し 2 to the text that you want to appear

here.

80

図では,alpha を正規分布をとる確率変数として作成しています.BUGS の正規分布は平均

と分散の逆数をパラメータとするため,precision には 1/100 として 0.01 を入力しています. ノードの移動は,対象のノードをマウスでクリックした後,マウスでドラッグします.ノー

ドを削除するには,対象の濃度をクリックした後, Ctrl キーを押しながら Delete キーを押

します.precision はデフォルトで科学表記になりますが,科学表記で指定すると実行ができ

ないようです.また,大文字,小文字の区別にも気をつけましょう.

7.3 プレートの作成

Doodle ウインドウ内で Ctrl キーを押しながら,マウスをクリックすると,繰り返しを行

う for 文に対応するプレートができます.ウインドウ上部で,インデックス変数と繰り返し

の開始と終了を入力できます. 図ではインデックス変数を i,開始を 1,終了を N と入力しました.N はデータとして与え

る予定にしています.

プレートの端(紙が重なっているように見える所)をクリックすれば,プレートを選択でき

ます.プレートを選択した状態でプレートの端をドラッグするか,矢印キーを操作すれば移

動, Ctrl キーを押しながらドラッグすれば大きさの変更, Ctrl キーを押しながら Delete キーを押せば削除ができます. 操作には癖があり,反応しなくなった場合はプレートを削除し作り直した方が楽です.

7.3.1 logicalノードの作成

プレート内で logical な変数を定義します.name には,インデックス変数を付けた形式で変

数名をつけます.value に定義を記載します. 図では付けていませんが,logit などのリンク関数を付けることができます.

Page 84: WinBUGS の使い方 - JPMA...WinBUGS の良いところ 2 σ2 IG ~ (10,9) この例は,データが正規分布に従い,更に,そのパラメータである平均が正規分布,分散

Error! Use the Home tab to apply 見出し 2 to the text that you want to appear

here.

81

7.3.2 エッジの作成

変数間に関連の方向を示すエッジをつけます.視覚的な意味しかないようです.

エッジのつけ方は,まず,関連先のノードをクリックし,次に Ctrl キーを押しながら関連

元のノードをクリックします.既にエッジがついている場合は,そのエッジが削除されます.

7.3.3 応答変数の定義

y[i]にエッジを付けます.

Page 85: WinBUGS の使い方 - JPMA...WinBUGS の良いところ 2 σ2 IG ~ (10,9) この例は,データが正規分布に従い,更に,そのパラメータである平均が正規分布,分散

Error! Use the Home tab to apply 見出し 2 to the text that you want to appear

here.

82

7.3.4 その他

τ(tau)は分散の逆数なので,sigma を定義します.

7.3.5 BUGSのコード出力

WinBUGS のメニューバーから Doodle - Write Code によって,BUGS のコードを確認でき

ます.

Page 86: WinBUGS の使い方 - JPMA...WinBUGS の良いところ 2 σ2 IG ~ (10,9) この例は,データが正規分布に従い,更に,そのパラメータである平均が正規分布,分散

Error! Use the Home tab to apply 見出し 2 to the text that you want to appear

here.

83

7.4 実行方法

7.4.1 初期値,データの入力

WinBUGS のメニューバーより File - New で,新しいウインドウを作成し,データ,初期

値を入力します.

7.4.2 実行

モデルを選択する場合に,Doodle のウインドウをアクティブにする以外は,通常の

WinBUGS と同じです.

7.4.3 ファイルの統合

Doodle のモデルを初期値,データとともに 1 ファイルとして保存できます. Doodle のウインドウをアクティブにし Edit - Select Document , Edit - Copy .初期値,

データを入力したウインドウをアクティブにし, Edit – Paste すると図が複写されます.

model; { alpha ~ dnorm( 0.0,0.01) beta ~ dnorm( 0.0,0.01) tau ~ dgamma(0.001,0.001) for( i in 1 : N ) { mu[i] <- alpha + beta * x[i] } for( i in 1 : N ) { y[i] ~ dnorm(mu[i],tau) } sigma <- 1 / sqrt(tau) }

Page 87: WinBUGS の使い方 - JPMA...WinBUGS の良いところ 2 σ2 IG ~ (10,9) この例は,データが正規分布に従い,更に,そのパラメータである平均が正規分布,分散

Error! Use the Home tab to apply 見出し 2 to the text that you want to appear

here.

84

このウインドウから解析を実行する場合は,モデルの選択方法に注意が必要です.図をダ

ブルクリックし輪郭を太い状態にする必要があります.

Page 88: WinBUGS の使い方 - JPMA...WinBUGS の良いところ 2 σ2 IG ~ (10,9) この例は,データが正規分布に従い,更に,そのパラメータである平均が正規分布,分散

Error! Use the Home tab to apply 見出し 2 to the text that you want to appear

here.

85

8. マルコフ連鎖モンテカルロ法(MCMC)とWinBUGS マルコフ連鎖モンテカルロ法(MCMC)は,ある確率分布から乱数を発生させてシミュレ

ーションを行う方法の 1 つです.ベイズ統計学では事後分布の吟味が目的ですが,事前分布

と尤度の組み合わせにより複雑な分布になる場合や,推定する母数が多い場合は計算が困難

になります.MCMC は,本章で記載するマルコフ連鎖の性質を利用し,繰り返しサンプリン

グすることにより,計算が困難な場合でも目標とする分布からのサンプリングを可能にしま

す.本章ではメトロポリス・ヘイスティング法,ギブス・サンプリング法など,WinBUGSが用いる MCMC のサンプリング方法を紹介します.

8.1 マルコフ連鎖

以下の性質を満たすとき,マルコフ連鎖であるといいます.つまり,前時点の値のみに依

存して,次の値が決定されていくプロセスです. )(),,( )()1()1()()1( tttt ff θθθθθ ++ =L

8.2 マルコフ連鎖モンテカルロ法

マルコフ連鎖がエルゴード的であるとき,確率変数列は定常状態に収束し,その標本平均

が期待値に収束するというエルゴード定理を利用して,マルコフ連鎖を乱数生成し,定常分

布が目標の分布となるように生成する方法です.そのため,定常状態への収束を診断する必

要があり,収束前の乱数は採用しません.メトロポリス・ヘイスティング法,ギブス・サン

プリングなどのアルゴリズムがあります.

8.2.1 エルゴード的

あるマルコフ連鎖が既約的,非周期的かつ正再帰的であるとき,エルゴード的と呼びます.

8.2.2 既約的(Irreducible)

任意の状態 iから任意の状態 jに有限回で必ず到達できる場合に既約的と呼びます.つまり,

下記のように有限回で,全ての i, j に対して i の状態から有限回 m で j へ到達する確率が 0 で

ない場合のことです. 0)( )()( >==+ ijp tmt θθ

8.2.3 非周期的(Periodic)

周期 a を持つ状況とは,状態 i から同じ状態 i へ n 回で推移する確率が,周期 a で割り切れ

る場合を除いて 0 である場合をいいます. 周期 3 の例:1, 0, 0, 1, 0, 0, 1, 0, 0

こうした周期的条件を満たさない場合を非周期的(周期 1)であるといいます.

Page 89: WinBUGS の使い方 - JPMA...WinBUGS の良いところ 2 σ2 IG ~ (10,9) この例は,データが正規分布に従い,更に,そのパラメータである平均が正規分布,分散

Error! Use the Home tab to apply 見出し 2 to the text that you want to appear

here.

86

8.2.4 正再帰的(Positive-Recurrent)

ある状態が当該状態に確率 1 で戻るときには,状態は再帰的であるといいます.例えば,

1, 0, 1 に対して,次に 1 となることが必ずある場合,再帰的が成り立ちます.さらに,この

戻る上限が有限時間であるとき,正再帰的であるといいます.

8.3 事前分布と事後分布

ベイズ統計は事前分布と尤度からにより事後分布を求めます.この時,事後分布が事前分

布と同系の分布族となる事前分布を自然共役事前分布(Natural Conjugate Prior)と呼びます.

自然共役事前分布を用いる場合は,事後分布の推定は,分布を規定するパラメータを変換す

るだけとになりますので,良く知られている乱数発生アルゴリズムが利用できます.MCMCを用いる場合は,事前分布として自然共役事前分布を選択する必要は特にありませんが,計

算時間が短くなる利点があります.

表 8-1 主な自然共役事前分布

モデルとパラメータ 自然共役事前分布

正規分布の平均 正規分布

正規分布の分散 逆ガンマ分布

多変量正規分布の分散共分散行列 逆ウィシャート分布

二項分布の成功確率 ベータ分布

多項分布の確率ベクトル ディレクレ分布

ポアソン分布 ガンマ分布

8.4 メトロポリス・ヘイスティング法

8.4.1 メトロポリス・ヘイスティング法のアルゴリズム

エルゴード的なマルコフ連鎖が定常状態に収束するための条件は,時点 t における確率を

)( )(tf θ ,t→t+1 に推移する確率を )( )1( +tq θ としたときに,以下の詳細釣り合い条件(Detailed

Balance condition)と呼ばれる条件が満たされることです. )()()()( )1()()1()()1()( +++ = tttttt qfqf θθθθθθ

この等式は, )(θf に従う乱数が発生できる条件となります( )(θf を目標分布と呼びます).

具体的には, )( )(tf θ が )( )1( +tf θ より大きい場合,つまり )(tθ の出現確率が )1( +tθ の出現確率

よりも高い場合は,推移確率 )( )()1( ttq θθ + は )( )1()( +ttq θθ より小さくなりますので, )(tθ 付近

からより多くサンプリングされ, )(θf に従う乱数を発生させることになります.メトロポリ

ス・ヘイスティング法では,この )(θf からのサンプリングが困難な場合に,詳細釣り合い条

件の推移確率にサンプリングが簡単な分布を設定します.これを提案分布と呼びます. しかしながら,提案分布を利用すると詳細釣り合い条件が満たさないことがありますので,

採択確率αを導入することにより,以下のアルゴリズムが得られます.

Page 90: WinBUGS の使い方 - JPMA...WinBUGS の良いところ 2 σ2 IG ~ (10,9) この例は,データが正規分布に従い,更に,そのパラメータである平均が正規分布,分散

Error! Use the Home tab to apply 見出し 2 to the text that you want to appear

here.

87

1. 初期値 )1(θ を設定 2. )1( +iθ の候補 )(~ )(tqz θ⋅ を生成

3. 採択確率 ⎟⎟⎠

⎞⎜⎜⎝

⎛= 1,

)|()()|()(min)|( )()(

)()(

tt

tt

zqfzqzfz

θθθθα の算出

4. αの確率に従い z を採択し, )1( +iθ とする.

8.4.2 メトロポリス・ヘイスティング法の例:ロジスティックモデル

既に何度か例として示している以下のロジスティックモデルについて,メトロポリス・ヘ

イスティング法を用いた母数の推定方法を紹介します.ここでは,多変量に拡張したアルゴ

リズムを用いています.ここで,生起確率 piである ni回の試行(生起数 yi)を,m 回

( mi L,2,1= )行う二項分布のモデルを考えます.

ii

i

iii

xp

ppnBinomialy

101log

),(~

ββ +=−

mi ,,2,1 L=

推定するパラメータβ0,β1の事前分布は共に正規分布とします.

),(~

),(~2111

2000

σμβ

σμβ

Normal

Normal

二項分布の確率密度関数は, xnx pp

xnxnpnxp −−−

= )1()!(!

!),|(

生起確率 piは以下の様に変形します.

)exp(1)exp(

10

10

i

ii x

xp

ββββ++

+=

生起数 y に対する尤度関数は以下となります.

∏=

−⎥⎦

⎤⎢⎣

⎡−

−=

m

i

yni

yi

iii

i iii ppyny

nxnyL1

10 )1()!(!

!),,,|( ββ

[ ]∏=

−−∝m

i

yni

yi

iii pp1

)1( (Q ii yn , は定数)

∏=

⎥⎥⎦

⎢⎢⎣

⎡⎟⎟⎠

⎞⎜⎜⎝

⎛++

+−⎟⎟

⎞⎜⎜⎝

⎛++

+∝

m

i

yn

i

i

y

i

iiii

xx

xx

1 10

10

10

10

)exp(1)exp(1

)exp(1)exp(

ββββ

ββββ

∏=

⎥⎦

⎤⎢⎣

⎡+++

∝m

in

i

iiix

xy1 10

10

))exp(1())(exp(

ββββ

仮定した条件からβ0,β1の事前分布は以下となります.

⎥⎦

⎤⎢⎣

⎡ −−= 2

0

200

00 2

)(exp2

1)(σμβ

σπβp

Page 91: WinBUGS の使い方 - JPMA...WinBUGS の良いところ 2 σ2 IG ~ (10,9) この例は,データが正規分布に従い,更に,そのパラメータである平均が正規分布,分散

Error! Use the Home tab to apply 見出し 2 to the text that you want to appear

here.

88

⎥⎦

⎤⎢⎣

⎡ −−= 2

1

211

11 2

)(exp21)(

σμβ

σπβp

同時事後分布は,尤度と事前分布を掛け合わせたものであることから,以下となります. ),(),,,|(),,|,( 101010 ββββββ pxnyLxnyp ∝

)()(),,,|( 1010 ββββ ppxnyL∝ (Q 10 ,ββ は独立)

⎥⎦

⎤⎢⎣

⎡ −−⎥

⎤⎢⎣

⎡ −−⎥

⎤⎢⎣

⎡+++

∝∏=

21

211

20

200

1 10

10

2)(exp

2)(exp

))exp(1())(exp(

σβμ

σβμ

ββββm

in

i

iiix

xy

条件付事後分布はそれぞれ,以下となります.

⎥⎦

⎤⎢⎣

⎡ −−⎥

⎤⎢⎣

⎡+++

∝∏=

20

200

1 10

1010 2

)(exp))exp(1())(exp(),,,|(

σβμ

ββββββ

m

in

i

iiix

xyxnyp

⎥⎦

⎤⎢⎣

⎡ −−⎥

⎤⎢⎣

⎡+++

∝∏=

21

211

1 10

1001 2

)(exp))exp(1())(exp(),,,|(

σβμ

ββββ

ββm

in

i

iiix

xyxnyp

事前分布のパラメータとして, 1000,0,1000,0 211

200 ==== σμσμ とすると,条件付事後分

布はそれぞれ,以下となります.この分布に従う乱数を発生させることが目標です.

⎥⎦

⎤⎢⎣

⎡−⎥

⎤⎢⎣

⎡+++

∝∏= 2000

exp))exp(1())(exp(),,,|(

20

1 10

10100

βββββββ

m

in

i

iiix

xyxnyp

⎥⎦

⎤⎢⎣

⎡−⎥

⎤⎢⎣

⎡+++

∝∏= 2000

exp))exp(1())(exp(),,,|(

21

1 10

10011

βββββββ

m

in

i

iiix

xyxnyp

β0の提案分布は以下とします.

⎥⎦

⎤⎢⎣

⎡ −−= 2

0

2

00 2

)(exp21)|(

szx

szxq

π , 1.02

0 =s

β1の提案分布は以下とします.

⎥⎦

⎤⎢⎣

⎡ −−= 2

1

2

11 2

)(exp21)|(

szx

szxq

π , 1.02

1 =s

つまり,β0,β1共に平均 z,分散 0.1 の正規分布です.この提案分布は, )|()|( xzqzxq = で

あることから,対称 sampler と呼ばれています.

以上の情報を基に以下のアルゴリズムによって事後分布に基づく乱数を発生させます.

(Step 1) β0,β1の初期値を設定します.

0,0 )1(1

)1(0 == ββ

(Step 2) β0の候補として, )|( )1(00

−⋅ iq β に従う乱数を発生させます.

)1.0,(~ )1(00

−iNz β

Page 92: WinBUGS の使い方 - JPMA...WinBUGS の良いところ 2 σ2 IG ~ (10,9) この例は,データが正規分布に従い,更に,そのパラメータである平均が正規分布,分散

Error! Use the Home tab to apply 見出し 2 to the text that you want to appear

here.

89

(Step 3) 採択確率を求めます.対称 sampler を使用している場合,下式は簡略化できます.

⎟⎟⎠

⎞⎜⎜⎝

⎛⋅= −

−−

1,)|()|(

),,,|(),,,|(min )1(

000

0)1(

00)1(

1)1(

00

)1(100

0 i

i

ii

i

zqzq

xnypxnyzp

ββ

βββω

(Step 4) 区間[0,1]の一様乱数を発生させます. )1,0(~0 Uu

(Step 5) 選択します.

⎩⎨⎧

>≤

← −00

)1(0

000)(0 ωβ

ωβ

uuz

ii

(Step 6) β1の候補として, )|( )1(11

−⋅ iq β に従う乱数を発生させます.

)1.0,(~ )1(11

−iNz β

(Step 7) 採択確率を求めます.(Step3)と同様に,対称 sampler を使用している場合,下式は簡

略化できます.

⎟⎟⎠

⎞⎜⎜⎝

⎛⋅= −

− 1,)|()|(

),,,|(),,,|(min )1(

111

1)1(

11)(

0)1(

11

)(011

1 i

i

ii

i

zqzq

xnypxnyzp

ββ

βββω

(Step 8) 区間[0,1]の一様乱数を発生させます. )1,0(~1 Uu

(Step 9) 選択します.

⎩⎨⎧

>≤

← −11

)1(1

111)(1 ωβ

ωβ

uuz

ii

(Step 10) Step2 へ

後述のギブス・サンプラーに比べ,収束するまでに多くの反復が必要です.また,提案分

布の選択が重要で,適切でない提案分布の場合,収束までに多くの反復回数が必要であった

り,良質な乱数が得られないこともあります.

Page 93: WinBUGS の使い方 - JPMA...WinBUGS の良いところ 2 σ2 IG ~ (10,9) この例は,データが正規分布に従い,更に,そのパラメータである平均が正規分布,分散

Error! Use the Home tab to apply 見出し 2 to the text that you want to appear

here.

90

8.5 ギブス・サンプリングと条件付き事後分布

8.5.1 ギブス・サンプリングのアルゴリズム

WinBUGS ではギブス・サンプリングを用いた MCMC によって,事後分布に従う乱数を発

生させます.メトロポリス・ヘイスティング法では,サンプリングが困難な目標分布の代わ

りに提案分布を用いて,詳細釣り合い条件を満たすように修正をかけましたが,ギブス・サ

ンプリングは,目標分布と提案分布それぞれを条件付き分布と一致させます.これにより,

メトロポリス・ヘイスティング法で行った採択確率の計算は必要なく,発生された値は常に

採択されることになります.そして,1 つの変数に対して他の変数を条件付けたうえで乱数

を発生させる過程を,変数ごとに順に繰り返します.なお,ここでの条件付分布は,乱数を

発生させるために 1 つの母数のみに注目し,他の全ての母数を固定します.このような条件

付分布を全条件付分布と呼びます.ギブス・サンプリングは,目標分布からのサンプリング

を求めることが困難な場合でも,全条件付分布に従う乱数を発生させることが容易な場合に

大変有効な方法です.全条件付分布に従う乱数の発生方法に標準的なアルゴリズムが存在し

ない場合でも,アダプティブ棄却サンプリングなどのアルゴリズムで目的の分布に従う乱数

を発生させることが可能であれば,ギブス・サンプリングを使うことができます. 例として,推定したいパラメータが 3 つの場合のギブス・サンプリングのアルゴリズムを

以下に記載します.

Step 1 初期値を設定 cba === 000 ,, γβα  

Page 94: WinBUGS の使い方 - JPMA...WinBUGS の良いところ 2 σ2 IG ~ (10,9) この例は,データが正規分布に従い,更に,そのパラメータである平均が正規分布,分散

Error! Use the Home tab to apply 見出し 2 to the text that you want to appear

here.

91

Step 2 1 回目の乱数の発生 ),,|(~ 0011 xγβαπα ),,|(~ 0121 xγαβπβ ),,|(~ 1131 xβαγπγ

Step 3 n 回目の乱数発生 ),,|(~ 111 xnnn −− γβαπα ),,|(~ 12 xnnn −γαβπβ

),,|(~ 3 xnnn βαγπγ

Step 4 Step 3 を必要な回数だけ繰り返す

8.5.2 ギブス・サンプリングの例:正規分布モデルの平均と分散の推定

平均が未知のμ,分散が未知のσ2の正規分布データについて,μ,σ2をギブス・サンプラー

によって推定するとします.

),(~,,,, 2321 σμNxxxx nL

同時事後分布はベイズ定理より以下となります.μ,σ2は独立としています.

)()(),|(),(),|()|,( 22222 σπμπσμσμπσμσμπ xfxfx ∝∝

μ,σ2の事前分布を自然共役事前分布とします( ),( βαIG は逆ガンマ分布).

),(~ 200 σμμ N , ),(~2 βασ IG

それぞれの事前分布の密度関数は以下となります.

⎥⎦

⎤⎢⎣

⎡ −−∝⎥

⎤⎢⎣

⎡ −−= 2

0

20

20

20

0 2)(exp

2)(exp

21)(

σμμ

σμμ

σπμπ

⎥⎦⎤

⎢⎣⎡−∝⎥⎦

⎤⎢⎣⎡−

Γ= +−+−

2)1(2

2)1(22 exp)(exp)(

)()(

σβσ

σβσ

αβσπ αα

α

尤度関数は以下となります.

⎥⎦

⎤⎢⎣

⎡ −+−−∝

⎥⎥⎦

⎢⎢⎣

⎡ −−∝

⎥⎦

⎤⎢⎣

⎡ −−=

=

2

222/2

2

22/2

2

2

1

2

2)()1(exp)(

2)(

exp)(

2)(

exp21),|(

σμσ

σμ

σ

σμ

σπσμ

xnsn

x

xxf

n

in

in

i

where nx

x i∑= , 1

)( 22

−= ∑

nxx

s i

Page 95: WinBUGS の使い方 - JPMA...WinBUGS の良いところ 2 σ2 IG ~ (10,9) この例は,データが正規分布に従い,更に,そのパラメータである平均が正規分布,分散

Error! Use the Home tab to apply 見出し 2 to the text that you want to appear

here.

92

よって同時事後分布は以下となります.

)()(),|()|,( 222 σπμπσμσμπ xfx ∝

⎥⎦⎤

⎢⎣⎡−⎥

⎤⎢⎣

⎡ −−⎥

⎤⎢⎣

⎡ −+−−∝ +−−

2)1(2

20

20

2

222/2 exp)(

2)(exp

2)()1(exp)(

σβσ

σμμ

σμσ αxnsnn

⎥⎦

⎤⎢⎣

⎡−

−−

−+−−∝ ++−

220

20

2

22)2/1(2

2)(

2)()1(exp)(

σβ

σμμ

σμσ α xnsnn

σ2を固定し,μの条件付事後分布を求めます.

⎥⎦

⎤⎢⎣

⎡ −−∝ 2

1

212

2)(exp),|(

σμμσμπ x

where 20

2

20

20

1 //

σσσσμ

μ++

=n

xn , 22

0

20

221 σσ

σσσ

+=

n

μを固定し,σ2の条件付事後分布を求めます.

⎥⎦

⎤⎢⎣

⎡ −+−+−∝ ++−

2

22)2/1(22

2)()1(2exp)(),|(

σμβσμσπ α xnsnx n

事前分布に自然共役事前分布を選択したので,μ,σ2 の事後分布も正規分布と逆ガンマ分布

となっています.

⎟⎟⎠

⎞⎜⎜⎝

++

+22

0

220

20

2

20

202 ,

//

~,|σσ

σσσσσσμ

σμnn

xnNx

⎟⎟⎠

⎞⎜⎜⎝

⎛ −+−++

2)()1(2,

2~,|

222 μβαμσ xnsnnIGx

この条件付事後分布を使ったギブス・サンプリングの R のソースを付録に記載しました.

Page 96: WinBUGS の使い方 - JPMA...WinBUGS の良いところ 2 σ2 IG ~ (10,9) この例は,データが正規分布に従い,更に,そのパラメータである平均が正規分布,分散

Error! Use the Home tab to apply 見出し 2 to the text that you want to appear

here.

93

8.6 WinBUGSで用いられるサンプリング方法

WinBUGS では事後分布に従う乱数を発生させるために,全条件付事後分布からの乱数を発

生させます. 事前分布を自然共役事前分布(「8.3 事前分布と事後分布」参照)とした場合は,目標とす

る条件付事後分布が,どの様な分布になるか判っている上に,多くの場合,その分布に従う

効率的な乱数の発生アルゴリズムが存在するので,それを使うことができます.事前分布が

目標とする条件付事後分布の自然共役分布でない場合は,WinBUGSは適当な方法を選んで,

サンプリングを行ってくれます. 具体的には,WinBUGS のプログラムの中には Updater と呼ばれるサンプリングの方法が,

目標とする事後分布により 20 種類用意されています(実際には,Over Relaxation や Adaptive phase と呼ばれる tuning も可能なので,利用できるアルゴリズムの数は 20 種類以上になりま

す).WinBUGS は,これらのアルゴリズムを階層的に区分しており,目標とする事後分布

が連続分布か不連続分布かにより,アルゴリズムを上位から順に当てはめ,全条件付き事後

分布を構成します.つまり,WinBUGS では上位のアルゴリズムが適切でない場合にのみ,

下位のアルゴリズムが適用されます.

目標とする事後分布が連続分布の場合は,次のアルゴリズムが適用されます. 1) 事前分布が,自然共役事前分布の場合は,事後分布より標準的な乱数発生アルゴリズ

ムにより直接サンプリング 2) 条件付事後分布が対数凹関数の場合は Derivative-Free Adaptive Rejection Sampling 3) サンプリングされる値の範囲が制限されている場合は Slice Sampling 4) サンプリングされる値の範囲が制限されていない場合は Current point Metropolis

不連続分布の場合は次のアルゴリズムが適用されます. 1) 上限が有限の場合は Inversion 法 2) Shifted Poisson は,標準的な乱数発生アルゴリズムより発生させる

利用可能な Updater は,WinBUGS インストール先の[Updater]フォルダ内の[Rsrc]フォルダ

に保存されている Methods.odc を開くことで閲覧可能です.また,どの Updater が実際に使用

されるかは,モデルとデータをコンパイル後に,[Info]-[Node Info]-[Methods]をクリックする

ことで確認することができます.

Derivative-Free Adaptive Rejection Sampling と Slice Sampling の詳細は,Gilks and Wild (1992),

Neal (1997),大森 (2001)等を参照下さい.Current point Metropolis 法では,正規分布に基づく

対称な提案分布を用い(random walk sampling),バーンイン期間は 4000 回と設定されてい

ます.バーンイン期間の間に標準偏差を変化させることにより提案分布に調整をかけ,サン

Page 97: WinBUGS の使い方 - JPMA...WinBUGS の良いところ 2 σ2 IG ~ (10,9) この例は,データが正規分布に従い,更に,そのパラメータである平均が正規分布,分散

Error! Use the Home tab to apply 見出し 2 to the text that you want to appear

here.

94

プルデータの許容率を 20~40%に設定しサンプリングを行います.

8.7 収束診断

MCMC では,既に何度か説明されているように,定常状態に達するまでのチェーンをバー

ンイン期間として削除し,その後のチェーンのみでパラメータを推定します.よって,定常

状態に達したことを確認する方法が必要になります.しかし,確実に定常状態に収束したこ

とを判定する方法はなく,以下の様に,視覚的に,あるいは頻度論的な検定を用いて判定し

ます.

8.7.1 時系列のサンプリングデータのプロット

横軸にイタレーション回数,縦軸に値を取ったプロットを描きます.定常状態に達するま

では,初期値に依存して変動に系統的に推移します.しだいに初期値の影響から離脱し,一

定の範囲内の変動を取る様になり,その時点を定常分布に収束した時点と判断します.この

方法は視覚的判断により,時系列データの回帰分析で行われる誤差プロットの検討と類似し

て,系統的な誤差がないことを確認する作業になります.「2.10 結果の見方」に例示があり

ますので参照してください. さらに,同様に「2.10 結果の見方」に示した,連鎖における前の値との自己相関関係図に

より,比較的近い間隔において 0 付近に収束しているかを見ることも収束判定の参考になり

ます. また,複数の異なる初期値から開始された複数のチェーンについて,同様にプロットを描

き,同様の範囲の変動となったイタレーション回数を収束の時点とする方法もあります.

8.7.2 Gelman and Rubinの方法

頻度論的な検定を用いる方法はいくつか紹介されていますが,ここでは WinBUGS でも利

用可能な Gelman and Rubin (1992)の方法を紹介します.この方法は,定常状態後の複数のチ

ェーンのサンプルリングデータを利用します.このため,この方法を用いるためには,1 つ

の母数を推定するために複数のマルコフ連鎖が構築されていることが必要となります.この

データから各連鎖内の分散と連鎖間の分散を以下のように推定します. 全ての連鎖で定常分布に達し,サンプリングデータ数が大きい場合は,この分散の比 R が

1 に近づきます.一方,定常分布に達していない場合は,1 から乖離していきます.WinBUGSは,Gelman and Rubin の方法を改良した方法が採用されており,[Sample Monitor Tool]の[bgr diag]オプションで出力できます.この手法は複数の初期値によるサンプリングデータだけで

なく,1 本のサンプリングデータを複数に分割して利用することもできますが,WinBUGS で

は初期値を複数設定した場合のみ利用可能です.[bgr diag]オプションを指定すると,R を縦

軸に,イタレーション回数を横軸にとったプロットが表示されます.このプロットで赤いラ

インが R=1 付近を推移していることを確認します.実際の R の値は,プロットをダブルクリ

ックした後に,コントロールキーを押しながら右クリックすることで見ることができます.

Page 98: WinBUGS の使い方 - JPMA...WinBUGS の良いところ 2 σ2 IG ~ (10,9) この例は,データが正規分布に従い,更に,そのパラメータである平均が正規分布,分散

Error! Use the Home tab to apply 見出し 2 to the text that you want to appear

here.

95

以下にロジスティク回帰分析の例題のデータを用いて作成した R のプロットと R の値を

示しました.

Page 99: WinBUGS の使い方 - JPMA...WinBUGS の良いところ 2 σ2 IG ~ (10,9) この例は,データが正規分布に従い,更に,そのパラメータである平均が正規分布,分散

Error! Use the Home tab to apply 見出し 2 to the text that you want to appear

here.

96

9. 付録

9.1 WinBUGS実行のためのSASマクロ

9.1.1 SASデータをWinBUGSデータに変換するマクロ

/* SASデータセットを BUGSのデータファイルへ変換するマクロ %make_bugsdata( 変換元データセット名 , 変換先ファイル名 , format=出力形式 (list | rectangle) */ %macro make_bugsdata(dataset , file , format=list); /* N: データ数 M: 変数の数 */ data _null_ ; set &dataset end=EOF; if EOF then call symput('N' , _N_); run; proc transpose data=&dataset out=_TDT prefix=x; run; data _TDT (drop = _NAME_ _LABEL_); set _TDT end=EOF; name = _NAME_ ; if _LABEL_ = '' then label = _NAME_ ; else label = _LABEL_ ; if EOF then call symput('M' , _N_); run; /* 矩形フォーマット */ %IF &format = rectangle %THEN %DO ; proc transpose data=_TDT out=_TTDT prefix=N; var label name ;

run;

Page 100: WinBUGS の使い方 - JPMA...WinBUGS の良いところ 2 σ2 IG ~ (10,9) この例は,データが正規分布に従い,更に,そのパラメータである平均が正規分布,分散

Error! Use the Home tab to apply 見出し 2 to the text that you want to appear

here.

97

/* SASデータセットを BUGSのデータファイルへ変換するマクロ(続き)*/ data _null_ ; set _TTDT ; if _NAME_ = 'name' then do ; list = %DO I=1 %TO &M ; %IF &I = 1 %THEN %DO ; N&I %END; %ELSE %DO ; || N&I %END; %END; ; call symput('names', list); end; if _NAME_ = 'label' then do ; file "&file" ; put %DO I=1 %TO &M ; N&I ' ' %END; @ ; put ; end; run; data _null_ ; file "&file" mod ; set &dataset; Array _vx {&M} &names ; do i=1 to &M ; if _vx{i} = . then put 'NA ' @ ; else put _vx{i} @ ; end; put ; run; data _null_ ; file "&file" mod; put 'END' ; put ; run;

%END; %ELSE %DO ;

Page 101: WinBUGS の使い方 - JPMA...WinBUGS の良いところ 2 σ2 IG ~ (10,9) この例は,データが正規分布に従い,更に,そのパラメータである平均が正規分布,分散

Error! Use the Home tab to apply 見出し 2 to the text that you want to appear

here.

98

/* SASデータセットを BUGSのデータファイルへ変換するマクロ(続き)*/ data _null_ ; file "&file" mod; put 'END' ; put ; run; %END; %ELSE %DO ; /* リストフォーマット */ data _null_ ; file "&file" ; set _TDT end=EOF ; if _N_ = 1 then put 'list(' @; put label '=' @; %IF &N = 1 %THEN %DO ; if x1 = . then put 'NA' @ ; else put x1 @; %END ; %ELSE %DO ; put 'c(' @ ; %DO I=1 %TO &N ; if x&I = . then put 'NA' @ ; else put x&I @; %IF &I = &N %THEN %DO ; put ')' @; %END ; %ELSE %DO ; put ',' @; %END; %IF &I - &I/9 * 9 = 0 %THEN %DO ; put ; %END; %END; %END; if EOF then put ')'; else put ','; run; %END; %mend make_bugsdata;

Page 102: WinBUGS の使い方 - JPMA...WinBUGS の良いところ 2 σ2 IG ~ (10,9) この例は,データが正規分布に従い,更に,そのパラメータである平均が正規分布,分散

Error! Use the Home tab to apply 見出し 2 to the text that you want to appear

here.

99

9.1.2 SASによるWinBUGS実行マクロ

/* WinBUGSの実行マクロ %exec_bugs(out = MCMCの保存データセット名 , work = モデルファイル等を配置するディレクトリ名 , model = モデルファイル名 , nchain = チェーンの数 , burnin = バーンイン期間 , thin = イタレーションを採用する間隔 , niter = イタレーション回数 , data[1-9] = データファイル名 , init[1-3] = 初期値ファイル名 , gen_inits = 初期値を自動作成するか (T | F) , node[1-9] = モニターするノード名 , coda = CODA形式の出力ファイル名の先頭文字列 , log_file = ログファイル名 , seed = 乱数シード , winbugs = WinBUGS実行ファイル名 script = WinBUGSスクリプト名) */ %macro exec_bugs( out= mcmc , work= , script= script.txt , model= , nchain= 1 , burnin= 1000 , thin= 1 , niter= 1000 , data1= , data2= , data3= , data4= , data5= , data6= , data7= , data8= ,

data9=,init1= , init2= , init3= , gen_inits = T , node1= , node2= , node3= , node4= , node5= , node6= , node7= , node8= ,

node9= ,coda= coda , log_file= bugs.odc , seed= , winbugs= C:/Program Files/WinBUGS14/WinBUGS14.exe );

Page 103: WinBUGS の使い方 - JPMA...WinBUGS の良いところ 2 σ2 IG ~ (10,9) この例は,データが正規分布に従い,更に,そのパラメータである平均が正規分布,分散

Error! Use the Home tab to apply 見出し 2 to the text that you want to appear

here.

100

/* WinBUGSの実行マクロ(続き)*/ data _null_ ; file "&work/&script" ; put 'display( log )'; put "check( &work/&model )" ; %IF &data1 ^= %THEN %DO; put "data( &work/&data1 )" ; %END; %IF &data2 ^= %THEN %DO; put "data( &work/&data2 )" ; %END; %IF &data3 ^= %THEN %DO; put "data( &work/&data3 )" ; %END; %IF &data4 ^= %THEN %DO; put "data( &work/&data4 )" ; %END; %IF &data5 ^= %THEN %DO; put "data( &work/&data5 )" ; %END; %IF &data6 ^= %THEN %DO; put "data( &work/&data6 )" ; %END; %IF &data7 ^= %THEN %DO; put "data( &work/&data7 )" ; %END; %IF &data8 ^= %THEN %DO; put "data( &work/&data8 )" ; %END; put "compile( &nchain )"; %IF &init1 ^= %THEN %DO; put "inits(1, &work/&init1 )" ; %END; %IF &init2 ^= %THEN %DO; put "inits(2, &work/&init2 )" ; %END; %IF &init3 ^= %THEN %DO; put "inits(3, &work/&init3 )" ; %END; %IF &gen_inits = T %THEN %DO ; put "gen.inits()" ; %END; %IF &seed ^= %THEN %DO; put "set.seed( &seed )" ; %END; put "update( &burnin )"; put "thin.updater( &thin )"; %IF &node1 ^= %THEN %DO; put "set( &node1 )" ; %END; %IF &node2 ^= %THEN %DO; put "set( &node2 )" ; %END; %IF &node3 ^= %THEN %DO; put "set( &node3 )" ; %END; %IF &node4 ^= %THEN %DO; put "set( &node4 )" ; %END; put "update( &niter )"; put "coda( * , &work/&coda )" ; put "save( &work/&log_file )" ; put 'quit()'; run; data _null_ ; call system("&winbugs /PAR &work/&script") ; run; %read_coda( &out , &nchain , &work/&coda ); %mend exec bugs;

Page 104: WinBUGS の使い方 - JPMA...WinBUGS の良いところ 2 σ2 IG ~ (10,9) この例は,データが正規分布に従い,更に,そのパラメータである平均が正規分布,分散

Error! Use the Home tab to apply 見出し 2 to the text that you want to appear

here.

101

9.1.3 CODAデータをSASデータに変換するマクロ

/* CODAデータからノードの乱数連鎖を取得マクロ %read_code( 変換後のデータセット名 , チェーンの数 , CODAデータファイルの前半部分 ) */ %macro read_coda(Coda_Result, nchain, coda); data CodaIndex ; infile "&coda.Index.txt" missover dlm='09'x ; length name $ 50 ; input name $ first last ; run; data CodaIndex (keep = name seq); set CodaIndex ; do seq=first to last ; output; end; run; %DO N=1 %TO &nchain ; data Coda&N ; infile "&coda.&N..txt" missover dlm='09'x ; input index y ; chain = &N ; seq + 1; run; data Coda&N ; merge Coda&N CodaIndex ; by seq ; run; data &Coda_Result ; %IF &N = 1 %THEN %DO; set coda&N ; %END; %ELSE %DO; set &Coda_Result coda&N ; %END; run; %END; %mend;

Page 105: WinBUGS の使い方 - JPMA...WinBUGS の良いところ 2 σ2 IG ~ (10,9) この例は,データが正規分布に従い,更に,そのパラメータである平均が正規分布,分散

Error! Use the Home tab to apply 見出し 2 to the text that you want to appear

here.

102

9.1.4 SASによるMCMC要約マクロ

/* MCMCの要約マクロ %summary( CODAから変換したデータセット名 , pctl=パーセント点 , out=要約保存データセット ) */ %macro summary( mcmc , pctl=2.5 50 97.5 , out=_mcmc_stat ); proc sort data=mcmc ; by name ; run; proc univariate data=&mcmc noprint; var y ; output out=&out mean=Mean std=SD stderr=SE pctlpts=&pctl pctlpre=Q n=sample; by name ; run; title; proc print data=&out noobs ; var name Mean SD SE Q: Sample ; run; %mend summary;

Page 106: WinBUGS の使い方 - JPMA...WinBUGS の良いところ 2 σ2 IG ~ (10,9) この例は,データが正規分布に従い,更に,そのパラメータである平均が正規分布,分散

Error! Use the Home tab to apply 見出し 2 to the text that you want to appear

here.

103

9.1.5 MCMCの時系列プロット作成マクロ

/* MCMCの時系列プロット作成 %history( MCMCデータセット(%read_codeで得たもの) , ノード名 , チェーン数 (< 3) , ファイル名 , dev = デバイス , hsize = 横サイズ , vsize = 縦サイズ ) */ %macro history( mcmc , node , chain , file , dev= jpeg , hsize= 12 cm , vsize= 5 cm ) ; proc sort data= &mcmc; by index; run; proc transpose data= &mcmc out=_PLOT_MCMC prefix=y; id chain ; var y ; by index ; where name="&node" ; run; filename gsasfile "&file"; goptions dev=&dev gsfname=gsasfile gsfmode=replace hsize=&hsize vsize=&vsize; symbol1 i=j v=none c=red ; symbol2 i=j v=none c=green ; symbol3 i=j v=none c=blue ; axis1 minor=none value=(FONT=SWISS height=3) label=(FONT=SWISS ANGLE=90 JUSTIFY=CENTER height=3 "&node"); axis2 minor=none value=(FONT=SWISS height=3) label=(FONT=SWISS height=3 'Index'); title; proc gplot data=_PLOT_MCMC ; plot ( %DO I=1 %TO &chain ; y&I %END; ) * index / overlay vaxis=axis1 haxis=axis2 ; run; quit; %mend history ;

Page 107: WinBUGS の使い方 - JPMA...WinBUGS の良いところ 2 σ2 IG ~ (10,9) この例は,データが正規分布に従い,更に,そのパラメータである平均が正規分布,分散

Error! Use the Home tab to apply 見出し 2 to the text that you want to appear

here.

104

9.1.6 事後分布のプロットマクロ

/* 事後分布のプロットマクロ %density( MCMCデータセット(%read_codeで得たもの),

ノード名 , ファイル名 ,

dev = デバイス, hsize = 横サイズ ,

vsize = 縦サイズ ) */ %macro density( mcmc , node , file , dev= jpeg , hsize= 10 cm , vsize= 10 cm ) ; proc kde data=&mcmc ; univar y / out=_kde_mcmc ; where name="&node" ; run; filename gsasfile "&file" ; goptions dev=jpeg gsfname=gsasfile gsfmode=replace hsize=&hsize vsize=&vsize ; axis1 minor=none value=(FONT=SWISS height=1.5) label=(FONT=SWISS ANGLE=90 JUSTIFY=CENTER height=2 "density"); axis2 minor=none value=(FONT=SWISS height=1.5) label=(FONT=SWISS height=2 'value'); symbol1 i=j v=none c=red ; title "&node" ; proc gplot data=_kde_mcmc ; plot density * value / overlay vaxis=axis1 haxis=axis2 ; run; quit; %mend density;

Page 108: WinBUGS の使い方 - JPMA...WinBUGS の良いところ 2 σ2 IG ~ (10,9) この例は,データが正規分布に従い,更に,そのパラメータである平均が正規分布,分散

Error! Use the Home tab to apply 見出し 2 to the text that you want to appear

here.

105

9.2 Gibbs SamplingのRのソース

正規分布乱数とガンマ分布乱数は,R の標準の乱数発生関数を使用しています.データは

平均 111,標準偏差 11 の正規分布乱数です.

以下に,同等の WinBUGS のモデルを記載します.

# データ x <- c(106.13, 113.29, 107.35, 110.22, 107.20,

111.50, 105.88, 112.47, 113.27, 110.34, 110.82, 113.80, 108.53, 111.23, 112.00,

109.97, 106.77, 112.83, 115.64, 112.43) n <- length(x) xbar <- mean(x) s2 <- var(x) # 事前分布のパラメータ mu0 <- 0 v0 <- 1000 alpha <- 0.001 beta <- 0.001 B <- 1000 # 総イタレーション回数 mu <- numeric(B) # 平均 muの結果を保存するベクトル v <- numeric(B) # 分散 vの結果を保存するベクトル mu[1] <- 0 # 平均 muの初期値 v[1] <- 1 # 分散 vの初期値 for (i in 2:B) { m1 <- (mu0*v[i-1]/n + v0*xbar)/(v[i-1]/n + v0) s1 <- sqrt(v0*v[i-1]/(n*v0 + v[i-1])) mu[i] <- rnorm(1, mean=m1, sd=s1 ) a1 <- alpha+n/2 b1 <- (2*beta + (n-1)*s2 + n*(xbar-mu[i])^2)/2 tau <- rgamma(1, shape=a1 , rate=b1 ) v[i] <- 1/tau }

model { for (i in 1:n) { x[i] ~ dnorm(mu, tau) } mu ~ dnorm(0, 0.001) tau ~ dgamma(0.001, 0.001) v <- 1/tau; }

Page 109: WinBUGS の使い方 - JPMA...WinBUGS の良いところ 2 σ2 IG ~ (10,9) この例は,データが正規分布に従い,更に,そのパラメータである平均が正規分布,分散

106

9.3 WinBUGSメニュー,コマンド一覧

WinBUGS メニュー 対応スクリプトコマンド

機能 形式 パラメータ

File File - Exit quit() - WinBUGS を終了させる

File - Save As... save(file) file = 出力ファイル名 結果をファイルへ出力させる

Model Model - Specification... , [check model] check(x) x = モデルファイル名 モデルをチェックする

Model - Specification... , [load data] data(x) x = データファイル名 データファイルを読み込む

Model - Specification... , [num of chains] compile(x) x = チェーン数 データ構造の構築

Model - Specification... , [for chain] [load inits] inits(x, y) x = チェーン数,

y = 初期値ファイル名 初期値を読み込む

Model - Specification... , [gen inits] gen.inits() - 初期値の作成

Model - Update... , [updates] update(x) x = イタレーション回数 イタレーションを実行

Model - Update... , [refresh] refresh(x) x = リフレッシュ回数 この間隔でスクリーンを描く直す

Model - Update... , [thin] thin.updater(x) x = 間引く間隔 得られたチェーンから,この間隔で乱数を保存する

Model - Update... , [over relax] over.relax(x) x = "yes" or "no" 可能ならば Over Relax 型の MCMC を使う

Model - Update... , [adapting] - -

Model - Monitor Met - - メトロポリスアルゴリズムを使う場合に使用できる

Model - Save State - - チェーンの最後の乱数値を表示.シミュレーションの続きを行う場合の

初期値にできる

Model - Seed... , [seed] set.seed(x) x = 擬似乱数のシード 乱数のシードを設定

Model - Script script(x) x = スクリプトファイル名 スクリプトを実行

Inference Inference - Samples... , [node] [set] set(x) x = ノード名 モニタするノード名を設定

Page 110: WinBUGS の使い方 - JPMA...WinBUGS の良いところ 2 σ2 IG ~ (10,9) この例は,データが正規分布に従い,更に,そのパラメータである平均が正規分布,分散

107

WinBUGS メニュー 対応スクリプトコマンド

機能 形式 パラメータ

Inference - Samples... , [node] [clear] clear(x) x = ノード名 指定されたノードのチェーンを削除

Inference - Samples... , [thin] thin.samples(x) x = 間引く間隔

チェーンよりこの間隔でサンプリングし,各種の計算を行う.

thin.updater(x)と効果は同じであるが,thin.updater(x)は間引いた値をメ

モリ上に残さない

Inference - Samples... , [node] [coda] coda(x, y) x = ノード名,

y = 出力ファイル記号

指定されたノードのチェーンを Coda フォーマットで文字データとして出

Inference - Samples... , [node] [density] density(x) x = ノード名 指定されたノードの事後密度分布図

Inference - Samples... , [node] [history] history(x) x = ノード名 指定されたノードのチェーン毎の推移図

Inference - Samples... , [node] [stats] stats(x) x = ノード名 指定されたノードの統計情報出力

Inference - Samples... , [node] [auto cor] autoC(x) x = ノード名 指定されたノードの自己相関をプロット.プロットを Ctrl+左クリックでデ

ータ出力

Inference - Samples... , [node] [bgr diag] gr(x) x = ノード名 収束診断(Gelman-Rubin statistic)

複数のチェーンが必要

Inference - Samples... , [node] [quantiles] quantiles(x) x = ノード名 指定されたノードの Median 2.5%, 97.5% quantlie をプロット

Inference - Samples... , [node] [trace] trace(x) x = ノード名 trace(x)を実行し Dynamic trace をオープンした後,update()を実行する

と update の refresh 単位にリアルタイムにプロットが描き直される.

Inference - Samples... , [chains] first(x) x = チェーン番号 各種計算を行うチェーンを区間で指定するときの開始番号

Inference - Samples... , [to] last(x) x = チェーン番号 first(x)に対する終了

Inference - Samples... , [beg] beg(x) x = 開始インデックス 得られたチェーンからこの区間で再抽出し,各種計算を行う

Inference - Samples... , [end] end(x) x = 終了インデックス beg(x)に対する終了点

Inference - Compare... - - ノードの Box plot や,モデルの適合程度をプロット

Page 111: WinBUGS の使い方 - JPMA...WinBUGS の良いところ 2 σ2 IG ~ (10,9) この例は,データが正規分布に従い,更に,そのパラメータである平均が正規分布,分散

108

WinBUGS メニュー 対応スクリプトコマンド

機能 形式 パラメータ

Inference - Correlations. - - ノード間の相関を調べるため,散布図を描く

Inference - Summary... - [set] set.summary(x) x = ノード名 *.summary(x)で使うノードをセットする

Inference - Summary... - [stats] stats.summary(x) x = ノード名 stats(x)とほぼ同じ

Inference - Summary... - [mean] mean.summary(x) x = ノード名 ノードの平均

Inference - Summary... - [clear] clear.summary(x) x = ノード名 セットしたノードを消去する

Inference - Rank... , node => [stats] stats.rank(x) x = ノード名

Inference - Rank... , node => [clear] clear.rank(x) x = ノード名

Inference - Rank... , node => [histogram] hist.rank(x) x = ノード名

Inference - Rank... , node => [set] set.rank(x) x = ノード名

Inference - DIC... , [set] dic.set() - DIC の計算を始める

Inference - DIC... , [DIC] dic.stats() - DIC の計算.update(n)の実行前に dic.set()を行う必要がある

Option Options - Output options... display(x) x = window or log 出力方法を選択

Options - Blocking options... blockfe(x) x

Options - Update options... - -

Doodle Doodle - New - - 新しく Doodle のウインドウを表示

Page 112: WinBUGS の使い方 - JPMA...WinBUGS の良いところ 2 σ2 IG ~ (10,9) この例は,データが正規分布に従い,更に,そのパラメータである平均が正規分布,分散

109

9.4 WinBUGSの主なエラーメッセージ

WinBUGS には,画面の右下に表れる通常のエラーメッセージと,ダイアログで表示される

Trap メッセージがあります.下表が,通常のエラーメッセージの意味と対応です.

メッセージ 意味・対処

unknown type of probability density 定義されていない分布が記載されています.分布

名を確認しましょう.

expected a comma 分布のパラメータの指定方法を確認しましょう.

invalid or unexpected token scanned

index out of range ループのインデックスがベクトル,行列の大きさ

を超えています.

unable to choose update method プログラム上の制限に抵触します.

logical expression to complex 数式が複雑です.いくつかに分割しましょう.

expected variable name 変数名が不適切です.

node dimension does not match 行列次元の設定の矛盾があります.

array index is greater than array upper bound for y

precision of normaly y[1] must be positive

this chain contains uninitialized variables

undefined variable 変数はデータとして与えるか,事前分布を定義し

てください.

Chain initialized but other chain(s) contain uninitialized

variables

複数チェーンに対する初期値を設定していない.

初期値の記載を確認しましょう.

expected key word list

column label index is greater than array upper bound 矩形フォーマットを用い場合なら,インデックス

を見直しましょう

shape parameter (r) of gamma tau too small -- cannot sample dgamma のパラメータを変更するか,対応するノ

ードの初期値を設定しましょう.

value of order of binomial y must be greater than zero 二項分布のパラメータを見直しましょう

value of proportion of binomial y must be between zero and one 二項分布のパラメータを見直しましょう.

linear predictor in probit regression too large 数値がオーバーフローしています.

no prior specified for this initial value

precision of normal delta[4] must be positive

Page 113: WinBUGS の使い方 - JPMA...WinBUGS の良いところ 2 σ2 IG ~ (10,9) この例は,データが正規分布に従い,更に,そのパラメータである平均が正規分布,分散

110

10. 参考資料 [1] Ntzourfras I. Bayesian Modeling Using WinBUGS. Hoboken: John Wiley & Sons, Inc.; 2009. [2] Spiegelhalter DJ, Abrams KR, Myles JP. Bayesian Approaches to Clinical Trials and

Health-Care Evaluation. New York: Wiley; 2004. [3] Smith MK, Jones I, Morris MF, Grieve AP, Tan K. Implementation of a Bayesian adaptive

design in a proof of concept study. Pharmaceut. Statist. 2006; 5: 39–50. [4] Gilks WR, Wild P. Adaptive Rejection Sampling for Gibbs Sampling. Applied Statistics. 1992;

41(2): 337-48. [5] Neal R. Markov chain Monte Carlo methods based on 'slicing' the density function. Technical

Report 9722 , Department of Statistics, University of Toronto, Canada; 1997 [cited June 24, 2014]. Avairable from: http://www.cs.utoronto.ca/~radford/publications.html.

[6] Gelman A, Rubin DB. Inference from iterative simulation using multiple sequences (with discussion). Statistical Science. 1992; 7: 457–511.

[7] WinBUGS Examples Volume 1, Volume 2. [cited June 24, 2014]. Avairable from: http://www.mrc-bsu.cam.ac.uk/wp-content/uploads/WinBUGS_Vol1.pdf, http://www.mrc-bsu.cam.ac.uk/wp-content/uploads/WinBUGS_Vol2.pdf.

[8] WinBUGS User Manual Version 1.4, January 2003 [cited June 24, 2014]. Avairable from: http://www.mrc-bsu.cam.ac.uk/wp-content/uploads/manual14.pdf.

[9] 丹後俊郎. 統計モデル入門. 朝倉書店; 2000. [10] 岩崎学. カウントデータの統計解析. 朝倉書店; 2010. [11] 大森裕浩. マルコフ連鎖モンテカルロ法の最近の展開. 日本統計学会誌. 2001; 31:

305-44.

Page 114: WinBUGS の使い方 - JPMA...WinBUGS の良いところ 2 σ2 IG ~ (10,9) この例は,データが正規分布に従い,更に,そのパラメータである平均が正規分布,分散

111

改訂履歴

2014 年 7 月 公開

2016 年 8 月 p.17 表 3-1(ベクトル,行列の表現方法)の誤記修正及びそれに伴う記載整備

Page 115: WinBUGS の使い方 - JPMA...WinBUGS の良いところ 2 σ2 IG ~ (10,9) この例は,データが正規分布に従い,更に,そのパラメータである平均が正規分布,分散

WinBUGS の使い方 資料作成者 タスクフォース 5

太田 絵里 協和発酵キリン株式会社 (推進委員兼タスクフォースリーダー)

菅波 秀規 興和株式会社 (推進委員兼タスクフォースリーダー)

竹内 久朗 旭化成ファーマ株式会社

吉田 哲 アステラス製薬株式会社

深瀬 健二郎 アストラゼネカ株式会社

北条 誠一郎 エーザイ株式会社

阿達 則昭 MSD株式会社

須永 義則 サノフィ・アベンティス株式会社 (平成 22 年 10 月~)

橋本 大哉 株式会社 三和化学研究所

松下 勲 大正製薬株式会社

淀 康秀 大日本住友製薬株式会社

中島 章博 帝人ファーマ株式会社

中岡 隆平 日本新薬株式会社

東野 浩司 日本製薬株式会社

尾崎 寿昭 日本臓器製薬株式会社 (~平成 23 年 12 月)

相澤 正和 ファイザー株式会社

樋口 貴之 扶桑薬品工業株式会社

監修

統計・DM 部会 部会長 東宮 秀夫 大日本住友製薬株式会社

同 副部会長 渡橋 靖 第一三共株式会社

同 副部会長 小宮山 靖 ファイザー株式会社

同 監事 三沢 秀敏 ファイザー株式会社

以上の資料作成に当たり、医薬品評価委員会 川口委員長ならびに本資料の査読を実施頂いた

査読担当の諸氏に感謝致します。