# 第3回:主成分回帰 ###### tags: `service-data-science-2023` ## 今日の内容 1. グループごとのテーマの検討状況を報告して頂く 2. 主成分分析の3回目 3. 回帰分析の復習 4. 主成分回帰の1回目 (使うのはもう少し後) 5. グループワーク1:宮内さんのデータをグループで主成分分析して議論してみる 6. グループワーク2:グループごとのテーマについて同様のデータを取得する準備 ## データ、資料等 講義の資料 * [このレジュメのPDF版](https://keio.box.com/s/sqa4mj3byxmoo1xr8qk6o9xjueyagom3) * [スタディノート](https://keio.box.com/s/vc0v189z33oflvigowbgojk6ciog345o) (I, II, IIIを含む多変量解析の参考書のフォルダへのリンク) * [スタディノートのカラー版](https://keio.box.com/s/ei101edjwcdh8uk1om9ucujipw53xfca) * [回帰分析の手順](https://hackmd.io/@watalu/Hkc7NPjb6) JMPのデータ * [成績のデータ(JMP用)](https://keio.box.com/s/fj2vr82xtm4jasbhjf122biwzg53krv1) * [ビールのデータ(JMP用)](https://keio.box.com/s/qnc7uhu4v4c42qey31gth9gqj6aivnd5) * [宮内さんの第1回アンケートのデータ (グループワーク用)](https://keio.box.com/s/snrg1vjjfaltzu1cyv5mzx5hmcwhy4gj) その他、今回の[ファイル置き場](https://keio.box.com/s/coi29dp09m18qa9tzd53p4md3ioc62go)。 ## クオリティマネジメントからの復習 健康マネジメント概論でも説明した気がしますが、データサイエンス系の3科目では概念図と特性要因図を分析の前に描いてもらっている。 * [概念図](https://hackmd.io/@watalu/HyVlIaMuc) * [特性要因図](https://hackmd.io/@watalu/HJsnVAfuq) これら回帰分析や主成分分析、因子分析について、[高橋武則先生の講義](https://hackmd.io/@watalu/B1_kzr3O9)の第1回から第3回までを視聴していただくと良いかもしれない。10年ほど前までヘルスデータサイエンス(この科目の前身)を担当されていた先生のビデオ講義である。サービスデータサイエンスと同じことを目指しているが、高橋武則先生と渡辺美智子は少し方向性が異なっていて、興味深い。 ## 主成分分析の3回目 ### 主成分分析とは (復習) 主成分分析は多変量データを要約する手法の一つであり、データの中の変数の数よりは少ない数の線形の合成関数を導く。それらの合成関数は主成分と呼ばれ、第一主成分から順に、主成分の分散が最大かつ、自分より小さな番号の主成分と直交するように、順に導き出される。そのように導き出された主成分の分散は相関係数行列の固有値、主成分の重みは相関係数行列の固有ベクトルに帰着する。 主成分分析の目的はいくつかある。 1. 多変量データの次元を縮約する。機械学習で用いられる、画像その他のパターン認識でも特徴量の抽出として用いられる、データアナリティクスでも用いられる、主成分分析自体はとても簡単なデータの操作である。 2. データアナリティクスの中でより深く、新たな指標を作るために用いられる。元の変数から新しい評価指標を作成する、スコアリングとも。洋服や下着のサイズの決め方がこれで、幅や高さを単純な数値で±している訳ではなく、日本人の体型分布をよくカバーするようにサイズごとの寸法が決められる。 3. 新しい指標(主成分)の作成がゴールではなく、その指標に基づいて、対象を分類(クラスタリング)したり、個々の対象のポジショニング(可視化、2次分析)を行う。 4. 負荷量が似通っている変数は似たような変数として分類できる。同様にスコアが似通っている対象は似たような対象として分類できる。変数の分類と対象の分類は双対の構造を持っている。 5. 教師あり問題が正解の再現のための学習問題であるのに対して、教示なし問題は正解のない学習問題である。このように正解のない問題を学習する機械(AI、プログラム)は、知識や知性の獲得に繋がる可能性があり研究の方向性としては注目されている。 これら以外にもありそうだが、この科目では渡辺美智子先生の分類に従うことにする。 ### 9教科の主成分分析 (点数) 当たり前のことだが、元のデータによって生み出される主成分は異なる。折に触れて使用している成績データの9科目すべてを主成分分析にかけると、次のような主成分を得る。 ![](https://hackmd.io/_uploads/rk7T3uims.png) 第一主成分は「大きさ」を表す。第一主成分の得点が大きいほど、各科目の点数も高めになる。第二主成分は体育を特に重視する。負荷量行列を見ても、もう一つ美術が少し影響を受ける。第一主成分の得点が大きくて、第二主成分の得点も大きいと、体育までも特にいい可能性が高い。第三主成分は技術家庭の軸であるが、第三主成分の得点は、第一、第二の点数の影響を修正するような役割を果たす。これは各主成分の解釈を、主成分の分散(固有値)と寄与率、また他の主成分の負荷量を考慮しながら行う必要があることを意味する。 主成分分析は、多変量データを直交する成分に分解する。しかし、各主成分の値を違いに独立に操作できるとは限らない。成績評価に関しては例えば、科目の得意不得意以前に、勉強時間や勉強への取り組み姿勢などが背後にある可能性がある。 ### 5教科の主成分分析 (点数) 主成分分析は、要約する多変量データによって、異なる結果をもたらす。異なる多変量データに異なる主成分分析の結果をもたらすのは当然として、同一の多変量データに対しても同様となる。次に、いわゆる主要5教科のみの主成分分析を行う。 ![](https://hackmd.io/_uploads/S1OA42sXi.png) 第一主成分が大きさを表すのは同様だが、第二主成分が国語+、数学ーと、文理の差異を際立たせるような意味を持つようになる。これは元の分析では、第三主成分と第八、第九主成分あたりが担っていた役割である。このように、どのような組み合わせの変数を要約したいか、も主成分分析の使い所を定める。 ### 5教科の主成分分析 (0-1化) ついでに、5教科の各点数を教科ごとの平均値と比較して、平均よりも点数が高ければ1、そうでなければ0と離散化して、主成分分析を行ってみる。 ![](https://hackmd.io/_uploads/B1aJlYjXo.png) また、教科ごとの平均値ではなく、50点と比較して0-1化して、同様に主成分分析を行ってみる。 ![](https://hackmd.io/_uploads/S1hWeFo7i.png) 最初の100点満点のデータの5教科の主成分分析と比べて、どうであろうか。 このデータはもともと、科目ごとの点数が一山のヒストグラムである。 ![](https://hackmd.io/_uploads/Syuheti7j.png) また科目間の散布図行列も、およそ一つの雲に収まるような散布状況となっている。 ![](https://hackmd.io/_uploads/Syn3gtomi.png) この場合には、離散化をしても、よほど下手なことをしない限り、似たような特徴は抽出される。ただし連続尺度のままの方が得られる情報が多い。離散尺度に変換しないと使えない手法があるなど、よほどのことがない限り、連続尺度のまま取り扱うのがよい。 また実は、このデータは英語に関して、成績が2群に分かれる可能性が〔グラフ〕ー〔散布図行列〕のノンパラメトリック密度推定からは示唆される。 ![](https://hackmd.io/_uploads/SkyTbtoms.png) しかしこれは潜在プロファイル分析の範疇なので、言及に留める。 ### 5教科+性別の主成分分析 (0-1化) もうひとつ、性別を変数に加えてみる。性別は名義尺度だが、女性を1、男性を0とコード化して分析に加えた。 ![](https://hackmd.io/_uploads/r1v3XFimo.png) 性別が第一主成分にはほとんど寄与せず、第二主成分で体育と同等の寄与を見せる。男女が唯一、体育との相関が高い。でも体育の授業は男女別の実施のこともある。これは要約しているように見えるが、男女の意味がよく分からない。 ### カットオフ(離散化) これらの2値化は、たまに行われる。準に2値化するかで、その後の分析に結果が変わってきてしまうので、気軽にはしないのがよい。連続尺度の変数を3段階以上の順序尺度に変換することも同様で、研究の内容に対してリーズナブルな離散化が望まれるが、どうすればリーズナブルか、ということは分野や研究によって異なり、統一されたルールはない。 ![](https://hackmd.io/_uploads/rychVqoms.png) ![](https://hackmd.io/_uploads/B1JT4comi.png) カットオフは切ること、カットオフ値は離散化する際の境界値のこと。 A以上B以下なら2といったら、AとBがカットオフ値で、2が離散値。 ### 演習:制服の研究に関するデータの主成分分析 宮内絢子さんのデータ。やってみて。 ### まとめ 主成分分析は、連続尺度の多変量データの次元を縮約する手法である。順序尺度の多変量データの次元の縮約に用いられることもよくある。しかし分類尺度のデータを数値化して主成分分析に加える際には、いろいろな吟味をするのが良い。 ## 回帰分析、覚えてますか? 説明変数が10個、目的変数が1個のデータに普通に回帰分析を行う。 ```graphviz digraph PCAREG { node [shape=rectangle, style=rounded] rankdir=LR X1 -> Y X2 -> Y X3 -> Y X4 -> Y X5 -> Y X6 -> Y X7 -> Y X8 -> Y X9 -> Y X10 -> Y Y -> E [dir=back] } ``` $$ Y = \beta_0 + \beta_1 X_1 + \cdots + \beta_p X_p + \epsilon $$ いきなり回帰分析を実施して生じる可能性のある問題は? * 全体のモデルになってない可能性 $\Longrightarrow$ てこ比プロット * 影響力の小さな変数ばかり $\Longrightarrow$ 重相関係数の平方(決定係数) * とりあえず変数をぜんぶ入れただけで説明しようとしている $\Longrightarrow$ t検定、自由度調整済み決定係数、AICやBICで変数選択 * 説明されていない構造がある $\Rightarrow$ 非線形の効果があるかもしれない $\Longrightarrow$ 残差プロット、べき乗項の追加 * 説明されていない構造がある $\Rightarrow$ 交互作用があるかもしれない $\Longrightarrow$ 残差と複数の項のプロット、積の項 * 誤差$\epsilon$が正規分布に従うという仮定がなりたってない $\Longrightarrow$ 残差のヒストグラム、正規プロット * 分類尺度と順序尺度の変数の扱い $\Longrightarrow$ 変数の属性の変更、コード化の変更 いろいろあった。それぞれ生じないかもしれないが、分析をしながら確認したり、修正したりして、最終的なモデルを得る。 * 変数の影響の強さを$P$値で読みとってはだめ。$P$値はその係数が$0$かどうかの仮説検定の、帰無仮説の下での検定統計量の値の相対的な位置を表す「だけ」。$P$値は有意水準(例えば$5\%$)より小さいかどうかだけを見る。有意水準が組織や分野によって異なるかもしれないので、有意水準を入力して帰無仮説の保留/棄却を表示するよりは、$P$値をそのまま表示してユーザに仮説検定を実施させている「だけ」。 * 変数選択はあくまでも一助。データが真に正しいモデルを提案してくれるのは、よほど大きなサンプル数で分析できたとき。それ以外は仮説思考。先行研究や関連研究を参考にして仮説を形成し、そこから分析を出発することも大事。 * そもそもデータに基づく実証研究は、既存の理論を無視して、純粋にデータから結論を得ていい訳ではない。 * 回帰分析に基づく研究には、様々な攻略法がある。サンプリングの偏り、結論と既存の理論との間の齟齬、介入研究と観察研究、線形性と非線形性、複数の異質な層の存在、等。これらを乗り越えるのは自分。 * 残差のヒストグラムの裾は、大きく外れているレコードが集中している。そことてこ比プロットとの照合はしておくといい。 * 回帰分析の目的が、因果関係の解明にあるか、予測にあるかを明確にする。アウトカムの発生と同時点の共変量を用いて予測モデルを作ることには意味がない。 今日はそれに加えて、次のものを取り上げる。 * 多重共線性 $\Longrightarrow$ VIF ### 多重共線性は怖い ビールの出荷高の回帰問題に戻り、今まで通りの手順で分析してみる。重相関係数の平方(決定係数)が0.95で、まあまあ良さそうな感じ。 ![](https://hackmd.io/_uploads/r1AeRYo7o.png) ここでVIFを表示させてみる。〔分析〕 → 〔モデルのあてはめ〕 → 〔手法:標準最小2乗〕 → 〔パラメータ推定値〕 → 〔右クリック:列〕 → 〔VIF〕 ![](https://hackmd.io/_uploads/H1Q5J5oms.png) VIFとは、説明変数の相関係数行列の逆行列の対角成分のこと。その変数を目的変数とし、他の説明変数を用いて重回帰分析を行った時の決定係数を${R_j}^2$とおくと、 $$ VIF_j = \frac{1}{1-{R_j}^2} $$ となる。この値が大きいと、多重共線性が生じている可能性が高く、一般にこの値は10以下であることが望ましい、といろんなところに書いてある。 いくつかの変数でVIFが10を超えている。その下に推定値の相関係数行列も掲げるが、相関が強すぎる。 ![](https://hackmd.io/_uploads/rkfve9sXo.png) これでは周辺検定を用いて回帰係数の有意性の検定はできないし、各係数の推定値も。改めて各変数の相関係数行列を見てみる。 ![](https://hackmd.io/_uploads/HyLM-qsQi.png) あまり強い相関はないが、ともかく多重共線性が発生している。このときは、説明変数を減らさないといけない。最もVIFが大きい東京の気温を削ってみる。 ![](https://hackmd.io/_uploads/BkzDWqoXs.png) あら・・・。はい、これで問題なし。 東京の変数を入れておいても、次の単回帰の結果と推定値は矛盾しない。 ![](https://hackmd.io/_uploads/rJ1rfqjms.png) また12ヶ月それぞれの効果も増減の傾向は同様だが、とにかく検定の結果がまったく異なる。このとき、回帰係数の推定値も不安定である可能性が高く、多重共線性は避けなければならない。 ### 多重共線性の回避策 多重共線性を回避するには、VIFが大きく、他の変数との相関が強い変数から順に減らしていくことが考えられる。しかしそれでは、研究に必要な変数をVIFのせいで奪われてしまう可能性がある。 多重共線性は変数選択によっても(偶然に)回避されることがある。 ### 変数選択 (ステップワイズ法以外も) ![](https://hackmd.io/_uploads/rkPYI2jmo.png) ![](https://hackmd.io/_uploads/Skxq8hjmj.png) 1. 評価したい要因は変数選択に強制的に加える:ランダム化比較試験の結果を評価する場合,治療群を表す共変量を含まなければ意味をもたない.つまり,このような場合には,背景因子などの他の共変量を調整したうえで治療群(評価変数)を調べることに意義がある. 2. 変数増加法の落とし穴:標本サイズが小さい場合に,変数増加法を用いて変数選択を行う場合,結果の解釈が困難なモデルを選択することがしばしばある.また,本当は必要な共変量が取り込まれる前に変数選択が終了する場合がある. 3. 多数の共変量(項目)がある場合の留意点:医学系研究では,多数の調査項目(共変量)を評価に用いることは少なくない.このような場合には,全ての共変量を用いて変数選択を行うのではなく,事前スクリーニングを行うことが推奨される.事前スクリーニングでは,共変量毎に単変量解析(1個の共変量による回帰モデルを推定する)を実施し,その回帰係数に対する検定(回帰係数が0であるか否かを評価する検定)のp値や回帰係数(オッズ比,ハザード比)を用いる. 4. 欠測が多い共変量(項目)には注意が必要である:多変量解析では,共変量のなかで1個でも欠測があれば,その被験者を削除しなければならない.そのため,欠測が多い共変 量をモデルに含めると,多くの被験者を削除することになる.また,観測方法が煩雑な場合には,欠測が多くなる傾向にあこのような共変量は,予め変数選択の候補から覗いておくことが望ましい. 5. 可能であれば総当たり法を用いる:変数増加法や変数減少法が必ずしも最適なモデルに到達するとは限らない.最適なモデルを選択できる唯一の方法は,すべての候補モデルを評価する総当たり法のみである.共変量の数が10個の場合,候補となるモデルの数は1,023個である.そのため,臨床的知見あるいは,事前スクリーニングなどを用いて変数選択に用いる共変量を可能な限り少なくし,そのもとで,総当たり法によって変数選択を実施することが考えられる. ## 回帰分析の前に主成分分析をやる目的 ### 主成分分析は? * 情報の縮約ができる * 無相関(正規性の仮定の下では独立)な成分(軸)を作ることができる * 主成分軸を用いた主成分得点を散布図にプロットすることで、対象のポジショニングや近いもの同士を集めた分類ができる * 負荷量プロットにより変数の分類ができる ここでは無相関がポイント。 ### 主成分分析を用いると 説明変数を予め、多重共線性のない世界に連れていくことができる。また似たような評価をしている複数の項目をまとめあげる(縮約する)こともできる。その時の説明変数は主成分である。主成分分析の目的は要約であり、回帰分析の目的が予測や説明である。この両者を組み合わせると、共変量を要約して新しい指標を作り、それを予測変数に用いる分析が可能になる。 ```graphviz digraph PCAREG { node [shape=rectangle, style=rounded] rankdir=LR X1 -> Z1 X2 -> Z1 X3 -> Z1 X4 -> Z1 X5 -> Z1 X6 -> Z1 X7 -> Z1 X8 -> Z1 X9 -> Z1 X10 -> Z1 X1 -> Z2 X2 -> Z2 X3 -> Z2 X4 -> Z2 X5 -> Z2 X6 -> Z2 X7 -> Z2 X8 -> Z2 X9 -> Z2 X10 -> Z2 Z1 -> Y Z2 -> Y Y -> E [dir=back] } ``` 主成分を行ったら、単に番号で呼ぶのではなく、名前もつけておくと良い。 上のように、主成分分析を共編量のデータに一度に行うこともあれば、モデル図を描いて、変数を意味のあるグループに分け、グループごとに主成分分析を行って、説明変数に用いることもある。 ```graphviz digraph PCAREG { node [shape=rectangle, style=rounded] rankdir=LR X1 -> Z11 X2 -> Z11 X3 -> Z11 X4 -> Z11 X1 -> Z12 X2 -> Z12 X3 -> Z12 X4 -> Z12 X5 -> Z21 X6 -> Z21 X7 -> Z21 X8 -> Z21 X9 -> Z21 X10 -> Z21 X5 -> Z22 X6 -> Z22 X7 -> Z22 X8 -> Z22 X9 -> Z22 X10 -> Z22 Z11 -> Y Z12 -> Y Z21 -> Y Z22 -> Y Y -> E [dir=back] } ``` グループの単位は、質問項目が構造的に整理されていれば、中問単位や大問単位にとるのも一案である。例えば[病院機能評価の診断結果](https://www.report.jcqhc.or.jp)であれば、大分類(一桁目)や中分類(二桁目)ごとに主成分分析を行うなど。 この方向に発展させたデータ分析法が、[高橋武則先生の講義](https://hackmd.io/@watalu/B1_kzr3O9)のアプローチである。初級がサービスデータサイエンス、中級と上級は多変量因果解析に向けた内容となっている。