Slide 1

Slide 1 text

めざせ! 脱rstan初心者 @kosugitti 1

Slide 2

Slide 2 text

自己紹介 • 名前;小杉考司(こすぎこうじ) • 略歴;1976.01.17 大阪市生まれ • 趣味;心理統計,統計モデリング • 仕事;専修大学で心理統計教えてます 2

Slide 3

Slide 3 text

初心者を脱出する 4 ඿ా޺ઌੜˏ౦๺େֶͷΞΠσΞΛ΋ͱʹΠϥετԽ ॳ৺ऀ͔΋ CSNT͕ ΍ͬͯ͘ΕΔʂ தڃऀʁ ্ڃऀ ਆ

Slide 4

Slide 4 text

初心者だって大変だ • データを眺める=可視化するだけでもやることはたくさん • 分布に当てはめていくのも,分布とリンク関数の知識が必要 なので,やるべきこといっぱーい • 幸いbrmsなど専用パッケージがあれば,細かくコードを 書く必要はないし,収束しない問題に出会うことも少ない • まずは色々あそんでみよう 5

Slide 5

Slide 5 text

じゃあ中級者は? • Stanのコードを自分で描き始めたら(brmsなど既存パッ ケージに頼らなければ),あなたはもう中級者! • 分布をあれこれ混ぜ合わせたくなってきたら,あなたはもう 中級者! • 分布の混ぜ合わせ方→階層モデル,潜在クラスモデル • 決まったモデルから入っていくというよりも,自分の分析し たい現象に素直に向き合って,モデルを作り上げていく 6

Slide 6

Slide 6 text

ٱอઌੜͷΠϥετ দӜઌੜͷΠϥετ ؠ೾σʔλαΠΤϯεWPMΑΓ 世界の成り立ちを想像しよう

Slide 7

Slide 7 text

ٱอ σʔλղੳͷͨΊ ͷ౷ܭϞσϦϯάೖ໳ΑΓ

Slide 8

Slide 8 text

紙とペン • フルスクラッチでstanコードを書くときは,まず紙とペンを 用意します! • タブレットとタッチペンでもいいけど,とりあえずいきなり エディタを立ち上げるわけではありません • 描き方に好みがあるかもしれませんが,おすすめは縦長に セットしてデータを最下部に置きます 10

Slide 9

Slide 9 text

yi σʔλ͕͋ͬͨͱ͞

Slide 10

Slide 10 text

d Կ͔ͷϝΧχζϜʹ֬཰෼෍ ͔Βग़͖ͯͯΔ yi

Slide 11

Slide 11 text

d ୯ๆͰࠨӈରশͳΒ ͻͱ·ͣਖ਼ن෼෍͔ͳʁ yi

Slide 12

Slide 12 text

d ୯ๆͰࠨӈରশͳΒ ͻͱ·ͣਖ਼ن෼෍͔ͳʁ ਖ਼ن෼෍ʹ͸ ύϥϝλೋͭ̇ ʢҐஔͱ෯ʣ yi μ σi ෼ࢄ ਫ਼౓ ͕ݸਓ͝ͱʹ มΘΔͱ͍͏Ϟσϧ

Slide 13

Slide 13 text

d d d Θ͔Βͳ͍΋ͷ͸ ֬཰෼෍ʹ͕ͨ͠͏ͷ͕ ϕΠδΞϯͷᎄ Θ͔Βͳ͍΋ͷ͸ ֬཰෼෍ʹ͕ͨ͠͏ͷ͕ ϕΠδΞϯͷᎄ μ σi yi

Slide 14

Slide 14 text

d d d ͓͖·͠ΐ͏ࣄલ෼෍ ͓͖·͠ΐ͏ࣄલ෼෍ μ σi yi

Slide 15

Slide 15 text

完成 17 d d d μ σi yi

Slide 16

Slide 16 text

完成 • 下から上に書いていく • パラメータは記号か数字 • わからないものにはそれを生む 確率分布をおく • 数字で fi xされたら図の完成 18 ͘͝౰ͨΓલͷ͜ͱͷΑ͏ʹࢥ͑·͕͢ɼ ͪΌΜͱઃܭਤΛॻ͍͓͔ͯͳ͍ͱ ίʔυΛॻ͘ͱ͖ʹ໎ࢠʹͳΓ·͢

Slide 17

Slide 17 text

ίʔυʹ͠·͢ σʔλͷग़Ͳ͜Ζʹ ໬౓ σʔλͷग़Ͳ͜Ζʹ ໬౓ Θ͔Βͳ͍΋ͷΛ ද֬͢཰෼෍ʹ ࣄલ෼෍

Slide 18

Slide 18 text

