[連載]フリーソフトによるデータ解析・マイニング第27回

Rと多次元尺度法

1.多次元尺度法とは

 多次元尺度法(MDS: multi-dimensional scaling)は、個体間の親近性データを、2次元あるいは3次元空間に類似したものを近く、そうでないものを遠くに配置する方法で、データの構造を考察する方法である。
 多次元尺度法は計量多次元尺度法と非計量多次元尺度法に大別される。計量多次元尺度法とは距離データを低次元に配置する方法で、非計量多次元尺度法は、順序尺度のデータの類似度あるいは距離に変換可能な親近性データを低次元に配置する方法である。
 MDSにも多くのアルゴリズムが提案されているが、古典的多次元尺度法としては1950年代Torgersonの貢献が大きい[4]。
 多次元尺度法をイメージ的に説明のため、近畿地方の地図を図1に示す。図1では兵庫から和歌山、大阪、奈良、滋賀、京都の距離を点線で示している。このような任意の2点間の距離を表1に示す。
 計量多次元の尺度法では、表1のような距離データから各点の座標を求め、元のデータ構造を再現することを課題としている。
 例えば、表1から何らかの方法で求めた2次元の(横と縦)座標値が表2に示すとおりであるとする。表2のデータの散布図を図2に示す。図2は図1の地域間の相対位置関係を再現しているものである。
 多次元尺度法は、データから距離(あるいは類似度)を求め、そのデータに基づいて2〜3次元空間上の各点(個体)の座標値を求め、視覚的にその相対関係を考察する。

近畿地方の地図

図1 近畿地方の地図 (図1および表1の作成はフリーソフトkenMap ver 8.0を用いた。)

表1 図1の点の間の距離(単位はkm)
   兵庫 和歌山 大阪 奈良 滋賀 京都
兵庫 0 134 85 116 118 60
和歌山 134 0 68 66 145 141
大阪 85 68 0 32 83 75
奈良 116 66 32 0 79 95
滋賀 118 145 83 79 0 63
京都 60 141 75 95 63 0

表2 表1から求めた点の2次元座標値
   横軸 縦軸
兵庫 -71.9 35.1
和歌山 -16.8 -85.9
滋賀 65.0 33.8
京都 -6.7 58.6
奈良 19.3 -32.1
大阪 11.0 -9.5

表2の散布図

図2 表2の散布図

2.距離と類似度

 表3のように、m個の研究対象(個体)に対し、n個の項目に分けたデータがあるとする。

表3 データ(Xm×nと記する)
   x1 x2 xk xn
個体1 x11 x12 x1k x1n
個体2 x21 x22 x2k x2n
個体i xi1 xi2 xik xin
個体j xj1 xj2 xjk xjn
個体m xm1 xm2 xmk xmn

 表3のデータが量的データの場合は、何らかの距離の定義で表4のような距離マトリクスを求めることができる。
 個体iと個体jとの間の距離をdijで表すことにする。

 dij=||個体i-個体j||

 距離の中で最も広く知られているのは、ユークリッド距離(ed: Euclidean distance)、市街距離(cd:city-block distance)である。市街距離はマンハッタン(manhattan)距離とも呼ぶ。これらの距離は、ミンコフスキー距離(md: Minkovski distance)で一般化できる。

ユークリッド距離式
市街距離式
ミンコフスキー距離式

 距離は自由に定義できるが次の距離の公理を満たさなければならない。

 dij≧0
 dijdji
 dijdjkdjk

表4 データ行列Dm×m
   個体1 個体2 個体j 個体m
個体1 0 d12 d1j d21
個体2 d21 0 d2j d21
個体i di1 di2 dij d21
個体m dm1 dm2 dmj 0

 距離の公理から分かるように、距離は対称性を持っているので、表4に示したように距離マトリックスは対称である。よって、距離のマトリクスは対角線の下(あるいは上)の半分のみを用いればよい。
 距離の測度と逆の概念としては類似度がある。距離は値が小さいほど個体間の関連性が強いと判断するが、類似度は値が大きいほど個体間の関連性が強いと判断する。質的データの場合は、距離より類似度が多く用いられている。
 類似度の測度として最も知られているのはピアソン相関係数(r)である。また、パターン類似率(ps: pattern similarity)も多用されている。

類似度ピアソン相関係数の式
パターン類似率の式

 これらの類似度は、次のような変換で距離測度として用いることが可能である。

 rdij=1-rij
 pdij=1-psji

 変数の値が2値(0,1)である場合の距離をバイナリ距離と呼ぶ。

3.距離関数とMDS関数

 多次元尺度法の手順のステップを次に示す。
 ◇ 距離を求める。
 ◇ 座標値を求める
 ◇ 2〜3次元上で個体を配置する(散布図を作成する)。
 ◇ 信頼性について考察する

