ほくそ笑む

R言語と統計解析について

主成分分析が簡単にできるサイトを作った

あけましておめでとうございます。
本年もよろしくお願いいたします。

主成分分析

さて、昨年の終わりごろから、私は仕事で主成分分析を行っています。
主成分分析というのは、多次元のデータを情報量をなるべく落とさずに低次元に要約する手法のことです。
主成分分析は統計言語 R で簡単にできます。
例として iris データで実行してみましょう。

data(iris)
data <- iris[1:4]
prcomp.obj <- prcomp(data, scale=TRUE) # 主成分分析

pc1 <- prcomp.obj$x[,1] # 第一主成分得点
pc2 <- prcomp.obj$x[,2] # 第二主成分得点

label <- as.factor(iris[,5]) # 分類ラベル
percent <- summary(prcomp.obj)$importance[3,2] * 100 # 累積寄与率

plot(pc1, pc2, col = label, main = paste(percent, "%"))


iris データは、Sepal.Length, Sepal.Width, Petal.Length, Petal.Width の4つの変数を持つ4次元データですが、これを2次元に要約し、2次元平面上にプロットしています。
分類ラベルとして5列目(Species)を使用し、setosa, versicolor, virginica の3種を色分けして表示しています。
それぞれの種がクラスタを形成しているのが見てとれると思います。
このように次元が多くてグラフの描けないようなデータに対して2次元など低次元に要約し、可視化できるのが主成分分析の効能です。
また、累積寄与率が 95.813% であることから、次元を減らしたことによる情報量の損失が 4.2% 程度であることがわかります。

仕事めんどくさい

私が今やっている仕事では、この主成分分析を大量に行わなければなりません。
大量のデータを渡され、そのデータひとつひとつに対して主成分分析を行います。
一つのデータには、また大量の分類ラベルがあり、それぞれに対してクラスタが形成されているか、何か傾向が出ているかを確認しなければなりません。
上記 iris データのようにきれいにクラスタ化されればいいですが、大半はそうはなりません。
というか、ぜんぜんクラスタが形成されないので、データの前処理方法を変えて、また一から主成分分析のやり直しを行ったりしています。
これを R プログラムをちまちま変えながらやっているのですが、はっきりいって、めんどくさいです。
もっと簡単にできる方法はないのでしょうか?


というわけで、また作っちゃいました。
簡単に主成分分析ができるページ

簡単にできるシリーズ第二弾です。*1
使い方はいたって簡単

  1. 主成分分析したいデータを Excel からコピーして、このサイトのテキスト欄(左側)に貼り付ける。
  2. 右側に入力データが表形式で表示されるので、ここで入力を確認し、OKなら「Execute PCA」ボタンをクリックする。

これだけで主成分分析ができちゃいます。

使用例

試しに左上の「Show Demo」ボタンを押してください。
iris データがテキスト欄に入力されます。

右側でピンク色になっている列は分類用のラベルとして認識されたという意味です。
このラベル以外の列が変数として認識され、主成分分析の対象となります。
「Execute PCA」ボタンを押すと主成分分析が実行され、グラフが表示されます。

一番左の棒グラフは Scree Graph といって、各主成分が持つ情報量の大きさを示しています。
主成分は、情報量の多い方から第一主成分(PC1)、第二主成分(PC2)、第三主成分(PC3)…という風に呼ばれます。
Scree Graph から、第何主成分までが情報量を多く持つかを確認することができます。
残りの3つのグラフは、それぞれ、第一主成分vs第二主成分、第一主成分vs第三主成分、第二主成分vs第三主成分をプロットしたものです。
これらの図を見てクラスターが形成されているかどうかを見れば良いというわけです。


ちなみに、分類ラベルが数値データの場合、グラフプロットをグラデーションで表現することもできます。
ちょっとやってみましょう。iris データに対する Label Column を「1-2」に変更し、Sepal.Length をラベルにして、残りの3変数に対して主成分分析を行います。

こんな感じになります。
第一主成分vs第二主成分のグラフを見ると、左下が低くて右上にいくほど上昇している傾向が見てとれます。


また、結果のダウンロード機能も付いています。
「Download PCA Result」で主成分分析の結果(負荷量など)が見れます。
「Download Graph Data」で Excel 用のグラフデータも取得でき、グラフの挿入で同じ図が描けます。*2

以上が 簡単に主成分分析ができるページ の簡単な説明です。
ぜひぜひ使ってみてください。


例のごとく、データを Web 上に上げたくないという方は、ローカルサーバへの配備も可能です。個別にご相談ください。
バグを見つけた場合もご一報いただけるとありがたいです。
連絡先:

以上です。

*1:第一弾 http://d.hatena.ne.jp/hoxo_m/20111109/p1

*2:グラデーションには対応してません