トップページ | ひとつ上のページ | 目次ページ | このサイトについて | ENGLISH

多次元尺度構成法

多次元尺度構成法は、2点間の距離や結び付きの程度を表すデータ群が入力で、 それらの点の座標を出力とする方法です。 つまり、結び付きの強さの情報から、それぞれの近さを図で表現するための方法です。

例を挙げると、 東京-新潟間・東京-横浜間・東京-福島間・新潟-横浜間・新潟-福島間・横浜-福島間の距離のデータを入力すると、 それぞれの都市の座標の値が出力されます。 つまり、距離だけを見ても全体の関係はわかりませんが、地図を眺めるような感じで、全体像がわかるようになります。

質的データ の場合に多次元尺度構成法を行う方法として、 数量化W類があります。

地理的な距離以外を使う

上記では、地理的な距離を例にしました。 地理的な距離は、「距離」としてわかりやすいのですが、 何かと何かの近さを表すものなら、基本的に何でも使うことができます。

例えば、変数と変数の近さとして、決定係数があります。 ちなみに、「相関係数」は負の値があるので、「距離」としては使えません。 また、決定係数は大きければ、関係が強い事を意味するので、「距離」とは逆です。 逆数を使ったり、1から引いた値を使います。

また、地理的な距離は、2次元平面上の2点間の距離ですが、同様の計算式で多次元空間上の2点間の距離というのもあります。

アンケート の分析では、 一対評価 で集めたデータの分析方法にも使われています。

多次元を2次元で見る方法として使う

多次元尺度構成法では、元のデータが何次元かであるのかは関係なく、距離のデータをスタートにして、 この距離を、2次元上の距離とみなして2次元上に点を表します。

多次元尺度構成法の名前の通りの使い方になるのですが、 この特徴を使うと、多次元尺度構成法は、 高次元を2次元に圧縮して可視化 の方法として使うことができます。

この使い方をする時は、多次元空間上の座標データを、すべての点の組み合わせの距離のデータに変換して使います。

Rの実施例

Rを使ったクラスター分析の実施例になります。 下記は、コピーペーストで、そのまま使えます。 下記のコードを使った場合、X-means以外は、このページの一番上にある色分けのグラフと同じ結果になります。 この例では、入力データは量的データになっていることを想定しています。 質的データがあるとエラーになります。

距離データをスタートにする場合

この例では、Cドライブの「Rtest」というフォルダに、 「Data1.csv」という名前でデータが入っている事を想定しています。
mds

library(MASS)# ライブラリを読み込み
library(som)
# ライブラリを読み込み
setwd("C:/Rtest")
# 作業用ディレクトリを変更
Data1 <- read.csv("Data1.csv", header=T)
# データを読み込み
Data11 <- Data1[,2:5]
# 距離データのある列を指定。この例は2から5列目の場合
Data11_dist <- as.matrix(Data11)
# データを行列型に変換
sn <- sammon(Data11_dist)
# 多次元尺度構成法
output <- sn$points
# 多次元尺度構成法によって、得られた2次元データの抽出
Data <- cbind(output, Data1) 
# 元データと多次元尺度構成法の結果を合わせる。
library(ggplot2)
# パッケージの読み込み#
ggplot(Data, aes(x=Data[,1], y=Data[,2],label=Name)) + geom_text()
# Nameを使った言葉の散布図
mds
A、B、Cのグループと、D単独に分かれるはずで、だいたいそんな感じにはなりました。

多次元データをスタートにする場合

この例では、Cドライブの「Rtest」というフォルダに、 「Data1.csv」という名前でデータが入っている事を想定しています。
k-means

library(MASS)# ライブラリを読み込み
library(som)
# ライブラリを読み込み
setwd("C:/Rtest")
# 作業用ディレクトリを変更
Data1 <- read.csv("Data1.csv", header=T)
# データを読み込み
Data11 <- normalize(Data1[,1:3],byrow=F)
# 標準化する列を指定。この例は1から3列目の場合
Data11_dist <- dist(Data11)
# サンプル間の距離を計算
sn <- sammon(Data11_dist)
# 多次元尺度構成法
output <- sn$points
# SOMによって、得られた2次元データの抽出
Data <- cbind(output, Data1)  # 元データと多次元尺度構成法の結果を合わせる。
Data$Index <-row.names(Data)
# Indexという名前の列を作り、中身は行番号にする
library(ggplot2)
# パッケージの読み込み#
ggplot(Data, aes(x=Data[,1], y=Data[,2],label=Name)) + geom_text()
# Nameを使った言葉の散布図
sammon
期待通りに4つのグループに分かれました。

「sammon」ではなく、「cmdscale」にしたのが左の図で、「isoMDS」にしたのが右の図になります。 期待通りに4つのグループに分かれるのは同じでしたが、isoMDSの場合は、同じグループの上3桁は同じ数字になるほど近くに配置されました。 そのため、グラフで文字が重なっています。
cmdscale isoMDS



参考文献

同志社大学 金明哲先生のページ
cmdscale、sammon、isoMDSの詳しい説明があります。
https://www1.doshisha.ac.jp/~mjin/R/Chap_27/27.html


順路 次は ネットワーク式の多次元尺度構成法

Tweet データサイエンス教室