📊

主成分分析を理解したい!

に公開

こんにちは!初めての記事になります。
このノートは、私が学んでいる統計学の内容を自分なりにわかりやすく整理したものです。
数学が得意ではない文系大学生の視点から、できるだけやさしく説明していきます。

主成分分析と因子分析の違い

共通点:どちらも「変数(次元)の削減」を目的とした多変量解析

多変量解析とは、複数の変数に関するデータをもとに、それらの相互関係を分析する統計手法の総称です。
参考:https://www.macromill.com/service/data-analysis/analysis/multivariate-analysis/

主成分分析(PCA)と因子分析(FA)は、いずれも「多くの観測変数を少数の代表的な変数にまとめる」点で共通しています。
ただし、その「まとめ方」や「背後にある考え方」が異なります。


因子分析との違い

ここでは、**主成分分析(Principal Component Analysis; PCA)**と
**因子分析(Factor Analysis; FA)**を比較しながら、その考え方を整理します。
どちらの手法も、変数(次元)の削減を目的とする多変量解析の一種です。


主成分分析と因子分析の考え方の違い

両者の構造を図に示します。

主成分分析(左) 因子分析(右)
観測変数から**新しい変数(主成分Z)を合成(要約)**する 観測変数の背後にある**共通因子fを抽出(説明)**する

主成分分析では、複数の観測変数を線形的に組み合わせて、
より少数の**代表的な変数(主成分)**を作ります。
一方、因子分析では、観測変数の背後に存在すると考えられる
**共通の原因(共通因子)**を推定します。


▶ 主成分分析と因子分析の違い

主成分分析(合成) 因子分析(分解)
主成分 Z → 観測変数 X₁, X₂, X₃ 共通因子 f → 観測変数 X₁, X₂, X₃
z = a_1x_1 + a_2x_2 + a_3x_3 x_i = b_i f + e_ie_i: 誤差)
矢印:観測値 → 主成分 矢印:因子 → 観測値

主成分分析は、観測変数を合成して「代表的な軸」を作り出す方法です。
一方、因子分析は、観測変数の共通部分(因子)を見出し、
それがデータのばらつきをどのように説明しているかを明らかにします。

つまり:

  • 主成分分析 → 「観測値を要約」して代表的な変数を作る
  • 因子分析 → 「観測値を説明」する潜在的な因子を見つける

両手法の使い分け

両手法は、結果として似た形になることもありますが、
根本的な考え方が異なるため、目的に応じて使い分ける必要があります。

主成分分析が適している場合

  • 多数の観測変数から、総合的な指標を作りたいとき
  • 複数の主成分を合成することで、
    **互いに直交(独立)**した代表軸が得られる
    → 回帰分析において、多重共線性を回避できる
  • 主に経済・マーケティング・データ分析分野で利用される

因子分析が適している場合

  • 心理学・教育学・社会学などの分野で、
    複雑に入り組んだ観測変数の背後にある共通の潜在要因を推定したい場合
  • 例:複数の設問から「知能」「誠実性」「社会不安」などを推定
  • 仮説を立てて、その因果関係を検証する分析

考え方のまとめ

比較項目 主成分分析 (PCA) 因子分析 (FA)
目的 多くの変数を要約して代表的な指標を作る 観測変数を説明する潜在因子を明らかにする
数学的操作 観測値を合成(要約) 観測値を分解(説明)
矢印の向き 観測変数 → 主成分 因子 → 観測変数
説明の観点 データの分散を最もよく表す方向を探す 共通因子による構造を推定する
仮説設定 仮説を立てずに使える 仮説を立てて検証する

応用上の位置づけ

  • 主成分分析は、主に「要約」や「可視化」「変数削減」に使われ、
    機械学習の**前処理(次元削減)**にも広く利用されます。

  • 因子分析は、観測値の背後にある心理的・社会的構造を明らかにする分析です。
    心理尺度の開発や学力・態度などの潜在的特性の推定に用いられます。


両者の共通点

両手法とも、新しい変数(主成分または因子)に基づいて個体ごとのスコアを算出できます。
このスコアをもとに、個体を分類・類型化したり、回帰モデルに利用したりすることができます。

まとめ:

  • PCA → 仮説を立てず、データの要約に強い
  • FA → 仮説を立てて、構造の解釈に強い

まず、主成分分析とは...(ネットリ)

  • 主成分分析(PCA, Principal Component Analysis)の目的は、複数の変数で観測されたデータを、少数の変数(主成分)で上手に表現することです。
  • より正確には、データの分散が最大になる傾きに引いた直線をひくことになります。

