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.

Osaka.stan#4 chap8

1,074 views

Published on

Osaka.Stan#4 での発表資料です。

Published in: Data & Analytics
  • Hello! High Quality And Affordable Essays For You. Starting at $4.99 per page - Check our website! https://vk.cc/82gJD2
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

Osaka.stan#4 chap8

  1. 1. Chapter 8: 階層モデル 2017.04.29 Osaka.Stan #4 広島大学大学院 教育学研究科 広島大学グローバルキャリアデザインセンター 特別研究員 山根 嵩史
  2. 2. 自己紹介 氏名:山根 嵩史 (やまね たかし) 所属:広島大学大学院 教育学研究科 広島大学グローバルキャリアデザインセンター 特別研究員 専門:記憶課題のメタ認知的制御 ひとこと:ANOVA大好きな フレンズです @T_Yamane
  3. 3. 僕と階層モデル 前回のOsaka.Stanにて 3水準以上になると超煩雑 → ベイジアンANOVAの限界 https://www.slideshare.net/TakashiYamane1/ss-72796016
  4. 4. Chapter.8の目的 グループ差や個人差をうまく扱うため の階層モデルを導入する グループ差 = 説明変数だけでは説明がつかない, グループに由来する差異 個人差 = 〃 個人に由来する差異 「グループ差 (や個人差) を表すパラメータ は類似しており,特定の分布から生成され る」と仮定する
  5. 5. Chapter.8 目次 8.1 階層モデルの導入  同一のデータに対して,単純なモデルから階 層モデルまでを検討 8.2 複数の層を持つ階層モデル  複数の階層を持つ階層モデルの説明 8.3 非線形モデルの階層モデル  非線形モデルに対する階層モデルの適用 8.4 ロジスティック回帰の階層モデル  ロジスティック回帰モデルに対する階層モデ ルの適用
  6. 6. 8.1 階層モデルの導入 データ例:社員の年齢と年収のデータ 大手4社 (年功序列型の賃金制度) に勤務する 社員の年齢 (X) と基本年収 (Y) 40名分 X = 社員の年齢 (実年齢 − 23) Y = 年収 KID = 勤務している会社のID (1 〜 4)
  7. 7. 8.1.1 解析の目的とデータの分布の確認 40名分のデータをプロットし,分布を確認 解析の目的  それぞれの会社 (KID) における年齢Xと基本 年収Yの関係を知りたい 基本年収は年齢に比例してそう 会社によって「新卒の基本年収」 と「年齢に伴う昇給額」が違いそう 傾きが負!?
  8. 8. 単純なモデル → 複雑なモデル 8.1節では,社員の年齢と年収のデータに対して ①会社差を考えず,40名分すべてのデータを 単一の直線式で回帰するモデル (モデル式8−1) ②会社ごとに切片と傾きを推定するモデル (モデル式8−2) ③会社差を表すパラメータが特定の分布から 生成されると考えるモデル (モデル式8−3) という3通りのモデルを順に当てはめる ③のモデルがいわゆる階層モデル
  9. 9. 8.1.2 グループ差を考えない場合 ひとまず会社差を考えず,4社のデータに対して 直線式 a+bX で回帰を行う 単回帰のモデル式 (Chapter.4 モデル式4-2) N = 人数,Y[n] = 年収,X = 年齢 ybase[n] = 基本年収,ε[n] = 基本年収以外の誤差 「40人に共通の直線式 a+bX に,人ごとに独立 なノイズεが加わって年収Yが生成される」
  10. 10. 8.1.2 グループ差を考えない場合 ybase[n]とε[n]を消去すると… モデル式8−1 「年収Yは平均 a+bX,標準偏差σYの正規分布に したがう」 ※X = 社員の年齢 (実年齢 − 23) の理由 基本年収は切片a(新卒の基本年収) + 傾きb(昇給額)*年齢X 新卒年齢を23歳としたとき,−23しておけば切片aをそのまま 「新卒の基本年収」として解釈できる
  11. 11. 8.1.2 Stanでの実装と推定 切片と傾き 40人全員で共通なので1つずつ 直線式が40人共通なのでノイズがかなり大きい ☞ グループ差 (会社差) を考慮する必要がある
  12. 12. 8.1.3 グループごとに切片と傾きを持つ場合 会社によって「新卒の基本年収」と「年齢に伴 う昇給額」が異なるっぽいので,会社ごとに切 片aと傾きbを推定する 会社1 a[1]+b[1]X 会社2 a[2]+b[2]X ・ ・ ・ ・ ・ ・ 会社K a[K]+b[K]X のように単回帰を会社数だけ実行するのとほぼ 同義 ※ただしノイズの大きさσYは共通
  13. 13. 8.1.3 グループごとに切片と傾きを持つ場合 モデル式8−2 ややこしく見えるが,単に 参加者nのKIDの数値 (1〜4) が入るだけ ・・・ n=1ならKID[n]=1 n=37ならKID[n]=3
  14. 14. 8.1.3 Stanでの実装 会社の数をKで宣言 KID列をKID[N]で宣言 共通のa,bからグループごとの a[K],b[K]に変更 モデル式8−2を表現
  15. 15. 8.1.3 推定結果の解釈 会社ごとの切片と傾きが得られた! …が KID1〜4以外の会社の予測には使えない データが十分にない会社 (KID4) はうまく推 定できない ☞ グループ差に仮定をいれたモデルが必要 !?
  16. 16. 8.1.4 階層モデル 各会社のa[k],b[k]について, 「すべての会社で共通の全体平均」 「会社差を表す項」 に分けて考える 会社差を表すパラメータは,平均0,標準偏差σa の正規分布から生成されると考える
  17. 17. 8.1.4 階層モデル 「会社差を表すパラメータは類似している」と 仮定することにより, → 会社差について言及できる (例:「新卒の基本年収の会社差のばらつきはσaぐらい」) → データ数が少ない会社があってもデータを 活用できる 階層的に事前分布を仮定しているので階層モデ ルと呼ばれる (≠ 会社と個人の階層)
  18. 18. 8.1.4 階層モデル モデル式8−3 a[k],b[k]は全体平均+会社差 (全体平均のみだと式8−1と一致) 会社差の項の事前分布として正規分布を仮定 し,ゆるい制約 (置かなければ式8−2と一致)
  19. 19. 階層モデルで推定...の前に 階層モデルではモデルが複雑になりやすいため, ①モデル式を使ってシミュレーションでデー タを生成し,分布を確認 ②生成データに対して推定を行い,推定がう まくいくかどうか確認 しておくことが有益
  20. 20. シミュレーションと推定:Rコード 会社の勤務者数 サンプルデータに合わせている a全体平均,b全体平均 σa,σb,σY a[k],b[k]を生成 rnorm(...)の部分が会社差 サンプルデータと同じデータフレームを作成し Y_simにはモデル8−3をもとにデータを生成
  21. 21. シミュレーションと推定:データの確認 シミュレーションの結果が意図しないものに なっていないか,推定がうまくいくか (与えた定 数に近い値が推定されるか) どうかを確認してお くとよい
  22. 22. 8.1.4 Stanでの実装 parametersブロック a全体平均,b全体平均 σa,σb,σY a会社差[k],b会社差[k] 推定するパラメータを それぞれ宣言
  23. 23. 8.1.4 Stanでの実装 transformed parametersブロック モデル式8−3の の部分を表現
  24. 24. 8.1.4 Stanでの実装 modelブロック 年収の予測モデルを記述 a会社差[k],b会社差[k] に正規分布を仮定 ゆるい制約
  25. 25. 8.1.4 推定結果の解釈 切片と傾きの全体平均 事後分布 確信区間に負の値が含まれる新卒の基本年収は382万円くらい 年齢に伴う昇給額は13万円くらい
  26. 26. 8.1.4 推定結果の解釈 会社ごとの切片 新卒の基本年収は, 会社1で383万円くらい 会社2で335万円くらい 会社3で325万円くらい 会社4で482万円くらい 先ほど に比べ かなり妥当な結果に!
  27. 27. 8.1.4 推定結果の解釈 会社ごとの傾き 年齢に伴う昇給額は, 会社1で8万円くらい 会社2で19万円くらい 会社3で12万円くらい 会社4で10万円くらい こちらもまあまあ妥当
  28. 28. 8.1.4 推定結果の解釈 各パラメータのバラツキ データが4社分しかなかったので確信区間が広く 推定され,負の値や極端に大きな値が含まれて いる 600万円もバラツキがある…? 新卒の基本年収のバラツキは156万円くらい 年齢に伴う昇給額のバラツキは11万円くらい ノイズの大きさは29万円くらい ☞ 弱情報事前分布を活用する方法も (10章)
  29. 29. 8.1.5 モデルの比較 モデル式8−1から8−3を図示して比べてみる モデル式8−1 モデル式8−2 モデル式8−3 各会社の年収Yに 共通の切片と傾き 各会社の年収Yに 独自の切片と傾き 各会社の切片と傾きを 決めるパラメータ設定 階層モデル (モデル式8−3) では,切片aと傾きbを 決めるハイパーパラメータσaとσbが設定されてい る
  30. 30. 8.1.5 推定値のシュリンケージ モデル式8−2と8−3の結果を比べてみる 「切片aと傾きbが類似している」という仮定により,  会社4の切片aが全体の中央値に近くなる (左図)  会社4の傾きbが全体の傾きに近くなり,過学習を避 けている (右図) → データのshrinkage
  31. 31. 8.1.6 階層モデルの等価な表現 モデル式8−3と等価かつ簡潔な表現 「すべての会社の切片の平均がa全体平均であり,各社の a[k]は平均a全体平均,標準偏差σaの正規分布から生成され る」と考えるモデル (傾きbも同様) この部分が... こうなる モデル式8−4
  32. 32. 8.1.6 Stanでの実装 parametersブロック 会社差のパラメータ の書き方を変更
  33. 33. 8.1.6 Stanでの実装 modelブロック transformed parameters ブロックをごっそり削除 aとbにゆるい制約
  34. 34. 8.1.6階層モデルの等価な表現 モデル式8−4は,8−3と等価にもかかわらず  記述が倹約的  計算速度が速い という利点がある 複数の階層を持つモデル (次節) ではより顕著に ただし,モデルによっては計算速度が遅くなっ たり,収束しにくくなったりする (らしい)
  35. 35. データ例:業界ごとの社員の年齢と年収 8.1節のデータはある業界の大手4社のもの さらに2つの業界のデータを追加 8.2 複数の層を持つ階層モデル X = 社員の年齢 (実年齢 − 23) Y = 年収 KID = 勤務している会社のID (1 〜 4) GID = 会社が所属する業界の ID (1 〜 3) ・・・
  36. 36. 8.2.1 解析の目的 解析の目的  それぞれの会社 (KID) における年齢Xと 基本年収Yの関係  それぞれの業界 (GID) における平均的な 年齢Xと基本年収Yの関係 が知りたい 業界が異なれば,「新卒の基本年収」と 「年齢に伴う昇給額」の平均も異なる ☞ データの分布を確認する
  37. 37. 8.2.1 データ分布の確認 どの業界でも年収は年齢に 比例してそう 業界によって「新卒の基本年収」 と「年齢に伴う昇給額」が違いそう データの散布図 (全体・業界ごと) を見る
  38. 38. 8.2.1 データ分布の確認 各会社の切片と傾きの業界ごとの分布を見る aとbは山型に分布? aとbの業界平均は異なる (分布のピークが違う) aとbの会社差のバラツキも業界ごとに異なる (分布の幅が違う)
  39. 39. 8.2.2 メカニズムの想像ーその1 シンプルなモデルから考える 「aとbの平均は業界ごとに異なるが,バラツキ は共通」とするモデル 切片aについて, a業界差[g]およびa会社差[k] は Normal(0, σ) から生成 「会社差のパラメータは業界内で類似している」 「業界差のパラメータは類似している」 2つの階層を持つ階層モデル
  40. 40. 8.2.3 モデル式の記述ーその1 モデル式8−5 N = 人数,K = 会社,G = 業界 K2G = 会社kが所属している業界のGID
  41. 41. 8.2.4 Stanで実装ーその1 dataブロック 業界の数をGで宣言 K2G[k]の部分を宣言
  42. 42. 8.2.4 Stanで実装ーその1 parametersブロック a業界平均[g],b業界平均[g] σag,σbg
  43. 43. 8.2.4 Stanで実装ーその1 modelブロック モデル式8−5の 業界平均の部分 モデル式8−5の 会社平均の部分
  44. 44. 8.2.4 Stanで実装ーその1 RコードはK2Gを作成する部分がちょっとテクい 欲しいのは「その会社がどの業界に属 するか」を表す数値ベクトルなので, データの“KID”と“GID”の列にunique () 関数を使って重複部分を削除している
  45. 45. 8.2.4 結果の出力 業界ごとの切片 新卒の基本年収は, 業界1で359万円くらい 業界2で299万円くらい 業界3で499万円くらい → かなり異なる
  46. 46. 8.2.4 結果の出力 業界ごとの傾き 年齢に伴う昇給額は, 業界1で13万円くらい 業界2で29万円くらい 業界3で13万円くらい → 業界2が大きい
  47. 47. 8.2.4 結果の出力 会社差のバラツキ 切片:23万円くらい 傾き:5万円くらい ノイズ:66万円くらい のバラツキがある
  48. 48. 8.2.5 メカニズムの想像ーその2 モデルの仮定を少しゆるめる 「aとbの平均もバラツキも業界ごとに異なる」 → 業界ごとにσaとσbの値がある 「年齢以外の影響 (ノイズ) の大きさも業界ごと に異なる」 → 業界ごとにσYの値がある とするモデル
  49. 49. 8.2.6 モデル式の記述ーその2 モデル式8−6 業界ごとにバラツキが異なるので,σaとσbに添え字 業界ごとにノイズの影響が異なるので,σYに添え字
  50. 50. 8.2.7 Stanで実装ーその2 dataブロック GID[n]を宣言
  51. 51. 8.2.7 Stanで実装ーその2 parametersブロック σa,σb,σYの 宣言を変更
  52. 52. 8.2.7 Stanで実装ーその2 modelブロック 添え字バージョンに変更
  53. 53. 8.2.7 結果の出力 業界ごとの切片のバラツキ 業界1の会社差のバラ ツキがすごい → データ不足?
  54. 54. 8.2.7 結果の出力 業界ごとの傾きのバラツキ 中央値を見ると業界ご とに結構違いそう
  55. 55. 8.2.7 結果の出力 業界ごとのノイズのバラツキ ノイズ (年齢以外の要 因) の大きさも業界に よって異なりそう
  56. 56. 複数階層モデルにおける注意点 モデルの複雑さに対してデータが少ないと, シンプルなモデルから複雑なモデルにする過程 でMCMCが収束しなくなることがある 対処法としては, 諦めてシンプルなモデルに戻る 弱情報事前分布などを使って仮定を増やす など
  57. 57. 8.3 非線形モデルの階層モデル 8.3節では階層モデルを非線形のモデリング に当てはめる データ例:薬の血中濃度の時系列データ(7.3節) 患者に薬剤を投与し,1時間後 (Time 1),2時間 後 (Time 2)…24時間後 (Time 24) の血中濃度 Y (mg/mL) を測定 15人分のデータを追加 PersonID = 1〜16
  58. 58. 8.3.1 解析の目的とデータ分布の確認 解析の目的  それぞれの患者について,頭打ちになる Yの値と,頭打ちになるまでの時間  患者差のバラツキ が知りたい すべてのデータは途中で頭打ち になっている (非線形である) Time24におけるYの値は,山型 の分布になりそう
  59. 59. 8.3.2 メカニズムの想像 7.3節のモデル 患者ごとにモデル式を当てはめることもできる が,a[n]とb[n]に何らかの仮定を置かないと予測 には使えない 頭打ちになるYの値 頭打ちになるまでの時間 a[n]とb[n]は正の値なので,log(a[n])とlog(b[n])が 正規分布に従うという階層モデルを適用
  60. 60. 8.3.3 モデルの記述 モデル式8−7 推定するパラメータ 血中濃度Yのバラツキ: σY 頭打ちになるYの値: a[n],a全体平均,σa 頭打ちになるまでの時間: b[n],b全体平均,σb 先ほどのモデル を拡張したもの N = 患者の人数 T = 測定された時点数 (ここでは6) Time[t] = 測定時の経過時間
  61. 61. 8.3.4 Stanで実装 (Stanコード) dataブロック YはN行T列の 配列型
  62. 62. 8.3.4 Stanで実装 (Stanコード) parametersブロック log(a[n])と log(b[n])の定義
  63. 63. 8.3.4 Stanで実装 (Stanコード) transformed parametersブロック 曲線のパラメータである aとbを定義
  64. 64. 8.3.4 Stanで実装 (Stanコード) modelブロック log(a[n])とlog(b[n]) に対してゆるい制約 モデル式を記述 7章のモデルに患者の人数について のfor文を追記 データが配列型なので二重for文
  65. 65. 8.3.4 Stanで実装 (Stanコード) generated quantitiesブロック 7章と同様に生成量を作成 患者の人数についてのfor文を追記
  66. 66. 8.3.4 Stanで実装 (Rコード) Yは二次元配列 Rではmatrixやdata.frameで渡す
  67. 67. 8.3.5 推定結果の解釈 推定された各パラメータの値 ※σY以外は対数スケールなので注意 各患者のa[n]とb[n]についても 推定され,患者ごとの予測分 布を描くこともできる
  68. 68. 8.4 ロジスティック回帰の階層モデル 8.4節ではロジスティック回帰の階層モデル を扱う データ例:学生の出欠データ(5.3節) 学生の授業への出席 (0: 欠席,1: 出席) を, ・アルバイトが好きかどうか (0: 嫌い,1: 好き) ・学問への興味の強さ (200点満点) ・授業日の天気 (A: 晴れ,B: 曇り,C: 雨) によって説明
  69. 69. 8.4 ロジスティック回帰の階層モデル 5.3節のモデル A = アルバイトが好きかどうか (0: 嫌い,1: 好き) Score = 学問への興味の強さ (200点満点) Weather = 授業日の天気 (A: 晴れ,B: 曇り,C: 雨) Y = 授業に出席したかどうか (0: 欠席,1: 出席) 上記のモデルでは「学生による出席行動の差 (学生 差)」や「科目に人気があるかどうかの差 (科目差)」な どは考慮されていない 学生差・科目差を考慮した階層モデルを考える
  70. 70. 8.4 ロジスティック回帰の階層モデル 学生差と科目差について考慮するため,科目の ID (CourseID) を取得し,学生に関するデータと 出欠記録に関するデータを作成 学生に関するデータ 1行が1人分 出欠記録に関するデータ 1行が1出欠分
  71. 71. 8.4.1 解析の目的 解析の目的  与えられた説明変数から応答変数がどれ ほど予測できるか知りたい  それぞれの説明変数が出席確率にどれほ ど影響しているか知りたい  学生差のバラツキと科目差のバラツキが どれほどか知りたい
  72. 72. 8.4.2 メカニズムの想像 出席率を決める要素を, ①学生に依存するもの ②科目に依存するもの ③一回ごとの授業に依存するもの に分けて考える 学生に依存 アルバイト好/嫌 学問への興味 学生差 科目に依存 科目差 授業に依存 授業日の天気
  73. 73. 8.4.2 メカニズムの想像 それぞれの要素について,説明変数を使った回 帰を行い,それらの要素の和をロジスティック 関数で変換して出席率を求める x[i] = 切片 + + + 出席率q[i] ロジスティック関数で (0, 1) の範囲に変換
  74. 74. 8.4.3 モデルの記述 モデル式8−8 N = 学生の人数; I = 出欠データ数 (ここでは2396); C = 科目数
  75. 75. 8.4.3 モデルの記述 モデル式8−8 N = 学生の人数; I = 出欠データ数 (ここでは2396); C = 科目数 学生に依存 アルバイト好/嫌 学問への興味 学生差 学生に依存する項は アルバイト好/嫌 + 学問への興味 +学生差 学生差は正規分布に従うと仮定
  76. 76. 8.4.3 モデルの記述 モデル式8−8 N = 学生の人数; I = 出欠データ数 (ここでは2396); C = 科目数 科目に依存する項は科目差そのもの 科目差は正規分布に従うと仮定 科目に依存 科目差
  77. 77. 8.4.3 モデルの記述 モデル式8−8 N = 学生の人数; I = 出欠データ数 (ここでは2396); C = 科目数 授業に依存する項は説明変数Weather と比例 授業に依存 授業日の天気
  78. 78. 8.4.3 モデルの記述 モデル式8−8 N = 学生の人数; I = 出欠データ数 (ここでは2396); C = 科目数 各要素の和をとって,ロジスティック 関数により出席確率q[i]に変換出席率q[i] ※切片b1は最後の式にのみ入ることに注意 (各要素を代入する際に切片1+切片2のような項が 現れ,収束しなくなる)(らしい)
  79. 79. 8.4.4 Stanでの実装 (Stanコード) dataブロック PersonIDとCourseID を宣言
  80. 80. 8.4.4 Stanでの実装 (Stanコード) parametersブロック b学生差[n]と b科目差[c]を宣言 σPとσCを宣言
  81. 81. 8.4.4 Stanでの実装 (Stanコード) transformed parametersブロック 学生に依存する項 科目に依存する項 授業に依存する項 を作成
  82. 82. 8.4.4 Stanでの実装 (Rコード) 天気の文字列を数値に置き換え 出力が多いため 一部の変数のみをサンプリング
  83. 83. 8.4.5 推定結果の解釈 各パラメータの事後分布と確信区間 「アルバイトが好き(b2)」と 「天気が雨(b4)」は出席率に 負の影響 「学問への興味(b3)」は正の影響 学生差(s_P)の影響は小さいが, 科目差(s_C)の影響は大きそう
  84. 84. 8.4.5 推定結果の解釈 科目差の事後分布 最も出席率の高い科目と最も 低い科目のMAP推定値は3以上 (オッズで20倍程度)差がある = 科目差の影響は大きい 階層モデルはロジスティック回帰とも簡単に組み合 わせることが可能 (例:商品購入確率を,顧客に依存する要素,商品に依存する 要素,購買に依存する要素などに分解してモデリング可能)

×