2012/09/09

文系のための「主成分分析の可視化」(2)

主成分分析の解釈の仕方が理解できたところで、
いよいよ、一般的な主成分分析の可視化方法である「バイプロット」を実行してみる。

今回の話は、ソフトウェアが既定で設定している値を鵜呑みにしてはいけない例
数理的な背景を理解していれば、簡単に理解できることである。

文系だから深く知る必要は無い。使えれば良い」などと言う人がいる。
学生であっても、時には研究者もそのようなこと言う。最低限の知識は必要
何度も主張しているが、私は、数学が苦手な文系研究者である。

さて、「最低限の知識」との線引きは確かに困難であるが、
少なくとも、間違った解釈をしないための知識は必要であろう。
特異値分解は、必要最低限の知識に加えても良いと思う。

特異値分解を概念的に理解しておけば、逆行列主成分分析の理解も楽である。

一般的な教科書では、主成分分析を固有ベクトル固有値から説明するが、
文系人間には、理解しにくく、何より、実際の計算では特異値分解を使っているので、
やはり、特異値分解から説明した方が良いであろう。

話が逸れたが、さっそく、バイプロットを使って、主成分分析の結果を可視化する。
本来ならば、分析前に散布図行列が必要であるが今回は省略。
データの詳細は、散布図行列の話にあるので、そちらを参照する。

library(RCurl)

# Google Spreadsheet からデータをダウンロードする
data <- getURL("https://docs.google.com/spreadsheet/pub?key=0AtOtIs5BjRVhdHo0c0pjb29OTU9aV3BmQUFJUWJQa0E&single=true&gid=0&range=A1%3AK48&output=csv", ssl.verifypeer = FALSE)

# ダウンロードしたデータを読み込む
X <- as.matrix(read.table(textConnection(data), header=TRUE, row.names=1, sep=","))

まずは、prcomp()関数 を用いて、バイプロットを作成する。
今回は、標準化を掛けない方法と、掛けたものを比較する。
それぞれ、分散共分散行列相関係数行列に対応するのだった。

# 並べて描くためのオマジナイ
par(mfrow=c(1,2))

# 標準化を行わない場合
biplot(prcomp(X), main="PCA without scaling")

# 標準化を行う場合
biplot(prcomp(X, scale=TRUE), main="PCA with scaling")

このように、二つの図を重ね合わせることで、より解釈がしやすくなる。

なお、バイプロットにおける二つの図の軸スケールは関係せず
変数間の主成分負荷量を表す矢印線の向きおよび長さの違いと、
その方向に布置されている各対象の布置されている状況のみが重要である。

さて、Rにおけるバイプロットは、biplot()関数を使う。
基本的には、この方法でプロットすることが可能であるが、
既定の状態では、いくつか問題がある

そもそも、バイプロットによって重ね合わされた二つの図、つまり、
主成分得点主成分負荷量根本的に異なる空間に存在している。
それを、半ば「強引に」重ね合わしている。

それ故に、重ねあわせ方についてはいくつかの主張が存在する。
その主張とは、すなわち、特異値の掛ける比率であり、
この比率は、二つの図を重ねあわせる際の回転に影響する。

タイプ得点負荷
Type 1U✕DV✕D
Type 2UV✕D
Type 3U✕√DV✕√D
Type 4U✕DV
Type 5√n✕UV÷√n

ここでは、便宜上、5つの形式に分けた。
biplot()関数の既定では、Type 2 が採用されており、
PCA()関数では、Type 1 が採用されている。

さて、ここで、Type 5 を除く、Type 1 〜 Type 4 の主張は、
特異値分解と大きく関わりがある。



この式は、偏差行列に対する特異値分解である。

ここで、Type 1は、特異値Σ分だけ余分であるが同じ空間に投影できる。
一方、Type 2 〜 Type 4 までは、特異値分解に合わせた布置となり、
Type 2 と Type 4 を採用した場合、特異値を余分に掛けている分だけ角度は合わない

実際に角度を合わせるのであれば、Type 1 か Type 3 を採用するべきである。
この二つの方法は、変数と対象の配置関係は同じであるが、軸スケールは異なる

さて、このように状況を整理した上で、再び、prcomp()関数について整理してみる。
実は、R の biplot()関数では、Vに乗じるDの割合を指定することができ
それは、「0〜1」の連続的な数値で設定することができる。

つまり、特異値分解を以下のように書き換えた状況で考えている。



この調整分を行うパラメータは、 scale であり、既定では「1」となっている。
つまり、Uに対してはDを掛けずに、VのみにDを掛けている状態(Type 2)となる。
そして、この値を「0.5」とすると、Type 3 の方式となる


# 並べて描くためのオマジナイ
par(mfrow=c(1,2))

# 標準化を行わない場合
biplot(prcomp(X), main="PCA without scaling", scale=0.5)

# 標準化を行う場合
biplot(prcomp(X, scale=TRUE), main="PCA with scaling", scale=0.5)


先程の図と見比べると、全体的に右方向に傾いていることが解る。
これは、特に、矢印の長いもので確認すると解かりやすい。

バイプロットは、変数の状況と対象の状況を比較して解釈する上で重要であるが、
微妙な角度の違いによって、間違った解釈を導きかねない
したがって、これらの数理的背景を含めて理解することが重要である。

0 件のコメント:

コメントを投稿