主成分とは?

たとえば、2つの変数 x_1, x_2 があるとき、
それぞれの値を2次元平面上にプロットすると、点の集まり(雲のような分布)ができます。
このとき、主成分とは、その雲の形に最もよく沿う方向の軸のことです。

第1主成分 z_1

  • x_1x_2平均点(重心)を通る直線のうち、
    データの
    ばらつき(分散)が最大
    になる方向を選びます。
  • つまり、「データが最も伸びている方向」を表します。

第2主成分 z_2

  • 第1主成分の軸では表現しきれなかった、残りのばらつきを説明します。
  • 同じく重心を通り、かつ**第1主成分に直交(90°)**する方向をとります。
  • 直交させることで、情報の重なりがないようにしています。

主成分の分散

  • 主成分:z = a_1x_1 + a_2x_2

最大化する主成分zの分散V_z

  • V_z=\frac{1}{n}\sum(z-\bar{z})^2

両変数とも標準化されているので、zの平均は0となり、以下の通り

  • \rightarrow \frac{1}{n}\sum z^2

  • \rightarrow \frac{1}{n}\sum(a_1x_1+a_2x_2)^2

そして、x_1x_2の積和は「標準変化量の今日分散である相関係数rn倍」(節1.6参照)となるため、

  • V_z=\frac{1}{n}{a_1^2+a_2^2+2r_{x_1 x_2}a_1 a_2}
  • V_z=\frac{1}{n}\{a_1^2\sum x_1^2 + 2a_1 a_2 \sum x_1 x_2 + a_2^2\sum x_2^2\}
  • = a_1^2+a_2^2+2r_{x_1 x_2}a_1 a_2

制約a_1^2+a_2^2=1 を置く

主成分分析では、分散 V_z=a_1^2+2r,a_1a_2+a_2^2 を最大化したいのですが、もし a_1,a_2 をどんどん大きくすれば、分散はいくらでも大きくなってしまいます。
つまり、このままでは「方向(比率)」ではなく「大きさ(スケール)」の違いが影響してしまうのです。

しかし、私たちが本当に知りたいのは「どの方向(どんな比率)に進むと一番ばらつくか」です。
その“方向”を公平に比べるために、ベクトルの長さを 1 に固定します。

この条件

a_1^2+a_2^2=1

は、a_1,a_2 を平面上にプロットしたとき、**原点を中心とした半径1の円(=単位円)**の上にあることを意味します。

分散の最大化

このような、等式の制約がついた最大化問題は、ラグランジュの未定乗数法で解くことができます。
まず、\lambdaという、第3の変数(ラグランジュ未定乗数)を用いて、次のようなラグランジュ関数Lを作ります。
具体的には、制約条件を”=0”の形にしたa_1^2+a_2^2-1=0\lambdaをかけて、最大化したい関数から引く操作をしていますね。

L(a_1,a_2,\lambda)=a_1^2+a_2^2+2r_{x_1 x_2}a_1 a_2 - \lambda(a_1^2+a_2^2-1)

こちらの関数をそれぞれの変数a_1,a_2,\lambdaで偏微分します。それぞれ0と置き、2で割って、\lambdaの項を右辺に移動すると、次のような3元連立式が得られます。

\frac{\partial L}{\partial a_1}= 2a_1 + 2 r_{x_1 x_2} a_2 - 2\lambda a_1 \;\Rightarrow\;a_1 + r_{x_1 x_2} a_2 = \lambda a_1

\frac{\partial L}{\partial a_2}= 2a_2 + 2 r_{x_1 x_2} a_1 - 2\lambda a_2 \;\Rightarrow\;r_{x_1 x_2} a_1 + a_2 = \lambda a_2

\frac{\partial L}{\partial \lambda}= -(a_1^2 + a_2^2 - 1) \;\Rightarrow\; a_1^2 + a_2^2 = 1

これを解くことで、分散V_zの最大化を与えるa_1, a_2の候補が求まると言うことです。

しかし、ここでは、行列を使った"固有値問題"として解きます。
まず、3本目の式は制約条件式そのものなので、最初の2本を連立方程式と考え、行列で表します。
(最初の日本を\lambdaで形した後に3本目を用いてa_1, a_2を求めます。)

