mcmcサンプルの使い方 ~見る・決める・探す・発生させる~

69
MCMCサンプルの使い方 ~見る・決める・探す・発生させる~ Kentaro Matsuura [email protected] #5

Upload: -

Post on 21-Jan-2018

5.370 views

Category:

Data & Analytics


0 download

TRANSCRIPT

Page 1: MCMCサンプルの使い方 ~見る・決める・探す・発生させる~

MCMCサンプルの使い方 ~見る・決める・探す・発生させる~

Kentaro Matsuura [email protected] #5

Page 2: MCMCサンプルの使い方 ~見る・決める・探す・発生させる~

本資料の位置づけ

• 拙著『StanとRでベイズ統計モデリング』 において, 書ききれなかったことはいくつかあります.

• その中で心理学において有用そうな話題を著者なりに考えて選びました.

• スライド中に出てくる章・節・図番号は その書籍内のものを指します.

2

Page 3: MCMCサンプルの使い方 ~見る・決める・探す・発生させる~

本スライドの記法

• 見やすさのため, 変数を太文字にしている. • 𝒂,𝑿,𝒀など.

• ベクトル(出てこないけど)は書籍と同じ 𝒀 で表す.

• 僕の視力の悪さに由来する.

• これから推定されるパラメータを赤い文字で表す. • 𝒂,𝝁 など.

• 事後分布は 𝒑 𝒂,𝒃,𝝈|𝑿,𝒀 のように書くのではなく, 見やすさのため, データを省略し, パラメータを青い文字で表す. • 𝒑 𝒂,𝒃,𝝈 など.

3

Page 4: MCMCサンプルの使い方 ~見る・決める・探す・発生させる~

おさらい

Page 5: MCMCサンプルの使い方 ~見る・決める・探す・発生させる~

検定や分散分析 じゃいけないの? 5

• 検定や分散分析 はシンプルな統計モデルの一種

• 第一種の過誤(および第二種の過誤)至上主義

その他の議論は基本的に適用範囲外

• サイエンスで重要となるWhyやHowに答えにくい!

第一種の過誤とは別の視点で “知りたいことを知る” 統計モデリングへ

Page 6: MCMCサンプルの使い方 ~見る・決める・探す・発生させる~

ベイズ統計モデリング の 答えのかたち 6

連立方程式

問い つるかめ算 旅人算 食塩水の濃度

モデル化 連立方程式に落とす

答えのかたち 𝑥 =●● 𝑦 =▲▲

解法 加減法 代入法

ベイズ統計モデリング

行動の理解・予測 現象の理解・予測

複数のパラメータを含む、 モデル式に落とす パラメータの(事後の)同時分布 MCMC 変分ベイズ ・・・

Page 7: MCMCサンプルの使い方 ~見る・決める・探す・発生させる~

結局Stanは何をするための道具? 7

Stanでは同時分布そのものの代わりに,

そこからの乱数サンプルたちを求める

かんたんにモデルを組み立てて, パラメータの(事後の)同時分布を得るための道具

今日の主役: MCMCサンプル

※ ちょっとしたモデルで すぐに数式で表現不能になる

Page 8: MCMCサンプルの使い方 ~見る・決める・探す・発生させる~

分布と比べたMCMCサンプルの利点・欠点 8

• 利点 • 数式で表せない分布でもOK • 積分の計算がラク (次のスライド)

• 周辺化の計算がラク (後述)

• 欠点

• 数値が厳密ではない.

• 中心極限定理より, 1

𝑁𝑚𝑚𝑚𝑚程度の誤差がある.

• 分布を表すのに, 全サンプルを保持してないとダメ.

𝑁𝑚𝑚𝑚𝑚はMCMCサンプルの個数

Page 9: MCMCサンプルの使い方 ~見る・決める・探す・発生させる~

積分をMCMCサンプルの和で表現できる

• ある確率分布を𝑝 𝜃 とする. 𝜃に依存するある量𝐴 𝜃 があるとする.

• 例えば, 𝐴 𝜃 の平均値の定義は以下であった.

𝐸 𝐴 = �𝐴 𝜃 𝑝 𝜃 𝑑𝜃

• 𝜃のMCMCサンプルを使うと, 次のように表現できる.

𝐸 𝐴 =1

