統計学 学習ノート

統計検定の4級から1級まで、出題範囲の順に記事と練習問題で学ぶ

準1級-27 応用統計の手法

主成分分析

  • 主成分スコア
  • 主成分負荷量
  • 寄与率
  • 累積寄与率

はじめに

「5教科の成績を1つの数で表すなら、合計点が一番いいの?」

例えば、クラスの成績表を前にしたとしましょう。国語、英語、数学、理科、社会と5列も並ぶと、誰がどんな生徒なのか、全体像がつかめません。そこで合計点を計算すると、たしかに1列にはなります。でも、「文系が得意か、理系が得意か」という情報は消えてしまいます。

変数が50個あれば、散布図は1,000枚以上も必要です。とても見きれません。一方で、数学と理科のように、変数どうしが似た動きをしていることはよくあります。似た変数がたくさんあるなら、実際の情報は見た目より少ないはずです。

実は、この重なりをうまく使うと、情報をあまり失わずに、変数の数を減らせます。

そこで登場するのが、今回の主役 主成分分析(principal component analysis、PCA)です。主成分分析とは、多くの変数の重みつきの和を作り、できるだけ少数の新しい変数で元のばらつきを表す方法です。

前回の記事では、データの取り方として標本調査法を学びました。今回の記事からは、集めた多変量データの要約に入ります。今回の記事では、主成分の求め方と、主成分スコア、主成分負荷量、寄与率、累積寄与率について解説します。

主成分の考え方:ばらつきが最大の向きを探す

はじめに、主成分とは何かについて解説します。

影絵を思い浮かべてください。手の形を壁に映すとき、光の向きによって、影はキツネにも、ただの棒にも見えます。立体の情報を平面に落とすなら、形の違いがいちばんよく残る向きから光を当てたいですよね。

主成分分析は、データでこの影絵をします。「違いがよく残る」とは、影の上でのデータのばらつき、つまり分散が大きいということです。

pp 個の変数 x=(x1,…,xp)⊤\boldsymbol{x} = (x_1, \dots, x_p)^\top の分散共分散行列を Σ\Sigma とします。重みのベクトル a\boldsymbol{a} を使って、合成変数を作ります。

z=a⊤x=a1x1+⋯+apxpz = \boldsymbol{a}^\top \boldsymbol{x} = a_1 x_1 + \dots + a_p x_p

zz の分散は V[z]=a⊤ΣaV[z] = \boldsymbol{a}^\top \Sigma \boldsymbol{a} です。これを最大にする a\boldsymbol{a} を探します。ただし、a\boldsymbol{a} をいくらでも大きくすれば分散も大きくなるので、長さを a⊤a=1\boldsymbol{a}^\top \boldsymbol{a} = 1 に固定します。

制約つきの最大化なので、ラグランジュの未定乗数法を使います。

L=a⊤Σa−λ(a⊤a−1)L = \boldsymbol{a}^\top \Sigma \boldsymbol{a} - \lambda(\boldsymbol{a}^\top \boldsymbol{a} - 1)

a\boldsymbol{a} で微分して0とおくと、次の式が得られます。

Σa=λa\Sigma \boldsymbol{a} = \lambda \boldsymbol{a}

これは行列の 固有値問題 です。λ\lambda が固有値、a\boldsymbol{a} が固有ベクトルです。両辺に左から a⊤\boldsymbol{a}^\top をかけると、a⊤Σa=λ\boldsymbol{a}^\top \Sigma \boldsymbol{a} = \lambda となります。つまり、固有値はそのまま主成分の分散です。分散を最大にしたいので、最大の固有値を選びます。

これが 第1主成分 です。第2主成分 は、第1主成分と無相関という条件のもとで分散を最大にするもので、2番目に大きい固有値の固有ベクトルが答えです。以下、同じように続きます。