固有値問題の式 \begin{cases} a_1 + r_{x_1 x_2} a_2 = \lambda a_1 \\ r_{x_1 x_2} a_1 + a_2 = \lambda a_2 \end{cases} \Rightarrow \begin{pmatrix} 1 & r_{x_1 x_2} \\ r_{x_1 x_2} & 1 \end{pmatrix} \begin{pmatrix} a_1 \\ a_2 \end{pmatrix} = \lambda \begin{pmatrix} a_1 \\ a_2 \end{pmatrix}

この行列の方程式は、普通は、ベクトルに行列をかけると向きも大きさも変わってしまうのに、このベクトルは行列をかけても向きは変わらず、、大きさのみ(\lambda倍)に変わっています。

このように、行列をかけても向きは変わらず大きさのみ変わるような、行列に特有なベクトルのことを固有ベクトル、大きさのみを変える倍率\lambdaのことを固有値と言います。
そして、実際に値の入った行列から固有値を求め、その固有値から固有ベクトルを求めることを固有値問題という。

固有値問題を解く意味

固有値問題の式の両編に、固有ベクトルの転置行列をかけて方程式にしてみます。そうすると、先ほどの主成分zの分散V_z隣、右辺は制約式より固有値\lambdaになります。

\begin{pmatrix} a_1 & a_2 \end{pmatrix} \begin{pmatrix} 1 & r_{x_1 x_2} \\ r_{x_1 x_2} & 1 \end{pmatrix} \begin{pmatrix} a_1 \\ a_2 \end{pmatrix} = \lambda \begin{pmatrix} a_1 & a_2 \end{pmatrix} \begin{pmatrix} a_1 \\ a_2 \end{pmatrix}

\Rightarrow a_1^2 + a_2^2 + 2r_{x_1 x_2}a_1 a_2 = \lambda (a_1^2 + a_2^2)
\Rightarrow V_z=\lambda

つまり、観測データから得られた相関行列の固有値問題をとけば、主成分の分散(\lambda)と、その係数(固有ベクトル)が求まるのです。

  • 相関行列の最大固有値V_z の最大値(第1主成分の分散)

  • その固有ベクトルが第1主成分の係数比(方向)

  • 相関行列の固有値を求める

  • その固有値から固有値ベクトルを求める

固有値問題の具体的な解法(2変数の相関行列)

ここでは相関行列

  • R=\begin{pmatrix}1 & r_{x_1 x_2}\\ r_{x_1 x_2} & 1\end{pmatrix}
    を使って、第1・第2主成分の 固有値固有ベクトル(係数) を具体的に求めます。

1) 固有方程式(行列式が 0 になる条件)

主成分の係数ベクトル a=\begin{pmatrix}a_1\\ a_2\end{pmatrix} は固有値問題

  • R\,a=\lambda\,a
    を満たします。これは同値に
  • (R-\lambda I)\,a=\mathbf{0}
    です。ここで a\neq \mathbf{0}(自明でない解) を得るには、(R-\lambda I) が**逆行列を持たない(特異)**必要があります。
    逆行列があると (R-\lambda I)^{-1} を両辺に掛けて a=\mathbf{0} しか残らないからです。
    この「逆行列を持たない」条件は
  • \det(R-\lambda I)=0
    で表せます。これを 固有方程式 と呼びます。

具体的に

  • \det\!\Big(\begin{pmatrix}1 & r\\ r & 1\end{pmatrix}-\lambda\begin{pmatrix}1&0\\0&1\end{pmatrix}\Big)
    =\det\!\begin{pmatrix}1-\lambda & r\\ r & 1-\lambda\end{pmatrix}
    %=(1-\lambda)^2-r^2=0

よって

  • (1-\lambda)^2=r^2 \;\Rightarrow\; 1-\lambda=\pm r
  • \Rightarrow\;\boxed{\lambda_1=1+r},\quad \boxed{\lambda_2=1-r}

\lambda_1\ge\lambda_2r\ge 0 を想定)なので、第1主成分の分散は \lambda_1、第2主成分の分散は \lambda_2 です。


2) 固有ベクトル(係数)の関係式をつくる

固有値を1つ選び、(R-\lambda I)a=\mathbf{0} を解くと、a_1,a_2が求まります(長さは後で a_1^2+a_2^2=1 で正規化)。

  • \begin{pmatrix}1-\lambda & r\\ r & 1-\lambda\end{pmatrix}\begin{pmatrix}a_1\\ a_2\end{pmatrix}=\begin{pmatrix}0\\ 0\end{pmatrix}