𝑁𝑚𝑚𝑚𝑚� 𝐴 𝜃𝑖

𝑁𝑚𝑚𝑚𝑚

𝑖=1

9

Page 10: MCMCサンプルの使い方 ~見る・決める・探す・発生させる~

周辺化の例: 書籍の4章の単回帰

• 説明変数: 年齢𝑿 𝑛

• 応答変数: 年収𝒀 𝑛

• モデル式: 𝒀 𝑛 ~ Normal 𝒂+ 𝒃𝑿 𝑛 ,𝝈

• パラメータ: 𝒂, 𝒃, 𝝈

• 事後分布: 𝒑 𝒂,𝒃,𝝈

10

Page 11: MCMCサンプルの使い方 ~見る・決める・探す・発生させる~

4000行のうち先頭6行

Stanの実行および結果 11

この1行は, 同時分布 𝒑 𝒂,𝒃,𝝈 からの 乱数サンプル1個に相当

この1列は, 周辺分布 𝒑 𝒂 からの 乱数サンプル𝑁𝑚𝑚𝑚𝑚個に相当

Page 12: MCMCサンプルの使い方 ~見る・決める・探す・発生させる~

同時分布 と 周辺分布 12

𝒂

𝒃

𝝈

同時分布 𝒑 𝒂,𝒃,𝝈

周辺分布 𝒑 𝒂,𝒃

Page 13: MCMCサンプルの使い方 ~見る・決める・探す・発生させる~

さらに周辺化 (書籍の図4.7) 13

𝒂

𝒃

周辺分布 𝒑 𝒂

周辺分布 𝒑 𝒃

Page 14: MCMCサンプルの使い方 ~見る・決める・探す・発生させる~

print(fit)の結果は周辺分布の情報 14

周辺分布 𝒑 𝒂 の要約になっている

Page 15: MCMCサンプルの使い方 ~見る・決める・探す・発生させる~

パラメータが増えても基本的には同じ

• 例: 8.1節の階層モデル

15

同時分布

𝒀 𝑛 ~ Normal 𝒂 𝑲𝑲𝑲 𝑛 + 𝒃 𝑲𝑲𝑲 𝑛 𝑿 𝑛 ,𝝈𝒀 𝒂 𝑘 ~ Normal 𝒂全体平均,𝝈𝒂

𝒃 𝑘 ~ Normal 𝒃全体平均,𝝈𝒃

𝒑(𝝈𝒀, 𝒂 𝟏 ,𝒂 𝟐 , … ,𝒂 𝑲 ,𝒂全体平均, 𝝈𝒂 𝒃 𝟏 ,𝒃 𝟐 , … ,𝒃 𝑲 ,𝒃全体平均, 𝝈𝒃)

からのサンプリング

Page 16: MCMCサンプルの使い方 ~見る・決める・探す・発生させる~

• 適宜周辺化して, 興味あるところを見る.

• RやPythonにおける操作が少し面倒になる.

• Rならfor文かapply関数, または{dplyr}パッ

ケージを使う.

参考リンク • MCMCサンプルを{dplyr}で操る

http://statmodeling.hatenablog.com/entry/using-mcmc-samples-with-dplyr

16

Page 17: MCMCサンプルの使い方 ~見る・決める・探す・発生させる~

MCMCサンプルの活用例

Page 18: MCMCサンプルの使い方 ~見る・決める・探す・発生させる~

本日紹介する活用例

• 見る ― 作図

• 決める ― ベイズ決定

• 探す ― ベイズ最適化

• 発生させる ― シミュレーション

18

Page 19: MCMCサンプルの使い方 ~見る・決める・探す・発生させる~

見る ― 作図

Page 20: MCMCサンプルの使い方 ~見る・決める・探す・発生させる~

書籍における作図

• apply関数でMCMCサンプルを集計している.

• Rの{ggplot2}パッケージでカッコつけている.

(だから書籍では説明を省いた)

• ここではなるべく簡単な方法で説明する.

20

しかし, それらは重要ではない. ユーザが慣れている方法で自由にやるべし.

Page 21: MCMCサンプルの使い方 ~見る・決める・探す・発生させる~

例① | 周辺分布のヒストグラム 21

Page 22: MCMCサンプルの使い方 ~見る・決める・探す・発生させる~

