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
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
960
CRANへの道
kosugitti
0
220
sappoRo.R #12 初心者セッション
kosugitti
0
430
多次元展開法を用いた 多値バイクラスタリング モデルの提案
kosugitti
0
560
小杉考司(専修大学)
kosugitti
2
890
電子計算機のイロハ
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
Meet AgentCore Identity Consent Portal
hironobuiga
2
140
認知負荷を吸収し、プロダクトをまたぐPR Preview基盤の設計事例
taiki45
2
560
3人で1000GPU超を統合運用する?マルチクラウド&オンプレを跨ぐ、構築と運用のリアル!
kazukun0716
2
800
HolmesGPTで始めるSREエージェント入門!プラットフォームの障害調査はAIにお任せ 〜
sanghyuk
0
250
Execution in the Kingdom of Agents: Reflections on Abstraction and Complexity
bcantrill
0
610
Confitura 2026
logico_jp
0
120
Argo CDとAtlantisで実現するインフラ管理のセルフサービス化──小規模SREチームで支えるプラットフォーム
cassius7
0
260
Oracle Cloud Infrastructure(OCI):Onboarding Session(はじめてのOCI/Oracle Supportご利⽤ガイド)
oracle4engineer
PRO
3
21k
個別開発で終わらせない。 現場の課題をプロダクトの強さに変える StockmarkのFDE
ktkrhr
0
510
AI感のないAWS構成図をAIエージェントに描かせたい!
sagochiko
2
480
Account Factory for Terraformによる 標準化されたアカウント発行の自動化
pensuke628
0
120
営業オントロジーの作り方と、エージェントからの辿り方 ── ナレッジワークの現場から
kworkdev
PRO
1
220
Featured
See All Featured
A Modern Web Designer's Workflow
chriscoyier
699
190k
Git: the NoSQL Database
bkeepers
PRO
432
67k
AI: The stuff that nobody shows you
jnunemaker
PRO
10
1.1k
Navigating Weather and Climate Data
rabernat
0
540
The World Runs on Bad Software
bkeepers
PRO
72
12k
Automating Front-end Workflow
addyosmani
1369
210k
What the history of the web can teach us about the future of AI
inesmontani
PRO
1
720
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
1.1k
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
490
Fashionably flexible responsive web design (full day workshop)
malarkey
409
67k
職位にかかわらず全員がリーダーシップを発揮するチーム作り / Building a team where everyone can demonstrate leadership regardless of position
madoxten
69
66k
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
450
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!