特異値分解 (SVD) と多次元解析
Greenacre, M.J.

特異値分解 (SVD) は線形代数におけるもっとも便利なツールのひとつだが，統計家向け教科書の多くでは扱われていない。特異値分解の源流は，1870 年代フランス・イタリアの数学者の業績にさかのぼる (たとえば Marchall&Olkin,1979 の 19 章を参照)。その最大の適用領域である行列の低ランク近似は，

Psychometrika の第一巻で Eckart&Young(1936) により報告されたのが最初である。計量心理学の分野では，彼らを称えて「Eckart-Young 分解」と呼ぶことが多い。文献においてみられる他の呼称としては，「基本構造」(Horst,1963; Green&Carroll,1976 の pp.230-240)，「正準形式」(Eckart&Young,1936;Johnson,1963)，「特異分解」(Good,1969;Kshirsagar,1972)，「テンソル縮約」(Benzécri et al., 1973) がある。おそらく「基本構造」がもっとも記述的な名前であろう。
「基本」ということばが，その固有性と基礎性を含意しているし，空間の基底という幾何的な概念を示唆しているからだ (2.1 節, 2.2 節を参照)。しかし，主に歴史的な理由から，特異値分解という (いささか正当性を欠いている) ことばが，もっとも広く用いられている。この長い名前のかわりに，SVD という略語が良く使われている。

SVD は多様な多次元的手法を説明することができる。いっけん全く異なるように見えるさまざまな分析を，SVD という枠組みで統一できるのである。そのため，手法を教える際には SVD が理想的なアプローチであると私たちは考えている。本章では，SVD が主成分分析，バイプロット，正準相関分析，正準変量分析，対応分析の基盤となっていることを示す。これらの手法はすべて，ひとつのテーマのヴァリエーションなのである。そのテーマとは SVD という代数学・幾何学である。
統計学における SVD 関連文献としては，Good(1969), Chambers(1977), Gabriel(1978), Rao(1989),

Mandel(1982), Greenacre&Underhill(1982) がある。

本資料は、以下を翻訳し個人的なノートをつけたものです: Greenacre, M.J.(1984) ”Theory and Applications of Correspondence Analysis.” Academic Press. Appendix A: Singlar Value Decomposition (SVD) and Multidimensional Analysis.
なお、この本は書籍としては入手困難ですが、http://www.carme-n.org/ で PDF が公開されています。
基本的には本文を全訳していますが、一部体裁を変えているところがあります。影つき囲みと図は私の個人的ノートです。
誤訳や誤解など，きっとあると思います。何卒ご容赦ください。(2011/01/21 小野)
数カ所にわたり計算例の誤りをご指摘いただき、修正しました。ありがとうございました。あわせて、メモをちょっぴり追記しました。(2014/09/23 小野)
誤記を修正し、R でのコード例を追記しました。なお、Clausen(著), 藤本一男 (訳・解説)「対応分析入門」(オーム社) で本資料をご紹介いただきました (恐縮です...)。とてもわかりやすい本ですので、対応分析についての情報を求めて本資料に辿り着いた方は、こちらの本をご覧いただければと思います。(2016/05/17 小野)
メモをちょっぴり追記しました。(2016/05/19 小野)
R のコード例を追加しました。(2018/05/09 小野)
スペルミスを直しました。ご指摘誠にありがとうございます。(2023/09/03 小野)

11 SVD と低ランク行列近似
1.1 ユークリッド幾何学における SVD の通常の形式■SVD とはある行列の SVD とは，その行列を，形式が簡単で幾何的な解釈が可能な 3 つの行列の積へと分解することである。その基礎的な定理は次の通りである。任意の I × J 実数行列 A は以下のように表現できる。

A = UDα V⊤(A.1.1)

ただし，Dα は正数 α1 . . . αK からなる対角行列，K は A のランク (K ≤ min(I, J)) である。U, V はそれ
ぞれ I × K, J × K の行列で，その列は (通常のユークリッド的な意味において) 正規直交である。すなわちU⊤ U = V⊤ V = I である。
例として，以下の行列を特異値分解してみる:



1
 6

 8
10

2
4
9
11

 
+0.14
3
 +0.345 
=
7   +0.55
+0.75
12



−0.62 −0.05 
+0.56
25.35
0
0

+0.37 +0.81    +0.68
02.15
0+0.54 −0.58 
+0.48
0
0
1.71
−0.44 +0.06

+0.59
+0.09
−0.81


+0.59
−0.73 +0.35

U について調べてみると . . .
 +0.14 −0.62 −0.05
1+0.14 +0.34 +0.55 +0.75 +0.34 +0.37 +0.81  
0=U⊤ U =  −0.62 +0.37 +0.54 −0.44  
 +0.55 +0.54 −0.58 
0−0.05 +0.81 −0.58 +0.06+0.75 −0.44 +0.06


0
1
0


0
0 
1

ほんとうだ，直交している。また，列内の平方和が 1 になっている。

■SVD のベクトル表現 上の式は次のように書き換えることができる。

A=

K
∑

αk uk vk⊤

(A.1.2)k=1

ここで u1 . . . uK と v1 . . . vK は U, V の列である。αk は A の特異値，uk と vk はそれぞれ A の左特異ベク
トル，右特異ベクトルと呼ばれている (k = 1 . . . K)。左特異ベクトルは，I 次元空間における A の列の正規直交基底となっており，右特異ベクトルは，J 次元空間における A の行の正規直交基底となっている。上式の形式での SVD は，「標準化された」ランク 1 の行列 uk vk⊤ (k=1 . . . K) の線形結合として解釈できる。特異値は K 「次元」のそれぞれにおけるその行列の大きさを表しているわけである。特異 (値) という名前はおそらく，行列 A から抜き出した任意の項 αk uk vk⊤ が特異行列になるという事実に由来しているのだろう。

2

さっきの例だと:



1 2
 6 4

 8 9
10 11

■固有値分解




3
+0.14

[
5 
 = 25.35  +0.34  +0.56

7+0.55 
12
+0.75

+0.59

+0.59

]

+ ···

良く知られている固有値分解は SVD の特殊ケースである。対称な J × J 実数行列 B についてB = VDλ V⊤ =K∑

λk vk vk⊤

k=1

ただし K は B のランク (K ≤ J)，V は J × K 行列である。この場合，左特異ベクトルと右特異ベクトルは同一であり，B の固有ベクトルと呼ばれる。また特異値は固有値と呼ばれる。なお，SVD は実数行列からな
り，いかなる矩形行列についても存在するのに対し，正方行列の固有値分解は，行列が非対称な場合には要素が複素数になることが多い。

■SVD の存在の証明 A の SVD が存在することを証明する際には，まず次のように仮定することが多い。対称で正定な正方行列 B について固有値分解 B ≡ A⊤ A = VDλ V⊤ が存在し，正の固有値を持つとする。この仮定の下では，A の SVD が A = UDα V⊤ ，V が B の固有ベクトル，特異値が固有値の平方根 Dα = Dλ1/2であることを容易に示すことができる (cf. Mardia et.al., 1979, pp.473-474)。より根本的な証明においては，特異値とそれに対応した右特異ベクトル・左特異ベクトルがひとつだけ存在すると仮定し，演繹的議論によって SVD を導出する (Greenacre, 1978, Appendix A.)。

■SVD のもうひとつの定義