【主成分の性質】

  1. 第 kk 主成分の分散は、kk 番目に大きい固有値 λk\lambda_k
  2. 固有ベクトルどうしは直交する: aj⊤ak=0\boldsymbol{a}_j^\top \boldsymbol{a}_k = 0
  3. 異なる主成分は無相関: Cov(zj,zk)=aj⊤Σak=λkaj⊤ak=0\text{Cov}(z_j, z_k) = \boldsymbol{a}_j^\top \Sigma \boldsymbol{a}_k = \lambda_k \boldsymbol{a}_j^\top \boldsymbol{a}_k = 0
  4. 全体の分散は保存する: ∑kλk=tr(Σ)=∑jV[xj]\sum_k \lambda_k = \text{tr}(\Sigma) = \sum_j V[x_j]

要するに、主成分分析は、データの雲を回転させて、最も長い方向を第1軸に、次に長い方向を第2軸にそろえる操作です。ラグビーボールの形をした雲なら、長軸が第1主成分です。回転しただけなので、4つ目のように全体の分散は変わりません。

また、第1主成分の軸は、各点からの垂線の長さの2乗和を最小にする直線でもあります。回帰直線が縦方向の残差を最小にするのとは違います。回帰には yy という目的がありますが、主成分分析の変数はすべて対等です。

試験のポイント:主成分は分散共分散行列(または相関行列)の固有ベクトルで、主成分の分散は固有値です。「固有値 = 分散」を覚えておくと、計算問題がすぐに解けます。

以上が、主成分の考え方についての解説です。

主成分スコア:個体ごとの新しい座標

次に、2変数の例で実際に主成分を求めて、スコアを計算してみましょう。

数学と英語のテストの相関係数が0.6だったとします。単位をそろえるために、それぞれを標準化して、相関行列 RR を使います。

R=(10.60.61)R = \begin{pmatrix} 1 & 0.6 \\ 0.6 & 1 \end{pmatrix}

固有値は det⁡(R−λI)=(1−λ)2−0.36=0\det(R - \lambda I) = (1 - \lambda)^2 - 0.36 = 0 を解いて、λ=1±0.6\lambda = 1 \pm 0.6 です。したがって、λ1=1.6\lambda_1 = 1.6、λ2=0.4\lambda_2 = 0.4 です。

固有ベクトルは、長さを1にして、次のとおりです。

a1=12(11),a2=12(1−1)\boldsymbol{a}_1 = \frac{1}{\sqrt{2}}\begin{pmatrix} 1 \\ 1 \end{pmatrix}, \qquad \boldsymbol{a}_2 = \frac{1}{\sqrt{2}}\begin{pmatrix} 1 \\ -1 \end{pmatrix}

第1主成分は2科目の和で、総合力を表します。第2主成分は2科目の差で、数学寄りか英語寄りかを表します。

主成分スコア は、個体ごとに計算した主成分の値です。標準化した値に固有ベクトルの重みをかけて足します。

zik=ak⊤x~iz_{ik} = \boldsymbol{a}_k^\top \tilde{\boldsymbol{x}}_i

x~i\tilde{\boldsymbol{x}}_i は ii 番目の個体の標準化した値です。主成分スコアは、回転した新しい座標軸で読んだ、その人の住所のようなものです。平均は0で、分散は λk\lambda_k です。

例題:主成分スコアを計算する

数学の平均は60、標準偏差は10、英語の平均は70、標準偏差は20です。数学75点、英語80点の生徒の、第1、第2主成分スコアを求めましょう。

【解き方】

  1. 標準化する: 数学は (75−60)/10=1.5(75 - 60)/10 = 1.5、英語は (80−70)/20=0.5(80 - 70)/20 = 0.5
  2. 第1主成分スコア: (1.5+0.5)/2≈1.41(1.5 + 0.5)/\sqrt{2} \approx 1.41
  3. 第2主成分スコア: (1.5−0.5)/2≈0.71(1.5 - 0.5)/\sqrt{2} \approx 0.71

