← 統計検定テキスト 一覧

📊 対象級:準1級 | 重要度:A(頻出)

要点(BLUF)

多くの変数を持つデータを、情報(分散)をできるだけ失わずに少数の合成変数(主成分)へ要約する手法です。準1級では「分散最大化がなぜ固有値問題になるか」「寄与率・累積寄与率を計算・解釈できるか」「主成分得点とは何か」「相関行列ベースと共分散行列ベースをいつ使い分けるか」が問われます。すべての出発点はこの一行に集約されます。

  Σv=λv  \boxed{\;\Sigma\,\mathbf v=\lambda\,\mathbf v\;}

要するに「データの共分散行列 Σ\Sigma固有ベクトルが主成分の方向、固有値 λ\lambda がその方向の分散」ということです。あとは固有値を大きい順に並べるだけで、主成分が第1・第2…と決まります。


1. 問題設定:分散を最も多く説明する方向を探す

pp 個の変数を持つ確率ベクトル X=(X1,,Xp)\mathbf X=(X_1,\dots,X_p)^\top があり、その共分散行列を Σ=Var(X)\Sigma=\mathrm{Var}(\mathbf X) とします(実データでは標本共分散行列 SS を使います)。Σ\Sigmap×pp\times p対称・半正定値行列です。

やりたいのは、変数たちの線形結合

Z=aX=a1X1+a2X2++apXpZ=\mathbf a^\top\mathbf X=a_1 X_1+a_2 X_2+\dots+a_p X_p

を作り、この合成変数 ZZ分散ができるだけ大きくなる方向 a\mathbf a を探すことです。なぜ分散最大かというと、分散が大きい方向こそ「観測がよくばらついている=個体差の情報を多く含む」方向だからです。逆に分散がほぼ0の方向は、どの個体もほぼ同じ値で、捨てても情報をほとんど失いません。

graph LR
  A["元の p 変数<br/>(相関あり・冗長)"] --> B["線形結合 Z = aᵀX"]
  B --> C["分散 Var(Z) を最大化"]
  C --> D["第1主成分<br/>(最も情報が多い軸)"]
  D --> E["直交方向で繰り返し<br/>→ 第2・第3…主成分"]

要するに「相関して冗長な pp 個の変数を、互いに無相関で分散の大きい順に並んだ少数の新しい軸へ置き換える」のが主成分分析です。これは次元削減(dimension reduction)の代表的手法であり、教師なし学習です(目的変数 yy を使わない)。

分散を a\mathbf aΣ\Sigma で表す

Z=aXZ=\mathbf a^\top\mathbf X の分散は、共分散行列を使って次のように書けます。

Var(Z)=Var(aX)=aΣa\mathrm{Var}(Z)=\mathrm{Var}(\mathbf a^\top\mathbf X)=\mathbf a^\top\Sigma\,\mathbf a

なぜこうなるか。 一般に確率ベクトル X\mathbf X を行列 AA で線形変換すると共分散行列は Var(AX)=AΣA\mathrm{Var}(A\mathbf X)=A\,\Sigma\,A^\top に変換されます(線形変換と分散の関係は 確率変数の変換・モーメント母関数・積率 が下地)。いま a\mathbf a^\top1×p1\times p 行列なので、A=aA=\mathbf a^\topA=aA^\top=\mathbf a を代入すると aΣa\mathbf a^\top\Sigma\,\mathbf a(スカラー)になります。

要するに「合成変数の分散は、係数ベクトル a\mathbf a を共分散行列 Σ\Sigma で挟んだ二次形式」だということです。


2. 第1主成分の完全導出(ラグランジュ未定乗数法・省略しない)

2.1 制約がないと発散する

Var(Z)=aΣa\mathrm{Var}(Z)=\mathbf a^\top\Sigma\,\mathbf a をただ最大化しようとすると、a\mathbf a をいくらでも長くすれば分散もいくらでも大きくなってしまい(a2a\mathbf a\to 2\mathbf a で分散は4倍)、最大値が存在しません。意味があるのは「向き」だけで「長さ」ではないので、長さを固定します。