SVD の定義という問題に対する少し異なるアプローチが，Greenacre(1978,

Appendix A.) によって示されている。このアプローチは，正方行列 B の固有値 λ と固有ベクトル x の通常の定義 Bx = λx に近い。矩形行列 A について，Av = αu と A⊤ u = αv と同時に満たす非ゼロのスカラー

α を特異値と呼び，u, v を特異ベクトルと呼ぶ。ただし特異値は正であるとする (上の式は，特異値 −α, 特
異ベクトル u, −v の場合にも満たされるからである)。また，u, v の尺度にも不定性があるが，特異ベクトル
は同じユークリッド基底を持っているから (u⊤ u = v⊤ v)，どちらかのベクトルを標準化しておけば十分である (ふつうはノルムを 1 にする)。残る不定性は，u, v が，それぞれの双対空間で同時に反転できてしまう点
だが，これは通常なんの影響ももたらさない。異なる特異値を持った特異ベクトルがそれぞれの双対空間で互いに直交することは容易に証明できる。

1.2 SVD の一意性
ここからは，特異値は大きい順に並んでおり (α1 ≥ α2 ≥ . . . ≥ αK > 0)，特異ベクトルもその順番に並んでいるものとする。特異値が厳密な不等性をもって並んでいる場合は (つまり特異値に重複がない場合は)，対応する特異ベクトルの reﬂection によって SVD は一意に決定できる。2 つの特異値が同一である場合，たと3

えば αk = αk+1 の場合は，対応するベクトルの対が，それぞれの 2 次元下位空間における回転によってしか決定できない。実際には，特異値が等しくなるのはめったにないが，ほぼ等しいということならば起こりうる。その場合，特異ベクトルはデータ行列のわずかな違いに対し不安定になってしまう (cf. Section 8.1)。

1.3 SVD の完全な形式
U と V がそれぞれの空間において持っている正規直交基底を「完全なものにし」，正方行列 Ũ ≡[u1 . . . uK . . . uI ]，Ṽ ≡ [v1 . . . vK . . . vI ] を得ることが有用であることが多い。たとえば，uK+1 . . . uI が正規直交ベクトルで，u1 . . . uK に対しても直交であるとしよう。したがって Ũ⊤ Ũ = I である。同様に，

Ṽ⊤ Ṽ = I であるとしよう。この場合 SVD は下式となる:
A = Ũ∆Ṽ⊤
ただし

[
∆≡

Dα
O

O
O

(A.1.3)]

これを A の完全 SVD と呼ぶことにする (Green & Carroll, 1976, p.234 を参照)。基底を完全なものにする
やりかた，つまり U, V の直交な補足部分のために正規直交基底を選ぶやりかたは，通常は無限に存在する。
なお，この完全な形式が SVD と呼ばれていることもある (cf. Kshirsagar, 1972, pp.247-249)。
さっきの例でいえば:



1
 6
 8
10

2
4
9
11





3
+0.14
5   +0.34=
7   +0.55
12
+0.75

−0.62
+0.37
+0.54
−0.44

−0.05
+0.81
−0.58
+0.06



?
25.35
?  0?  0
?
0

0
2.15
0
0



[
0
+0.56
0 
+0.68

1.71
+0.48
0

+0.59
+0.09
−0.81

+0.59
−0.73
+0.35

]

Ũ の 4 列目 u4 は，正規直交であればなんでもいいわけだ。

1.4 低ランク行列近似■低ランク近似とは(A.1.2) の形式での SVD をみると，もし固有値 αK ∗ +1 . . . αK が α1 . . . αK ∗ と比べて小さかったら, (A.1.2) 式の右辺の最後の K − K ∗ 個の項を落としてしまえば，A よりも低いランクの行列で A をうまく近似したことになるように思われる。この近似は実際に最小二乗近似であり，このことが SVD を非常に有用なものにしている。以下では低ランク近似の定理について述べる。なおこの定理はEckart&Young(1936) によって最初に証明された。

■低ランク近似の原理 A[K∗ ] を，A の大きいほうから K ∗ 個の特異値と，それに対応している特異ベクトルからつくられたランク K ∗ の I × J 行列 とする。すなわち A[K∗ ] ≡

4

∑K ∗

⊤
k=1 αk uk vk 。このとき A[K∗ ] は，ランク K ∗ 以下のすべての行列 X について
I ∑
J
∑
i

(aij − xij )2 = trace{(A − X)(A − X)⊤ }(A.1.4)jを最小化する。この意味で，A[K∗ ] は A の「ランク K ∗ の最小二乗近似」である。

K ∗ = 2 で試してみると，

+0.14 −0.62 [][ +0.34 +0.37  25.35
0+0.56 +0.59

A[2] = +0.55 +0.54 
0
2.15+0.68 +0.09+0.75 −0.44

]

+0.59
−0.73




2.7
3.5 

5.7 
9.9

1.2 2.3
 5.3 5.9
=
 8.4 9.5
10.0 12.9というわけで，なかなかいい線いっている。

■証明

上記を証明するのは難しくない。その方法のひとつは，その特殊ケースである，A が正方行列である場合の証明と同じやりかたで証明することである (たとえば以下を見よ: Kshirsagar, 1972, pp.429-430;

Stewart, 1973)。この場合，A の完全 SVD(A.1.3) を用いる必要がある。目的関数 (A.1.4) は以下となる:trace{ŨŨ⊤ (A − X)ṼṼ⊤ (A − X)⊤ } = trace{(∆ − G)(∆ − G)⊤ } =K∑(αk − gkk )2 +

k

K ∑
K
∑
k

2
gkl

l̸=k

ここで G は I × J 行列であり G ≡ Ũ⊤ XT̃ である。G は X と同じランクをもっているから，あきらかに，
最適の G は対角要素が α1 . . . αK ∗ ，他の要素が 0 である行列であり，このときに X = A[K ∗ ] が最適となる。

■近似の質

U, Dα , V の部分行列の記号を導入しよう。
U ≡ [U(K ∗ ) U(K−K ∗ ) ][]Dα(K ∗ )O
Dα ≡O
Dα(K−K ∗ )V ≡ [V(K ∗ ) V(K−K ∗ ) ]この記号を用いると，I × K ∗ 行列 U(K ∗ ) ，K ∗ × K ∗ 行列 Dα(K ∗ ) ，J × K ∗ 行列 V(K ∗ ) の 3 つの行列が，A[K ∗ ] の SVD を構成することになる:⊤A[K ∗ ] = U(K ∗ ) Dα(K ∗ ) V(K∗)(A.1.5)⊤A − A[K ∗ ] = U(K−K ∗ ) Dα(K−K ∗ ) V(K−K∗)(A.1.6)

あきらかに，残差行列は以下となる。

行列 Y の要素の二乗和は trace(YY ⊤ ) に等しいから，(A.1.1), (A.1.5), (A.1.6) より

5• A の要素の二乗和は∑Kk• A[K ∗ ] の要素の二乗和は

αk2
∑K ∗
k

• A − A[K ∗ ] の要素の二乗和は

αk2
∑K

2
k=K ∗ +1 αkとなる。近似の質を示す伝統的指標としては，二乗和のパーセンテージがよくつかわれている:

∑K ∗
τ

K∗

≡ 100 ∑kK
k

αk2
αk2

(A.1.7)

さっきの例では，α12 = 642.4, α22 = 4.6, α32 = 2.9, 合計 650(これが A の全要素の二乗和)。τ2 = 99.5である。

1.5 一般化 SVD■一般化 SVD とは

