東京に棲む日々

データ分析、統計、ITを勉強中。未だ世に出ず。

主成分分析とPLS

主成分分析では、以下の手順で解を求めた。
合成変数をsとする。行数nの列ベクトルである。
s = f_1 x1 + f_2 x2 + … + f_p xp = X f
f_1, f_2, …, f_p が各変数に対応する係数である。f = (f_1, f_2, …, f_p)’を行数pの列ベクトルとする。
 
sの分散(Var(s))を求める。
Var(s) = s’s / n-1 = (X f)’ X f / n-1 = f’ X’ X f / n-1 = f’ (X’ X / n-1) f = f’ R f
Xは標準化されている。
R = X’X / n-1 は相関係数行列。
 
主成分分析では、Var(s) = f’R f が最大になるときのfを求める。
この時のfが、行列Rに対する固有値問題を解いたときの固有ベクトルを並べた行列(V)の第一列目の固有ベクトル。(第一列目の固有ベクトル(v1)が最大固有値(λ1)に対応する。)

もしくは、行列Rを特異値分解したときの特異ベクトルとなる。Rは対称行列なので、左右どちらの特異ベクトルも一致する。

また、最大化問題を解くということなので、Rに対してではなく、n-1を除いたX'Xに対して固有値分解や特異値分解を適用しても同じことである。


PLSでは、X(n×p)側の合成変数だけでなく、Y(n×q)側の合成変数も考える。
g = l_1 y1 + l_2 y2 + … + l_q yq = Y l
g = (l_1, l_2, …, l_q)’を行数qの列ベクトルとする。

sとgの共分散(Cov(s,g))を求める。
Cov(s,g) = s' g / sqrt(n-1) = (Xf)' Yl / sqrt(n-1) = f'X'Yl / sqrt(n-1)

X'Y(p×q)に特異値分解を適用する。
X'Y = ULV'
U(p×r)、L(r×r)対角行列、V(q×r)。(r = min(rank(X), rank(Y)))

fは左特異ベクトル(U)の一行目、lは右特異ベクトル(V)の一行目となる。

(ここに関してはあいまいなので、後ほど詳しく追加修正したい)

このときのfがX重み(Wの列成分)、lがY重み(Cの列成分)、sがXスコア(Tの列成分(t1))、gがYスコア(Uの列成分(u1))となる。


主成分分析では、Xの合成変数(s)の分散(Var(s))を最大化する。
PLSでは、Xの合成変数(s)とYの合成変数(g)の共分散(Cov(s,g)=Cor(s,g)SD(s)SD(g))を最大化する。
(Corは相関、SDは標準偏差

 

最大化の問題を解き、Xスコア(T)とYスコア(U)が求まった。
(スコアを一つずつ取り出す繰り返し計算になるがそれは後述。)
T = [t1, t2,…, tr*]、U = [u1, u2,…, ur*]。r* = min(n,p)。
T(n×r*)、U(n×r*)でサイズは同じになる。

取り出すスコアの数がおおければ、PLSモデルの複雑さは増す。
r*は取り出せる最大スコア数であるが、通常r*以下に抑えられる。


PLSモデルを記述する。スコアはkまで取り出すとする。(k < r*)
X = TP' + Ex
Y = UQ' + Ey
X、Yは上記式により、スコアと負荷量と残差に分解されており、そしてXスコアを説明変数、Yスコアを目的変数として回帰が行われる。
U = TD + H

X(n×p)、Y(n×q)がデータ。
T(n×k)がXスコア、U(n×k)がYスコア。Tは直行行列だが、Uには直行の制約がない。
P(k×p)がX負荷量、Q(k×q)がY負荷量。
Ex(n×p)がk個のXスコアでXが説明されなかった残差で、X残差と呼ばれる。Ey(n×p)がk個のYスコアでYが説明されなかった残差部分。

D(k×k)は対角行列。(呼び名は不明、D行列?)
計算では、第一Xスコアと第一Yスコアを単回帰、第二Xスコアと第二Yスコアを単回帰 … と続くので、対角行列の要素は各単回帰の回帰係数。切片は定義されない。

また、最初にXとYの線形結合式を定義したところから計算が始まるので、以下の式も計算上存在する。
T = XW
U = YC
W(p×k)がX重み、C(q×k)がY重み。

XによるYの予測といった形で書くのであれば、以下。
Y = XB + E
B(p×q)は最終的な回帰係数。E(n×q)は残差行列、Y残差と呼ばれる。

X、Y行列の予測値は以下になる。

予測X = TP'

予測Y = XB

PLSは、X側で主成分分析、Y側で主成分分析、各スコア(主成分)で単回帰、これらを同時に計算する形でパラメータを求める。

 

次回、PLSをNIPALSアルゴリズムで解いてみる。