ίʔυʹ͠·͢ ٻΊ͍ͨ΋ͷɼϞσϧϒϩοΫͰ ه߸Ͱද͍ͯͨ͠΋ͷΛ ύϥϝʔλϒϩοΫʹॻ͘ ֎͔Β༩͑ΒΕΔ΋ͷ͸ σʔλϒϩοΫʹॻ͘

Slide 19

Slide 19 text

yi σʔλ͕͋ͬͨͱ͞ 分布の混ぜ合わせ1 階層線形モデルの場合

Slide 20

Slide 20 text

d yi Կ͔ͷϝΧχζϜʹ֬཰෼෍ ͔Βग़͖ͯͯΔ

Slide 21

Slide 21 text

d yi ୯ๆͰࠨӈରশͳΒ ͻͱ·ͣਖ਼ن෼෍͔ͳʁ

Slide 22

Slide 22 text

d yi μ ୯ๆͰࠨӈରশͳΒ ͻͱ·ͣਖ਼ن෼෍͔ͳʁ ਖ਼ن෼෍ʹ͸ ύϥϝλೋͭ̇ ʢҐஔͱ෯ʣ σ

Slide 23

Slide 23 text

d yi μ Θ͔Βͳ͍΋ͷ͸ ֬཰෼෍ʹ͕ͨ͠͏ͷ͕ ϕΠδΞϯͷᎄ σ d ࣄલ෼෍ͷύϥϝλ΋ ϑΟοΫε͞Ε͍ͯΔͷͰ ͜Ε͸͜͜ͰऴΘΓ

Slide 24

Slide 24 text

d yi μi ʹ β0 + β1i Xi ܏͖͕ ݸਓJͰมΘΔ Ϟσϧ ฏۉʹ͸ߏ଄ʢϞσϧʣ͕ ೖΔʢ֬཰తͰͳ͍ʣ σ d

Slide 25

Slide 25 text

d yi μi ʹ β0 + β1i Xi ܏͖͕ ݸਓJͰมΘΔ Ϟσϧ d 0 100 Θ͔Βͳ͍΋ͷ͸ ֬཰෼෍ʹ͕ͨ͠͏ͷ͕ ϕΠδΞϯͷᎄ ࣄલ෼෍ͷύϥϝλΛ ϑΟοΫε͢Δͱ ͜Ε͸͜͜ͰऴΘΓ σ d

Slide 26

Slide 26 text

d yi μi ʹ β0 + β1i Xi ܏͖͕ ݸਓJͰมΘΔ Ϟσϧ d 0 100 τ β1M d ܏͖ͷฏۉ ʢݸਓࠩͷฏۉʣ ܏͖ͷ෼ࢄ ʢݸਓࠩͷ෼ࢄʣ σ d

Slide 27

Slide 27 text

d yi μi σ ʹ β0 + β1i Xi ܏͖͕ ݸਓJͰมΘΔ Ϟσϧ d 0 100 τ β1M d d 0 100 d ࣄલ෼෍ͷύϥϝλ΋ ϑΟοΫε͞Ε͍ͯΔͷͰ ͜͜ͰऴΘΓ ࣄલ෼෍ͷύϥϝλ΋ ϑΟοΫε͞Ε͍ͯΔͷͰ ͜͜ͰऴΘΓ d

Slide 28

Slide 28 text

d yi μi ʹ β0 + β1i Xi d 0 100 τ β1M d d 0 100 d 完成 • わからないものは確率で • 確率分布のパラメータが 固定できるまで上に 30 σ d

Slide 29

Slide 29 text

31 ࣄલ෼෍Ͱͳ͍ ֬཰Ϟσϧͷͱ͜Ζ ʹ໬౓ 設計図からコードに起こす

Slide 30

Slide 30 text

32 ύϥϝλ͕ݻఆ͞Εͨ ֬཰ʹࣄલ෼෍ 設計図からコードに起こす

Slide 31

Slide 31 text

33 ߏ଄͕ೖͬͨͱ͜Ζ͸ USBOTGPSNFEQBSBNFUFSTϒϩοΫͰ هड़͢ΔͱεοΩϦ͢Δ

Slide 32

Slide 32 text

34 Ϟσϧʹؚ·ΕΔະ஌਺ʢΪϦγΞจࣈʣ ͕ਪఆ͢΂͖ύϥϝʔλ

Slide 33

Slide 33 text

35 σʔλ͸3ͱͷ૭ޱ

Slide 34

Slide 34 text

36 完成 ׳Εͯ͘Δͱ্͔Βॻ͘͜ͱ΋ Ͱ͖ΔΑ͏ʹͳΓ·͢ʂ

Slide 35

Slide 35 text