さて，これからの説明を楽にするために，SVD の定義にちょっとした一般化を加えよう。Ω (I × I), Φ (J × J) を正定対称行列とすると，任意の実行列 A (I × J, ランク K) は以下のように表現できる:

A = NDα M⊤ =K∑

α k n k m⊤
k(A.1.8)k

ここで，N, M の列は Ω, Φ について正規直交化されている:N⊤ ΩN = M⊤ ΦM = I(A.1.9)N と M の列は，それぞれ一般化左特異ベクトル，一般化右特異ベクトルと呼ぶことができるだろう。これらは依然として A の列と行の正規直交基底だが，I 次元空間・J 次元空間における距離はもはや単純なユーク
リッド距離ではなく，Ω, Φ によって定義された一般化 (重みつき) ユークリッド距離となる (Section 2.3 を見よ)。同様に，対角行列 Dα の対角成分 (大きい順に並んでいる) は一般化特異値と呼ぶことができるだろう。

■一般化 SVD の証明 一般化 SVD は，行列 Ω1/2 AΦ1/2 の SVD について考えれば容易に証明できる (Ω が固有値分解 Ω = WDµ W⊤ を持つならば Ω1/2 = WDµ W⊤ )。
1/2Ω1/2 AΦ1/2 = UDα V⊤ , ただし U⊤ U = V⊤ V = I(A.1.10)N ≡ Ω−1/2 U かつ M ≡ Φ−1/2 V(A.1.11)

ここでとすれば，(A.1.8) と (A.1.9) を得る。

6

ひらたくいえばこういうことであろう。任意の行列 A の一般化 SVD を、次の手順で求めることができる。

1. B = Ω1/2 AΦ1/2 を求める。
2. B について，通常の SVD B = UDα V⊤ を求める。
3. N = Ω−1/2 U, M = Φ−1/2 V とする。
4. A = NDα M⊤ が A の一般化 SVD である。
さっきの例で試してみよう。話を簡単にするために，Ω を適当な対角行列にして



1
 0
Ω=
 0
0

0
4
0
0

0
0
9
0


0
0 
,Φ = I0 
16とすると，最初のステップは



1

0
B = Ω1/2 AΦ1/2 = 
 0
0

0
2
0
0

0
0
3
0


1
0
 6
0 

0  8
10
4

2
4
9
11



3
1
5 
 0
7 
0
12

0
1
0





1
0
 12
0 =
 24
1
40

2
8
27
44


3
10 

21 
48

つまり，A の行を Ω で重みづけているわけである。同様に，Φ は列への重みとなる。3 番目のステッ
プでは，特異ベクトルをこの重みで割り戻している。

■一般化 SVD と低ランク近似

低ランク近似の定理においては以下の一般化が導出される。(A.1.8) の最後の K − K ∗ 項を落とした A[K ∗ ] ≡

∑K ∗
k

⊤
α k n k m⊤
k = N(K ∗ ) Dα(K ∗ ) Mα(K ∗ ) は，A の「一般化されたランクK ∗ の最小二乗近似」となる。それはランク K ∗ (ないしそれ以下) のすべての行列 X のなかで，trace{Ω(A − X)Φ(A − X)⊤ }(A.1.12)を最小化する行列となる。

■一般化 SVD の幾何的な解釈

たとえば，Ω が正数 ω1 . . . ωI からなる対角行列 Dω であるとしよう。

(A.1.12) は以下のようになる:trace{Dω (A − X)Φ(A − X)⊤ } =I∑

ωi (ai − xi )⊤ Φ(ai − xi )(A.1.13)i

ただし，ai , xi は A, X の行を列ベクトルに書き換えたものである。この関数は本質的には，Pearson(1901),

Young(1937) らが考えた一般化主成分分析の定義である (Section 2.5 で述べた)。A の I 本の行は，J 次元の一般化 (重みつき) ユークリッド空間における I 個の点であると考えることができる。この空間における距離は Φ によって定義される (Section 2.5 では Φ は対角行列でもあった。これを「対角距離」と呼ぶことが多い)。ω1 . . . ωI は，それぞれの行の点自体に割り当てられた重みである。X の行は K ∗ 次元下位空間における未知の点であり，X ≡ A[K ∗ ] によって得られる (A.1.13) を最小化するということは，A のI 個の点のあつまりに対して，平方距離の重みつき和という観点からみて最も近い下位空間を決めるとい7

うことである。この例の場合，ベクトル m1 . . . mK ∗ はその下位空間の正規直交な「主軸」を定義し，行列N(K ∗ ) Dα(K ∗ ) = [α1 n1 . . . αK ∗ nK ∗ ] の行は，点のあつまりを下位空間に射影した際の (主軸についての) 座
標をあらわしている。軸と射影の正規直交性は距離 Φ の観点から定義されていることに注意してほしい。近
似した行列 A[K ∗ ] は。M(K ∗ ) によって定義された最適空間と等しく，αK ∗ が厳密に αK ∗ +1 より大である限りにおいて一意に定まる (前述した SVD の一意性についての説明を参照のこと). 実用的には，近似の次元数

K ∗ は αK ∗ と αK ∗ +1 の差が明確であるところに決めるべきである。

■一般化 SVD を用いたデータ視覚化F ≡ N(K ∗ ) Dα(K ∗ ) の行を，K ∗ 次元のユークリッド空間 (K ∗ はたい

てい 2 ないし 3) においてプロットすることで，データ行列 A の行の多次元的布置を調べること多い。しかし，Gabriel(1971, 1981) が述べているように，同じ空間に G ≡ M(K ∗ ) の行をプロットすることもできる。
このような，ある行列の行と列の両方を点として同時にあらわす方法はバイプロットと呼ばれている。それは本質的には Tucker(1960) の述べた選好のベクトルモデルと同じなのだが，より広い範囲のデータに適用できる。バイプロット表示では，i 番目の行を点として表すベクトル (すなわち F の i 番目の行 fi⊤ ) と，j 番目の列を点として表すベクトル (すなわち G の j 番目の行 g⊤ ) のスカラー積がデータ aij を近似する:

aij ≈ fi⊤ gj = (fi の長さ) × (gj の長さ) × (fi と gj がなす角の cosine)(A.1.14)

通常，データ値 aij はなんらかのかたちで中心化される ( たとえば行平均によって)。それにより，正の偏差

aij > 0 は鋭角をなすベクトル fi , gj によって表され，負の偏差 aij < 0 は鈍角をなすベクトルによって表される。

82 一般的分析とその特殊ケース■一般的分析 上記の説明から，矩形行列 Y の一般的分析が以下のようになることがわかる。

フェーズ 1 Y をなんらかの方法で前処理する。なんらかの中心化ないしデータの再コード化がなされることが多い。その結果を行列 A とする。
フェーズ 2 所与の Ω, Φ について，A の一般化 SVD を求める ((A.1.10), (A.1.11) を参照):

A = NDα M⊤ , ただし N⊤ ΩN = M⊤ ΦM = I
次にランク K ∗ の近似を選択する:A[K ∗ ] = N(K ∗ ) Dα(K ∗ ) M⊤
(K ∗ )
フェーズ 3 データの行ないし列 (またはその両方) を視覚表示するために，所与の a と b を用い，行列F ≡ N(K ∗ ) Daα(K ∗ ) の行，ないし行列 G ≡ M(K ∗ ) Dbα(K ∗ ) の行，またはその両方を，K ∗ 本の直交軸についてプロットする。

■パラメータ

この分析はコンピュータ・サブルーチン/プロシジャ/マクロとしてプログラミングできるし，