a=1aa=1\lVert\mathbf a\rVert=1\quad\Longleftrightarrow\quad \mathbf a^\top\mathbf a=1

つまり問題は「aa=1\mathbf a^\top\mathbf a=1 という制約の下で aΣa\mathbf a^\top\Sigma\,\mathbf a を最大化する」という制約付き最適化になります。

2.2 ラグランジュ関数を作る

等式制約付き最大化なので、ラグランジュ未定乗数法を使います。乗数を λ\lambda として、

L(a,λ)=aΣaλ(aa1)L(\mathbf a,\lambda)=\mathbf a^\top\Sigma\,\mathbf a-\lambda\,(\mathbf a^\top\mathbf a-1)

要するに「最大化したい本体 aΣa\mathbf a^\top\Sigma\mathbf a から、制約 aa1=0\mathbf a^\top\mathbf a-1=0 に乗数 λ\lambda を掛けて引いた」関数です。制約を満たす停留点で LL の勾配がゼロになります。

2.3 a\mathbf a で微分してゼロと置く

ここで使う二次形式のベクトル微分の公式は、重回帰の最小二乗解(重回帰分析)と同じ道具です。

a(aΣa)=(Σ+Σ)a=2Σa(Σ は対称なので Σ=Σ)\frac{\partial}{\partial\mathbf a}\bigl(\mathbf a^\top\Sigma\,\mathbf a\bigr)=(\Sigma+\Sigma^\top)\mathbf a=2\Sigma\,\mathbf a \qquad(\Sigma\text{ は対称なので }\Sigma^\top=\Sigma) a(aa)=2a\frac{\partial}{\partial\mathbf a}\bigl(\mathbf a^\top\mathbf a\bigr)=2\mathbf a

これらを使って LLa\mathbf a で微分しゼロと置きます。

La=2Σa2λa=0\frac{\partial L}{\partial\mathbf a}=2\Sigma\,\mathbf a-2\lambda\,\mathbf a=\mathbf 0

両辺を2で割って整理すると、

  Σa=λa  (固有値方程式)\boxed{\;\Sigma\,\mathbf a=\lambda\,\mathbf a\;}\quad\text{(固有値方程式)}

これが導出の核心です。 「分散を制約付きで最大化せよ」という最適化問題が、純粋な線形代数の問題、すなわち「共分散行列 Σ\Sigma固有値方程式を解け」に化けました。つまり停留点の候補 a\mathbf aΣ\Sigma固有ベクトルλ\lambda はその固有値でなければなりません。

2.4 どの固有ベクトルを選ぶか — 固有値=分散

固有ベクトルは pp 個あります(対称行列なので互いに直交する固有ベクトルが pp 本取れる。下記 2.5)。そのうちどれが「分散最大の方向」かを決めます。固有値方程式 Σa=λa\Sigma\mathbf a=\lambda\mathbf a を満たす単位ベクトル a\mathbf aaa=1\mathbf a^\top\mathbf a=1)に対し、達成される分散は

Var(Z)=aΣa=a(λa)=λ(aa)=λ\mathrm{Var}(Z)=\mathbf a^\top\Sigma\,\mathbf a=\mathbf a^\top(\lambda\,\mathbf a)=\lambda\,(\mathbf a^\top\mathbf a)=\lambda

つまり、その方向で得られる分散はちょうど固有値 λ\lambda そのものです。 ラグランジュ乗数 λ\lambda が、たまたま固有値であると同時に「最大化したかった分散の値」になっている、という美しい一致がここで効きます。

したがって分散を最大にするには、最大の固有値 λ1\lambda_1 に対応する固有ベクトル v1\mathbf v_1 を選べばよい。これが**第1主成分(first principal component)**の方向で、第1主成分の分散は λ1\lambda_1 です。

要するに「固有値を大きい順に λ1λ2λp0\lambda_1\ge\lambda_2\ge\dots\ge\lambda_p\ge0 と並べたとき、λ1\lambda_1 の固有ベクトルが一番情報の多い軸」ということです。半正定値性から固有値はすべて 0\ge0 になります(分散だから負はあり得ない、と整合)。