階層モデルもこわくない • 色々なところに分布を混ぜる階層モデルも,設計図があれば迷子になり ません • 逆にいうと,初心者は設計図がイメージできていないのに書こうとし て,変数間関係がわからなくなっちゃってる • 階層線形モデルのテキストを読むと,記号で色々説明してくれています が,図にしてみると整理しやすい • レベル1,レベル2とか といった文字・記号も図にしてみると簡単 • 図の描き方にはプレート表現もありますが,Kurshcke styleのほうが わかりやすい(と個人的には思っています) γ00 , τ10 37

Slide 36

Slide 36 text

コード上でのテクニック • transformed parametersを駆使するようになると,よ く言われるのがこれ 38 • transformed parametersで作られた変数に対してサ ンプリング記法で表現するのが良くない。 αϯϓϦϯάه๏ λʔήοτه๏ • 事後予測チェック,WAIC/LOOの計算などにも必要な書き 方なのでtarget+=で書く癖をつけよう

Slide 37

Slide 37 text

• ゼロ過剰ポアソンとか,混合正規モデルなどデータ生成メカニ ズムの背景に質的(離散的・カテゴリ的)違いがあるモデルの 場合は,基本的にtarget+=記法になる • 質的に違うものを混ぜ合わせるというのは,言い換えると条 件分岐(if文)のようなもの。 • もしカテゴリ1なら→分布Aに従う • もしカテゴリ2なら→分布Bに従う 39 分布の混ぜ合わせ2 潜在クラスモデルの場合 θ ͜ͷJGͷ෼ذΛΧςΰϦΧϧ෼෍ͷύϥϝλʹΑͬͯදݱ͢Δ

Slide 38

Slide 38 text

40 分布の混ぜ合わせ2 潜在クラスモデルの場合 d yi μA σ μB σ θ 1 − θ θ

Slide 39

Slide 39 text

41 d yi μA σ μB σ θ 1 − θ θ θ × Normal(μA , σ) (1 − θ) × Normal(μB , σ) ࠨϧʔτ ӈϧʔτ

Slide 40

Slide 40 text

42 θ × Normal(μA , σ) (1 − θ) × Normal(μB , σ) • Stanの中では対数尤度,logをとった形で計算する log(θ) + log(Normal(μA , σ)) log(1 − θ) + log(Normal(μB , σ)) • normal_lpdfの形に書き換える log(theta)+normal_lpdf(y[i] | mu1 , sigma) log(1-theta)+normal_lpdf(y[I] | mu2 , sigma) • この二つの状態(左・右ルート)を足し合わせたものが結果の確率になる • →対数をとった表現にしているので,exp関数で元の確率に戻して から足し合わせる • →Stanの中では対数尤度で計算するので,logをとった形にする MPH TVN FYQ

Slide 41

Slide 41 text

43 log(theta)+normal_lpdf(y[i] | mu1 , sigma) log(1-theta)+normal_lpdf(y[I] | mu2 , sigma) • この二つの状態(左・右ルート)を足し合わせたものが結果の確率になる • →対数をとった表現にしているので,exp関数で元の確率に戻して から足し合わせる • →Stanの中では対数尤度で計算するので,logをとった形にする MPH TVN FYQ log_sum_exp • log_sum_exp関数の()の中身は足し合わせるべきベクトル , target += log_sum_exp ৚݅ ৚݅ ৚݅/ ʜ

Slide 42

Slide 42 text

44 この表現力を手にいれると, あなたはもう中級者

Slide 43

Slide 43 text

Stanの階段のぼる〜 • 離散分布は条件分岐と考えると「Aのときで,さらにBならこっち のルートで・・・」と離散分布を重ねていくことで色々な表現ができ るようになる→アヒル本11.4のLDA/CateCate分布 • transformの中で条件分岐ベクトルだけ書いて,modelブロック ではtarget+=だけになる,といった書き方も • さらに面倒な分岐をfunctionブロックを使って書き始めると 上級者への道が・・・ • 混ぜ合わせ+MCMCによるラベルスイッチング問題などに直面す ると,stanのさまざまな型(ordered vectorなど)にも目が向 いてきます 45

Slide 44

Slide 44 text

もう一つの中級者 • Rstanの初心者を脱出する際に必要なルートは「インストール の壁」 • バージョンが上がる,OSが変わる,チップが変わると結構あ ちこちで悲鳴が上がる。なかなか安定した環境を保持し続け るのは難しい • これはもう経験あるのみで,色々なケースでのノウハウを積 み重ね,ググり続けるしかないです。 • 脱出(というか迂回)方法として,Dockerやcmdstanrに 乗り換えるというのもあり。 47

Slide 45

Slide 45 text

48 Stan Advent  Calendar2019で検索

Slide 46

Slide 46 text

49

Slide 47

Slide 47 text

50 Stan Advent  Calendar2020で検索

Slide 48

Slide 48 text

Enjoy!