Submit Search
Upload
StanとRでベイズ統計モデリング 11章 離散値をとるパラメータ
•
1 like
•
1,307 views
M
Miki Katsuragi
Follow
StanとRでベイズ統計モデリング 11章 離散値をとるパラメータ
Read less
Read more
Data & Analytics
Report
Share
Report
Share
1 of 40
Download now
Download to read offline
Recommended
Stan超初心者入門
Stan超初心者入門
Hiroshi Shimizu
Stanコードの書き方 中級編
Stanコードの書き方 中級編
Hiroshi Shimizu
MCMCでマルチレベルモデル
MCMCでマルチレベルモデル
Hiroshi Shimizu
Cmdstanr入門とreduce_sum()解説
Cmdstanr入門とreduce_sum()解説
Hiroshi Shimizu
StanとRでベイズ統計モデリング読書会 導入編(1章~3章)
StanとRでベイズ統計モデリング読書会 導入編(1章~3章)
Hiroshi Shimizu
マルコフ連鎖モンテカルロ法 (2/3はベイズ推定の話)
マルコフ連鎖モンテカルロ法 (2/3はベイズ推定の話)
Yoshitake Takebayashi
これからの仮説検証・モデル評価
これからの仮説検証・モデル評価
daiki hojo
StanとRでベイズ統計モデリングに関する読書会(Osaka.stan) 第四章
StanとRでベイズ統計モデリングに関する読書会(Osaka.stan) 第四章
nocchi_airport
Recommended
Stan超初心者入門
Stan超初心者入門
Hiroshi Shimizu
Stanコードの書き方 中級編
Stanコードの書き方 中級編
Hiroshi Shimizu
MCMCでマルチレベルモデル
MCMCでマルチレベルモデル
Hiroshi Shimizu
Cmdstanr入門とreduce_sum()解説
Cmdstanr入門とreduce_sum()解説
Hiroshi Shimizu
StanとRでベイズ統計モデリング読書会 導入編(1章~3章)
StanとRでベイズ統計モデリング読書会 導入編(1章~3章)
Hiroshi Shimizu
マルコフ連鎖モンテカルロ法 (2/3はベイズ推定の話)
マルコフ連鎖モンテカルロ法 (2/3はベイズ推定の話)
Yoshitake Takebayashi
これからの仮説検証・モデル評価
これからの仮説検証・モデル評価
daiki hojo
StanとRでベイズ統計モデリングに関する読書会(Osaka.stan) 第四章
StanとRでベイズ統計モデリングに関する読書会(Osaka.stan) 第四章
nocchi_airport
StanとRでベイズ統計モデリング読書会(Osaka.stan) 第6章
StanとRでベイズ統計モデリング読書会(Osaka.stan) 第6章
Shushi Namba
【読書会資料】『StanとRでベイズ統計モデリング』Chapter12:時間や空間を扱うモデル
【読書会資料】『StanとRでベイズ統計モデリング』Chapter12:時間や空間を扱うモデル
Masashi Komori
階層ベイズと自由エネルギー
階層ベイズと自由エネルギー
Hiroshi Shimizu
階層ベイズとWAIC
階層ベイズとWAIC
Hiroshi Shimizu
Stan勉強会資料(前編)
Stan勉強会資料(前編)
daiki hojo
心理学におけるベイズ統計の流行を整理する
心理学におけるベイズ統計の流行を整理する
Hiroshi Shimizu
NagoyaStat#7 StanとRでベイズ統計モデリング(アヒル本)4章の発表資料
NagoyaStat#7 StanとRでベイズ統計モデリング(アヒル本)4章の発表資料
nishioka1
Chapter9 一歩進んだ文法(前半)
Chapter9 一歩進んだ文法(前半)
itoyan110
RStanとShinyStanによるベイズ統計モデリング入門
RStanとShinyStanによるベイズ統計モデリング入門
Masaki Tsuda
PRML輪読#5
PRML輪読#5
matsuolab
階層ベイズによるワンToワンマーケティング入門
階層ベイズによるワンToワンマーケティング入門
shima o
Stanの便利な事後処理関数
Stanの便利な事後処理関数
daiki hojo
21世紀の手法対決 (MIC vs HSIC)
21世紀の手法対決 (MIC vs HSIC)
Toru Imai
15分でわかる(範囲の)ベイズ統計学
15分でわかる(範囲の)ベイズ統計学
Ken'ichi Matsui
星野「調査観察データの統計科学」第3章
星野「調査観察データの統計科学」第3章
Shuyo Nakatani
関数データ解析の概要とその方法
関数データ解析の概要とその方法
Hidetoshi Matsui
GEE(一般化推定方程式)の理論
GEE(一般化推定方程式)の理論
Koichiro Gibo
ブートストラップ法とその周辺とR
ブートストラップ法とその周辺とR
Daisuke Yoneoka
階層モデルの分散パラメータの事前分布について
階層モデルの分散パラメータの事前分布について
hoxo_m
ノンパラベイズ入門の入門
ノンパラベイズ入門の入門
Shuyo Nakatani
自動微分変分ベイズ法の紹介
自動微分変分ベイズ法の紹介
Taku Yoshioka
2013.12.26 prml勉強会 線形回帰モデル3.2~3.4
2013.12.26 prml勉強会 線形回帰モデル3.2~3.4
Takeshi Sakaki
More Related Content
What's hot
StanとRでベイズ統計モデリング読書会(Osaka.stan) 第6章
StanとRでベイズ統計モデリング読書会(Osaka.stan) 第6章
Shushi Namba
【読書会資料】『StanとRでベイズ統計モデリング』Chapter12:時間や空間を扱うモデル
【読書会資料】『StanとRでベイズ統計モデリング』Chapter12:時間や空間を扱うモデル
Masashi Komori
階層ベイズと自由エネルギー
階層ベイズと自由エネルギー
Hiroshi Shimizu
階層ベイズとWAIC
階層ベイズとWAIC
Hiroshi Shimizu
Stan勉強会資料(前編)
Stan勉強会資料(前編)
daiki hojo
心理学におけるベイズ統計の流行を整理する
心理学におけるベイズ統計の流行を整理する
Hiroshi Shimizu
NagoyaStat#7 StanとRでベイズ統計モデリング(アヒル本)4章の発表資料
NagoyaStat#7 StanとRでベイズ統計モデリング(アヒル本)4章の発表資料
nishioka1
Chapter9 一歩進んだ文法(前半)
Chapter9 一歩進んだ文法(前半)
itoyan110
RStanとShinyStanによるベイズ統計モデリング入門
RStanとShinyStanによるベイズ統計モデリング入門
Masaki Tsuda
PRML輪読#5
PRML輪読#5
matsuolab
階層ベイズによるワンToワンマーケティング入門
階層ベイズによるワンToワンマーケティング入門
shima o
Stanの便利な事後処理関数
Stanの便利な事後処理関数
daiki hojo
21世紀の手法対決 (MIC vs HSIC)
21世紀の手法対決 (MIC vs HSIC)
Toru Imai
15分でわかる(範囲の)ベイズ統計学
15分でわかる(範囲の)ベイズ統計学
Ken'ichi Matsui
星野「調査観察データの統計科学」第3章
星野「調査観察データの統計科学」第3章
Shuyo Nakatani
関数データ解析の概要とその方法
関数データ解析の概要とその方法
Hidetoshi Matsui
GEE(一般化推定方程式)の理論
GEE(一般化推定方程式)の理論
Koichiro Gibo
ブートストラップ法とその周辺とR
ブートストラップ法とその周辺とR
Daisuke Yoneoka
階層モデルの分散パラメータの事前分布について
階層モデルの分散パラメータの事前分布について
hoxo_m
ノンパラベイズ入門の入門
ノンパラベイズ入門の入門
Shuyo Nakatani
What's hot
(20)
StanとRでベイズ統計モデリング読書会(Osaka.stan) 第6章
StanとRでベイズ統計モデリング読書会(Osaka.stan) 第6章
【読書会資料】『StanとRでベイズ統計モデリング』Chapter12:時間や空間を扱うモデル
【読書会資料】『StanとRでベイズ統計モデリング』Chapter12:時間や空間を扱うモデル
階層ベイズと自由エネルギー
階層ベイズと自由エネルギー
階層ベイズとWAIC
階層ベイズとWAIC
Stan勉強会資料(前編)
Stan勉強会資料(前編)
心理学におけるベイズ統計の流行を整理する
心理学におけるベイズ統計の流行を整理する
NagoyaStat#7 StanとRでベイズ統計モデリング(アヒル本)4章の発表資料
NagoyaStat#7 StanとRでベイズ統計モデリング(アヒル本)4章の発表資料
Chapter9 一歩進んだ文法(前半)
Chapter9 一歩進んだ文法(前半)
RStanとShinyStanによるベイズ統計モデリング入門
RStanとShinyStanによるベイズ統計モデリング入門
PRML輪読#5
PRML輪読#5
階層ベイズによるワンToワンマーケティング入門
階層ベイズによるワンToワンマーケティング入門
Stanの便利な事後処理関数
Stanの便利な事後処理関数
21世紀の手法対決 (MIC vs HSIC)
21世紀の手法対決 (MIC vs HSIC)
15分でわかる(範囲の)ベイズ統計学
15分でわかる(範囲の)ベイズ統計学
星野「調査観察データの統計科学」第3章
星野「調査観察データの統計科学」第3章
関数データ解析の概要とその方法
関数データ解析の概要とその方法
GEE(一般化推定方程式)の理論
GEE(一般化推定方程式)の理論
ブートストラップ法とその周辺とR
ブートストラップ法とその周辺とR
階層モデルの分散パラメータの事前分布について
階層モデルの分散パラメータの事前分布について
ノンパラベイズ入門の入門
ノンパラベイズ入門の入門
Similar to StanとRでベイズ統計モデリング 11章 離散値をとるパラメータ
自動微分変分ベイズ法の紹介
自動微分変分ベイズ法の紹介
Taku Yoshioka
2013.12.26 prml勉強会 線形回帰モデル3.2~3.4
2013.12.26 prml勉強会 線形回帰モデル3.2~3.4
Takeshi Sakaki
機械学習
機械学習
ssusere8ae711
東京都市大学 データ解析入門 7 回帰分析とモデル選択 2
東京都市大学 データ解析入門 7 回帰分析とモデル選択 2
hirokazutanaka
Rのoptim関数でロバスト回帰(LMSとLAV)
Rのoptim関数でロバスト回帰(LMSとLAV)
wada, kazumi
東京都市大学 データ解析入門 6 回帰分析とモデル選択 1
東京都市大学 データ解析入門 6 回帰分析とモデル選択 1
hirokazutanaka
一般化線形混合モデル isseing333
一般化線形混合モデル isseing333
Issei Kurahashi
PRML セミナー
PRML セミナー
sakaguchi050403
Prml9
Prml9
KENTAROHARA
パターン認識と機械学習6章(カーネル法)
パターン認識と機械学習6章(カーネル法)
Yukara Ikemiya
How to study stat
How to study stat
Ak Ok
Analyze by StatsModels or Numpy
Analyze by StatsModels or Numpy
Toshiki NOGUCHI
K060 中心極限定理clt
K060 中心極限定理clt
t2tarumi
主成分分析
主成分分析
貴之 八木
第9回 大規模データを用いたデータフレーム操作実習(3)
第9回 大規模データを用いたデータフレーム操作実習(3)
Wataru Shito
PRML 第14章
PRML 第14章
Akira Miyazawa
東京都市大学 データ解析入門 4 スパース性と圧縮センシング1
東京都市大学 データ解析入門 4 スパース性と圧縮センシング1
hirokazutanaka
Feature Selection with R / in JP
Feature Selection with R / in JP
Sercan Ahi
PRML4.3
PRML4.3
hiroki yamaoka
パターン認識 04 混合正規分布
パターン認識 04 混合正規分布
sleipnir002
Similar to StanとRでベイズ統計モデリング 11章 離散値をとるパラメータ
(20)
自動微分変分ベイズ法の紹介
自動微分変分ベイズ法の紹介
2013.12.26 prml勉強会 線形回帰モデル3.2~3.4
2013.12.26 prml勉強会 線形回帰モデル3.2~3.4
機械学習
機械学習
東京都市大学 データ解析入門 7 回帰分析とモデル選択 2
東京都市大学 データ解析入門 7 回帰分析とモデル選択 2
Rのoptim関数でロバスト回帰(LMSとLAV)
Rのoptim関数でロバスト回帰(LMSとLAV)
東京都市大学 データ解析入門 6 回帰分析とモデル選択 1
東京都市大学 データ解析入門 6 回帰分析とモデル選択 1
一般化線形混合モデル isseing333
一般化線形混合モデル isseing333
PRML セミナー
PRML セミナー
Prml9
Prml9
パターン認識と機械学習6章(カーネル法)
パターン認識と機械学習6章(カーネル法)
How to study stat
How to study stat
Analyze by StatsModels or Numpy
Analyze by StatsModels or Numpy
K060 中心極限定理clt
K060 中心極限定理clt
主成分分析
主成分分析
第9回 大規模データを用いたデータフレーム操作実習(3)
第9回 大規模データを用いたデータフレーム操作実習(3)
PRML 第14章
PRML 第14章
東京都市大学 データ解析入門 4 スパース性と圧縮センシング1
東京都市大学 データ解析入門 4 スパース性と圧縮センシング1
Feature Selection with R / in JP
Feature Selection with R / in JP
PRML4.3
PRML4.3
パターン認識 04 混合正規分布
パターン認識 04 混合正規分布
More from Miki Katsuragi
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering Tips
Miki Katsuragi
4_9 GCPUG女子会 Vertex Pipelines 101.pdf
4_9 GCPUG女子会 Vertex Pipelines 101.pdf
Miki Katsuragi
時系列分析入門
時系列分析入門
Miki Katsuragi
Gcp ai marketing
Gcp ai marketing
Miki Katsuragi
BigQueryでJOINを極める!
BigQueryでJOINを極める!
Miki Katsuragi
基礎からのベイズ統計学
基礎からのベイズ統計学
Miki Katsuragi
StanとRでベイズ統計モデリング 1,2章
StanとRでベイズ統計モデリング 1,2章
Miki Katsuragi
More from Miki Katsuragi
(7)
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering Tips
4_9 GCPUG女子会 Vertex Pipelines 101.pdf
4_9 GCPUG女子会 Vertex Pipelines 101.pdf
時系列分析入門
時系列分析入門
Gcp ai marketing
Gcp ai marketing
BigQueryでJOINを極める!
BigQueryでJOINを極める!
基礎からのベイズ統計学
基礎からのベイズ統計学
StanとRでベイズ統計モデリング 1,2章
StanとRでベイズ統計モデリング 1,2章
StanとRでベイズ統計モデリング 11章 離散値をとるパラメータ
1.
StanとRでベイズ統計モデリング 11章 離散値をとるパラメータ 葛木美紀 Miki Katsuragi
2.
● 11.1 離散パラメータを扱うテクニック ○
便利な関数や周辺化消去について ● 11.2 混合正規分布 ● 11.3 ゼロ過剰ポアソン分布 ● 11.4 Latent Dirichlet Allocation Agenda * 離散値をとるパラメータというタイトルだけど、どちらかと いうと混合分布に関する話が中心?
3.
11-1 離散値を扱うテクニック
4.
離散パラメータを消去して対数尤度を表現するには ● target (4.3)
を使う ○ 対数尤度を足し算にするので計算が簡単になる ○ 値が小さくなりすぎない ● log_sum_exp 関数を使う 実数 (x, y) を引数にとる場合 11.1 離散パラメータを扱うテクニック
5.
引数にはreal, vector, row_vector,
matrix, array型を取ることができる。 例:vector を引数にとる場合 右辺が log sum of exponentials なので log_sum_exp 関数と呼ばれる とすると 「log (小さい値)の積 = log (小さい値) の和」になるので計算 が安定 11.1.1 log_sum_expで計算を簡単に
6.
右辺 = 例: 左辺 = log_sum_expで計算が簡単になる例
7.
同時分布と周辺分布 周辺化:同時分布から特定の確率変数の とりうる値について和をとるか積分するこ とで消去すること。 -> 場合の数を全て数え上げて、各々の場 合の確率を算出して和をとることで、離散 パラメータを消去 11.2.2 周辺化消去
8.
表 coin[n]= 0 Y=1 Y=0 or 正直に答える 常に
Y=1 100人分 データ収集 coin[n] = Bernoulli(0.5) = 離散パラメータ (データからは不明) 裏 coin[n]= 1 真の喫煙率 q を知りたい n Y 1 1 2 0 3 1 ... 100 1 Y=1 ベルヌーイ分布に従う離散パラメータの例
9.
coin[n] : 0
なら表、1 なら裏。 データからは不明なのでパラメータ かつ、離散的な値しか取れない (離散パラメータ) θ[1] : 表が出た場合にYesと答える確率 θ[2] : 裏が出た場合にYesと答える確率 モデル式11-1 (p.204)
10.
途中のコイントスの結果を知らなくても、回答が Yesになる確率を求められる (周辺化消去) 対数尤度にすると以下のように
log_sum_exp関数で表現できる。 全員分これを繰り返すが、対数尤度なので足すだけで OK コイントスの場合の数を数え上げて離散パラメータを消去 例: 1人の場合 周辺化消去のイメージ
11.
data { int N; int<lower=0,
upper=1> Y[N]; } parameters { real<lower=0, upper=1> q; } ## mean se_mean sd 2.5% 25% 50% 75% 97.5% n_eff Rhat ## q 0.2 0.00 0.09 0.04 0.14 0.20 0.26 0.38 1127 1.00 ## lp__ -69.7 0.03 0.84 -72.22 -69.91 -69.37 -69.14 -69.08 698 1.01 model { for (n in 1:N) target += log_sum_exp( log(0.5) + bernoulli_lpmf(Y[n] | q), log(0.5) + bernoulli_lpmf(Y[n] | 1) ); } (11.4式に該当) (11.4) log Bernoulli に相当 モデル11-1 実装例
12.
m 枚のコインを 一度に投げる (表が出る 確率= 0.5) パラメータ
λ の ポアソン分布 から乱数 m 出力 表が出た枚数=Y 例:3枚(二項分布) 100回 未知のコイン数 m = 離散パラメータ n Y 1 6 2 5 3 8 ... 100 9 ポアソン分布に従うパラメータの例
13.
ここでは、mが問題の離散パラメータである。 mは非負整数であれば、どれでも取る可能性はあるの で、全ての尤度を足しあげると、以下のような式になる。 現実的には、m=40くらいまでを考えたら良い (表が最大9枚なら現実的にその倍の 20枚程度 を上限と考える、さらに
1〜2 SD を考慮) m<Y にはならない (例:Y=6のときBinomial(Y|0, 0.5)となる のは0枚中6枚表になってしまう) モデル式11-2 (p.206)
14.
上限 40, 下限を
Y とすると以下のように式を変形可能 さらに対数をとってlog_sum_expで以下のように表現できる モデル式11-2
15.
data { int N;
#回数=100 int M_max; #40 int<lower=0> Y[N]; } parameters { real<lower=0> lambda; } ## mean se_mean sd 2.5% 25% 50% 75% 97.5% n_eff Rhat ## lambda 9.58 0.01 0.44 8.74 9.28 9.57 9.87 10.44 1378 1 ## lp__ 273.12 0.02 0.71 271.07 272.93 273.40 273.57 273.63 1934 1 model { for (n in 1:N) { vector[M_max-Y[n]+1] lp; for (m in Y[n]:M_max) lp[m-Y[n]+1] = poisson_lpmf(m | lambda) + binomial_lpmf(Y[n] | m, 0.5); target += log_sum_exp(lp); } } log Poisson に相当 log Binomialに相当 モデル11-2 実装例 pmf :proverbiliy mass function(質量関数) pdf : proverbiliy density function(正規分布など密度関数 )
16.
// model11-2 data { int
N; int M_max; int<lower=0> Y[N]; } parameters { real<lower=0> lambda; } model { for (n in 1:N) { vector[M_max-Y[n]+1] lp; for (m in Y[n]:M_max) lp[m-Y[n]+1] = poisson_lpmf(m | lambda) + binomial_lpmf(Y[n] | m, 0.5); target += log_sum_exp(lp); } } // model11-2b data { int N; int<lower=0> Y[N]; } parameters { real<lower=0> lambda; } model { for (n in 1:N) Y[n] ~ poisson(lambda*0.5); } 11.1.3 の公式を実装すると..
17.
11-2 混合正規分布
18.
社員の能 力測定実 数値 (Score) 100人分 のデータ 表(確率α) 怠け者 裏(確率1-α) 頑張り屋 (11.2) と基本的に同じ n Y 1
-0.84 2 -0.35 3 2.34 ... 100 3.74 混合正規分布の例
19.
混合正規分布を使ってモデル化 data { int N; vector[N]
Y; } parameters { real<lower=0, upper=1> a; ordered[2] mu; vector<lower=0>[2] sigma; } model { for (n in 1:N) target += log_sum_exp( log(a) + normal_lpdf(Y[n] | mu[1],sigma[1]), log1m(a) + normal_lpdf(Y[n] | mu[2],sigma[2]) ); } normal_lpdf(Y | mu, sigma) はlogNormal(Y | μ, σ) と等価 log1m(a) は log(1-a) を より安定に計算するため の関数 識別するため mu に orderd 型を使用(10.1.3 参照) vector 型でラベルスイッチン グを確認してもOK mean se_mean sd 2.5% 25% 50% 75% 97.5% n_eff Rhat a 0.54 0.00 0.07 0.39 0.50 0.55 0.60 0.67 1558 1 mu[1] -0.05 0.00 0.24 -0.51 -0.21 -0.06 0.11 0.42 2325 1 mu[2] 5.78 0.02 0.63 4.36 5.40 5.85 6.23 6.85 1413 1 sigma[1] 1.30 0.00 0.18 0.97 1.18 1.28 2.74 3.53 1576 1 sigma[2] 2.46 0.01 0.47 1.71 2.12 2.40 1.41 1.68 2094 1 lp__ -248.19 0.04 1.60 -252.30 -248.98 -247.85 -247.00 -246.04 1475 1 モデル式11-5 の実装例
20.
例:3面ダイス 社員の能力測 定実数値 (Score) 200人 分のデータ n Y 1
9.44 2 9.77 3 11.56 ... 200 29.04 k個の正規分布からなる混合分布 ここでの離散パラメータは k の値(例:1 or 2 or 3)
21.
さらに対数をとってlog_sum_expで以下のように表現できる モデル式11-6 (p.216)
22.
data { int N; int
K; //正規分布の個数 vector[N] Y; } parameters { simplex[K] a; ordered[K] mu; vector<lower=0>[K] sigma; real<lower=0> s_mu; } mean se_mean sd 2.5% 25% 50% a[1] 0.17 0.00 0.03 0.12 0.15 0.17 a[2] 0.10 0.00 0.03 0.05 0.08 0.10 a[3] 0.31 0.00 0.07 0.18 0.26 0.30 a[4] 0.27 0.00 0.08 0.13 0.21 0.27 a[5] 0.15 0.00 0.04 0.09 0.13 0.15 mu[1] 10.01 0.00 0.17 9.68 9.90 10.01 mu[2] 16.15 0.03 0.58 15.37 15.83 16.07 mu[3] 20.87 0.00 0.14 20.62 20.77 20.86 mu[4] 23.44 0.02 0.67 22.15 22.96 23.43 mu[5] 30.87 0.04 1.04 27.98 30.52 31.06 model { mu ~ normal(mean(Y), s_mu); //ゆるい制約を入れている sigma ~ gamma(1.5, 1.0); //制約を入れている for (n in 1:N) { vector[K] lp; //log_sum_exp の引数ベクトル for (k in 1:K) lp[k] = log(a[k]) + normal_lpdf(Y[n] | mu[k], sigma[k]); target += log_sum_exp(lp); } } a (simplex) : データから生成された混合正規分 布の混ぜ具合、合計 1になる。a[1] 〜 a[5] の確 率でどの確率分布を使うか決定 モデル11-6実装例
23.
functions { real normal_mixture_lpdf(real
Y, int K, vector a, vector mu, vector sigma) { vector[K] lp; for (k in 1:K) lp[k] = log(a[k]) + normal_lpdf(Y | mu[k], sigma[k]); return log_sum_exp(lp); } } data { int N; int K; vector[N] Y; } parameters { simplex[K] a; ordered[K] mu; vector<lower=0>[K] sigma; real<lower=0> s_mu; } model { mu ~ normal(mean(Y), s_mu); sigma ~ gamma(1.5, 1); for (n in 1:N) Y[n] ~ normal_mixture(K, a, mu, sigma); } _lpdf を関数名の末尾につけると、 あたかもその確率分布が用意され てるかのように使うことが可能。 functionsデータブロックは data よ り前に書く functionsブロック使用例
24.
11-3 ゼロ過剰ポアソン分布
25.
Sex: 0 =
男性, 1 = 女性 Sake: 0 = 飲む, 1 = 飲まない Age: 年齢 Y: 来店回数 リピーターになりそうな人は? Sex Sake Age Y 0 1 18 5 1 0 18 2 1 1 18 1 ... 1 0 55 6 飲食店来店アンケートデータの例(200人分)
26.
女性が少なそう お酒を飲む人が少なそう 年齢は 一様分布? 0が突出 他は山型 女性の来店が少なそう 年齢が高いと来店が多い? 来店回数Yの分布が 特徴的 ->分布が どのようなメカニズムで 生成されたか 考えるのが重要 分布の確認
27.
裏(確率 1-q) ベルヌーイ分布 (Y=0) 表(確率q) ポアソン分布 リピーターの来店 回数:平均λのポア ソン分布に従う とにかく1回来店 するかしないかの 確率:確率qのベ ルヌーイ分布に従 う ロジスティック回 帰 ポワソン回帰 0:ベルヌーイ分布の可能性大 1:どちらの分布かわかりにくい 2以上:確実にポアソン分布 複数の分布から発生していると考える メカニズムの想像(p.215) ここでの離散パラメータは 裏(ベルヌーイ分布)か表(ポアソン分布)か *1過剰ポアソン分布の場合1を引くと良い
28.
確率1-qで起きる 確率qで起きる Y=0(来ない) Y=>1 これをゼロ過剰ポアソン分布と呼ぶ。モデル式にすると以下のようになる。 モデル式11-7(p.217) Xb2の間違い
29.
functions { real ZIP_lpmf(int
Y, real q, real lambda) { if (Y == 0) { return log_sum_exp( bernoulli_lpmf(0 | q), bernoulli_lpmf(1 | q) + poisson_log_lpmf(0 | lambda) ); } else { return bernoulli_lpmf(1 | q) + poisson_log_lpmf(Y | lambda); } } } data { int N; int D; int<lower=0> Y[N]; matrix[N,D] X; } mean se_mean sd 2.5% 25% b[1,1] 0.94 0.01 0.71 -0.41 0.45 : b[2,4] 0.20 0.00 0.03 0.13 0.17 q[1] 0.96 0.00 0.03 0.89 0.95 : q[92] 0.42 0.00 0.06 0.31 0.38 parameters { vector[D] b[2]; } transformed parameters { vector[N] q_x; vector[N] q; vector[N] lambda; q_x = X*b[1]; lambda = X*b[2]; for (n in 1:N) q[n] = inv_logit(q_x[n]); } model { for (n in 1:N) Y[n] ~ ZIP(q[n], lambda[n]); } qを全て推定す るのではなくロ ジスティック回 帰でゆるい制 約を与えてい る モデル11-7実装例
30.
library(rstan) d <- read.csv('input/data-ZIP.txt') d$Age
<- d$Age/10 X <- cbind(1, d[,-ncol(d)]) //切片の1と説明変数 data <- list(N=nrow(d), D=ncol(X), Y=d$Y, X=as.matrix(X)) fit <- stan(file='model/model11-7.stan', data=data, pars=c('b', 'q', 'lambda'), seed=1234) ms <- rstan::extract(fit) N_mcmc <- length(ms$lp__) r <- sapply(1:N_mcmc, function(i) cor(ms$lambda[i,], ms$q[i,], method='spearman')) quantile(r, prob=c(0.025, 0.25, 0.5, 0.75, 0.975)) 2.5% 25% 50% 75% 97.5% -0.8056358 -0.6961972 -0.6492521 -0.6031985 -0.4426931 推定されたパラメータから来店確率とリ ピーターの平均来店回数の関係を求めて いる(負の関係?) 11-7 実行コード
31.
11-4 Latent Dirichlet
Allocation
32.
● 自然言語処理の分野で考案 ● 人によって話しやすいトピック (カテゴリ)を出現しやすくする モデル ●
ここではスーパーマーケットで 顧客がどの商品を購入したか というデータ(50人、1117回分 の購入イベント)を扱う Person ID Item ID 1 105 1 80 1 54 ... 50 72 解析の目的: ● 購入履歴から顧 客の特徴を抽出 ● 商品をグルーピン グ 11.4.1 Latent Dirichlet Allocation
33.
商品 x 顧客のクロス集計表 *購入回数が多いほど色が濃い 顧客ごと購入回数 商品ごと購入回数 商品による 差が大
主成分分析で傾 向を要約 -> 一部の顧客の 特徴が失われて しまう データの分布
34.
● 顧客数 N=50 ●
商品数 I=120 ● 商品カテゴリ K=6 人ごとに異なる6面ダイス 例:50番目の人のサイコロサ ラリーマンなので飲料が出や すい 飲料に特化した(飲料が 出やすい)120面ダイス 「緑茶」が出た場 合緑茶を購入し たと考える カテゴリカル 分布(合計1) 11.4.2 メカニズム
35.
n 番目の顧客が y
番目の商品を購入するメカニズム dice:人ごとのθから得られた商品カテゴリ θ: 長さ6のベクトル、人ごとに存在 y:商品 (ID のようなもの) φ[dice]:長さ120のベクトル、カテゴリごとに存在 11.4.3 モデル式の記述
36.
モデル式11-8 (p.223)
37.
N <- 50 I
<- 120 K <- 6 set.seed(123) alpha0 <- rep(0.8, K) alpha1 <- rep(0.2, I) theta <- gtools::rdirichlet(N, alpha0) phi <- gtools::rdirichlet(K, alpha1) αが小さいほど いびつに num_items_by_n <- round(exp(rnorm(N, 2.0, 0.5))) d <- data.frame() for (n in 1:N) { z <- sample(K, num_items_by_n[n], prob=theta[n,], replace=TRUE) item <- sapply(z, function(k) sample(I, 1, prob=phi[k,])) d <- rbind(d, data.frame(PersonID=n, ItemID=item)) } 11.4.4 Rでのシミュレーション
38.
functions { real CateCate_lpmf(int
Y, int K, vector theta, vector[] phi) { vector[K] lp; for (k in 1:K) lp[k] = log(theta[k]) + log(phi[k,Y]); return log_sum_exp(lp); } } data { int<lower=1> E; int<lower=1> N; int<lower=1> I; int<lower=1> K; int<lower=1, upper=N> PersonID[E]; int<lower=1, upper=I> ItemID[E]; vector<lower=0>[I] Alpha; //ディリクレ分布のパラメータ } mean sd 2.5% 25% 50% 75% 97.5% theta[1,1] 0.37 0.14 0.13 0.26 0.35 0.46 0.64 theta[1,2] 0.12 0.09 0.02 0.05 0.09 0.15 0.34 theta[1,3] 0.11 0.09 0.01 0.05 0.09 0.16 0.33 … theta[50,6] 0.11 0.09 0.01 0.05 0.09 0.16 0.33 parameters { simplex[K] theta[N]; simplex[I] phi[K]; } model { for (k in 1:K) phi[k] ~ dirichlet(Alpha); for (e in 1:E) ItemID[e] ~ CateCate(K, theta[PersonID[e]], phi); } モデル11-8実装例 弱情報事前分布に ディリクレ分布を指 定
39.
library(rstan) d <- read.csv('input/data-lda.txt') E
<- nrow(d) N <- 50 K <- 6 I <- 120 data <- list( E=nrow(d), N=N, I=I, K=K, PersonID=d$PersonID, ItemID=d$ItemID, Alpha=rep(0.5, I) ) stanmodel <- stan_model(file='model/model11-8.stan') # fit_nuts <- sampling(stanmodel, data=data, seed=123) fit_vb <- vb(stanmodel, data=data, seed=123) NUTSではパラメータが多く時 間がかかるため推定アルゴリ ズムにADVIを使用 11-8 Rコード
40.
1-4まで一部出やすい商品がある n=1, 50
の人を比べるとタグ(カテゴリ) 2に差がある 結果
Download now