2.5 固有ベクトルの直交性(共分散行列が対称だから)

Σ\Sigma は実対称行列なので、線形代数のスペクトル定理により次が保証されます。

結果として、Σ\Sigma を正規直交固有ベクトル v1,,vp\mathbf v_1,\dots,\mathbf v_p で対角化できます。

Σ=VΛV,V=[v1  vp],Λ=diag(λ1,,λp),VV=I\Sigma=V\Lambda V^\top,\qquad V=[\mathbf v_1\ \cdots\ \mathbf v_p],\quad \Lambda=\mathrm{diag}(\lambda_1,\dots,\lambda_p),\quad V^\top V=I

この固有値分解(スペクトル分解)こそが、主成分分析の計算そのものです。共分散行列・相関行列の性質は 分散共分散行列・相関行列 にまとめています。


3. 第2主成分以降:直交制約の下での最大化

第2主成分は「第1主成分と無相関(直交)という条件の下で、次に分散が大きい方向」です。なぜ直交を課すかというと、第1主成分とかぶった情報(同じ方向の分散)をもう一度数えても無駄だからです。新しい軸には「第1主成分が拾い残した分散」だけを担当させます。

定式化は、制約を1本増やしたラグランジュ最適化です。v1\mathbf v_1 を第1主成分方向として、

maxa aΣas.t.aa=1,  av1=0\max_{\mathbf a}\ \mathbf a^\top\Sigma\,\mathbf a \quad\text{s.t.}\quad \mathbf a^\top\mathbf a=1,\ \ \mathbf a^\top\mathbf v_1=0

ラグランジュ関数に直交制約の項を足して同様に微分すると、解は「残りの固有ベクトルのうち2番目に大きい固有値 λ2\lambda_2 の固有ベクトル v2\mathbf v_2」になります。第2主成分の分散は λ2\lambda_2 です。

これを繰り返すと、第 kk 主成分は kk 番目に大きい固有値 λk\lambda_k の固有ベクトル vk\mathbf v_k、その分散は λk\lambda_k となります。

graph TD
  L1["第1主成分 = 最大固有値 λ₁ の固有ベクトル v₁<br/>(分散最大の方向)"]
  L2["第2主成分 = 2番目 λ₂ の固有ベクトル v₂<br/>(v₁ と直交し、次に分散大)"]
  L3["第3主成分 = 3番目 λ₃ の固有ベクトル v₃<br/>(v₁,v₂ と直交)"]
  L1 --> L2 --> L3
  L2 -. v₁⊥v₂ .- L1
  L3 -. v₂⊥v₃ .- L2

主成分どうしは無相関です。理由:固有ベクトルが直交(vjvk=0, jk\mathbf v_j^\top\mathbf v_k=0,\ j\ne k)なので、2つの主成分 Zj=vjXZ_j=\mathbf v_j^\top\mathbf X, Zk=vkXZ_k=\mathbf v_k^\top\mathbf X の共分散は

Cov(Zj,Zk)=vjΣvk=vj(λkvk)=λk(vjvk)=0\mathrm{Cov}(Z_j,Z_k)=\mathbf v_j^\top\Sigma\,\mathbf v_k=\mathbf v_j^\top(\lambda_k\mathbf v_k)=\lambda_k\,(\mathbf v_j^\top\mathbf v_k)=0

要するに「主成分は互いに無相関な新しい座標軸になっている」ということです。相関して重複していた元の変数を、重複のない軸へ組み替えたわけです。


4. 寄与率・累積寄与率:何成分残すか

4.1 総分散は固有値の和

各主成分の分散は固有値 λk\lambda_k でした。データ全体のばらつきの総量(総分散)は、固有値の総和に等しくなります。

k=1pλk=tr(Λ)=tr(VΛV)=tr(Σ)=j=1pσjj\sum_{k=1}^{p}\lambda_k=\mathrm{tr}(\Lambda)=\mathrm{tr}(V\Lambda V^\top)=\mathrm{tr}(\Sigma)=\sum_{j=1}^{p}\sigma_{jj}