2本の式は一次従属なので、どちらか1本で比を出せます。


3) 第1主成分(\lambda_1=1+r のとき)

\lambda=\lambda_1=1+r を代入すると 1-\lambda=-r なので

  • \begin{cases} -r\,a_1 + r\,a_2=0\\ r\,a_1 - r\,a_2=0\end{cases}\;\Rightarrow\;a_1=a_2

長さ制約 a_1^2+a_2^2=1 より

  • a_1=a_2=\dfrac{1}{\sqrt{2}}=\dfrac{\sqrt{2}}{2}

したがって 第1主成分

  • \boxed{z_1=\dfrac{\sqrt{2}}{2}x_1+\dfrac{\sqrt{2}}{2}x_2}

幾何学的には、係数比が 1:1 なので、x_1 軸と x_2 軸に対して 45° の方向(等角)です。r の大きさに依らず、r\ge 0 のとき第1主成分の方向はこの45°になります(分散量だけが 1+r によって変わります)。


4) 第2主成分(\lambda_2=1-r のとき)

\lambda=\lambda_2=1-r を代入すると 1-\lambda=r なので

  • \begin{cases} r\,a_1 + r\,a_2=0\\ r\,a_1 + r\,a_2=0\end{cases}\;\Rightarrow\;a_1=-a_2

長さ制約 a_1^2+a_2^2=1 より

  • a_1=\dfrac{1}{\sqrt{2}},\; a_2=-\dfrac{1}{\sqrt{2}}

したがって 第2主成分

  • \boxed{z_2=\dfrac{\sqrt{2}}{2}x_1-\dfrac{\sqrt{2}}{2}x_2}

第1主成分と直交(係数内積が a_1^{(1)}a_1^{(2)}+a_2^{(1)}a_2^{(2)}=\frac{1}{2}-\frac{1}{2}=0)し、分散は \lambda_2=1-r になります。


5) 直交性の言い換え(制約の別表現)

「第2主成分は第1主成分と直交」という条件は、係数ベクトルの内積が 0 だと書けます。
第1主成分の係数を (\frac{1}{\sqrt{2}},\frac{1}{\sqrt{2}})、第2主成分の係数を (a_1,a_2) とおけば

  • \frac{1}{\sqrt{2}}a_1+\frac{1}{\sqrt{2}}a_2=0 \;\Leftrightarrow\; a_1+a_2=0

つまり「直交のための制約条件」は a_1+a_2=0 で、上の解 a_1=-a_2 と一致します。


6) 主成分得点(principal component score)

実データ(標準化済みの x_1,x_2)を上の式に代入すると、各個体(観測対象)について

  • 第1主成分得点:z_{1i}=\dfrac{\sqrt{2}}{2}x_{1i}+\dfrac{\sqrt{2}}{2}x_{2i}
  • 第2主成分得点:z_{2i}=\dfrac{\sqrt{2}}{2}x_{1i}-\dfrac{\sqrt{2}}{2}x_{2i}
    が得られます。散布図にプロットすれば、主成分軸(直交座標)上で個体の分布や分類傾向を視覚的に確認できます。