そのプログラムに以下の「パラメータ」を与えてやればさまざまな分析が可能になる:

1. フェーズ 1 における，データ行列の中心化/再コード化のタイプ。
2. フェーズ 2 における，正定対称行列 Ω, Φ。
3. スカラー a, b。プロットする前に左特異ベクトルと右特異ベクトルをリスケールする際，そのために特異値をどのように配分するかを示す。

■さまざまな特殊ケース

上の分析の特殊ケースである，いくつかのよく知られた分析手法を表 A.1 に示した。それぞれの分析から得られるプロットの幾何的解釈についても簡単に説明した。より詳しい説明を求める
読者は，「参考文献」欄の教科書・論文を参照されたい。また，具体的なデータセットを使って，この３つのフェーズの「パラメータ」について実験してみてほしい。

■表 A.1 について

表 A.1 を見る際の手助けとして，いくつか説明を加えておく。

1. 行の点と列の点のうち，どちらか一方にしか関心がないという場合も珍しくない。通常，リスケールされていない点 (例, b = 0) は関心がない点である。

2. 行の点と列の点の両方がプロットされ，かつ a + b = 1 である場合には，バイプロット解釈が可能である。すなわち，表示におけるスカラー積 fi⊤ gj が行列 A の要素 aij の近似となる。

9

3. 行の点と列の点の両方がプロットされ，かつ，たとえば b = 0 である場合には，列の点は行の点 (a = 1
によってリスケールされている) に比べて極端に「小さく」なることがあるだろう。こうした場合は，列の点を適当な量だけ一律にリスケールすると，列の点と行の点の尺度が異なることになるが，列の点の相対的位置はみやすくなる。a = b の場合，点はふつう同じ尺度でプロットされる。

4. 表が示しているのは，それぞれの手法における基本的な算出の枠組みである。手法によってはさらなる計算を必要とするものがある。たとえば主成分分析においては，成分得点 (行列 F の列) と変数 (Y ないし A の列) との間の相関の計算が必要になる。SAS や GENSTAT のようなプログラミング言語を用いれば，これらを付け加えるのはとても簡単である (Appendix B をみよ)。

5. 手法 (4) と (5) では，データを最初に (I − 1)1/2 で割っている。これは，分散ないし相関の真の尺度を図に復元するためである。たとえば，共分散バイプロットではY − (1/I)11⊤ Y= NDα M⊤(I − 1)1/2
こうすると，MD2α M⊤ は共分散行列{Y − (1/I)11⊤ Y}⊤ {Y − (1/I)11⊤ Y}(I − 1)に等しくなる。したがって，G ≡ M(K ∗ ) Dα(K ∗ ) の列のスカラー積が，それに対応する共分散を近似することになる。つまり，図を標準偏差と相関の観点から解釈できるようになる (Gabriel, 1971)。

6. 手法 (2) と (3) におけるオプション (i) と (ii) のちがいについて注意してほしい。最終的な図示における行の点は同じだが，列の点が異なる。ちがう行列をバイプロット表示しているからである。

7. 距離を定義している行列の逆行列が，双対問題における「重み行列」になることに注意。正準相関分
析と対応分析では，行列「パラメータ」である Ω, Φ は重み行列として定義されており，その逆行列は双対空間における通常の距離となる。たとえば手法 (9) によって得られる，対応分析での行の点 F の⊤−1
配置は，A = D−1
r P − 11 Dc , Ω = Dr , Φ = Dc , a = 1 という分析での行の点の配置と同じである。これは，P の中心化された行プロファイルを A の行とし，Dr の対角成分で重みづけした一般化
主成分分析 (手法 (2)) である (Section 2.5 を参照)。同様に，列の点 G の配置は，一般化主成分分析⊤⊤−1
A = D−1c P − II Dr , Ω = Dc , Φ = Dr , b = 1 で得られる配置と同じである。4 章で示すように，

集群分析法や双対尺度法といった対応分析のバリエーションは，パラメータ a, b の定義のみが異なる(両方が 0 とされることが多い)。対応分析において a = 0, b = 0 とすると，それぞれの行の点は，列の点の重心 (重みつき平均) に位置する。重みは分割表のその行における個々の値と比例する。

2.1 主座標分析
表 A.1 に挙げた手法のほとんどを扱うことができるもうひとつの枠組みとして，主座標分析 (Gower, 1966)がある。これはもう少し広い枠組みであり，元の矩形データ行列ではなく，点の間の距離の行列を入力とする。
ここで，この分析の通常の定義を一般化し，点に与えられる重みを扱うことができるようにしよう。まず，ス
カラー積の行列 S を計算し (例 2.6.1(b) を見よ)，その一般化固有値分解を求める: S = NDµ N⊤ 。ここでたとえば NDω N⊤ = I であれば，Dω は重みの対角行列である。スカラー積の (最小二乗的に) 最適な K ⊤ 次元
1/2

表示は，F ≡ N(K ∗ ) Dµ(K ∗ ) の行として与えられる。一般化固有値分解は，一般化 SVD の場合と同じく，通

10

1/2

1/2

常の固有値分解によって求めるのがふつうである (Section 2.5 と Appendix B を見よ)。つまり，Dω SDω
1/2の固有値と固有ベクトルをみつければ，それが N = Dω U である。
例 3.5.2 に，対応分析が双対主座標分析として定義できることを示した。

2.2 個人データのウェイティング
上記の枠組みとは全然離れている問題として，aij を指定された wij で重みづけし，行列 A を重みづけ最小二乗近似する，という問題がある。これは Gabriel & Zamir(1979) によって議論されており，以下の点で有用である。

1. 欠損データを扱う際。wij = 0 とする。
2. それぞれの値について信頼性の指標が手に入る場合。wij を信頼性に比例させる。
3. 外れ値を扱う際。個別に重みを下げる。
我々の枠組みは，wik = si tj 形式の重みづけスキーマを許容する。したがって，A の個別の行，個別の列，その両方を，最小二乗近似において重みづけすることができる。これは，たとえば外れ値のベクトルの役割を減らす際に有用である。しかし，一般的な重みづけスキーマにあわせようとすると，もはや SVD に基づく理論に頼ることはできなくなり，その整然としたアルゴリズムや優れた最適的な特性は失われる。列ベクトル・行
ベクトルが通常持っている幾何的性質も失われる。

11

表 A.1 さまざまな多次元手法の一般化 SVD の観点からの定義
表を箇条書きに改めた。
いくつかの手法について，さっきから使っている行列



1
 6

 8
10

2
4
9
11


3
5 

7 
12

のバイプロット表示をつくってみる。行を R1 . . . R4, 列を C1 . . . C3 と呼ぶことにする。
なお，手法 (1)(2)(3)(4)(5) のフェーズ 1 に登場する Y − (1/I)11⊤ Y は，

Y − (1/I)11⊤ Y




1
1 1 1 11
2
3
 1 1 1 1  6
 6
4
5 





− (1/4) =
1 1 1 1  8
8
9
7 
10
1 1 1 1
10 11 12 

6.25 6.5 6.75
12
3
 6.25 6.5 6.75 
 6
4
5 




−
=
8
9
7   6.25 6.5 6.75 
6.25 6.5 6.75
10 11 12

−5.25 −4.5 −3.75
 −0.25 −2.5 −1.75 =
 +1.75 +2.5 +0.25 +3.75 +4.5 +5.25

2
4
9
11


3
5 

7 
12