例② | 予測区間の折れ線グラフ

• 4章の単回帰で, 23歳~60歳における 年収の95%ベイズ予測区間を描きたい.

22

各年齢における予測分布の分位点を求めて, 折れ線でつなげばよさそう

図から逆算して考える!

Page 23: MCMCサンプルの使い方 ~見る・決める・探す・発生させる~

• 各年齢における予測分布からのMCMCサンプルを Stan側で 定義する (model4-4.stan参照). ここでは省略.

• R上での変数名: ms$y_new (2次元のmatrix)

23

4000

38 (23~60歳の年齢の個数)

(MCMCサンプルの個数)

Page 24: MCMCサンプルの使い方 ~見る・決める・探す・発生させる~

24

........

N_mcmc

N_y_new

Page 25: MCMCサンプルの使い方 ~見る・決める・探す・発生させる~

25

Page 26: MCMCサンプルの使い方 ~見る・決める・探す・発生させる~

見る ― 作図 の まとめ

• パラメータの事後分布や予測分布の可視化は, 分かりやすい非常に強力なツール.

• 図が先, コードは後!

• MCMCサンプルの加工は, 数少ない頑張りポイント.

26

Page 27: MCMCサンプルの使い方 ~見る・決める・探す・発生させる~

決める ― ベイズ決定

Page 28: MCMCサンプルの使い方 ~見る・決める・探す・発生させる~

例① | 傘の問題

• 日常生活でどちらの戦略を採用するか? 𝑨: 常に折り畳み傘を持ち歩く

𝑩: 常に持たず, 雨が降ったらコンビニで傘を買う

28

Page 29: MCMCサンプルの使い方 ~見る・決める・探す・発生させる~

損失を低くしたいと考える

ここでは,

• 𝜽:雨が降る確率

• 𝑦:天気. 𝑦 ~ Bernoulli 𝜽 に従う.

• 𝒂: 𝑨か𝑩

29

あるパラメータ𝜽と状態𝑦と戦略𝒂を選んだときの, 損失関数𝐿 𝜽,𝑦,𝒂 をもとに考えるのが定石

• 戦略は, 行動・action・decisionとも呼ぶ • 損失関数はloss function.

Page 30: MCMCサンプルの使い方 ~見る・決める・探す・発生させる~

• 上の損失の, 天気の出方の平均をとると,

• 𝐿 𝜽,𝑨 = 1 − 𝜽 × 50 + 𝜽 × 50 = 50

• 𝐿 𝜽,𝑩 = 1 − 𝜽 × 0 + 𝜽 × 500 = 500𝜽

30

戦略𝑨 戦略𝑩 𝑦 = or の場合 (確率1 − 𝜽)

50円 (持ち歩くコスト)

0円

𝑦 = の場合 (確率𝜽)

50円 (持ち歩くコスト)

500円 (購入等のコスト)

𝜽 > 0.1ならば𝑨の方が平均的に得な戦略!

損失関数の設定

Page 31: MCMCサンプルの使い方 ~見る・決める・探す・発生させる~

ベイズ決定

• 現実的には雨が降る確率𝜽は固定値ではなく, データから推定された事後分布𝑝 𝜽|𝒀 だろう.

• そのため, さらに損失に対し事後分布による平均をとる. 事後期待損失と呼ばれる.

• 事後期待損失を最小化する決定方式は,

ベイズ決定と呼ばれる.

31

Page 32: MCMCサンプルの使い方 ~見る・決める・探す・発生させる~

事後期待損失の計算

ここで𝐸 𝜽 は𝜽の事後平均.

32

𝐿 𝑨 = �𝐿 𝜽,𝑨 𝑝 𝜽 𝑑𝜽

𝐿 𝑨 = �50𝑝 𝜽 𝑑𝜽 = 50� 𝑝 𝜽 𝑑𝜽 = 50

𝐿 𝑩 = �𝐿 𝜽,𝑩 𝑝 𝜽 𝑑𝜽

𝐿 𝑩 = �500𝜽 𝑝 𝜽 𝑑𝜽 = 500�𝜽 𝑝 𝜽 𝑑𝜽 = 500 𝐸 𝜽

𝐸 𝜽 > 0.1ならば𝑨の方が平均的に得な戦略!