答えは1.41と0.71です。この生徒は総合力が高く、数学寄りだと読めます。

なお、固有ベクトルには符号の自由があります。a\boldsymbol{a} が解なら −a-\boldsymbol{a} も解です。ソフトウェアによって符号が逆に出ても、解釈の向きが逆になるだけで間違いではありません。

以上が、主成分スコアについての説明です。

主成分負荷量:主成分の意味を読む

続いて、主成分に名前をつける道具を解説します。

主成分はただの重みつきの和なので、それ自体には名前がありません。「これは総合力だ」と読むには、元の変数との関係を調べます。

主成分負荷量 は、主成分と元の変数の相関係数です。第 kk 主成分と変数 xjx_j の共分散は、Σak=λkak\Sigma \boldsymbol{a}_k = \lambda_k \boldsymbol{a}_k の第 jj 成分なので λkakj\lambda_k a_{kj} です。これを標準偏差で割ると、次の式になります。

r(zk,xj)=λkakjλk sj=λk akjsjr(z_k, x_j) = \frac{\lambda_k a_{kj}}{\sqrt{\lambda_k}\, s_j} = \frac{\sqrt{\lambda_k}\, a_{kj}}{s_j}

akja_{kj} は固有ベクトルの第 jj 成分、sjs_j は xjx_j の標準偏差です。相関行列を使うときは sj=1s_j = 1 なので、λk akj\sqrt{\lambda_k}\, a_{kj} です。

サッカーのチームの紹介に例えてみましょう。チームの性格は、中心選手を見れば分かります。主成分負荷量は、その主成分というチームに、各変数がどれだけ深く関わっているかを示す一覧です。

さきほどの2科目の例では、第1主成分の負荷量はどちらも 1.6/2≈0.89\sqrt{1.6}/\sqrt{2} \approx 0.89 です。第2主成分は 0.4/2≈0.45\sqrt{0.4}/\sqrt{2} \approx 0.45 と −0.45-0.45 です。

せっかくなので、別の例も見てみましょう。国語、英語、数学、理科の4教科で、文系どうしと理系どうしの相関が0.7、文系と理系の相関が0.4だったとします。固有値は2.5, 0.9, 0.3, 0.3 で、第1、第2の固有ベクトルは (0.5,0.5,0.5,0.5)(0.5, 0.5, 0.5, 0.5) と (0.5,0.5,−0.5,−0.5)(0.5, 0.5, -0.5, -0.5) です。

変数第1主成分の負荷量第2主成分の負荷量
国語0.790.47
英語0.790.47
数学0.79−0.47-0.47
理科0.79−0.47-0.47

表の見方はシンプルです。第1主成分はすべて同じ符号で大きいので、「総合学力」と読めます。第2主成分は文系が正で理系が負なので、「文系か理系か」の軸と読めます。第1主成分が大きさ、第2主成分が方向性を表すのは、成績データでよくある形です。

負荷量には、次の性質があります。相関行列の場合です。

【主成分負荷量の性質】

  1. 1つの主成分について2乗して足すと、固有値になる: ∑jr(zk,xj)2=λk\sum_j r(z_k, x_j)^2 = \lambda_k
  2. 1つの変数について全主成分で2乗して足すと、1になる: ∑kr(zk,xj)2=1\sum_k r(z_k, x_j)^2 = 1

例えば、4教科の第1主成分では、0.792×4≈2.50.79^2 \times 4 \approx 2.5 で、固有値に一致します。

補足(ここは読み飛ばしてOK): 「負荷量」という言葉の使い方は、本やソフトウェアで揺れています。固有ベクトルの成分そのものを loadings と出力するソフトウェアもあります。試験では、問題文の定義を確かめましょう。

試験のポイント:相関行列の主成分分析では、負荷量 = 固有値×固有ベクトルの成分\sqrt{\text{固有値}} \times \text{固有ベクトルの成分} です。固有ベクトルの成分そのものと混同しないようにしましょう。