つまり，データ行列 Y を列ごとに中心化した行列のこと。参考のために、これを単純に特異値分解す
ると



−5.25
 −0.25 +1.75
+3.75

−0.67
 −0.23= +0.23+0.67

−4.5 −3.75−2.5 −1.75 +2.5 +0.25 +4.5 +5.25
+0.5 −0.23 
11.63
0
0
+0.56 +0.62−0.5 +0.67  0  −0.71 −0.00
2.12
0−0.5 −0.67 
001.64+0.44 −0.79+0.5 +0.23

12


+0.56
+0.71 +0.44

手法 (1) 「主成分分析」(変数がプロットされている場合には「主成分バイプロット」)





特有な定義

データ行列 Y は，ふつうは行がケース，列が変数。

フェーズ 1 A = Y − (1/I)11⊤ Y
フェーズ 2 Ω = (1/I)I, Φ = I
フェーズ 3 a = 1, b = 0
幾何的解釈の概要 図の原点は行の重心。列の点は，J 次元空間における列の点をもっとも「近い」(もっともフィットした) K ∗ 次元下位空間に直交射影したもの。もし必要なら，変数をベクトルとしてプロットする。バイプロット解釈が可能。G の列は共分散行列の固有ベクトルになる。
参考文献 Pearson(1901) と Hotelling(1933) (Bryant&Atchley(1975) はこの 2 つの研究を主成分分析のほかの論文とともに再現している); Morrison(1976); Gabriel(1971); Kendall(1975); Cham-bers(1977)


プロット表示をつくってみよう。

−5.25 −4.5 −3.75
 −0.25 −2.5 −1.75 
A=+1.75 +2.5 +0.25 +3.75 +4.5 +5.25


これを Ω = (1/I)I, Φ = I を重みにして一般化 SVD すると
−1.34 −1 −0.46 +0.56 +0.62 +0.56
00 −0.46 +1 +1.34  5.82
 0
1.06
0   −0.71 −0.00 +0.71 
A= +0.46 +1 −1.34 +0.44 −0.79 +0.44
00
0.82+1.34 −1 +0.46√√
前のページの普通の SVD と比べると、Dα が 1/ I 倍、N が I 倍になっている。
K ∗ = 3 として F, G を求めよう。

−7.79 +1.06 −0.37
 −2.65 −1.06 +1.10 F = N(3) Dα(3) = 
 +2.65 −1.06 −1.10 +7.79 +1.06 +0.37
+0.56 −0.71 +0.43
G = M(3) =  +0.62 −0.00 −0.79 +0.56 +0.71 +0.44
結局、得られる F は Ω = I, Φ = I とした場合と変わらない。もちろん G も変わらない。ということ
は、わざわざ Ω = (1/I)I についての一般化 SVD を求めなくても、Ω = I, Φ = I とした一般化 SVD(つまり普通の SVD) を求め、F = NDα , G = M としたほうがかんたんである。ここでは、Dα を世間でいうところの主成分分析の結果と揃えるために，わざわざこう書いているのだろう。

13

10
8
C3
6

第二主成分

4
2
R1

R4

0

C2

R2

R3

-2
-4
-6
C1

-8
-10
-10

-5

0
第1主成分

5

10

主成分プロット。列スコアは 10 倍した。
列は点ではなく原点からの矢印で表現することが多いのだが、めんどくさいので点で描いている。

14

R でのコード例を示す。上述の通り、一般化 SVD ではなく普通の SVD で済ませている。
> Y <- matrix(c(1,2,3,6,4,5,8,9,7,10,11,12), ncol=3, byrow=TRUE)> A <- scale(Y, center = TRUE, scale = FALSE)> oSVD <- svd(A)> oSVD$u %*% diag(oSVD$d)[,1][1,] -7.785228

[,2]

[,3]

1.06066 -0.3744716[2,] -2.653918 -1.06066

1.0985066[3,]

2.653918 -1.06066 -1.0985066[4,]7.785228

1.06066

0.3744716> oSVD$v
[,1]

[,2]

[,3]

[1,] 0.5570694 -7.071068e-01

0.4355155[2,] 0.6159119 -5.551115e-17 -0.7878150[3,] 0.5570694

7.071068e-01

0.4355155

15

R では、たとえば stats パッケージの prcomp 関数で主成分分析を行うことができる。返し値のうち、• 要素 sdev は Dα の対角要素の√I/(I − 1) 倍である。この値は F の各列の不偏 SD に一致する。SAS や SPSS でいう「固有値」ではない。

• 要素 rotation は G である。
• 要素 x は F である。
コード例を示そう。

> Y <- matrix(c(1,2,3,6,4,5,8,9,7,10,11,12), ncol=3, byrow=TRUE)> result <- prcomp(Y)> result$sdev[1] 6.7158049 1.2247449 0.9476096> result$rotation
PC1

PC2

PC3

[1,] 0.5570694 -7.071068e-01

0.4355155[2,] 0.6159119 -5.551115e-17 -0.7878150[3,] 0.5570694

7.071068e-01

0.4355155> result$x
PC1[1,] -7.785228

PC2

PC3

1.06066 -0.3744716[2,] -2.653918 -1.06066

1.0985066[3,]

2.653918 -1.06066 -1.0985066[4,]7.785228

1.06066

0.3744716

biplot(result, scale=0) で図が出力される。scale オプションをつけないと手法 (5) になるので注意。

SAS では，proc princomp に cov オプションをつけて実行すると再現できる。
•「固有値」は、フェーズ 2 で Ω = (1/(I − 1))I としたときに得られる Dα の対角要素の二乗，すなわち上式の Dα の対角要素の二乗の I/(I − 1) 倍である。データ行列ではなくその不偏共分散行列を分析しているためである。

•「固有ベクトル」は G である。
•「主成分得点」は F である。
SPSS では，factor コマンドに method=covariance, extraction=pc オプションをつけて実行すると再現できる。

•「固有値」は，SAS の proc princomp の場合と同じく，上式の Dα の対角要素の二乗の I/(I − 1)倍である。

•「成分行列」は G の列に上記の固有値の平方根を掛けたものである。
•「因子得点」は F の列を上記の固有値で割ったものである。

16

手法 (2) 「一般化主成分分析」(変数がプロットされている場合には「一般化主成分バイプロット」)





特有な定義

Dω は正の重み (合計 1) からなる対角行列。

オプション (i):フェーズ 1A = Y − (1/I)11⊤ Dω Y

フェーズ 2Ω = (1/I)Dω , Φは所与フェーズ 3

a = 1, b = 0

オプション (ii):フェーズ 1A = {Y − (1/I)11⊤ Dω Y}Φ1/2

フェーズ 2Ω = (1/I)Dω , Φ = I

フェーズ 3

a = 1, b = 0

幾何的解釈の概要 (1) とのちがいは，行の空間が距離 Φ に従う一般化ユークリッド空間であり, 行の点が Dω の対角要素 ω1 . . . ωI によって重み付けられていること。A の近似の質は同じ。オプション(i) と (ii) は，F の行の点については同じ布置を与えるが，G の列の点については異なる布置を与える。手法 (3) を見よ。
参考文献 手法 (3), (7), (8), (9) などよく知られた手法の多くはこの手法の特殊ケースである。Dω , Φを変えたときに何が起こるかはこれからの課題である。





17

手法 (3) 「標準化データについての主成分分析」(変数がプロットされている場合には「標準化データについての主成分バイプロット」)





特有な定義

Ds は変数の標準偏差からなる対角行列。

