Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

要因計画データに対するベイズ推定アプローチ

2,992 views

Published on

北海道大学 認知行動科学研究室にて発表させていただいた,要因計画データに対するベイズ推定アプローチの発表資料です。
内容に関する留意点は http://tyamane1969.net/?p=172 をご覧ください。

Published in: Science
  • Be the first to comment

要因計画データに対するベイズ推定アプローチ

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

×