ここでトレース(対角和)の循環性 tr(ABC)=tr(BCA)\mathrm{tr}(ABC)=\mathrm{tr}(BCA)VV=IV^\top V=I を使いました。tr(Σ)=jσjj\mathrm{tr}(\Sigma)=\sum_j\sigma_{jj} は元の各変数の分散の合計です。

要するに「主成分に組み替えても総分散(情報の総量)は保存される。それを各固有値が分け合っているだけ」ということです。

4.2 寄与率と累積寄与率

kk 主成分が総分散のうちどれだけを説明するかが**寄与率(proportion of variance / contribution ratio)**です。

  ck=λkj=1pλj  \boxed{\;c_k=\frac{\lambda_k}{\displaystyle\sum_{j=1}^{p}\lambda_j}\;}

最初の mm 個の主成分までの寄与率を足したものが**累積寄与率(cumulative proportion)**です。

Cm=k=1mck=λ1++λmλ1++λpC_m=\sum_{k=1}^{m}c_k=\frac{\lambda_1+\dots+\lambda_m}{\lambda_1+\dots+\lambda_p}

要するに「第 mm 主成分までで、元の情報の何パーセントを保持できているか」を表します。Cp=1C_p=1(全部使えば100%)。

4.3 成分数を決める基準(要最新確認)

何個の主成分を残すかの代表的な目安は次の通りです。いずれも絶対の基準ではなく、最終的には分析目的に応じた判断が必要です(数値基準は文献により幅があり、要最新確認)。

基準内容注意
累積寄与率累積寄与率が**70〜80%**を超える mm まで残す分かりやすいが、変数が多いと残す数が増えがち
カイザー基準(固有値1以上)固有値 λk1\lambda_k\ge 1 の主成分を残す(相関行列ベースのとき相関行列では各変数の分散が1なので「元の変数1個分以上の情報がある成分」の意。共分散行列ベースには直接使えない
スクリープロット固有値を大きい順にプロットし、傾きが急に緩む「肘(elbow)」の手前まで残す視覚的判断で主観が入る

⚠️ カイザー基準「固有値1以上」は相関行列ベース(後述)でこそ意味を持ちます。共分散行列ベースでは各変数の分散が1ではないので、この基準をそのまま当てはめてはいけません。準1級の引っかけポイントです。


5. 主成分得点:各観測を新しい軸へ射影する

固有ベクトル vk\mathbf v_k は「軸の向き(重み)」を与えるだけです。個々の観測を新しい軸の上の座標に直したものが**主成分得点(principal component score)**です。

観測 xi\mathbf x_iii 番目の個体)を中心化(平均を引く)してから第 kk 主成分方向へ射影します。

zik=vk(xixˉ)z_{ik}=\mathbf v_k^\top(\mathbf x_i-\bar{\mathbf x})

要するに「データ雲を主成分軸で回転させたときの、各点の新しい座標」が主成分得点です。第1主成分得点 zi1z_{i1} が大きい個体ほど「第1主成分が表す特徴を強く持つ」と読みます。

関連して、各元変数と各主成分の相関係数を**主成分負荷量(factor loading)**と呼び、主成分の「解釈」(その軸が何を表すか)に使います。負荷量は固有ベクトルの成分に固有値の平方根を掛けたものとして計算されます。


6. 分散共分散行列ベース vs 相関行列ベース

ここまで Σ\Sigma(共分散行列)で説明しましたが、実は「共分散行列を使うか、相関行列を使うか」で結果が変わります。これは準1級の頻出論点です。

6.1 何が違うか

6.2 なぜ単位が問題になるか

共分散行列ベースは、各変数の分散の絶対値にそのまま影響されます。たとえば「身長(cm)」と「体重(kg)」を混ぜたとき、たまたま単位の取り方で分散が大きい変数(cmをmmに変えれば分散は100万倍)が第1主成分をほぼ独占してしまいます。これは「情報量」ではなく単なる「単位の都合」です。

