要因計画データに対するベイズ推定アプローチ
TRANSCRIPT
要因計画データに対するベイズ推定アプローチ
2017.02.15 @ 北海道大学
本日の発表内容1. ベイズ推定とは2. RStan を用いたベイズ推定3. 要因計画データに対するベイズ推定 アプローチ ・ 2 群の差の推定 ( 対応なし ) ・ 2 群の差の推定 ( 対応あり ) ・ 2 要因群間計画データの推定 ・混合計画データの推定4. Tips
自己紹介氏名:山根 嵩史所属:広島大学大学院 教育学研究科 学習心理学研究室専門:記憶課題遂行のメタ認知的制御興味:虚記憶,忘却,マインドワンダ リングなど留意事項: ベイズの専門家ではありません
ベイズ推定とはWhat is BAYES?
ベイズ統計の考え方ベイズ統計は,母数とデータの扱いが従来の頻度主義統計学とは異なる
データから母平均 μの分布が得られる
データから母平均 μの真値を推定する 頻度主義統計学では… 母数 = 定数 データ = 確率変数
ベイズ統計では… 母数 = 確率変数 データ = 定数
ベイズ統計では,母数 ( 知りたい値 ) が分布として得られる
ベイズ統計の考え方パラメータが分布として得られることで,ベイズ統計では「仮説がどの程度確からしいか」を確率で表現できる
e.g.,) 仮説 H1 :母平均 μ > 0
-2 -1 0 1 2 3 4 5 6 70.00
0.05
0.10
0.15
0.20
0.25
0.30
0.35
0.40
0.45
分布の97% 母平均 μの事後分
布のうち,> 0 となる部分の面積の割合が仮説 H1 が正しい確率となる
ベイズ推定とは:事前 / 事後分布事後分布 = 知りたいパラメータの分布事後分布を求めるにはベイズの公式を使用
P(θ|x) はデータ x が得られたときに母数が θである確率を表す条件付き確率 → 事後分布
P(x|θ) :母数が θ のときデータ x が得られる確率 → データ分布 ( 尤度 )
P(θ) :データによらず母数が発生する確率 → 事前分布
事前分布に得られたデータ ( 尤度 ) を掛け合わせることで,知りたい母数の分布 ( 事後分布 ) を得る推定法
要するにベイズ推定とは
事前分布は分析者が決める通常はパラメータに合った事前分布を選択 平均値・回帰係数 → 正規分布・コーシー分布 標準偏差・分散 → 半コーシー分布 確率・比率 → ベータ分布・一様分布
困ったらとりあえず無情報な一様分布
扱うデータに応じて適切な事前分布を選択する必要がある分布はそれぞれパラメータによって位置や形状が決まる
分布とパラメータ
正規分布 ( 平均 , 標準偏差 ) → normal(mu, sigma)
二項分布 ( 試行数,確率 ) → binomial(N, theta)
※ 分布とパラメータの解説としては『 Stan と R でベイズ統計モデリング』 6 章や『基礎からのベイズ統計学』の付録が詳しい
ベイズ推定では多変量確率分布からの乱数発生法であるマルコフ連鎖モンテカルロ (MCMC) 法を用いて事後分布を生成する
MCMC による事後分布生成
ランダムサンプリングを繰り返すことで,パラメータの事後分布が定常分布として得られる
MCMC 法はランダムな初期値からパラメータの推定値をサンプリング → 最初の方の推定値は初期値に依存する ので,推定結果から省く ( バーンイン期間 )
推定値が収束したことを判断するため,複数のサンプリング → チェイン
MCMC に関する用語
初期のサンプリングは初期値に依存する
サンプリングが適切に行われたかどうかは,視覚的および数値的に評価する
収束診断
トレースプロットに基づく視覚的な評価 → 各チェインの値が区別できず,一定の 範囲内に収まっていれば OK
収束判定指標 (Rhat) に基づく評価 → チェイン間の散らばりの指標 1.1〜 1.2以下であれば OK
ベイズ推定の結果の解釈は,事後分布を分析することにより行われる
結果の解釈
母数の平均が知りたい → EAP( 事後期待値 = 事後分布の平均値 ) をもとに判断母数が左右均等な分布でないときの代表値が知りたい → MAP( 最大事後確率 = 事後分布の最大値 ) から判断母数の散らばりが知りたい → 事後分散・事後標準偏差をもとに判断
条件間に差があるかを知りたい → 差の事後分布の 95%確信区間を求め, 0 が含まれ るかどうかで判断
研究仮説を表現するような値を生成すれば,事後分布から仮説に関する解釈ができる
ベイズ推定において,「 95% の確率で求めるパラメータがその範囲内に入る」区間を 95% 確信区間 (credible interval) という
頻度主義の 95%信頼区間 (confidence interval) が↑のように捉えられていることがあるが,頻度主義では真値は固定値なので,真値が「この辺りにある」と考えることはできない
確信区間 (CI) とは
95% 確信区間は, 95% 最高密度区間(HDI: Highest Density Interval) として出力される
事後分布の 95%HDI をもとに母数についての判断や仮説に関する判断を行う
最高密度区間 (HDI)
“条件間のパラメータの差”の 95%HDI に 0 が含まれていない → 条件間に差があると判断
ランダムな初期値からサンプリングを行うので,同じモデルでもサンプリングを行う度に結果が微妙に変わる
収束してれば OKだが,結果の報告の際に異なる数値を載せるのはなんかちょっと…
→ サンプリングの前に set.seed() ( 後述 )
結果を見るときの注意点
パラメータの性質:知りたいパラメータが固定値ではなく分布で得られる
推定方法:パラメータに関するいくつかの条件をもとに無数にサンプリングを行うことで,パラメータの事後分布を得る
結果の解釈:事後分布の要約統計量(EAP , MAP など ) や確信区間をもとに,仮説が支持されたかどうかを解釈する
ベイズ的考え方のまとめ
RStan を用いたベイズ推定の実施How to use RStan?
ベイズ推定の実施今回は無償+ R上で実行できる RStan を使用する
MCMC を行えるソフトウェアは,他にもWinBugs ,JAGS , Mplus , SAS など
http://mc-stan.org/
余談: RStudio が便利RStudioは Stan コードを書くのに便利
予約語のハイライト シンタックスのチェック
Stan を使ったベイズ推定の流れ①分析モデルを Stan コードで表現②RStan でパラメータの推定③収束診断④結果の解釈
ひとまず, 1つのパラメータを推定してベイズ推定の流れをつかんでみましょう
サンプルデータ 2 要因 (2×2) 30問の正答数のデータ condition A1, A2 は between pre, post は within各条件 20 名
《 sample01.csv を参照してください》
サンプルデータ1人目の参加者の pre のデータから,正答率 pを推定してみる30問のうち 12問正答したというデータ
二項分布 ( 試行数,確率 ) モデル:正答数 x ~ binomial(30, 正答率 p)※RStan の使い方の練習なので 「そんな分析するか?」という ツッコミはナシで
①Stan コードでモデルを表現Stan では独自の記法の Stan コードでモデルを表現するブロックごとに記述 (順番は固定 )・ function {}・ data{}・ transformed data{}・ parameters{}・ transformed parameters{}・ model{}・ generated quantities{}
正答率の推定: Stan コードfunction {}ブロック 自作関数の定義 今回は使わない
data{}ブロック 分析に用いるデータの 定義を宣言 変数の種類,下限と上限 int<lower=0,upper=30> x; 「正答数の変数 x は 0~30 の値をとる整数である」
※ データ自体は Stan コードの外から取り込む
《 p.stan を参照してください》
正答率の推定: Stan コードtransformed data{}ブロック data の変形を記述 今回は使わない
parameters{}ブロック 推定したいパラメータと その定義を宣言
real<lower=0, upper=1> p; 「正答率 p は 0〜 1 の実数」
正答率の推定: Stan コードtransformed parameters{} parameter の変形を記述 今回は使わない
model{}ブロック 具体的な統計モデル x ~ binomial (30, p); 「正答数 xは試行数 30 , 正答率 pの二項分布に従う」
generated quantities{}ブロック 生成量の記述 今回は使わない
Stan コードの保存と読み込みモデルを記述した Stan コードは,分析用の R コードとは別に保存するRStudio で txt ファイルを作成・保存し…
拡張子を“ .stan” に変えると Stan コードに
②RStan でパラメータの推定R の“ rstan” パッケージを使って, Stanコードの読み込みとパラメータの推定を行うStan コードの data{}ブロックで定義した変数名に対応したデータを記述※ データは list型である必要がある
stan_model()関数で Stan コードを読み込む( コンパイルするので時間がかかる )
②RStan でパラメータの推定sampling()関数でサンプリングを実行引数としてモデルとデータを指定
その他の引数で, MCMC の細かい設定も可能デフォルトでも構わない pars :結果を出力する変数名を指定 warmup :初期値の影響を排除するためのバーンイン 期間の設定 chains :チェインの数の設定 iter :各チェインの繰り返し数の設定 seed :乱数のシードの設定
③収束診断トレースプロットや自己相関の出力から,サンプリングが収束しているかどうか判断
③収束診断トレースプロットや自己相関の出力から,サンプリングが収束しているかどうか判断
④結果の解釈事後分布を見て結果を解釈
正答率 pについて, EAP=0.41 95% 確信区間 (CI) は [0.25, 0.57]
Stan コードを書く際の注意点ブロック内の行末にセミコロンをつける
最後のブロックを閉じた後に改行をいれる
忘れると怒られる
忘れるとやっぱり怒られる
RStan の警告について赤い文字が出るのでびっくりするが,無視して良い警告もある
いくつかの値が不正であることを警告している ( らしい )“count” の数が小さければ気にしなくてよい
「ヒストグラムの幅は適当に調節してね」というメッセージ
要因計画データに対するベイズ推定アプローチHow to BAYES the designed data?
要因計画データに対するアプローチ ベイズ推定では,所与のデータから,
興味のあるパラメータの事後分布を推定する
要因計画データにおいては,多くの場合,条件間の差を検討することが目的
なので,各条件のパラメータに加えて,パラメータ同士の差を推定し,事後分布を解釈する
ベイズ推定だと何が良いか 「条件間に差があるかどうか」だけで
なく,例えば
「母平均は規定値より大きいか?」
「条件間の差は規定値以上か?」
といった実質科学的な仮説について確率 的に判断することができる ※ 帰無仮説検定における p値=「帰無仮説 ( 条件間に差がない ) が正しいと仮定したとき,手元のデータ以上の差が生じる確率」
《 bayesforDD.R を参照してください》ここからは“ bayesforDD.R” のファイルをRStudio上で開いてお聞きください
“bayesforDD.R” を右クリック → ファイルを開くプログラムを指定 →RStudio を選択 すると自動で WD が設定されて便利
2 群の差の推定 ( 対応なし )まずは対応のない 2 群の差の検討 (t検定的なもの ) からサンプルデータの pre における, condition1 と condition2 の正答数の平均を比較
・・・
2 群の差の推定: Stan コード
data{}ブロック int<lower=0> N1; int<lower=0> N2; int<lower=0,upper=30> x1[N1]; int<lower=0,upper=30> x2[N2];
N1, N2 → 各群の参加者数x1, x2 → 各群のデータ
x1[N1] で「データが N1個分ある」ことを表す
変数の型や下限・上限の指定は先ほどと同様
《 2group.stan を参照してください》
2 群の差の推定: Stan コードparameters{}ブロック real <lower=0,upper=30> mu1; real <lower=0,upper=30> mu2; real <lower=0> sigma1; real <lower=0> sigma2;
各群の平均 μ1, μ2 と分散 σ1, σ2 を定義model{}ブロック x1 ~ normal(mu1, sigma1); x2 ~ normal(mu2, sigma2);それぞれの正答数についてモデル式を記述
2 群の差の推定: Stan コードgenerated quantities{} real diff; diff = mu2-mu1;このブロックでは,定義したパラメータを組み合わせて任意の生成量を作れる※作った生成量はブロック内で 宣言する必要があるので注意
ここでは mu2 から mu1 を引くことで「 2 群の正答数の差」を作成している ( その他は後述 )
2 群の差の推定: R コードデータを記述各群の人数 N1 , N2 とデータ x1 , x2( データはサンプルデータより抜き出して使用 )
list型でなければならないので注意
2 群の差の推定: R コードサンプリング・結果の出力
2 群のそれぞれの平均正答数 (mu1, mu2)と条件間の正答数の差 (diff) について,トレースプロット・事後分布などを出力
2 群の差の推定:結果の解釈差の事後分布の 95%HDI は [1.51,2.36]確信区間に 0 が含まれていないので,条件間には差があると考えてよい
より柔軟な仮説の検討差があることは分かったが,どれくらいの差?generated quantities{} で生成量を定義することで,例えば
「平均正答数に 2問以上の差がある確率」などを求めることもできる
diff が特定の値以上であれば1 を返すような変数を定義
EAP( 事後分布の平均 ) をもとに解釈mu2 – mu1 > 1 は 100%mu2 – mu1 > 2 は 41%
2 群の差の推定 ( 対応あり ) 対応のある (1つの対象から複数測定さ
れている ) データを扱うためには,多変量用の分布を用いることになる
正規分布から発生する 2つの変数であれば, 2 変量正規分布
→ 『新訂 心理統計法 有意性検定からの脱却』− p.121 のイメージ図を参照
多変量正規分布の引数多変量正規分布は引数としてベクトルと共分散行列を持つので,データをその型に合わせる必要がある
多変量正規分布 ( ベクトル , 共分散行列 ) → multi_normal(mu, Sigma)
mu と sigma をそれぞれベクトルとして宣言
transformed parameters{}ブロックで共分散行列を作成
2 群の差の推定 ( 対応あり )サンプルデータの condition A1 におけるpre と post の平均正答数を比較
・・・
2 群の差の推定 ( 対応あり ) : Stan コード
data{}ブロック int<lower=0> N; vector[2] x[N];
参加者数とデータをベクトル型で宣言している
《 2group_within.stan を参照してください》
parameters{}ブロック vector[2] mu; vector<lower=0>[2] sigma; real<lower=-1, upper=1> rho;
平均値と分散をベクトル,相関を−1 ~ 1 の実数で宣言している
2 群の差の推定 ( 対応あり ) : Stan コードtransformed parameters{}ブロック matrix[2,2] Sigma;
parameters{}ブロックで宣言したパラメータをモデルに合うように変形する
ここでは 2 変量正規分布の引数に使うため, sigma を使って 2×2 の共分散行列を作成している
2 群の差の推定 ( 対応あり ) : Stan コードtransformed parameters{}ブロック matrix[2,2] Sigma; Sigma[1,1] = sigma[1]*sigma[1]; Sigma[2,2] = sigma[2]*sigma[2]; Sigma[1,2] = sigma[1]*sigma[2]*rho; Sigma[2,1] = sigma[2]*sigma[1]*rho;
共分散行列のそれぞれの要素を指定対応ありのデータなので,非対角項に相関 (rho) が掛けられている
2 群の差の推定 ( 対応あり ) : Stan コードmodel{}ブロック for(i in 1:N){ x[i] ~ multi_normal(mu,Sigma);
for文を使って 2 変量正規分布に従うモデル式を記述※mu はベクトル, Sigma は行列型
generated quantities{} real diff; diff = mu[2] – mu[1];
平均値の差の生成量を作成
2 群の差の推定 ( 対応あり ) : R コードデータを記述
ベクトル型に渡すため, structure()関数を使ってデータを整形している.Dim引数でデータの構造を指定 (20×2)
2 群の差の推定 ( 対応あり ) : R コードサンプリング・結果の出力対応なしの場合と同様
2 要因群間計画データの推定 2 要因計画では,各要因の主効果と交互作用の推定を行う
2×2 の群間計画におけるデータの発生メカニズムを考えてみる
・・・※ 仮想データは pre, postだが仮に群間計画だと考える
2 要因群間計画データの推定 2つの要因の効果と交互作用がない場
合,各条件の μは等しくなる
そこに要因 A と要因 B の 効果が加わる
・・・
要因 A の効果
要因 B の効果
2 要因群間計画データの推定 さらに, A1B1 と A2B2 には交互作用
が 加わる
これらの 3種類の効果 をモデルに加え, 別個に推定する
・・・交互作用 AB の効果
3つの効果の大きさ サンプルデータを作る際に,要因 A ,
要因 B ,交互作用 AB の効果の大きさをそれぞれ指定して作成している
推定結果がこの値に 近ければ,正しく推定 できている
2 要因群間計画データの推定: Stan コード《 2way.stan を参照してください》
parameters{}ブロック real effectA; real effectB; real effectAB;
各要因と交互作用のパラメータを定義
2 要因群間計画データの推定: Stan コードtransformed parameters{}ブロック Sigma[1,1] = sigma[1]*sigma[1]; Sigma[2,2] = sigma[2]*sigma[2]; Sigma[1,2] = 0; Sigma[2,1] = 0;
共分散行列のそれぞれの要素を指定群間計画のデータなので非対角成分は 0
2 要因群間計画データの推定: Stan コードtransformed parameters{}ブロック mu2[1] = mu – effectB; mu2[2] = mu + effectB;
要因 B の効果を加える効果は 2つの条件で相殺されるように加える必要がある
ideal1[1] = mu2[1] – effectA + effectAB; ideal1[2] = mu2[2] – effectA – effectAB; ideal2[1] = mu2[1] + effectA – effectAB; ideal2[2] = mu2[2] + effectA + effectAB;
各条件に要因 A と交互作用 AB の効果を加える
2 要因群間計画データの推定: Stan コード
ideal1[1]
ideal2[1] ideal2[2]
ideal1[2]
effect A +
effect A -
effect B - effect B +
effect AB + effect AB -
effect AB - effect AB +
2 要因群間計画データの推定: R コード
データの記述,モデルの読み込み,サンプリングなどこれまでと同様
2 要因群間計画データの推定:出力
mu や effect A, B, AB の推定結果は,データ作成時の設定とほぼ一致
2 要因混合計画データの推定 within の要因が加わる混合計画では, 2 要因群間計画+対応のある群間の比較《 2way_within.stan を参照してください》
parameters{}ブロックで相関 rho を宣言
共分散行列の非対角成分に相関 rho を掛ける
model{}ブロックでrho の事前分布を設定
Tips
Tips: 乱数のシードを設定するサンプリングの度に値が変わるのが気になる! →サンプリングの前に set.seed()関数
あるいは sampling()関数の seed引数
Tips:JASP GUI の統計フリーソフトウェア ベイズ推定を使った t検定・分散分析・回帰
分析などが実施できる ベイズファクターによるモデル比較しかで
きない ( 生成量を作ったりはできない )
Tips: ベイズを勉強するなら『基礎からのベイズ統計学』 豊田秀樹 先生 → バイブル的一冊 基本的な分析の Stan コードや Stan 内の関数・分布 の一覧など付録が充実
『はじめての統計データ分析』豊田秀樹 先生 → もう少し発展的なモデルや仮説の表現
Web上にもたくさんの資料
Tips: ベイズを勉強するなら『 Stan と R でベイズ統計モデリング』 松浦健太郎 先生 → 最近出た本 モデリング寄り 図が多いので視覚的に分かりやすい
Web上にもたくさんの資料
Tips: ベイズ関連情報『 Doing Bayesian Data Analysis 』の翻訳本が出ます『 Bayesian Cognitive Modeling 』も出るという噂社会心理学会春の方法論セミナー 3/14(火 ) @上智大学 「効果の科学からデータ生成過程の科学へ〜心理学者のためのベイジアン・モデリング入門」
(http://www.socialpsychology.jp/seminar/seminar2.html)
参考文献・ web サイト『基礎からのベイズ統計学』 朝倉書店『はじめての統計データ分析』 朝倉書店『実践ベイズモデリング』 朝倉書店『新訂 心理統計法 有意性検定からの脱却』 放送大学教育振興会−『 Stan と R でベイズ統計モデリング』 共立出版
Stan超初心者入門 http://www.slideshare.net/simizu706/stan-62042940心理学者のためのベイズ統計入門 http://www.slideshare.net/simizu706/ss-57721033心理統計の課題を Rmd で作る http://www.slideshare.net/KojiKosugi/rmd-67205625
SpecialThanks本資料の作成にあたって, 山口大学教育学部 小杉 考司 先生 広島大学教育学研究科 平川 真 先生 広島大学教育学研究科 難波 修史 氏から,多くの重要なご指摘をいただきました。ありがとうございました。