Chap5 主成分分析

コンテンツ

5.1 主成分分析の目的5.2 係数をどうやって定めるのか?5.3 主成分分析の流れ5.4 分析の目的を定め,データを用意する5.5 固有ベクトル,寄与率,主成分(主成分得点)を求める5.6 結果から主成分の解釈を行う5.7 主成分分析分析例

5.1 主成分分析の目的

主成分分析とは,相関もしくは分散共分散を利用し, 複数の変数を統合して,データ全体の傾向・特徴を表す新たな変数を生成する方法である.

図x.xxxxxxxxxx

主成分分析の目的について理解するために,スポーツテストについて考えるとする. スポーツテストでは,反復横とび,立ち幅跳び,ハンドボール投げなどがある. もし,スポーツテストの結果から"総合的に"運動能力の高い人を表す指標を作るには どうしたらよいだろうか,という問題があったとしたら, どのようにすれば妥当だろうか?

例えば,一つの考え方として,次のようなものがある. ある競技者さん(ただし,)について, 競技(ただし,)の記録が取れているものとすると,

確かに,指標が小さいほど運動能力は良いといえるだろう. しかし,一つ問題がある. 例えば,競技1における1位と2位の差がほんのわずかで, 競技2における1位と2位の差が,競技1との差と比べてはるかに大きかったらどうだろうか? つまり,どんなに記録に差があっても,それは全く考慮されずに同じ扱いになってしまうのである.

では,主成分分析ではどのように定めるのだろうか? 競技者さんの,ある競技の記録をとし, さんの運動能力を表す指標をとすれば,主成分分析におけるは,次のように表される.

ここで,は定数である. さて,どのようにしてこの係数を定めるのだろうか?

[一番上へ]

5.2 係数をどうやって定めるのか?

話を分かりやすくするために,競技Aと競技Bに限って話を進めていこう. 競技Aと競技Bの記録が得られたとして,散布図を描いてみると次のようになる. ここで,縦軸,横軸は,それぞれ競技A,Bの記録を表しており, 軸の方向に進むほど良い記録であることを示している.

この図を見ると,直線lの右斜め上に行くほど成績が良いとしてもよさそうである. 仮に,iさんの成績が○で表現されているとする. このとき,主成分分析では,iさんの運動能力を表す指標は,元データの点から 直線lに向けて垂線を下ろし,交わった点☆が運動能力を表す指標となるのである.

主成分分析では,データの相関を利用して直線lを定めることができる. つまり,係数を定めることができるのである.この係数を「固有ベクトル」と呼ぶ.

また,主成分分析では,n変数に対して,固有ベクトルをn通り求めることが出来る. 図xを見ると,各データを直線l上の点で表現するとすれば,垂線が持っている分の情報を失ってしまうことが分かる. そこで,垂線方向にもう一つ直線l'を考える. 直線l'に元データの点から垂線を下ろした直線l'上の点は,直線lから元データの点までどれくらい離れているかという情報を持つことになる. 二つの直線lとl'を使うことで,元データが持つ情報量を余すところなく表現できるのである. データの変数が2つの場合,直線は2つ,つまり固有ベクトルは2つ求めることが出来るのであるが, 変数がn個の場合,同様の議論で,固有ベクトルをn個求めることができるのである. 通常,データ全体が持つ情報量のうち,一番情報を持っている主成分を第1主成分と呼ぶ. 同様に,情報量を持っている順番に,第2主成分,第3主成分,...と続く.

[一番上へ]

5.3 主成分分析の流れ

主成分分析の流れについて大まかな流れは,次のようになる. 各ステップの解説は後述する.

  1. 分析の目的を定め,データを用意する
  2. 固有ベクトル,寄与率,主成分(主成分得点)を求める
  3. 結果から主成分の解釈を行う
[一番上へ]

5.4 分析の目的を定め,データを用意する

前節までの例では,スポーツテストの例であったので, 体力テストの結果(一部)が,以下の表xであるものとする.

表x.体力テストの結果(一部)
No. X50mRun(秒) longjump(cm) sidestep(回)
1 8.3 315 35
2 7.9 393 39
3 10.1 240 33
4 9.3 305 37
5 8.6 330 45
6 8.8 340 31
7 8.1 383 43
8 8.7 334 38
9 8.2 397 41
10 8.2 380 40