式の見やすさのため, 𝑝 𝜽|𝒀 を𝑝 𝜽 と書く. ( )

Page 33: MCMCサンプルの使い方 ~見る・決める・探す・発生させる~

例② | 販売数予測とアクション

• 12.4節の「季節もの」の販売数推移

• 今, 1時点先の販売個数𝒙を予測し, 前もって製造する

個数を決める必要があるとする. その製造数を𝒂とする.

• どのように𝒂を決めるのが得か?(損失が少ないか)

33

Page 34: MCMCサンプルの使い方 ~見る・決める・探す・発生させる~

まず1時点先の予測分布

• Stanを使って求める. ここでは省略する.

• 12.1節参照

34

1時点先

Page 35: MCMCサンプルの使い方 ~見る・決める・探す・発生させる~

損失関数の設定

• 製造した数を𝒂, その時点で実際にきた購入申し込みを𝒙とする.

損失関数𝐿 𝒙,𝒂 は以下に従うとする.

• 作りすぎて余った場合

途中で頭打ちになるような廃棄コスト

1 − exp − 𝒂− 𝒙 円

• 足りない場合

足りなかった分に比例する利益の損失

2 𝒙 − 𝒂 円

35

Page 36: MCMCサンプルの使い方 ~見る・決める・探す・発生させる~

予測分布を使って事後期待損失を求める

• 事後期待損失: が最も小さくように𝒂を決めたい(ベイズ決定).

• 予測分布𝑝 𝒙 による平均はMCMCサンプルの和で代替できる!

36

𝐿 𝒂 = �𝐿 𝒙,𝒂 𝑝 𝒙 𝑑𝒙

Page 37: MCMCサンプルの使い方 ~見る・決める・探す・発生させる~

事後期待損失を最小化する𝒂を求める 37

MCMCサンプルの和(積分) Rで何かを最小化したい場合に

使用する汎用的な関数

Page 38: MCMCサンプルの使い方 ~見る・決める・探す・発生させる~

38

「足りない場合に悲しいから, “ちょっと”多めに作っておこう.」

Page 39: MCMCサンプルの使い方 ~見る・決める・探す・発生させる~

決める ― ベイズ決定 の まとめ

• ベイズ決定は事後期待損失を最小化する.

• MCMCサンプルがあれば, 複雑な事後期待損失

もラクに計算できる.

参考文献

• 松原望(2010) 『ベイズ統計学概説 フィッシャーからベイズへ』

• Gelman et al. (2013) 『BDA3』 Chapter 9

39

Page 40: MCMCサンプルの使い方 ~見る・決める・探す・発生させる~

探す ― ベイズ最適化

Page 41: MCMCサンプルの使い方 ~見る・決める・探す・発生させる~

例: パイの実の問題

• Q.あなたはパイの実を何個食べた時に 最も幸せを感じますか?

• 前提条件

• 幸せ関数は単峰とする.

• 0個~21個の間にそのピークがあるとする.

• 実験日によらず幸せの感じ方は確定的で, ノイズが入らないとする.

• 答えをどうやって探すのが効率的か?

41

?

Page 42: MCMCサンプルの使い方 ~見る・決める・探す・発生させる~

はじめに思いつく探し方

1. 0個食べる 幸せを記録 時間をあける

2. 1個食べる 幸せを記録 時間をあける

・・・

22. 21個食べる 幸せを記録

最も大きな幸せを記録した個数を求める

42

22回の実験が必要! 前提を活かしていない.

Page 43: MCMCサンプルの使い方 ~見る・決める・探す・発生させる~

効率の良い探し方の一例

1. 8個食べる 幸せを記録 9.2 2. 13個食べる 幸せを記録 3.7 3. 5個食べる 幸せを記録 9.8 4. 3個食べる 幸せを記録 7.0 5. 6個食べる 幸せを記録 10.1 6. 7個食べる 幸せを記録 9.9

43

6回の実験で探索完了!

Page 44: MCMCサンプルの使い方 ~見る・決める・探す・発生させる~

フィボナッチ探索(Fibonacci search) 44

8 0 13 21

13以上は探索範囲 から捨ててよい

8 0 13 21 5

8以上は捨ててよい

8 0 13 21 5 3

3以下は捨ててよい

Page 45: MCMCサンプルの使い方 ~見る・決める・探す・発生させる~