(1) 距離関数

 Rのいくつかのパッケージに距離を求める関数が実装されている。距離はしばしば非類似度(dissimilarity)とも呼ばれている。Rをインストールする際、自動的にインストールされ、読み込みの手続きを必要としないパッケージstatsに距離を求める関数distがある。関数distでは、"euclidean"、"maximum"、"manhattan"、"canberra"、"binary" 、"minkowski"距離を求めることができる。
 パッケージmvpartの中の関数gdistは"euclidean"、"manhattan"、"gower"、"bray"、"kulczynski"、"maximum"、 "maximum"、"binary"、"chord"距離を求めることができ、パッケージveganの中の関数vegdistは"manhattan"、"euclidean"、"canberra"、"bray"、"kulczynski"、"jaccard"、"gower"、"morisita"、"horn"、"mountford"距離を求めることができる。また、パッケージade4には距離を求める関数dist.binary、dist.dudi、パッケージclusterには関数daisyがある。  関数が扱っている距離および距離の定義などは、関数の説明文で確認できる。

(2) MDS関数

@ 計量多次元尺度法の関数

 Rのパッケージstatsには、計量多次元尺度法の関数cmdscale (Classical (Metric) Multidimensional Scaling)がある。この古典的多次元尺度法は、主座標分析(principal coordinate analysis)とも呼ばれている[2]。古典的多次元尺度法に用いる距離がユークリッド距離である場合は、相関行列を用いた主成分分析と等価である。
 古典的多次元尺度法は、求めた距離マトリックスDm×mを、次のような変換を施したマトリックスZm×mの固有ベクトルを点の座標値とする。

古典的多次元尺度法の式

 関数cmdscaleの書き式を次に示す。

cmdscale(d, k = 2,eig=FALES・・・)

 引数dは距離構造のデータで、関数distが返す結果の構造である。表4のような対称行列の場合は関数as.distを用いて変換することができる。
 引数kは次元数で、デフォルトでは2に設定されている。引数eigは、固有値を返すか否かを指定する。デフォルトではFALESになっているので固有値を返さない。引数eig=TRUEにすると座標値は$pointsに記録される。
 データを用いてその使用方法を示すことにする。Rのパッケージdatasetsにはヨーロッパ主な21都市間の距離データeurodistがある。データeurodistを用いてまず各都市の座標値を求め、その座標値に基づいた2次元の配置図を作成するコマンドとその結果を次に示す。

>(eur.cmd<-cmdscale(eurodist))
<返された結果は省略>
>plot(eur.cmd,type="n")
>text(eur.cmd,rownames(eur.cmd ))

 同じ方法で、表1の近畿地方の距離データを用いて確かめてみるのもよい。ただし、多次元尺度法で求めた座標値は相対的なものであるので、地図と見やすく対応付けるためには、軸の回転などを必要とする場合がある。
 多次元尺度法の配置図における点の間の距離距離の推測値は、用いた距離dijの推測値である。よって、その間には誤差がある。この点では、多次元尺度法を回帰分析のように「当てはめる」視点で扱うことができる。当てはまりの良さは用いた両距離のマトリクスと座標値の距離との相関係数を用いて考察することができる。距離の推測値dijの相関係数2乗値は約0.97であることから、多次元尺度法による2次元の距離の再現は大きい歪みがないと言えるであろう。

関数cmdscaleによるヨーロッパの21都市の2次元配置図

図3 関数cmdscaleによるヨーロッパの21都市の2次元配置図

 上記の例では、既存の距離データを用いているが、何らかのデータから距離を求めて関数cmdscaleを用いることも可能である。
 次にirisのデータから、関数distを用いてユークリッド距離を求め、関数cmdscaleによる多次元尺度法のコマンドおよびそ結果を示す。

