Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
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
930
CRANへの道
kosugitti
0
210
sappoRo.R #12 初心者セッション
kosugitti
0
430
多次元展開法を用いた 多値バイクラスタリング モデルの提案
kosugitti
0
540
小杉考司(専修大学)
kosugitti
2
870
電子計算機のイロハ
kosugitti
1
1.7k
Shinyで親父の威厳を回復した話
kosugitti
0
740
ベイズ統計学勉強会 2022年春合宿資料「はじめてのTeX」
kosugitti
2
9k
Tokyo.R #90 RStudioで日本語論文を書く(2)
kosugitti
1
1.4k
Other Decks in Technology
See All in Technology
ペアプロの価値はコードを書くことだけじゃない
codmoninc
PRO
0
190
DEFCON34-Write-up_HYCu-MYCu
daikiokazaki
0
150
Oracle Cloud Infrastructure IaaS 新機能アップデート 2026/6 - 2026/8
oracle4engineer
PRO
0
160
AIで実装は速くなった。なのにプロダクトは速くならない。職能の壁を越えて価値のフローを設計する
nwiizo
8
7.9k
AIネイティブプロダクトで顧客価値を最大化するプロダクトエンジニアとFDEの協働
righttouch
PRO
0
230
作品が生態系になった ─ Mini Tokyo 3D から世界へ
nagix
0
160
Deploying a Full-Stack Bun-Native Framework on Cloudflare Workers
7nohe
0
140
ASTを使って影響範囲を特定する
nealle
0
170
クロスボーダーM&AのValue Upを支えるプロダクト開発。日米チームのハブになったプロダクトエンジニアの実践 / Product Engineering Conference 2026
genda
0
120
アプリをもっと"iOSアプリっぽく"する小さな工夫 / Small Touches That Make Your App Feel More Like an iOS App
matsuji
1
600
Adaptive Warehouse を今すぐ導入すべき理由と迷ったときの判断基準
__allllllllez__
0
190
TinyGo 開発サイクルを高速化する:Go で作るエミュレータ入門
zozotech
PRO
1
630
Featured
See All Featured
It's Worth the Effort
3n
188
29k
How to train your dragon (web standard)
notwaldorf
97
6.8k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.8k
Scaling GitHub
holman
464
140k
Building Applications with DynamoDB
mza
96
7.2k
Leading Effective Engineering Teams in the AI Era
addyosmani
9
2.6k
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
380
A designer walks into a library…
pauljervisheath
211
25k
What’s in a name? Adding method to the madness
productmarketing
PRO
24
4.2k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8.3k
Heart Work Chapter 1 - Part 1
lfama
PRO
9
36k
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
2
420
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!