このデータは,実際の体力測定のデータで,3変数,102名分のデータである. X50mRunという変数は,50m走のタイムで、単位は秒である. longjumpという変数は,走り幅跳びの記録で、単位はcmである. sidestepという変数は,反復横とびの記録で、単位は回である. このデータを使って,「総合的な運動能力を示す指標の作成」を目的として分析を進めていく.

[一番上へ]

5.5 固有ベクトル,寄与率,主成分(主成分得点)を求める

データをS-PLUSにインポートしなければなりませんが, データのインポート・エクスポートをご参照ください。

まず、図5.x.1のようにデータが準備されているものとする. データの準備が出来たら,主成分分析を行うメニューを呼び出す.

図5.x.1 データの準備



メニューバーから,[統計]→[多変量解析]→[主成分分析]の順番で選択する.


図5.x.2 主成分分析を選択



すると,以下のようなウィンドウが現れる.




図5.x.3 主成分分析のメニュー

このウィンドウは,主成分分析をする際の設定メニューである. これから,次のような設定を行う.

まず,[Model]タブをクリックし,次のように設定する. 図5.x.4 Model

主成分分析に使うデータを選択するため,Data Setで"sports"を選択する. 相関係数を使って固有ベクトルを求めるため,ModelのScalingでは,Correlationというラジオボタンをクリックする. 結果を保存する変数を指定するため,Save Model ObjectのSave Asに好きな名前(今回はscore)を入れ, Include Scoresのチェックボックスをクリックし,チェックを入れる. また,FormulaのVariablesには,分析に使用する変数を設定するのだが, 今回は全変数を使用するので,ALLを選択する.



図5.x.5 result

固有ベクトルの値を表示させるため,Printed ResultsのLoadingsのチェックボックスをクリックし,チェックを入れる. また,Cutoff Loading Valueは,ここで設定した値以下の値は,固有ベクトルの値を表示させないという設定である.



図5.x.6 plot

主成分の散布図を描くために,Biplotのチェックボックスにチェックを入れる. また,Biplot Whitch Scoresには,散布図のx軸,y軸に何番目の主成分を設定するかを書き込む. "c(1,2)"とは,x軸に第1主成分を,y軸に第2主成分を設定する,という意味である. これで設定はすべて終了である.画面左下の[OK]をクリックする.



[一番上へ]

5.6 結果から主成分の解釈を行う

設定終了後,[OK]を押すと,2つのウィンドウが新しく立ち上がる.

  1. 主成分分析の統計量に関するレポート
  2. 第1主成分と第2主成分の散布図

5.6.1 レポートの読み方

まず初めに,主成分分析の統計量に関するレポートについて解説する. 以下のように記述されているウィンドウをクリックする.

		*** Principal Components Analysis ***
Standard deviations:
   Comp.1    Comp.2    Comp.3 
 1.503597 0.7613374 0.3994524

The number of variables is 3 and the number of observations is 102 

Component names:

 "sdev" "loadings" "correlations" "scores" "center" 
 "scale" "n.obs" "terms" "call" "factor.sdev" "coef"

Call:
princomp(x =  ~ ., data = sports, scores = T, cor = T, na.action = na.exclude)

Importance of components:
                         Comp.1    Comp.2     Comp.3 
    Standard deviation 1.503597 0.7613374 0.39945241
Proportion of Variance 0.753601 0.1932115 0.05318741
 Cumulative Proportion 0.753601 0.9468126 1.00000000

Loadings:
         Comp.1 Comp.2 Comp.3
 X50mRun -0.615  0.333  0.715
longjump  0.610 -0.374  0.699
sidestep  0.500  0.865       

ここからは,順に追って内容を説明していく.



Standard deviations:
   Comp.1    Comp.2    Comp.3 
 1.503597 0.7613374 0.3994524

Comp.1, Comp.2はそれぞれ第1主成分,第2主成分という意味のラベルである. Standard deviationsとは標準偏差のことで, この部分では,求めた主成分得点の標準偏差の値を表示している. この値が大きいほど,主成分に元データの情報が含まれていると読むことができる.



The number of variables is 3 and the number of observations is 102

この文章は,「変数の数は3で,102個のデータが使われました」という意味である.



Component names:

 "sdev" "loadings" "correlations" "scores" "center" 
 "scale" "n.obs" "terms" "call" "factor.sdev" "coef"

主成分分析の設定画面で,ModelタブのSave Model Objectで, 結果を保存する設定をした場合,その名前のListに含まれている変数名を表示している.