> iris.dist <-dist(iris[,-5]) #ラベルの部分を除く!
>iris.cmd<-cmdscale(iris.dist)
>plot(iris.cmd,type=”n”)
>iris.lab<-factor(c(rep("S",50),rep("C",50),rep("V",50))  #iris[,-5]の長い記号列を略する
>text(iris.cmd,labels=iris.lab,col=unclass(iris.lab))

irisのユークリッド距離の多次元尺度図

図4 irisのユークリッド距離の多次元尺度図

A 非計量多次元尺度法

 計量多次元尺度法では、比率尺度のデータにおける個体間の親近性を距離として計測し、距離データをユークリッド空間上で個体を配置することを前提としているが、人文社会学などで得られたデータには間隔尺度が多く、その親近性のデータを距離構造のデータに変換したとしても計量多次元尺度で用いた距離とは意味が異なる。質的データの解析をも視野に入れ、計量多次元尺度法を発展させたものが非計量多次元尺度法である。
 非計量多元尺度法には、幾つかのアルゴリズムが提案されている。非計量多次元尺度で扱うデータ構造は、基本的には計量多次元尺度法と同じく距離構造のデータである。
 非計量多次元尺度法では、基本的には個体間の距離dijを配置すべくk次元における距離距離の推測値との差の2乗和が最小になるような座標値を求める。
 カルスカル(Kruscal)は、次に示すストレス(stress)と呼ばれる統計量を最小にするように座標を定めることを提案している。

stress統計量の式

 この値が小さければ小さいほど、当てはまりが良いと判断する。この値を用いたカルスカルの評価目安を次の表5にします[3]。

表5 ストレスによる当てはまりの評価
ストレス値 評価
0.2 悪い(poor)
0.1 まずまず(fair)
0.05 よい(good)
0.025 すばらしい(excellent)
0.00 完璧(perfect)

 Rには幾つかのパッケージに非計量多次元尺度法の関数が実装されている。その中で最も基本となるのは、パッケージMASSの中の関数isoMDS とsammonである。
 関数isoMDSは、次に示すストレスを最小になるように座標を決める。

stress統計量の式その2

 関数isoMDSの書き式を次に示す。

isoMDS(d, k = 2, ・・・)

 引数dは、距離構造を持つデータマトリクスで、kは次元の数である。これ以外にも幾つかの引数がある。関数isoMDSは、座標値($points)と最終のストレス($stress)を返す。ストレスは百分率になっている。
 関数sammonは、与えられたk次元上で、次に示す重みつきストレスを最小化することで座標値を求めるアルゴリズムである。

stress統計量の式その3

 関数sammonの書き式は基本的には、関数isoMDSと同じである。返される結果もisoMDSと同じく2項目である。ただし、ストレス ($stress)は百分率ではない。
 関数isoMDS、sammonは初期に与えた座標値を初期値とし、用いたストレス統計量が最小になるように計算を繰り返す。デフォルトには、関数cmdscaleが指定されている。計算の繰り返しの回数は、引数で調整できる。繰り返しの回数のデフォルト値は、関数sammonではniter = 100、関数isoMDSではmaxit = 50になっている。
 また、パッケージveganには非計量多次元尺度法の関数metaMDSがある[1]。田口らが提案した多次元尺度構成法のRプログラム(NMDS)も公開されている[5]。
 主成分分析、計量多次元尺度法(cmdscale)、非計量多次元尺度法(sammon、isoMDS、metaMDS)を同じデータセットと各関数のデフォルト値に基づいたコマンドの使用例およびその2次元の配置図を次に示す。
 用いたデータは、Edwards and Omanが作成した75個体5変数の人工データである。ただし、5変数の中の第5列は個体が所属するグループのラベルである。合計5グループで、それぞれのグループは15個体によって構成されている。データを作成するプログラムは、参考文献から取得できる[1]。

> par(mfrow=c(2,2))
> P<-c(1,2,3,4,8)[unclass(g54[,5])]
> C<-unclass(g54[,5])
> g54.dist<-dist(g54[,-5])
> library(MASS)  #sammonとisoMDSを用いるため
> plot(cmdscale(g54.dist),pch=P,col=C)
> plot(sammon(g54.dist)$points,pch=P,col=C)
> plot(isoMDS(g54.dist)$points,pch=P,col=C)
> library(vegan) #metaMDSを用いるため
> plot(metaMDS(g54.dist)$points,pch=P,col=C)

6種類の2次元の配置図

図5 6種類の2次元の配置図

[1] Edwards,J. and Oman,P (2003): Dimensional Reduction for Data Mapping-A practical guide using R,
  R News, Vol. 3/3,2-7. http://cran.r-project.org/doc/Rnews/Rnews_2003-3.pdf
[2] Gower, J. C. (1966) Some distance properties of latent root and vector methods used in multivariate analysis.
  Biometrika ,Vol.53, 325-328.
[3] Kruskal, J.B.(1964): Multidimensional scaling by optimizing goodness of fit to a nonmetric hypothesis.
  Psychometrika, Vol.29, 1-27.
[4] Torgerson, W. S. (1958): Theory and Methods of Scaling. New York, Wiley.
[5] 田口善弘・大野克嗣・横山和成(2001):非計量多次元尺度構成法への期待と新しい視点、統計数理、
  第49巻第1号133-153(R用のプログラムnMDSは現時点では次のサイトから入手可能。 http://tag.cocolog-nifty.com/tags_diary/)