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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
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
890
CRANへの道
kosugitti
0
200
sappoRo.R #12 初心者セッション
kosugitti
0
420
多次元展開法を用いた 多値バイクラスタリング モデルの提案
kosugitti
0
510
小杉考司(専修大学)
kosugitti
2
840
電子計算機のイロハ
kosugitti
1
1.7k
Shinyで親父の威厳を回復した話
kosugitti
0
730
ベイズ統計学勉強会 2022年春合宿資料「はじめてのTeX」
kosugitti
2
8.9k
Tokyo.R #90 RStudioで日本語論文を書く(2)
kosugitti
1
1.4k
Other Decks in Technology
See All in Technology
AI時代の開発生産性を捉え直す — 経営と現場をつなぐ「開発組織のオブザーバビリティ」— / AI Dev Ex Conference 2026
tkyowa
0
490
ゴールデンパスは敷いただけでは道にならない ─ 企画部門のエンジニアが技術標準を事業価値に変えるまで
mhrtech
1
240
41歳でAWSが好きすぎてITエンジニアになったおっさんの話
yama3133
0
480
「顧客の声を聞かなければ何も始まらない」 ── 顧客の声から生まれた『AI返信補助機能』の開発プロセス / AICon2026_shikata_imai
rakus_dev
0
210
「最後に責任を取るのはチーム」— 人間のPRレビューを最小化してアップデートしたメンタルモデル
jnishime_dresscode
0
960
SoccerMaster: A Vision Foundation Model for Soccer Understanding
kzykmyzw
0
150
DMM.com 購入改善推進チーム におけるCodeRabbitを用いた レビューフロー改善の一例
ysknsid25
2
670
[2026-07-15] AI Ready なはずだったアーキテクチャと、見えてきた課題・次に目指す状態
wxyzzz
11
4.1k
ソニー銀行におけるビジネスアジリティ向上のためのクラウドシフト戦略
srenext
0
930
人とエージェントが高め合う協業設計
kintotechdev
0
240
AI x 開発生産性を取り巻く予算戦略と投資対効果
i35_267
2
1.3k
AI時代の開発生産性は、個人技からチーム設計へ
moongift
PRO
4
2.4k
Featured
See All Featured
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
460
Unsuck your backbone
ammeep
672
58k
VelocityConf: Rendering Performance Case Studies
addyosmani
333
25k
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
360
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
Designing for Performance
lara
611
70k
Applied NLP in the Age of Generative AI
inesmontani
PRO
4
2.4k
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
200
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
123
22k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
10
1.3k
What's in a price? How to price your products and services
michaelherold
247
13k
Abbi's Birthday
coloredviolet
3
8.7k
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!