オプション (i):フェーズ 1A = Y − (1/I)11⊤ Y

フェーズ 2Ω = I, Φ = D−2sフェーズ 3

a = 1, b = 0

オプション (ii):フェーズ 1A = {Y − (1/I)11⊤ Y}D−1sフェーズ 2Ω = I, Φ = I

フェーズ 3

a = 1, b = 0

幾何的解釈の概要 手法 (2) の良く知られている特殊ケース。オリジナルの軸における行の点の分散が軸の間で等しくなっている。オプション (ii) では，G の列は相関行列の通常の固有ベクトルである。
オプション (i) では G̃ = Ds G をつくることになり，標準偏差が列の点のベクトルによって近似されるが，共分散構造は近似されない。手法 (4) を見よ。
参考文献 多変量解析の教科書の多くは，この問題を「相関行列の主成分分析」として扱っている (すな
わちオプション (ii))。





18

手法 (4) 「共分散バイプロット」



フェーズ 1 A =Y−(1/I)11⊤ Y(I−1)1/2

フェーズ 2 Ω = I, Φ = I
フェーズ 3 a = 0, b = 1
幾何的解釈の概要 図の原点は行の重心。列の点は，J 次元空間における列の点をもっとも「近い」(もっともフィットした) K ∗ 次元下位空間に直交射影したもの。変数をベクトルとしてプロットする。
その長さは変数の標準偏差を近似する。ベクトル間のコサインは変数間の相関を近似する。
参考文献 Gabriel(1971,1972,1981)



バイプロット表示を作ってみよう。

−3.03 −2.60 −2.17
 −0.14 −1.44 −1.01 A= +1.01 +1.44 +0.14 +2.17 +2.60 +3.03


これを SVD して、+0.5 −0.23 +0.56 +0.62 +0.56
6.72
00−0.5 +0.67 
 0
1.22
0   −0.71 +0.00 +0.71 −0.5 −0.67 +0.44 −0.79 +0.44
00
0.95+0.5 +0.23√
Y − (1/I)11⊤ Y を SVD した場合と比べて、Dα が 1/ I − 1 倍になっている。
−0.67
 −0.23
A= +0.23+0.67

K ∗ = 3 として−0.67 +0.5 −0.23
 −0.23 −0.5 +0.67 F = N(3) = 
 +0.23 −0.5 −0.67 +0.67 +0.5 +0.23


 

+0.56 −0.71 +0.44
6.72
00+3.74 −0.87 +0.41
1.22
0  =  +4.13 +0.00 −0.75 
G = M(3) Dα(3) =  +0.62 +0.00 −0.79   0
00
0.95+3.74 +0.87 +0.41+0.56 +0.71 +0.44

G 行列の 1 行目の長さは 3.86 で，Y − (1/I)11⊤ Y の 1 列目の不偏標準偏差に一致する。また G 行列の 1 行目と 2 行目の内積は 15.17 で，Y − (1/I)11⊤ Y の 1 列目と 2 列目の不偏共分散に一致する。な
るほど。

19

1.5

1

R1

0.5

R4

第2軸

C3
C2

0
C1

-0.5

R2

R3

-1

-1.5
-1.5

-1

-0.5

0
第1軸

0.5

共分散プロット。行スコアは 0.3 倍した。

20

1

1.5

R の場合、その 1。主成分分析の関数を使わず、自力で特異値分解して F, G を求めてみる。
> Y <- matrix(c(1,2,3,6,4,5,8,9,7,10,11,12), ncol=3, byrow=TRUE)> X <- scale(Y, scale=FALSE)> A <- X / sqrt(3)> oSVD <- svd(A)> oSVD$u[,1] [,2][1,] -0.6692874[,3]0.5 -0.2281544[2,] -0.2281544 -0.5

0.6692874[3,]0.2281544 -0.5 -0.6692874[4,]0.6692874

0.5

0.2281544> oSVD$v %*% diag(oSVD$d)
[,1]

[,2]

[,3]

[1,] 3.741169 -8.660254e-01

0.4126986[2,] 4.136344

5.438960e-16 -0.7465411[3,] 3.741169

8.660254e-01

0.4126986

21

R の場合、その 2。主成分分析の関数を使ってみる。
prcomp 関数がなにをしていたかを思い出そう。手法 (1) で調べたように、prcomp 関数は、入力行列を中心化し、SVD(Ω = Φ = I による一般化 SVD) によって M, Dα , N を求め、• 要素 x として√

I NDα を• 要素 rotation として M を√√
1• 要素 sdev として I/(I − 1))(1/ I) Dα = √I−1
Dα を、返してくるのであった。いっぽういま欲しいのは、同じように M, Dα , N を求めたときの• N
1• √I−1MDαである。
従って、F, G を求めるコードは以下となる。

> Y <- matrix(c(1,2,3,6,4,5,8,9,7,10,11,12), ncol=3, byrow=TRUE)> result <- prcomp(Y)> t(t(result$x)/ (result$sdev*sqrt(3)))
PC1[1,] -0.6692874

PC2

PC3

0.5 -0.2281544[2,] -0.2281544 -0.5

0.6692874[3,]0.2281544 -0.5 -0.6692874[4,]0.6692874

0.5

0.2281544> t(t(result$rotation) * result$sdev)
PC1

PC2

PC3

[1,] 3.741169 -8.660254e-01

0.4126986[2,] 4.136344 -6.798700e-17 -0.7465411[3,] 3.741169

8.660254e-01

0.4126986

22

R の場合、その 3。もし biplot 関数で図を描いたら何が起きるか。
> Y <- matrix(c(1,2,3,6,4,5,8,9,7,10,11,12), ncol=3, byrow=TRUE)> result <- prcomp(Y)> biplot(result)

0

5

4
5

1

0.2

0.4

0.6

−5

Var 2

0

0.0

Var 1
−5

−0.6 −0.4 −0.2

PC2

Var 3

3

2

−0.6 −0.4 −0.2

0.0

0.2

0.4

0.6

PC1

左と下の目盛が行の座標、上の右の目盛が列の座標を表している。列を表す矢印は、ラベルと重ならないようにするため、少し短めに描かれている。
行の座標は、result$x の (1,2) 列を、result$sdev の対応する値で割りデータの行数の平方根で割った値、すなわち−0.58 +0.43
 −0.20 −0.43 
 +0.20 −0.43 +0.58 +0.43
となっている。本資料の説明とくらべると√I−1√
F である。
I

列の座標は、result$rotation の (1,2) 列に、result$sdev の対応する値を掛け、さらにデータの行数の平方根を掛けた値、すなわち


+7.48 −1.73
 +8.27 −0.00 +7.48 +1.73√となっている。本資料の説明とくらべると IG である。
このように、biplot(result) の出力は本資料の説明と一致しない。しかし、行の座標と列の座標の相対的サイズがちがうだけで、同じ図である。

23

R の場合、その 4。biplot 関数に引数 pc.biplot=TRUE をつけるとどうなるか。
> Y <- matrix(c(1,2,3,6,4,5,8,9,7,10,11,12), ncol=3, byrow=TRUE)> result <- prcomp(Y)> biplot(result, pc.biplot=TRUE)

0

2

4
4

−2

4
2

1

0.5

1.0

−4

Var 2

0

0.0

PC2

Var 3

−2

−0.5

Var 1

3
−4

−1.0

2

−1.0

−0.5

0.0

0.5

1.0

PC1