以上が、主成分負荷量についての解説です。

寄与率と累積寄与率:何個で足りるかを決める

さらに、主成分をいくつ残すかの決め方を説明します。

主成分は全部で pp 個ありますが、全部を残したら要約になりません。そこで、それぞれの主成分が全体の分散の何割を説明しているかを調べます。

寄与率k=λk∑j=1pλj,累積寄与率m=∑k=1mλk∑j=1pλj\text{寄与率}_k = \frac{\lambda_k}{\sum_{j=1}^{p} \lambda_j}, \qquad \text{累積寄与率}_m = \frac{\sum_{k=1}^{m} \lambda_k}{\sum_{j=1}^{p} \lambda_j}

寄与率 は、第 kk 主成分の分散が全体に占める割合です。累積寄与率 は、第1主成分から第 mm 主成分までの寄与率の合計です。相関行列なら、分母は変数の数 pp になります。

スーツケースの荷造りに例えると、大事な順に服を詰めていって、「全体の8割が入ったから、もう十分」と判断するようなものです。

4教科の例なら、次のようになります。

主成分固有値寄与率累積寄与率
第12.562.5%62.5%
第20.922.5%85.0%
第30.37.5%92.5%
第40.37.5%100%

主成分の数の決め方には、代表的な基準が3つあります。

【主成分の数の決め方】

  1. 累積寄与率: 70%から80%以上になるところまで残す
  2. 固有値1以上(相関行列のとき): 元の変数1個の分散より大きい主成分だけを残す
  3. スクリープロット: 固有値を大きい順に線で結び、急に平らになる手前まで残す

上の例では、累積寄与率の基準なら2個で、固有値1以上の基準なら1個です。このように、基準によって答えが違うこともあります。第2主成分に「文系か理系か」という読みやすい意味があるので、この例では2個を残すのが自然でしょう。解釈できるかどうかも、大切な判断材料です。

例題:寄与率から主成分の数を決める

6変数の相関行列から、固有値が 2.7, 1.5, 0.9, 0.5, 0.3, 0.1 と得られました。累積寄与率が70%以上になる最小の主成分の数を求めましょう。また、固有値1以上の基準ではいくつでしょうか?

【解き方】

  1. 固有値の合計は変数の数と同じ6
  2. 第1主成分の寄与率: 2.7/6=45%2.7/6 = 45\%
  3. 第2主成分まで: (2.7+1.5)/6=70%(2.7 + 1.5)/6 = 70\% で、70%に届く
  4. 固有値1以上は2.7と1.5の2個

答えは、どちらの基準でも2個です。

以上が、寄与率と累積寄与率についての説明です。

相関行列か分散共分散行列か:単位の影響を考える

最後に、分析の出発点の選び方を見ていきましょう。

主成分分析には、分散共分散行列から出発する方法と、相関行列から出発する方法があります。結果は同じになりません。

なぜでしょうか? 分散共分散行列は、単位の影響を受けるからです。身長をcmで測ると分散は数十ですが、mで測ると1万分の1です。声の大きい人の意見ばかりが通る会議のように、分散の大きい変数が第1主成分を支配します。

具体的に見てみましょう。2変数の分散共分散行列が次のとおりだとします。

Σ=(5222)\Sigma = \begin{pmatrix} 5 & 2 \\ 2 & 2 \end{pmatrix}

det⁡(Σ−λI)=λ2−7λ+6=0\det(\Sigma - \lambda I) = \lambda^2 - 7\lambda + 6 = 0 より、λ1=6\lambda_1 = 6、λ2=1\lambda_2 = 1 です。第1主成分の固有ベクトルは a1=(2,1)⊤/5\boldsymbol{a}_1 = (2, 1)^\top/\sqrt{5} で、分散の大きい x1x_1 の重みが大きくなっています。