Call:
princomp(x =  ~ ., data = sports, scores = T, cor = T, na.action = na.exclude)

S-PLUS内で主成分分析を行うために,S-PLUSが使った関数と設定を表示している. princompからna.exclude)までをコピーして,コマンドウィンドウで実行すると, 全く同じ分析を行うことができる.



Importance of components:
                         Comp.1    Comp.2     Comp.3 
    Standard deviation 1.503597 0.7613374 0.39945241
Proportion of Variance 0.753601 0.1932115 0.05318741
 Cumulative Proportion 0.753601 0.9468126 1.00000000

ここが重要な部分である.この表の2行目(Proportion of Variance)は,「寄与率」と呼ばれるもので, 主成分1つだけで,どのくらいの割合の情報を説明しているかを表している. 例えば,第1主成分(Comp.1)の2行目の値は,約0.75であるため, 第一主成分だけで,元データが持つ情報の約75%を説明していると読み取れる.

また,Cumulative Proportionとは,「累積寄与率」と呼ばれるものである. 通常,第1主成分から数えて,累積寄与率が80%を超えるまでの主成分を引き続き分析に使用する. この基準を「累積寄与率基準」と呼ぶ. この例では,第2主成分で累積寄与率が80%を超えているため, 第1主成分と第2主成分を分析に使用したほうが良い,ということになる.

この累積寄与率基準とは,変数を縮約し,少ない数の主成分でデータを見ようとしたときに, 元データの情報をほとんど含んでないまま分析を進めることを防ぐためと, すべての変数を分析に投入して,変数を縮約した意味がなくなってしまうことを防ぐための基準である.



Loadings:
         Comp.1 Comp.2 Comp.3
 X50mRun -0.615  0.333  0.715
longjump  0.610 -0.374  0.699
sidestep  0.500  0.865       

Loadingsとは,各主成分に対する固有ベクトルの値である. つまり,第一主成分の場合,主成分得点を求めたいときには,

-0.615×X50mRun + 0.610×longjump + 0.500×sidestep
とすればよいということである.

この固有ベクトルは,実際に求めた主成分が何を現しているかを解釈するためにも使用する. 解釈には,値の「符号」と「絶対値の大きさ」を見る. 例えば,第1主成分の場合,3つの係数とも絶対値の大きさは近い. 係数の絶対値を見ると,X50mRunの値が小さいほど主成分の値が大きくなり, longjumpとsidestepの値が大きいほど主成分の値が大きくなる. つまり,第1主成分は,「総合的な運動能力」を表しており, 分析の目的を満たすものであると考えられるのである. 第2主成分で特徴的なことは,第1主成分と違ってX50mRunとlongjumpの符号が逆になっていることと, sidestepの絶対値が大きいことである. よって,第2主成分は全体的な運動能力に比べて,特にsidestepが得意な人の値が大きくなるような 主成分であると考えられる.

5.6.2 主成分得点の散布図(biplot)

第1主成分と第2主成分の散布図を図.xに示す.

図5.x.6 plot

この散布図は,x軸に第1主成分を,y軸に第2主成分を取ったものである. 散布図を作ることで,主成分を使って,データの全体的な特徴をつかむことができる. また,この散布図には,元々の変数の名前の付いた矢印が出力される. これは,矢印方向に進むにつれてその変数の値が大きくなることを表している. 例えば,ここでは,3番の人は,8番の人よりも50mRunのタイムが遅いことを表している. このように主成分得点の散布図上で元々の変数の値を比較できるのは, S-PLUSで主成分分析を行ったときの大きな特徴の1つでもある.



[一番上へ]

5.7 主成分分析分析例

それでは,これから色々なデータを使って主成分分析を行ってみる.

5.7.1 車のデータを用いた分析

以下の表5.x.xは,表x.x.xの項目についていくつかの車を評価したものである.これを用いて主成分分析を行う. (データが欲しい方は「 こちら(cardata.csv)」からどうぞ)

表x.車の評価データ
No.価格燃費車体重量排気量馬力耐用年数
188953325609711312
27402332345114908
36319371845816312
46635322260919213
5659932244011310313
68672262285978212
77399332275979013
8725428235098748
995992522951099013
1087482923909710213

価格の単位は$,燃費の単位はガソリン1リットルで進める距離(km), 車体重量の単位はkg,排気量の単位はcc,耐用年数は今後使用できると予想される年数である.

