← Back

データ分析法・第9回「主成分分析」

データ分析法学習

授業情報

項目内容
科目データ分析法
回数第9回
テーマ主成分分析(Principal Component Analysis; PCA)
日付2026/7/7

1. 主成分分析とは

なぜ必要か

国語の平均点が70点・SD10点、数学の平均点が60点・SD20点とする。A君(国語80・数学60、合計140)とB君(国語70・数学70、合計140)は合計点は同じだが、A君は国語+1SD・数学0SD、B君は国語0SD・数学+0.5SDと、相対的な位置づけは异なる。単純な合計点では両科目の成績を等しく反映できていない。

そこで、各科目に重みをつけて新しい合成得点を作る必要があり、このための手法が主成分分析(PCA)。複数の変数に重み(主成分係数)をつけて、少数の合成変数(主成分得点)を算出する。重みのつけ方は、合成変数ができるだけ多く元の変数の情報量を含むように決められる。

例題①:3科目(国語・数学・英語)の成績から合成得点を作る(PCA.csv)

12名の生徒の3科目の得点を元に主成分分析を実施。

2. 主成分分析の考え方

3科目の得点を3D散布図にすると、データの分布は檔円形(楼土球型)のような形でイメージできる。

  • 第1主成分(first principal component):その方向に沿って個体のバラつき(分散)が最大になるような直線(軸)
  • 第2主成分(second principal component):第1主成分と**直交(90°)**し、かつ分散が最大になるような直線

3. 主成分分析で出力される指標

指標説明
固有値(eigen value)主成分得点の分散。元のデータの情報をどの程度保持しているかを表す。変量が標準化(分散=1)されていれば、固有値は元の変量何個分の情報量かを表す。一般に1以上の固有値を示す主成分を採用
寄与率・累積寄与率寄与率はある主成分がデータの分散にどの位影響しているか(0~1)。累積寄与率は各主成分の寄与率を合計したもの(全て合計すると1)
主成分得点(principal component score)主成分毎に算出される、各成分が示す尺度上での得点。第1主成分は一般に総合指標として使用
主成分係数(principal component coefficient)主成分得点を算出する際の、各変数に対する重み(固有ベクトルとも呼ばれる)
主成分負荷量(principal component loading)主成分得点と各変数の相関係数で算出。値が大きいほどその主成分をよく説明する変数。+1~-1の値を取る

4. Rによる主成分分析(prcomp()関数)

4-1. 基本コマンド

x <- read.csv("PCA.csv")        # 列名: kokugo, suugaku, eigo
result <- prcomp(x, scale=T)     # scale=Tで標準化データで分析
summary(result)                  # 寄与率・累積寄与率の確認
result$x                         # 主成分得点の確認

4-2. 固有値の確認

  • prcomp() の出力の Standard deviations は固有値の平方根(標準偏差)。固有値は1を基準に判断するので、標準偏差でも1を基準に判断しても結果は同じ
  • 例題①:第1主成分の固有値の平方根 = 1.540、第2主成分 = 0.759、第3主成分 = 0.231 → この場合は第1主成分のみを採用するのが一般的

💡 prcomp() の出力の Rotation主成分係数であり、主成分負荷量ではない点に注意

4-3. 寄与率・累積寄与率の確認

summary(result)
  • Proportion of Variance = 寄与率、Cumulative Proportion = 累積寄与率

4-4. 主成分得点の確認・保存

result$x                                  # PC1の列が第1主成分得点
write.csv(result$x, file="PCAresult.csv") # 結果をCSVに保存

⚠️ prcomp() では主成分負荷量は直接出力されない。別途計算が必要(下記で5参照)。


5. 補足:Rによる主成分負荷量の算出

5-1. 主成分係数と主成分得点の関係

  • 各生徒のZ得点は、各主成分の主成分係数と主成分得点の積の和で復元できる
  • 逆に、第1主成分得点は、各科目のZ得点と主成分係数の積の和で算出される

