Rによる主成分分析

このエントリーをはてなブックマークに追加


主成分分析とは

イメージとしてはデータを圧縮する一つの方法と考えるといいかと思います。あるデータの指標が多すぎてどれが重要なのか分からないようなことはあるでしょう。例としては、コーヒーの陳列を考える時に各種のコーヒの性質として「価格」「こく」「苦み」「酸味」「ブランド力」などなど、絞り出せばどんどんでてきます。しかしながら、これらの情報をまとめあげてもっと少ない数の指標で見ることができないかというのが主成分分析をする動機でしょう。

 

この時実務家の人はこの新しくできた指標を「解釈する」必要がでてきます。2次元グラフでその指標(軸)が大きかったり小さかったりするのは「そういう意味を持つのか」というのは自明ではないでしょう。

 

100の指標(軸)があれば100次元を考えることになりますが、実際は「同じような情報を持ってる指標」や「他の指標で実は説明されてしまう」ような指標があるためもっと低い次元で話ができるということです。この辺りは線形代数を勉強してる人にはイメージがしやすいでしょう。

 

Irisデータによる主成分分析の例

何はともあれ自分で実際に使ってみると分かりやすい物かと思います。

今回はフリーソフトのRを使い分析を行います。

データはRの中に元々入ってるIrisデータを使用します。

Irisデータの詳細を知らない人は↓を参考にしてください

R言語で統計解析入門: 操作:データセット「iris」の解析とグラフ作成 梶山 喜一郎

 

コードは以下になります

データの読み込み

data(iris)

iris.data <- iris[, 1:4]

iris.lab <- iris[, 5]

 

主成分分析

result.pca <- prcomp(data.matrix(iris.data), scale = TRUE)

 

ラベル

lab <- as.integer(iris.lab)

lev <- levels(iris.lab)

 

図示①

plot(result.pca$x[, 1:2], col=lab, pch=lab)

par(new = TRUE)

legend("topright", legend = lev, col = 1:3, pch = 1:3)

 

図示②

plot(result.pca$x[, 1:2], col=lab, pch=lab)

par(new = TRUE)

legend("topright", legend = lev, col = 1:3, pch = 1:3)

 

図示①では主成分2つを使った図を示してます

f:id:taithon:20150215225559p:plain

 

一方図示②では主成分ではない2つのを指標を使って図を示します

 

 

f:id:taithon:20150215225617p:plain

 

主成分分析の応用

主成分分析によって得た二つの図を見比べてみよう

①の方では3つのグループがversicolor(赤)とvirginica(緑)に若干の重なりがあるものの区別することができそうです。一方、②の方(主成分ではない方)では全てのスループが混ぜこぜになってしまっています。

このように主成分とそうでない物により「無駄な情報を削ぎ落としたスマートな図」ができ、そこから様々な解釈ができるのです。