Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Tokyo.R #94 脱rstan初心者
Search
Koji E. Kosugi
September 11, 2021
Technology
1.1k
3
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Tokyo.R #94 脱rstan初心者
第94回Tokyo.Rでの発表資料です。
Koji E. Kosugi
September 11, 2021
More Decks by Koji E. Kosugi
See All by Koji E. Kosugi
統計学に必要な数学(線形代数含む)
kosugitti
0
860
CRANへの道
kosugitti
0
200
sappoRo.R #12 初心者セッション
kosugitti
0
410
多次元展開法を用いた 多値バイクラスタリング モデルの提案
kosugitti
0
500
小杉考司(専修大学)
kosugitti
2
830
電子計算機のイロハ
kosugitti
1
1.7k
Shinyで親父の威厳を回復した話
kosugitti
0
720
ベイズ統計学勉強会 2022年春合宿資料「はじめてのTeX」
kosugitti
2
8.9k
Tokyo.R #90 RStudioで日本語論文を書く(2)
kosugitti
1
1.4k
Other Decks in Technology
See All in Technology
初めてのDatabricks勉強会
taka_aki
2
150
FPC(フレキシブル)基板にZephyr実装してみた。
iotengineer22
0
170
5分でわかるDuckDB Quack
chanyou0311
4
260
気軽に使える"情報のハブ"としてのNotion活用 〜フロー情報の集積点 と、 Claude Code × Notion AI〜
syucream
1
200
AIに障害切り分けを全部やってもらった。 。 。 。
estie
0
180
「軸足」は 固定しなくていい - 熱量と強みで描く、しなやかなキャリアの形
kakehashi
PRO
1
270
脱SaaS!FDEを支えるプロビジョニングと分離設計
knih
0
300
製造現場での生成AIの活用、およびエージェントAIの実装のあり方、AVEVAの取り組み
iotcomjpadmin
0
150
Multi-Agent並列開発を 安全に回すための技術 / Technology for Safely Multi-Agent Parallel Development
tooppoo
0
200
AIチャット検索改善の3週間
kworkdev
PRO
2
190
クレデンシャル流出 ― 攻撃 3 時間 vs 復旧 10 時間。この非対称性にどう備えるか
kazzpapa3
3
580
水を運ぶ人としてのリーダーシップ
izumii19
4
1k
Featured
See All Featured
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.8k
Writing Fast Ruby
sferik
630
63k
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
490
VelocityConf: Rendering Performance Case Studies
addyosmani
333
25k
Side Projects
sachag
455
43k
Exploring anti-patterns in Rails
aemeredith
3
430
Navigating Team Friction
lara
192
16k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
2.9k
WENDY [Excerpt]
tessaabrams
11
38k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
New Earth Scene 8
popppiees
3
2.4k
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
200
Transcript
めざせ! 脱rstan初心者 @kosugitti 1
自己紹介 • 名前;小杉考司(こすぎこうじ) • 略歴;1976.01.17 大阪市生まれ • 趣味;心理統計,統計モデリング • 仕事;専修大学で心理統計教えてます
2
初心者を脱出する 4 ాઌੜˏ౦େֶͷΞΠσΞΛͱʹΠϥετԽ ॳ৺ऀ͔ CSNT͕ ͬͯ͘ΕΔʂ தڃऀʁ ্ڃऀ ਆ
初心者だって大変だ • データを眺める=可視化するだけでもやることはたくさん • 分布に当てはめていくのも,分布とリンク関数の知識が必要 なので,やるべきこといっぱーい • 幸いbrmsなど専用パッケージがあれば,細かくコードを 書く必要はないし,収束しない問題に出会うことも少ない •
まずは色々あそんでみよう 5
じゃあ中級者は? • Stanのコードを自分で描き始めたら(brmsなど既存パッ ケージに頼らなければ),あなたはもう中級者! • 分布をあれこれ混ぜ合わせたくなってきたら,あなたはもう 中級者! • 分布の混ぜ合わせ方→階層モデル,潜在クラスモデル •
決まったモデルから入っていくというよりも,自分の分析し たい現象に素直に向き合って,モデルを作り上げていく 6
ٱอઌੜͷΠϥετ দӜઌੜͷΠϥετ ؠσʔλαΠΤϯεWPMΑΓ 世界の成り立ちを想像しよう
ٱอ σʔλղੳͷͨΊ ͷ౷ܭϞσϦϯάೖΑΓ
紙とペン • フルスクラッチでstanコードを書くときは,まず紙とペンを 用意します! • タブレットとタッチペンでもいいけど,とりあえずいきなり エディタを立ち上げるわけではありません • 描き方に好みがあるかもしれませんが,おすすめは縦長に セットしてデータを最下部に置きます
10
yi σʔλ͕͋ͬͨͱ͞
d Կ͔ͷϝΧχζϜʹ֬ ͔Βग़͖ͯͯΔ yi
d ୯ๆͰࠨӈରশͳΒ ͻͱ·ͣਖ਼ن͔ͳʁ yi
d ୯ๆͰࠨӈରশͳΒ ͻͱ·ͣਖ਼ن͔ͳʁ ਖ਼نʹ ύϥϝλೋͭ̇ ʢҐஔͱ෯ʣ yi μ σi ࢄ
ਫ਼ ͕ݸਓ͝ͱʹ มΘΔͱ͍͏Ϟσϧ
d d d Θ͔Βͳ͍ͷ ֬ʹ͕ͨ͠͏ͷ͕ ϕΠδΞϯͷᎄ Θ͔Βͳ͍ͷ ֬ʹ͕ͨ͠͏ͷ͕ ϕΠδΞϯͷᎄ μ
σi yi
d d d ͓͖·͠ΐ͏ࣄલ ͓͖·͠ΐ͏ࣄલ μ σi yi
完成 17 d d d μ σi yi
完成 • 下から上に書いていく • パラメータは記号か数字 • わからないものにはそれを生む 確率分布をおく • 数字で
fi xされたら図の完成 18 ͨ͘͝Γલͷ͜ͱͷΑ͏ʹࢥ͑·͕͢ɼ ͪΌΜͱઃܭਤΛॻ͍͓͔ͯͳ͍ͱ ίʔυΛॻ͘ͱ͖ʹ໎ࢠʹͳΓ·͢
ίʔυʹ͠·͢ σʔλͷग़Ͳ͜Ζʹ σʔλͷग़Ͳ͜Ζʹ Θ͔Βͳ͍ͷΛ ද֬͢ʹ ࣄલ
ίʔυʹ͠·͢ ٻΊ͍ͨͷɼϞσϧϒϩοΫͰ ه߸Ͱද͍ͯͨ͠ͷΛ ύϥϝʔλϒϩοΫʹॻ͘ ֎͔Β༩͑ΒΕΔͷ σʔλϒϩοΫʹॻ͘
yi σʔλ͕͋ͬͨͱ͞ 分布の混ぜ合わせ1 階層線形モデルの場合
d yi Կ͔ͷϝΧχζϜʹ֬ ͔Βग़͖ͯͯΔ
d yi ୯ๆͰࠨӈରশͳΒ ͻͱ·ͣਖ਼ن͔ͳʁ
d yi μ ୯ๆͰࠨӈରশͳΒ ͻͱ·ͣਖ਼ن͔ͳʁ ਖ਼نʹ ύϥϝλೋͭ̇ ʢҐஔͱ෯ʣ σ
d yi μ Θ͔Βͳ͍ͷ ֬ʹ͕ͨ͠͏ͷ͕ ϕΠδΞϯͷᎄ σ d ࣄલͷύϥϝλ ϑΟοΫε͞Ε͍ͯΔͷͰ
͜Ε͜͜ͰऴΘΓ
d yi μi ʹ β0 + β1i Xi ͖͕ ݸਓJͰมΘΔ
Ϟσϧ ฏۉʹߏʢϞσϧʣ͕ ೖΔʢ֬తͰͳ͍ʣ σ d
d yi μi ʹ β0 + β1i Xi ͖͕ ݸਓJͰมΘΔ
Ϟσϧ d 0 100 Θ͔Βͳ͍ͷ ֬ʹ͕ͨ͠͏ͷ͕ ϕΠδΞϯͷᎄ ࣄલͷύϥϝλΛ ϑΟοΫε͢Δͱ ͜Ε͜͜ͰऴΘΓ σ d
d yi μi ʹ β0 + β1i Xi ͖͕ ݸਓJͰมΘΔ
Ϟσϧ d 0 100 τ β1M d ͖ͷฏۉ ʢݸਓࠩͷฏۉʣ ͖ͷࢄ ʢݸਓࠩͷࢄʣ σ d
d yi μi σ ʹ β0 + β1i Xi ͖͕
ݸਓJͰมΘΔ Ϟσϧ d 0 100 τ β1M d d 0 100 d ࣄલͷύϥϝλ ϑΟοΫε͞Ε͍ͯΔͷͰ ͜͜ͰऴΘΓ ࣄલͷύϥϝλ ϑΟοΫε͞Ε͍ͯΔͷͰ ͜͜ͰऴΘΓ d
d yi μi ʹ β0 + β1i Xi d 0
100 τ β1M d d 0 100 d 完成 • わからないものは確率で • 確率分布のパラメータが 固定できるまで上に 30 σ d
31 ࣄલͰͳ͍ ֬Ϟσϧͷͱ͜Ζ ʹ 設計図からコードに起こす
32 ύϥϝλ͕ݻఆ͞Εͨ ֬ʹࣄલ 設計図からコードに起こす
33 ߏ͕ೖͬͨͱ͜Ζ USBOTGPSNFEQBSBNFUFSTϒϩοΫͰ هड़͢ΔͱεοΩϦ͢Δ
34 Ϟσϧʹؚ·ΕΔະʢΪϦγΞจࣈʣ ͕ਪఆ͖͢ύϥϝʔλ
35 σʔλ3ͱͷ૭ޱ
36 完成 ׳Εͯ͘Δͱ্͔Βॻ͘͜ͱ Ͱ͖ΔΑ͏ʹͳΓ·͢ʂ
階層モデルもこわくない • 色々なところに分布を混ぜる階層モデルも,設計図があれば迷子になり ません • 逆にいうと,初心者は設計図がイメージできていないのに書こうとし て,変数間関係がわからなくなっちゃってる • 階層線形モデルのテキストを読むと,記号で色々説明してくれています が,図にしてみると整理しやすい
• レベル1,レベル2とか といった文字・記号も図にしてみると簡単 • 図の描き方にはプレート表現もありますが,Kurshcke styleのほうが わかりやすい(と個人的には思っています) γ00 , τ10 37
コード上でのテクニック • transformed parametersを駆使するようになると,よ く言われるのがこれ 38 • transformed parametersで作られた変数に対してサ ンプリング記法で表現するのが良くない。
αϯϓϦϯάه๏ λʔήοτه๏ • 事後予測チェック,WAIC/LOOの計算などにも必要な書き 方なのでtarget+=で書く癖をつけよう
• ゼロ過剰ポアソンとか,混合正規モデルなどデータ生成メカニ ズムの背景に質的(離散的・カテゴリ的)違いがあるモデルの 場合は,基本的にtarget+=記法になる • 質的に違うものを混ぜ合わせるというのは,言い換えると条 件分岐(if文)のようなもの。 • もしカテゴリ1なら→分布Aに従う •
もしカテゴリ2なら→分布Bに従う 39 分布の混ぜ合わせ2 潜在クラスモデルの場合 θ ͜ͷJGͷذΛΧςΰϦΧϧͷύϥϝλʹΑͬͯදݱ͢Δ
40 分布の混ぜ合わせ2 潜在クラスモデルの場合 d yi μA σ μB σ θ
1 − θ θ
41 d yi μA σ μB σ θ 1 −
θ θ θ × Normal(μA , σ) (1 − θ) × Normal(μB , σ) ࠨϧʔτ ӈϧʔτ
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
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 ݅ ݅ ݅/ ʜ
44 この表現力を手にいれると, あなたはもう中級者
Stanの階段のぼる〜 • 離散分布は条件分岐と考えると「Aのときで,さらにBならこっち のルートで・・・」と離散分布を重ねていくことで色々な表現ができ るようになる→アヒル本11.4のLDA/CateCate分布 • transformの中で条件分岐ベクトルだけ書いて,modelブロック ではtarget+=だけになる,といった書き方も • さらに面倒な分岐をfunctionブロックを使って書き始めると
上級者への道が・・・ • 混ぜ合わせ+MCMCによるラベルスイッチング問題などに直面す ると,stanのさまざまな型(ordered vectorなど)にも目が向 いてきます 45
もう一つの中級者 • Rstanの初心者を脱出する際に必要なルートは「インストール の壁」 • バージョンが上がる,OSが変わる,チップが変わると結構あ ちこちで悲鳴が上がる。なかなか安定した環境を保持し続け るのは難しい • これはもう経験あるのみで,色々なケースでのノウハウを積
み重ね,ググり続けるしかないです。 • 脱出(というか迂回)方法として,Dockerやcmdstanrに 乗り換えるというのもあり。 47
48 Stan Advent Calendar2019で検索
49
50 Stan Advent Calendar2020で検索
Enjoy!