引数 pc.biplot=TRUE は、データの行数の平方根でかけたり割ったりするのをやめてくれ、という指示である。
従って行の座標は、result$x の (1,2) 列を result$sdev の対応する値で割った値、すなわち

−1.16 +0.86
 −0.40 −0.86 
 +0.40 −0.86 +0.16 +0.86
となる。本資料の説明とくらべると√I − 1F である。

列の座標は result$rotation の (1,2) 列に、result$sdev の対応する値を掛けた値、すなわち
+3.74 −0.86
 +4.14 −0.00 +3.74 +0.86となる。本資料の説明における G と一致する。
このように、pc.biplot=TRUE をつけても、出力は本資料の説明と一致しない。しかし、行の座標と列の座標の相対的サイズがちがうだけで、同じ図である。

24

WRC Research Systems の Brandmap の場合，
• Y 行列を転置して与えると上記の説明と一致する。これはこのソフトウェアが，列がブランド，
行が属性である集計表を入力として想定しているから。

• Data Centering を”Row”とする。これは Y の「行」ではなく，入力行列の「行」を指している。
• Factorization を”G*(V*H’)”とする。これは入力行列の SVD ではなく，Y の SVD を指している。やれやれ。

√

I − 1 で割らない。そのため，Y の列 (入力行列の行) を√あらわすベクトルの長さは標本標準偏差の I 倍，ベクトルの内積は標本共分散の I 倍になる。

• Brandmap はフェーズ 1 でデータを• Y の行 (入力行列の列) の点は，上記の座標を謎の値で定数倍した位置にプロットされるようである。おそらく，図の外観上の都合で倍率を決めているのだろう。

25

手法 (5) 「相関バイプロット」





特有な定義

Ds は変数の標準偏差からなる対角行列。

フェーズ 1 A ={Y−(1/I)11⊤ Y}D1/2s(I−1)1/2

フェーズ 2 Ω = I, Φ = I
フェーズ 3 a = 0, b = 1
幾何的解釈の概要 共分散バイプロットとのちがいは，列の点が J 次元空間の原点から長さ 1 の位置にあること。したがって，それぞれの変数の図示の質は，点が K ∗ 次元の単位球面 (たとえば 2 次元における単位円) とどのくらい近いかを観察すればわかることになる。
参考文献 Hill(1969)

A は、標準化されたデータ行列を√I − 1 で割ったものである。

−0.9 −0.7 −0.6
 +0.0 −0.4 −0.3 A= +0.3 +0.4 +0.0 +0.6 +0.7 +0.9

これを素直に SVD して−0.7 −0.5 +0.2 
0+0.6 +0.6
 −0.2 +0.5 −0.7  1.9 0
  0 0.4 0   +0.7
0A=
 +0.2 +0.5 +0.7 
0
0 0.3+0.4 −0.8+0.7 −0.5 −0.2K ∗ = 3 として，


+0.6
−0.7 
+0.4


−0.9 −0.7 −0.6
 +0.0 −0.4 −0.3 
F = N(3) = 
 +0.3 +0.4 +0.0 +0.6 +0.7 +0.9


 

+0.6 +0.7 +0.4
1.9 0
0+1.1 +0.3 +0.1
G = M(3) Dα(3) =  +0.6 +0.0 −0.8   0 0.4 0  =  +1.1 +0.0 −0.2 +0.6 −0.7 +0.4
0
0 0.3
+1.1 −0.3 +0.1√
G 行列の各行の長さは 4/3 = 1.2，行間の内積は相関の 4/3 倍に一致する。こうなるのは，フェーズ√√
1 でデータを I − 1 で割ってしまったからである。素直に I で割っておけばよかったのに。
26

R でやってみよう。R の scale() で使われる SD は不偏 SD なので、わざわさ標本 SD に修正している。
> Y <- matrix(c(1,2,3,6,4,5,8,9,7,10,11,12), ncol=3, byrow=TRUE)> agSD <- sqrt(apply(Y, 2, var) * (3/4))> A <- scale(Y, center = TRUE, scale = agSD) / sqrt(3)> oSVD <- svd(A)> oSVD$u[,1] [,2][1,] -0.6718767[,3]

0.5 -0.2204125[2,] -0.2204125 -0.5

0.6718767[3,]0.2204125 -0.5 -0.6718767[4,]0.6718767

0.50.2204125> oSVD$v %*% diag(oSVD$d)
[,1]

[,2]

[,3]

[1,] 1.119862 -2.589191e-01

0.1104651[2,] 1.133898 -2.032635e-17 -0.2181956[3,] 1.119862

2.589191e-01

0.1104651

WRC Research Systems の Brandmap の場合，
• Y 行列を転置して与えると上記の説明と一致する。
• Data Centering を”Row”，Data Standardization を”Row”とする。
• Factorization を”G*(V*H’)”とする。
• Brandmap は，フェーズ 1 で不偏標準偏差を使った標準化を行い (したがって標準偏差は√(I − 1)/I となる)，かつそれを割らない。その結果，Y の列 (入力行列の行) をあらわすベク√
トルの長さは I − 1, ベクトルの内積は標本相関の I − 1 倍になる。
• Y の行 (入力行列の列) の点は，上記の座標を謎の値で定数倍した位置にプロットされる。

27

手法 (6) 「対称バイプロット」





特有な定義

ŷ はデータ行列の全要素の平均。

フェーズ 1 A = Y − ŷ11⊤
フェーズ 2 Ω = I, Φ = I
フェーズ 3 a = 1/2, b = 1/2
幾何的解釈の概要 このバイプロットは，行と列の幾何ではなく，行列の構造そのものに焦点を当てている。行-列間のバイプロット解釈のみが妥当。
参考文献 Bradu & Gabriel(1978); Gabriel(1981)





28

手法 (7) 「正準相関分析」





特有な定義

変数が I 個の変数群と J 個の変数群に自然に分かれているとする。Y ≡ Y1 Y2 とする。Y

は列平均 (変数ごとの平均) によって中心化されているものとする。群内の共分散行列を S11 , S22 ，群間の共分散行列を S12 とする。
−1
フェーズ 1 A = S−1
11 S12 S22

フェーズ 2 Ω = S11 , Φ = S22
フェーズ 3 a = 1, b = 1
幾何的解釈の概要 F と G の列は正準負荷 (すなわち，正準変数を作る際のオリジナル変数に対する係数)。正準得点 (すなわち Y1 F と Y2 G の行) をプロットした場合は，ケースをあらわす 2 つの点−1の集まりは，それぞれのマハラノビス空間 (距離はそれぞれ S−1
11 , S22 ) においてあらわされている

点を，2 つの点の集まりの間の相関をもっとも高くする K ∗ 次元下位空間に射影したものである。
参考文献 Anderson(1958); Tatsuoka(1971); Morrison(1976); Mardia et al.(1979); Falkenhagen &Nash(1978); Chambers(1977); Gittins(1979)




29

手法 (8) 「正準変量分析」





特有な定義

Y の行は H 個の群に分かれる。J 個の変数の群内平均からなる H × J 行列を Ȳ とする。

各群の行数の割合からなる対角行列を Dw とする (H × H)。通常のプールされた群内共分散行列
を S とする。
フェーズ 1 A = Ȳ − 11⊤ Dw Ȳ
フェーズ 2 Ω = Dw , Φ = S−1
フェーズ 3 a = 1, b = 0
幾何的解釈の概要 図の原点は Y の行の重心 (すなわち Ȳ の重心)。手法 (2) で定義した一般化主成分
分析の特殊ケースである。群の重心の主軸を定義し，群のサイズで重み付け，プールした群内共分
散行列 S で定義されたマハラノビス空間であらわしたもの。
参考文献 正準相関分析の参考文献と同じ。さらに，判別分析についての多くの教科書。