フィボナッチ探索(Fibonacci search)

• 過去に探索した位置を有効利用し, 毎回約38%ずつ探索範囲を捨てることができる.

• その探索した位置はフィボナッチ数列になっている.

• 0, 1, 1, 2, 3, 5, 8, 13, 21, 34,・・・

• フィボナッチ数列の隣り合う2数の比は黄金比に近づく. • 黄金比は約1: 1.618 で, 捨てる探索範囲の割合は

11+1.618

≈ 0.38となっている.

45

Page 46: MCMCサンプルの使い方 ~見る・決める・探す・発生させる~

前提条件を緩める

• 1.5個などの小数点の値も可能.

• 幸せ関数は多峰かも.

• 実験日によっては幸せの感じ方にノイズが入る.

46

データを得るたびに真の幸せ関数を推定して 最適な探索位置を決める問題となる.

ベイズ最適化!

Page 47: MCMCサンプルの使い方 ~見る・決める・探す・発生させる~

ガウス過程(Gaussian Process)

• 真の幸せ関数𝝁には以下の仮定を置く.

• 「𝒙(位置)が近ければ𝝁は似ているはず」

• よく使われるのは以下のモデル:

• GPの代わりにマルコフ場モデル(12.6節)でもよい.

• 仮定の一つの表現にすぎない.

• Stanコードは省略. 参考文献参照.

47

𝒀 𝑛 ~ Normal 𝝁 𝑿 𝑛 ,𝝈 𝑛 = 1, … ,𝑁 𝝁 𝑥 ~ GP

Page 48: MCMCサンプルの使い方 ~見る・決める・探す・発生させる~

推定結果 48

• はじめに 8個 と 13個 で実験した場合.

得られたデータ

𝝁の事後平均

𝝁の99%ベイズ信頼区間

Page 49: MCMCサンプルの使い方 ~見る・決める・探す・発生させる~

LUCB方策(LUCB policy)

• 次の探索位置を決める方策は複数提案されている.

• ここではそのうちの一つであるLUCB方策を使ってみる.

• LUCB方策では以下を繰り返す.

49

• 𝝁の事後平均 が最大となる𝒙∗を選ぶ. • 𝝁の𝑿𝒕%ベイズ信頼区間の上限 が最大となる𝒙†を選ぶ

(ただし, 𝒙∗以外で). • 𝒙∗と𝒙†からデータを得て再び𝝁を推定する.

※途中で 𝝁 𝒙∗ の𝑿𝒕%ベイズ信頼区間の上限 < 𝝁 𝒙† の𝑿𝒕%ベイズ信頼区間の下限 + 𝜺 になったら終了.

※𝑿𝒕%の数字と𝜺は適宜変える. ここでは, 𝑿𝒕 = 𝟗𝟗, 𝜺 = 𝟎.𝟔で固定した.

Page 50: MCMCサンプルの使い方 ~見る・決める・探す・発生させる~

ベイズ最適化のシミュレーション例 50

Page 51: MCMCサンプルの使い方 ~見る・決める・探す・発生させる~

51

Page 52: MCMCサンプルの使い方 ~見る・決める・探す・発生させる~

52

Page 53: MCMCサンプルの使い方 ~見る・決める・探す・発生させる~

53

Page 54: MCMCサンプルの使い方 ~見る・決める・探す・発生させる~

54

Page 55: MCMCサンプルの使い方 ~見る・決める・探す・発生させる~

55

Page 56: MCMCサンプルの使い方 ~見る・決める・探す・発生させる~

Rコードの例 56

Page 57: MCMCサンプルの使い方 ~見る・決める・探す・発生させる~

Rコードの注意

• 毎回それまでの全データを使ってStanで推定すべし.

• StanのようなMCMCソフトではいわゆる ベイズ更新は基本的にやらない.

• 理由は以下等. • MCMCサンプルの平均値などは一般的に事後分布の十分統計量に

なっていない.

• MCMCサンプルをデータとして渡すのは計算が重い.

57

※前回の事後分布を事前分布に設定して推定すること

Page 58: MCMCサンプルの使い方 ~見る・決める・探す・発生させる~

(補足) Thompson sampling

目的が,

• 「幸せが最大となる個数を知りたい」 ではなく,