寄与率は 6/7≈85.7%6/7 \approx 85.7\% です。負荷量は、sjs_j で割るのを忘れずに計算します。

【負荷量の計算】

  • x1x_1: 6×(2/5)÷5≈0.98\sqrt{6} \times (2/\sqrt{5}) \div \sqrt{5} \approx 0.98
  • x2x_2: 6×(1/5)÷2≈0.77\sqrt{6} \times (1/\sqrt{5}) \div \sqrt{2} \approx 0.77

使い分けは、次のとおりです。

出発点向いている場面全体の分散負荷量
相関行列単位や尺度が違う変数変数の数 ppλk akj\sqrt{\lambda_k}\, a_{kj}
分散共分散行列同じ単位で、大きさの差にも意味がある変数tr(Σ)\text{tr}(\Sigma)λk akj/sj\sqrt{\lambda_k}\, a_{kj}/s_j

例えば、身長、体重、年収を一緒に分析するなら、相関行列を使います。同じ100点満点の5教科で、ばらつきの大きい科目を重く見たいなら、分散共分散行列も選択肢になります。

試験のポイント:単位の違う変数があるときは、相関行列を使います。これは標準化してから分散共分散行列で分析するのと同じです。

以上が、相関行列と分散共分散行列の使い分けについての解説です。

細かい計算を忘れてしまっても問題ありません。ここでは、「分散が最大の向きを固有ベクトルで探し、固有値が分散になる」という点だけ押さえておきましょう。

今回のまとめ

それでは、今回の内容を振り返ります。

今回は、多くの変数を少数の合成変数に要約する主成分分析について紹介しました。影絵のように、データの違いが最もよく残る向きを探すのが主成分で、計算としては固有値問題を解くだけです。残った主成分に意味を与えるのが、分析する人の仕事です。

今回のポイントを振り返りましょう。

振り返り

  • 主成分は分散が最大の向き。分散共分散行列か相関行列の固有ベクトルで、分散は固有値。
  • 主成分どうしは無相関で、全体の分散は保存される。データの雲を回転させるだけ。
  • 主成分スコアは個体の新しい座標で、平均0、分散 λk\lambda_k。
  • 主成分負荷量は主成分と変数の相関で、主成分の意味を読むのに使う。
  • 寄与率は分散の割合で、累積寄与率が70%から80%に届くところまで残すのが目安。

キーワードのおさらい

  • 主成分スコア: 個体ごとに計算した主成分の値
  • 主成分負荷量: 主成分と元の変数の相関係数
  • 寄与率: 第 kk 主成分の分散が全体の分散に占める割合。λk/∑jλj\lambda_k / \sum_j \lambda_j
  • 累積寄与率: 第1主成分からの寄与率の合計

さて、主成分分析では、データ全体のばらつきを見ました。でも、データに「合格者と不合格者」のような群の情報があるときは、全体のばらつきより、群をよく分ける向きのほうが知りたいはずです。

次回は、群を分ける手法と、その評価方法である「判別分析」について紹介します。

それでは、次の記事へ進んでいきましょう。

練習問題5問開いて挑戦する
問1. 2変数の相関係数が0.8のとき、相関行列にもとづく第1主成分の寄与率として正しいものはどれか。
問2. 3変数のどの2つの相関係数も0.6である。相関行列の最大の固有値は2.2だった。第1主成分の寄与率に最も近いものはどれか。
問3. 相関行列にもとづく主成分分析で、第1主成分の固有値が2.25、変数 x1x_1 に対応する固有ベクトルの成分が0.6だった。x1x_1 の第1主成分の負荷量として正しいものはどれか。
問4. 5変数の相関行列の固有値が 2.6, 1.3, 0.6, 0.3, 0.2 だった。累積寄与率が80%以上になる最小の主成分の数として正しいものはどれか。
問5. 身長(cm)、年収(万円)、1日の歩数の3変数に主成分分析を行う。出発点として、最も適切なものはどれか。