7) まとめ(2変数の相関行列の場合)

  • 固有値:\lambda_1=1+r,\;\lambda_2=1-rr\in[-1,1]
  • 第1主成分:z_1=\dfrac{\sqrt{2}}{2}x_1+\dfrac{\sqrt{2}}{2}x_2(分散 =1+r
  • 第2主成分:z_2=\dfrac{\sqrt{2}}{2}x_1-\dfrac{\sqrt{2}}{2}x_2(分散 =1-r
  • 直交性:a^{(1)}\!\cdot a^{(2)}=0(係数の内積が0)
  • 幾何:r\ge 0 で第1主成分は45°方向、r<0 では「差」を強調する向きが第1主成分に入れ替わります(一般には最大固有値の固有ベクトルが第1主成分)。

行列式を 0 にする理由は、「非自明な解 a\neq \mathbf{0} を許すために (R-\lambda I) を特異(非可逆)にする」ことです。ここでの行列式は、行列が逆行列を持つかどうかを一つの数で示す指標(スカラー量)です。

主成分の数と寄与率

第1主成分だけでは十分にデータを代表できない場合、
第2主成分、第3主成分…と、観測変数の数まで主成分を増やしていくことが考えられます。
ただし、「どこまで主成分を採用すべきか」という明確な基準は存在しません。
そのため、主成分の分散(=固有値)や寄与率を指標として判断します。


固有値と主成分の情報量

固有値は、主成分が持っている「情報量」を表しています。
値が大きいほど、その主成分が多くの情報(元の変数のばらつき)を保持していることを意味します。
よって、固有値の大きい主成分ほど、データをよく表現しているといえます。


固有値が「1」を下回らない主成分まで採用する

1つの基準として、「固有値が1以上の主成分まで」を採用する方法があります。
これは「1つの主成分が、もとの1つの観測変数と同程度以上の情報を持っているか」を判断基準とする考え方です。

  • 前者(固有値が1以上):各主成分が1つの観測変数と同程度以上の情報を保持している。
  • 後者(スクリー・プロット法):固有値をグラフに描き、急に小さくなるところ(ひざの部分)までを採用する。

寄与率(Contribution Ratio)

寄与率とは、各主成分がデータ全体の情報のうち、どの程度を説明しているかを示す割合です。
p個の観測変数があるとき、第k主成分の寄与率Cr_kは次のように求めます。

Cr_k = \frac{\lambda_k}{\sum_{i=1}^{p}\lambda_i} \times 100

ここで\lambda_kは第k主成分の固有値、\sum_{i=1}^{p}\lambda_iは全主成分の固有値の総和(全情報量)です。


累積寄与率(Cumulative Contribution Ratio)

主成分分析では、上位の主成分をどこまで採用するか判断するために、累積寄与率をよく用います。
k主成分までの累積寄与率C_kは次式です。

C_k = \frac{\sum_{i=1}^{k}\lambda_i}{\sum_{i=1}^{p}\lambda_i} \times 100

一般に、累積寄与率が 70%〜80% 程度あれば、
「全体の情報の7〜8割を説明できている」とみなし、十分な主成分数と判断されます。


寄与率の具体例(2変数の場合)

観測変数が2つ(p=2)のとき、固有値は

\lambda_1 = 1 + r,\quad \lambda_2 = 1 - r
ですから、寄与率はそれぞれ次のようになります。

Cr_1 = \frac{1+r}{2} \times 100,\quad Cr_2 = \frac{1-r}{2} \times 100

たとえばr=0.8の場合、
Cr_1 = 90\%,\quad Cr_2 = 10\%
となり、第1主成分だけで全体の情報の約9割を表していることがわかります。


主成分負荷量(Principal Component Loading)

主成分負荷量とは、「各観測変数が各主成分にどの程度寄与しているか」を示す指標です。
つまり、主成分を構成する変数の“重みづけ”を定量的に表したものです。

主成分 z_k が、観測変数 x_i の線形結合
z_k = a_{1k}x_1 + a_{2k}x_2 + \cdots + a_{pk}x_p
で与えられるとき、観測変数 x_i と主成分 z_k の相関係数を 主成分負荷量 と呼びます。


主成分負荷量の式

主成分負荷量 r_{x_i z_k} は次の式で与えられます:

r_{x_i z_k} = \sqrt{\lambda_k} \, a_{ik}

ここで:

  • \lambda_k:第k主成分の固有値(分散)
  • a_{ik}:第k主成分における観測変数x_iの係数(固有ベクトルの成分)

2変数の場合の主成分負荷量

観測変数が2つの場合(x_1, x_2)、第1主成分の係数は

a_1 = a_2 = \frac{\sqrt{2}}{2}

第1主成分の固有値は \lambda_1 = 1 + r_{x_1x_2} なので、

r_{x_1 z_1} = \sqrt{\lambda_1} a_1 = \frac{\sqrt{2(1 + r_{x_1x_2})}}{2}


主成分負荷量の解釈

主成分負荷量が大きいほど、その観測変数が主成分に強く影響していることを意味します。
また、主成分負荷量の符号(+ or -)は、変数が主成分の方向に同じ傾向を持つか、反対傾向かを示します。

例:

  • r_{x_1 z_1} > 0, \; r_{x_2 z_1} > 0 → どちらも同方向に寄与
  • r_{x_1 z_1} > 0, \; r_{x_2 z_1} < 0 → 一方が増えると他方が減る傾向

まとめ

  • 固有値 \lambda … 各主成分の「情報量」
  • 寄与率 … 各主成分が全体の情報に占める割合
  • 累積寄与率 … 上位いくつの主成分で全体の何割を説明できるか
  • 主成分負荷量 … 各変数が主成分にどれだけ関係しているか(寄与の方向と強さ)

Discussion