『5.5 固有ベクトル,寄与率,主成分(主成分得点)を求める』に示された手順で主成分分析を行う.


	*** Principal Components Analysis ***
Standard deviations:
   Comp.1   Comp.2    Comp.3    Comp.4    Comp.5    Comp.6 
 2.016104 1.034649 0.6083699 0.5139987 0.3831625 0.2893165

The number of variables is 6 and the number of observations is 49 

Component names:
                                                                                                 
 "sdev" "loadings" "correlations" "scores" "center" "scale" "n.obs" "terms" "call" "factor.sdev"

        
 "coef"

Call:
princomp(x =  ~ ., data = cardata, scores = T, cor = T, na.action = na.exclude)

Importance of components:
                         Comp.1    Comp.2     Comp.3     Comp.4     Comp.5     Comp.6 
    Standard deviation 2.016104 1.0346488 0.60836987 0.51399872 0.38316247 0.28931646
Proportion of Variance 0.677446 0.1784164 0.06168565 0.04403245 0.02446891 0.01395067
 Cumulative Proportion 0.677446 0.8558623 0.91754797 0.96158042 0.98604933 1.00000000

Loadings:
         Comp.1 Comp.2 Comp.3 Comp.4 Comp.5 Comp.6 
    価格 -0.390 -0.411  0.582 -0.508  0.113 -0.263
    燃費  0.443        -0.338 -0.725  0.376  0.148
車体重量 -0.471 -0.070 -0.046  0.165  0.581  0.638
  排気量 -0.445  0.230 -0.489         0.326 -0.636
    馬力 -0.448 -0.134 -0.440 -0.338 -0.628  0.282
耐久年数  0.177 -0.869 -0.335  0.274  0.086 -0.138

	*** Principal Components Analysis ***
Standard deviations:
   Comp.1   Comp.2    Comp.3    Comp.4    Comp.5    Comp.6 
 2.016104 1.034649 0.6083699 0.5139987 0.3831625 0.2893165

The number of variables is 6 and the number of observations is 49 

Component names:
                                                                                                 
 "sdev" "loadings" "correlations" "scores" "center" "scale" "n.obs" "terms" "call" "factor.sdev"

        
 "coef"

Call:
princomp(x =  ~ ., data = cardata, scores = T, cor = T, na.action = na.exclude)

Importance of components:
                         Comp.1    Comp.2     Comp.3     Comp.4     Comp.5     Comp.6 
    Standard deviation 2.016104 1.0346488 0.60836987 0.51399872 0.38316247 0.28931646
Proportion of Variance 0.677446 0.1784164 0.06168565 0.04403245 0.02446891 0.01395067
 Cumulative Proportion 0.677446 0.8558623 0.91754797 0.96158042 0.98604933 1.00000000

Loadings:
         Comp.1 Comp.2 Comp.3 Comp.4 Comp.5 Comp.6 
    価格 -0.390 -0.411  0.582 -0.508  0.113 -0.263
    燃費  0.443        -0.338 -0.725  0.376  0.148
車体重量 -0.471 -0.070 -0.046  0.165  0.581  0.638
  排気量 -0.445  0.230 -0.489         0.326 -0.636
    馬力 -0.448 -0.134 -0.440 -0.338 -0.628  0.282
耐久年数  0.177 -0.869 -0.335  0.274  0.086 -0.138

注:Compとは,主成分を意味する.例えば,Comp.1は第1主成分を表し,Comp.2は第2主成分を表す.

まずは,表5.x.xから考慮する主成分を決定する. ここで注目するのは表5.x.xの出力のうちのImportance of componentsの項目の中のCumulative Proportionの部分である.以下に,ここで注目する部分のみ示す.

Importance of components:
                         Comp.1    Comp.2     Comp.3     Comp.4     Comp.5     Comp.6 
    Standard deviation 2.016104 1.0346488 0.60836987 0.51399872 0.38316247 0.28931646
Proportion of Variance 0.677446 0.1784164 0.06168565 0.04403245 0.02446891 0.01395067
 Cumulative Proportion 0.677446 0.8558623 0.91754797 0.96158042 0.98604933 1.00000000

Cumulative Proportionとは,累積寄与率のことである. 主成分分析では通常,累積寄与率が80%を超える主成分までを考える (考えた主成分によって車のデータが持つ情報の80%を表すことが出来ることを示す.) そのため,今回の車のデータでは,第2主成分(Cumulative Proportion=0.8558623)までを考えることとする.