30

手法 (9) 「対応分析」(「双対尺度法」「集群分析法」「分割表の正準分析」)





特有な定義

たとえば，Y は分割表。Y をその合計で割ったものを P とする。P の行和からなる対角行

列を Dr , 列和からなる対角行列を Dc とする。
⊤
−1
フェーズ 1 A = D−1
r PDc − 11

フェーズ 2 Ω = Dr , Φ = Dc
フェーズ 3 a = 1, b = 1
幾何的解釈の概要 手法 (7) の特殊ケースで，データが離散的な場合。分割表 Y の行と列が点としてあらわされ，点の位置は行と列の間の連関をあらわす。行と列の図示は双対一般化主成分分析である(ないし主座標分析。Example 3.5.2 をみよ)
参考文献 Benzécli et al.(1973); Hill(1974); Greenacre(1978); Nishisato(1980); Greenacre(1981);

Giﬁ(1981); Gauch(1982); 本書

バイプロット表示を作ってみよう。


.01
1/.08
0
0
0
  .08
 0
1/.19
0
0

A=
 0
0
1/.31
0   .10
.13
0
0
0
1/.42


−.5 +.0 +.4
 +.2 −.2 +.0 = +.0 +.1 −.2 +.1 +.0 +.1


.03
.05
.12
.14




1
.04 
1/.32
0
0
 1
.06 
 0
1/.33
0 −
 1
.09 
0
0
1/.35
1
.15

1
1
1
1


1
1 

1 
1

Dr , Dc を重みにした一般化 SVD を行い
−2.9 +0.5 [][] +1.0 +1.7  0.13
0+1.3 −0.1 −1.1A=
 +0.6 −1.2 
0
0.08+0.6 −1.4 +0.8
−0.3 +0.1
−2.9 +0.5 [−0.38 +0.04]
 +1.0 +1.7  0.13
 +0.13 +0.13 
0


F=
=
 +0.6 −1.2  +0.07 −0.10 
0
0.08−0.3 +0.1−0.04 +0.00




[
]
+1.3 +0.6+0.17 +0.05
0.13
0G =  −0.1 −1.4 =  −0.02 −0.11 
0
0.08−1.1 +0.8−0.14 +0.06
データ行列 Y の 1 列目は，上から 1, 6, 8, 10, 計 25。いま，この 25 人がそれぞれ第 1 軸の行スコア(F 行列の 1 列目) を持っていると考えて，その平均を求めると 0.02。これを第 1 特異値 0.13 で割ると，第 1 軸の列スコア 0.17(G 行列の 1 列目) が得られる。このように，列スコアは行スコアの加重平均となっている。同様に，行スコアは列スコアの加重平均となっている。この性質を双対性という。

31

0.2
C2

0.1
0

R3

R4

R1

C1

C3

-0.1

R2

-0.2
-0.3
-0.4
-0.5
-0.5

-0.4

-0.3

-0.2

-0.1

対応分析

32

0

0.1

0.2

R でやってみよう。
> Y <- matrix(c(1,2,3,6,4,5,8,9,7,10,11,12), ncol=3, byrow=TRUE)> P <- Y / sum(Y)> DR <- diag(rowSums(P))> DC <- diag(colSums(P))> A <-

solve(DR) %*% P %*% solve(DC) - 1

> A
[,1]

[,2]

[,3]

[1,] -0.48000000

0.000

0.44444444[2,]0.24800000 -0.200 -0.03703704[3,]0.04000000[4,] -0.05454545

0.125 -0.15740741
0.000

0.05050505> # 一般化 SVD> oSVD <- svd(sqrt(DR) %*% A %*% sqrt(DC))> N <- solve(sqrt(DR)) %*% oSVD$u> M <- solve(sqrt(DC)) %*% oSVD$v> # A の再現
> N %*% diag(oSVD$d) %*% t(M)
[,1]

[,2]

[,3]

[1,] -0.48000000

1.200739e-16

0.44444444[2,]0.24800000 -2.000000e-01 -0.03703704[3,]0.04000000[4,] -0.05454545

1.250000e-01 -0.15740741
1.353203e-17

0.05050505> # F 行列
> N %*% diag(oSVD$d)
[,1]

[,2]

[,3]

[1,] -0.37540739 -0.035937598 -3.680718e-17[2,]0.12922721 -0.129697013 -4.787124e-17[3,]0.07174225

0.095660282 -4.787124e-17[4,] -0.04265993 -0.004083818 -6.557373e-17> # G 行列
> M %*% diag(oSVD$d)
[,1]
[1,]

[,2]

[,3]

0.17091524 -0.04571431 -5.540068e-17[2,] -0.01726158

0.11046283 -5.540068e-17[3,] -0.14163259 -0.06404355 -5.540068e-1733

R ではたとえば ca パッケージの ca 関数で再現できる。ca() の返し値を print() したときに表示される座標、すなわち ca() の返し値の要素 rowcoord, colcoord は F, G ではなく、A の一般化 SVD の N, Mである。

> library(ca)> Y <- matrix(c(1,2,3,6,4,5,8,9,7,10,11,12), ncol=3, byrow=TRUE)> oCA <- ca(Y)> print(oCA)
Principal inertias (eigenvalues):
1
Value

2

0.016406 0.006157

Percentage 72.71%

27.29%

Rows:
[,1]

[,2]

[,3]

[,4]

Mass

0.076923

0.192308 0.307692

0.423077

ChiDist0.377124

0.183087 0.119574

0.042855

Inertia0.010940

0.006446 0.004399

0.000777

Dim. 1-2.930910

1.008913 0.560112 -0.333058

Dim. 2-0.458002 -1.652905 1.219129 -0.052046

Columns:
[,1]

[,2]

[,3]

Mass

0.320513

0.333333

0.346154

ChiDist0.176923

0.111803

0.155439

Inertia0.010033

0.004167

0.008364

Dim. 11.334383 -0.134766 -1.105765

Dim. 2-0.582599

1.407778 -0.816194> oCA$rowcoord %*% diag(oCA$sv)
[,1]

[,2]

[1,] -0.37540739 -0.035937598[2,]0.12922721 -0.129697013[3,]0.07174225

0.095660282[4,] -0.04265993 -0.004083818> oCA$colcoord %*% diag(oCA$sv)
[,1]
[1,]

[,2]

0.17091524 -0.04571431[2,] -0.01726158

0.11046283[3,] -0.14163259 -0.06404355
34

前頁の続き。前述のとおり、ca() の返し値に入っているのは N, M なのだが、返し値を plot した際の座標は F, G となる。

0.05
−0.05
−0.15

Dimension 2 (27.3%)

0.15> plot(oCA)

−0.3

−0.2

−0.1

0.0

0.1

Dimension 1 (72.7%)

WRC Research Systems の Brandmap では Factorization を”Symmetric Prn”とすると再現できる。
SAS では proc corresp で再現できる。
SPSS で は correspondence コ マ ン ド で ，standardize=rcmean, measure=chisq, normalization=principal オプションをつけると再現できる。
ただし，二元分割表そのものではなく，行カテゴリ，列カテゴリ，頻度を変数としたデータ行列を与える点に注意。かなり面倒である。

おわり35