そこで、変数の単位や分散のスケールが大きく異なるときは標準化して相関行列ベースにします。標準化すれば全変数の分散が1にそろい、単位に依存せず「変数間の相関構造」だけを見て主成分を決められます。

共分散行列ベース相関行列ベース(標準化)
入力共分散行列 Σ\Sigma相関行列 RR
各変数の重み分散の大きい変数が支配的全変数を平等に扱う
使う場面変数が同じ単位・同程度の分散(例:同一テストの各科目得点)変数の単位・スケールがバラバラ(例:身長cmと年収円)
固有値の総和tr(Σ)=σjj\mathrm{tr}(\Sigma)=\sum\sigma_{jj}tr(R)=p\mathrm{tr}(R)=p(変数の個数)
カイザー基準そのまま使えない「固有値1以上」が使える

⚠️ どちらを使うかで固有値も主成分も変わります。「相関行列ベースでは固有値の和が変数の個数 pp に等しい」(各変数の分散が1だから)という性質は、寄与率の計算でそのまま効きます。迷ったら、単位が異なるなら相関行列ベース、と覚えます。

実データへの相関・共分散の基礎は 分散共分散行列・相関行列、相関係数そのものの記述統計的な扱いは 2変数の記述(散布図・共分散・相関係数)── 相関≠因果/rは直線関係しか測れない/外れ値1点で激変 を参照してください。


7. 幾何的な意味:データ雲の長軸

PCA=分散最大方向(共分散行列の固有ベクトル)

相関データの第1主成分(青矢印)=分散が最大の方向=共分散行列の最大固有ベクトル。第2主成分(赤)は直交。矢印の長さは √固有値。図は simulations/pca_bunsan_saidai.py で生成。

2変数の正規分布のように、データ雲が楕円形に広がっている状況を考えます。

要するに「主成分分析は、座標軸をデータ雲の自然な向き(長軸・短軸)に回転させる操作」です。元のデカルト座標 (X1,X2)(X_1,X_2) ではなく、データに沿った新しい直交座標 (Z1,Z2)(Z_1,Z_2) で個体を表し直しているわけです。回転後の軸が無相関になるのは、楕円の主軸を取れば軸間の相関(楕円の傾き)が消えるからです。

graph LR
  A["元の座標 (X₁, X₂)<br/>傾いた楕円のデータ雲"] -->|"主成分軸へ回転"| B["新座標 (Z₁, Z₂)<br/>Z₁=長軸, Z₂=短軸<br/>互いに無相関"]

8. PCAの手順フロー

flowchart TD
  S["データ行列(n×p)を用意"] --> C{"変数の単位・分散は<br/>大きく異なるか?"}
  C -- "はい(異なる)" --> R["標準化 → 相関行列 R を計算"]
  C -- "いいえ(同程度)" --> V["共分散行列 Σ を計算"]
  R --> E["固有値分解<br/>固有値 λ と固有ベクトル v を求める"]
  V --> E
  E --> O["固有値を大きい順に並べ替え<br/>λ₁ ≥ λ₂ ≥ … ≥ λ_p"]
  O --> P["寄与率 cₖ = λₖ / Σλ を計算<br/>累積寄与率で残す成分数 m を決定"]
  P --> Z["主成分得点 zᵢₖ = vₖᵀ(xᵢ − x̄) を計算<br/>各観測を主成分軸へ射影"]
  Z --> I["主成分(負荷量)を解釈"]

9. 試験での問われ方(準1級)

主成分分析は多変量解析の中でも頻出です。準1級では次の角度で問われます。

  1. 導出:分散最大化を制約 a=1\lVert\mathbf a\rVert=1 の下でラグランジュ未定乗数法で解き、固有値方程式 Σa=λa\Sigma\mathbf a=\lambda\mathbf a を導く。固有値が分散に一致する理由。
  2. 寄与率・累積寄与率の計算:固有値が与えられ、第 kk 主成分の寄与率や、累積寄与率が一定値を超える成分数を求める。固有値の和=総分散(相関行列なら =p=p)。
  3. 主成分得点の計算:固有ベクトルと中心化データが与えられ、特定の個体の主成分得点を計算する。
  4. 相関行列 vs 共分散行列:どちらを使うべきか、単位の異なるデータでの選択。標準化の要否。
  5. 主成分の解釈:固有ベクトル(重み)や主成分負荷量の符号から、各主成分が何を表すかを読む。
  6. 因子分析との区別:生成方向(因果の向き)の違い。因子分析は 因子分析 で扱います。