• 「被験者の幸せの合計を最大化したい」 だとすると方策が変わる.

• この場合は, Thompson samplingが実用的. すなわち, • 各個数𝑖における事後分布𝑝 𝝁 𝑖 に従って乱数𝑟 𝑖 を生成.

• 𝑟 𝑖 が最も大きい𝑖を次の実験の個数とする.

58

Page 59: MCMCサンプルの使い方 ~見る・決める・探す・発生させる~

探す ― ベイズ最適化 の まとめ

• “探す”は奥が深い!

• StanとMCMCサンプルを使えばベイズ最適化は難しくない. • ただし, 高速ではない.

参考文献

• 本多淳也, 中村篤祥(2016) 『バンディット問題の理論とアルゴリズム』

• 𝒢𝒢のちょっと古いStanコードは以下を参照. http://statmodeling.hatenablog.com/entry/gaussian-process-2

• マルコフ場モデルのStanコードは12.6節と以下を参照. http://statmodeling.hatenablog.com/entry/state-space-model-unequal-interval

59

Page 60: MCMCサンプルの使い方 ~見る・決める・探す・発生させる~

発生させる ― シミュレーション

Page 61: MCMCサンプルの使い方 ~見る・決める・探す・発生させる~

ところで研究者のみなさん,

統計モデリングに興味あるとか言っても,

どうせ p < 0.05 * の方が好きなんでしょ?

61

Page 62: MCMCサンプルの使い方 ~見る・決める・探す・発生させる~

ケース1

• 30人で実験してみた

• 有意差なかった

• うーん, とりあえずもう30人追加してみるか.

• お, よっしゃ, 有意差!論文書ける!

62

Page 63: MCMCサンプルの使い方 ~見る・決める・探す・発生させる~

正規性を検定などでチェックをしてから, t検定を実施するフローチャートの図

ケース2 63

Page 64: MCMCサンプルの使い方 ~見る・決める・探す・発生させる~

簡単なシミュレーションで確認しよう

• “良さそうな”こと思いついたらシミュレーションしよう.

• 例に挙げたような手順を使うと, 有意差が出ても,

第一種の過誤 < 0.05 になっていない

ことがわかる.

64

Page 65: MCMCサンプルの使い方 ~見る・決める・探す・発生させる~

低すぎる再現性が問題となっている

• 実験の再現性を調査した論文は複数あって, 例えば分子生物学の分野では再現率約3~4割とか. ゴミ論文で汚染されまくり.

• 出版バイアスもあるが, 原因の一つがp-hacking.

• p-hackingは有意差重視という論文評価システムの致命的な脆弱性.

• 無意識のp-hackingにご注意!

• 「p-hackingやめますか, 研究やめますか」

65

Page 66: MCMCサンプルの使い方 ~見る・決める・探す・発生させる~

第一種の過誤 < 0.05 に抑えるためには

• 事前に解析計画書を書く.

• そこからはずれた解析はしない.

• シミュレーションでも 第一種の過誤 < 0.05 になることを確認しておく.

66

Page 67: MCMCサンプルの使い方 ~見る・決める・探す・発生させる~

検出力 > 0.8 にするためには

• 例数設計(sample size calculation)をする.

• シミュレーションでも 検出力 > 0.8 になることを確認しておく.

67

シミュレーションデータはどうやって作る?

Page 68: MCMCサンプルの使い方 ~見る・決める・探す・発生させる~

MCMCサンプルを使ってシミュレーションデータを作る

• 例えば, パイの実の効果に個人差があるとする.

• 過去の全データを使って階層モデルで推定すると, 個人差の標準偏差を表すパラメータの事後分布が得られる.

• その事後分布を使って, 新しい人のデータN_new個を確率的に生成し, それらに対し検定を行う.

• 推定に使ったモデルを変えてみて, 例数がどれぐらい 変わるかもチェックしておく(感度分析).

68

Page 69: MCMCサンプルの使い方 ~見る・決める・探す・発生させる~

発生させる ― シミュレーション の まとめ

• p-hackingは 「ダメ。ゼッタイ。」

• きちんと例数設計しよう.

• MCMCサンプルを使って

例数設計シミュレーションの幅を広げよう.

参考文献 • 奥村晴彦(2016) 『Rで楽しむ統計』 特に3章, 6章, 7章

69