5-2. 主成分負荷量の計算式

主成分負荷量 = 主成分係数 × その主成分の固有値の平方根

  • 例:第1主成分の固有値の平方根(1.540)を、国語の主成分係数(-0.507)に掛けると:1.540×(-0.507) = -0.781

⚠️ SPSSとの比較の注意点:主成分係数の符号(+/-)はRとSPSSで逆になることがある。絶対値では同じ値になる


6. 練習問題:パ・リーグ打撃成績の主成分分析(PCA2.csv)

2025年パ・リーグの打撃成績(規定打席以上のみ)から、打率・得点・安打・本塊打・打点・盗壘・四球の7変数を対象に主成分分析を実施。この例題では第1主成分得点が低い(マイナス)ほど成績が良いことに注意。

順位選手第1主成分得点
1レイエス-4.67
2ネビン-2.34
3清宮 幸太郎-2.27

7. 復習用例題:小学生の体力測定(PCAR.csv)

小学生25名の体力測定(反復横とび・50m走・幅とび・SB投げ・上体起こし・前屈)を標準化して主成分分析。能力値が高いほど主成分得点は低く(マイナスに)なる点に注意。

①上位5名の第1・第2主成分得点

第1主成分得点第2主成分得点
1-1.644-0.443
2-2.4090.375
3-1.3822.671
40.6271.032
5-2.030-2.075

②第1・第2主成分の主成分係数

反復横とび50m走幅とびSB投げ上体起こし前屈
第1主成分0.4700.4660.4620.5070.2190.208
第2主成分-0.322-0.243-0.1050.0910.6500.629

8. 参考:WebClass小テスト(第9回)

三国志ゲームの武将データ(統率・武力・知力・政治・魅力の5変数、PCAtest.csv)を標準化して主成分分析を実施。Rでprcomp(x, scale=T)を実行した場合の想定回答(自実装で検算済み、小数点3桁まで)。

問題①:固有値が1以上の主成分の数

主成分固有値
第1主成分2.572
第2主成分1.778
第3主成分0.424
第4主成分0.135
第5主成分0.090

固有値が1以上なのは第1・第2主成分の2つ。問題②③はこの結果に従い、第2主成分について回答する(「答えが2なら第2主成分得点」という問題の指示に対応)。

問題②:9名の武将の第2主成分得点

武将第2主成分得点
関羽-2.934
張飛-1.261
趙雲-2.600
黄忠-2.069
馬超-2.106
周瀑-2.664
魯肅-1.671
呂蒙-2.431
陸遂-2.527

※全員マイナスになっているのは、以下の問題③の主成分係数が5変数全て負の値を取るため。能力値が高い武将ほどこの主成分得点は低く(マイナスに)なる。

問題③:第2主成分の主成分係数

変数第2主成分係数
統率(leader)-0.711
武力(str)-0.588
知力(int)-0.204
政治(poli)-0.068
魅力(charm)-0.319

統率・武力(軍事系の能力)の係数の絶対値が特に大きく、第2主成分は主に**統率・武力(軍事面の能力)**を反映していると解釈できる。

⚠️ 符号についての注意:主成分分析の係数・得点の符号(・ー)は使用するソフトウェア・アルゴリズムによって逆になることがある(絶対値は常に一致)。上記は「能力値が高いほど主成分得点は低くなる(マイナスになる)」という問題文の指示に合わせた符号で表示している。


まとめ

  • 主成分分析(PCA):複数の変数に重み(主成分係数)をつけて、情報量をできるだけ保った少数の合成変数(主成分得点)を作る
  • 第1主成分:分散最大の方向、第2主成分:第1主成分と直交しつつ分散最大
  • Rでの実施:prcomp(x, scale=T)、固有値はsummary()の Standard deviationsの2乗、主成分得点はresult$x
  • 固有値≧1の主成分を採用するのが一般的
  • Rotationは主成分係数(主成分負荷量ではない)。主成分負荷量 = 主成分係数 × 固有値の平方根