S-PLUSでは,表5.x.xの主成分と累積寄与率の関係を視覚的に捉えることが出来る.

5.5 固有ベクトル,寄与率,主成分(主成分得点)を求めるの『Plot』画面で 図5.x.xのように『Screeplot』欄にチェックを入れる事で,以下の図5.x.x.の出力を得ることが出来る.

図5.x.1 データの準備



図5.x.x plot

各主成分の寄与率は,個々の主成分の分散をデータ全体の分散で割ったものであるため, 主成分の分散を見ることで各主成分の寄与率の大きさを比較することができる. 図5.x.xを見ると,第1主成分と第2主成分の2つの分散(Variances)が他の主成分に比べて大きいこと (つまり,第1,2主成分の寄与率が大きいこと)が見て取れる.

注:図5.x.xの棒グラフの上に書かれている数字が, 累積寄与率(その主成分まで採用した時の寄与率の合計)である.

次に,第1,2主成分の意味付けを行うために固有ベクトルを表すLoadingsの項目に注目する. (但し,この解釈には,主観が入ってしまうため,人それぞれ異なるが,近いものになると考えられる.) 表5.x.xの出力データの中で注目する部分を以下に示す.

*** Principal Components Analysis (Loadings)***
Loadings:
         Comp.1 Comp.2 Comp.3 Comp.4 Comp.5 Comp.6 
    価格 -0.390 -0.411  0.582 -0.508  0.113 -0.263
    燃費  0.443        -0.338 -0.725  0.376  0.148
車体重量 -0.471 -0.070 -0.046  0.165  0.581  0.638
  排気量 -0.445  0.230 -0.489         0.326 -0.636
    馬力 -0.448 -0.134 -0.440 -0.338 -0.628  0.282
耐久年数  0.177 -0.869 -0.335  0.274  0.086 -0.138

表5.x.xを見ると第1,2主成分で共に『価格』に対応する固有ベクトルは, 大体同じ値になっていることがわかる. そのため,この性質は,注目する2つの主成分全てに同じ程度含まれていると考えられる. 以下では,個々の車の特性の違いを明らかにするために,この共通の性質以外に注目することとする. 第1主成分の固有ベクトルの特徴を以下に示す。

  1. 燃費・車体重量・排気量・馬力に対応する固有ベクトルの絶対値が大きい.
  2. 車体重量・排気量・馬力に対応する固有ベクトルの要素は, 負の値なのでこれら変数の値が大きくなるにつれて第1主成分の値が小さくなる.
  3. 燃費に対応する固有ベクトルの要素は,正の値なので,燃費が良くなると第1主成分の値は大きくなる.

以上を考慮すると,第1主成分は『燃費が良い車体の小さな車』であることを 表す尺度であるということになる.

第2主成分は,固有ベクトルを見ると,耐久年数に対応する固有ベクトルのみがかなり小さな値になっている. つまり,第2主成分は『長持ちしにくさ』を表す尺度である.

次に,第1,2主成分を用いて個々のデータの解釈を行う. 第1主成分と第2主成分の散布図を図.5.x.xに示す.

図5.x.x plot

図5.x.xを見ると,2,8番の車は,第1,2主成分の得点がともに高いので 『燃費が良く車体の小さい,長持ちしない車』であることがわかる. 2,8番にの車は,長期的に使う予定はないが, 小回りの利く車が欲しい人(例えば,独身者など)に向いていると考えられる.

また,33,40,41,49番にの車は,第1,2主成分の得点が共に低い値であるため 『燃費の悪い大型車で長持ちする車』であることがわかる. 大きな車が欲しい人や故障しにくい車が欲しい人の要求を満たすことが出来ると考えられる.

13,15,39,45番に対応する車は,第1主成分の得点が小さく, 第2主成分の得点大きいので,燃費が悪い車体が大きな長持ちしない車であると言える. よって,とにかく大きくパワーのある車が欲しい人に好まれると考えられる.

また,図5.x.xには,該当する車があまりないが, 図5.x.xの第4象限(グラフの右下部)にプロットされる車は, 第1主成分が大きく第2主成分が小さいので,燃費の良く小さくて長持ちすることがわかる.

このように主成分分析を行うことで,多くの変数(車の評価結果)を主成分にまとめ, それを使うことでいくつかの車をグループ分けすることが出来た. これにより,自分の嗜好に合った車を選ぶことが出来る.

[一番上へ]