固有値分解・対称行列の対角化という線形代数の道具が前提です。確率変数の線形変換と分散の関係は 確率変数の変換・モーメント母関数・積率、共分散・相関行列の性質は 分散共分散行列・相関行列 を先に押さえてください。


よくある疑問(Q&A)

Q1. 主成分分析と因子分析は何が違うのですか?同じ「次元削減」では?

生成の向き(因果の方向)が逆です。主成分分析は「観測変数 → 主成分」、つまり観測した変数を合成して主成分を作ります(主成分は観測変数の線形結合で、結果側)。一方、因子分析は「共通因子 → 観測変数」、つまり背後に潜む共通因子が原因となって観測変数が生じる、というモデルです。要するにPCAは観測を要約する道具、因子分析は観測の背後にある潜在要因を推定する道具です。多くの統計ソフトで因子分析のオプションにPCAが混じっているため取り違えが起きやすい、というのもよくある誤りです。詳しくは 因子分析 で対比します。

Q2. 主成分の符号(固有ベクトルの向き)が、ソフトや実行ごとに反転するのですが?

正常です。符号は数学的に決まりません(符号の不定性)v\mathbf v が単位固有ベクトルなら v-\mathbf vΣ(v)=λ(v)\Sigma(-\mathbf v)=\lambda(-\mathbf v) を満たし、長さも1なので等しく正当な解です。どちらを返すかは計算ライブラリの実装次第なので、符号が反転しても結果は同値です。解釈するときは「全成分の符号をまとめて反転しても意味は変わらない」点に注意します(第1主成分得点の大小関係は符号反転で逆になるが、軸の意味は同じ)。要するに「向きは決まるが、正負どちら向きかは決まらない」ということです。

Q3. データは必ず標準化(相関行列ベース)すべきですか?

いいえ、変数の単位・分散がどうかで決めます。単位やスケールが大きく異なる(例:身長cmと年収円)なら標準化して相関行列ベースにします。標準化しないと、たまたま分散の大きい変数が第1主成分を独占し、それは「情報量」ではなく「単位の都合」です。一方、すべて同じ単位・同程度の分散(例:同一テストの各科目得点で、得点差そのものを重視したい)なら共分散行列ベースが自然です。「とりあえず標準化」が常に正解ではありません。

Q4. 寄与率が高い第1主成分は、必ず予測や分類に役立つ軸ですか?

必ずしも役立つとは限りません。PCAは教師なしで、目的変数 yy を一切見ずに「分散が大きい方向」を選びます。分散が大きいことと、yy を予測・分類するのに有用なことは別問題です。クラスを分ける情報がたまたま分散の小さい方向(捨てた成分)に入っていれば、第1主成分はむしろ分類に効きません。要するに「分散最大 ≠ 予測・分類に最適」です。予測のための次元削減なら、目的変数を使う手法(部分最小二乗回帰など)の方が適することがあります。

Q5. 主成分は必ず意味のある概念(「総合学力」など)として解釈できますか?

保証されません。主成分はあくまで「分散最大という数学的条件」で機械的に決まる軸であり、人間にとって解釈可能な意味を持つとは限りません。固有ベクトルの符号と大きさ(や主成分負荷量)を見て「この軸はおおむね全変数が同方向=総合的な大きさ」「この軸は一部が正・一部が負=対比」のように事後的に解釈を試みますが、きれいに解釈できないこともあります。解釈しやすさを重視するなら、回転を許す因子分析(因子分析)の方が向く場合があります。


まとめ


関連ノート