5.5.1 距離行列を計算する dist()
この関数はデータ行列の各行間の距離を,指定された各種距離を用いて計算し,距離行 列を返す.
書式:
dist(x, method = "euclidean", diag = FALSE, upper = FALSE) as.dist(m, diag = FALSE, upper = FALSE)
#
クラス"dist"
に対するメソッドprint(x, diag = NULL, upper = NULL, digits = getOption("digits"), justify = "none", right = TRUE, ...)
as.matrix(x) #
クラス"dist"
に対するメソッド 引数:x
数値行列,データフレーム,または"dist"
オブジェクトmethod
使 わ れ る 距 離 の 定 義 ."euclidean", "maximum", "manhattan",
"canberra"
もしくは"binary"
のいずれか.曖昧な指定で良いdiag
論理値で,距離行列の対角要素をprint.dist()
で出力するかどうかを指示するupper
論理値.距離行列の上三角部分をprint.dist()
で出力するかどうかを指示p Minkowski
距離の巾指数m "dist"
オブジェクトに変換されるべき距離情報を持つオブジェクト.既定メソッドでは,
"dist"
オブジェクト,距離の行列,もしくはas.matrix()
でそ うした行列に変換できるオブジェクト.(
下三角部分だけが使われる)
digits, justify print()
関数の内部でformat
に引き渡されるright, ...
他のメソッドに引き渡される追加引き数返り値: クラス
"dist"
のオブジェクト.距離行列の下三角部分の列順でベクトルと したものを例えばdo
とし,n
を観測値総数n <- attr(do, "Size")
とする と,i < j ≤ n
で第i, j
行間の非類似度はdo[n*(i-1)-i*(i-1)/2+j-i]
であ る.ベクトルの長さはn(n − 1)/2
で,n
2 のオーダである..このオブジェクト は("dist"
に等しい"class"
属性の他に)
次の属性を持つ:Size
整数.データセット中の観測値総数Labels
もしあれば,データセット中の観測値のラベルDiag, Upper
上の引き数diag, upper
に対応する論理値で,オブジェクトの出力法を 指定するcall
オプション.オブジェクトを生成した呼び出し式methods
オプション.使われた距離定義.メソッドdist()
に由来する指定できる距離の種類は
(
二つのベクトルx, y
に対して表せば)
次のようになる:euclidean L
2ノルム: sqrt(sum((x-y)^2))
maximum sup
ノルム: max(abs(x-y))
manhattan L
1 ノルム: sum(abs(x-y))
canberra sum(abs(x-y)/(abs(x)+abs(y)))
.分子・分母がともにゼロの項は和か ら除外され,欠損しているかのように扱われるbinary (asymmetric binary
と呼ばれることもある)
.ベクトルを2
進法でビット表 現した際の,値(0
か1)
が異なるビットの割合minkowski L
p ノルム: (sum((abs(x-y))^p))^(1/p)
欠損値があっても良く,それを含む行は全ての計算から除外される.更に,もし
Inf
値が含まれれば,距離がNaN
やNA
となるようならば全ての値の対が除外される.もし ある列がユークリッド,マンハッタン,キャンベラ距離の計算時に除外されると,和は使 われた列数に応じてスケール化される.もしある距離の計算時に,全ての対が除外されれ ば,値はNA
になる.関数as.matrix.dist()
とas.dist()
は,クラス"dist"
のオ ブジェクトから通常の距離行列間の変換,そしてその逆に使える.as.dist()
は総称的関数である.その既定メソッドはクラス"dist"
を継承するもしくは
as.matrix()
で行列に変換可能なオブジェクトを処理する.距離(
不一致度,dissimilarities)
を表すクラスへのサポートは,対応するas.matrix()
関数か,もっと直 接にそうしたクラスに対するas.dist()
関数を用意することで可能になる.関連:
hclust()
,[
連続値と類別値が混在する場合を扱う パッケージcluster
中の関数daisy()
.注意
:
二つのn
次元ベクトルx = { x
i} , y = { y
i}
のCanberra
距離はd(x, y) =
X
ni=1
| x
i− y
i|
| x
i| + | y
i|
で定義される.ここで
0/0 = 0
とする.Canberra
距離はx,y
の双方が零ベクトルに近 いとき,それらの僅かな変化で値が大きく変わる.常にd(x, y) ≤ n
である.> x <- matrix(rnorm(100), nrow = 5) # テスト用データ行列
> dist(x)
1 2 3 4 # 距離行列(ユークリッド距離)
2 5.671858 # 下三角部分だけ表示
3 6.753511 6.758183
4 5.876094 7.594390 6.601465
5 5.709532 6.079841 5.603563 5.731869
> dist(x, diag = TRUE) # 対角線部分も表示
1 2 3 4 5
1 0.000000
2 5.671858 0.000000
3 6.753511 6.758183 0.000000
4 5.876094 7.594390 6.601465 0.000000
5 5.709532 6.079841 5.603563 5.731869 0.000000
> dist(x, upper = TRUE) # 上・下三角部分をともに表示
1 2 3 4 5
1 5.671858 6.753511 5.876094 5.709532 2 5.671858 6.758183 7.594390 6.079841 3 6.753511 6.758183 6.601465 5.603563 4 5.876094 7.594390 6.601465 5.731869 5 5.709532 6.079841 5.603563 5.731869
> x <- c(0, 0, 1, 1, 1, 1)
> y <- c(1, 0, 1, 1, 0, 1)
> dist(rbind(x, y), method = "binary") # x,y間のバイナリ距離 [1] 0.4
> dist(rbind(x, y), method = "canberra") # x,y間のキャンベラ距離 [1] 2.4
> x = 1:4; y = 5:8 # テスト用ベクトルx,y
> dist(x, y) # 誤った使い方!
Error in pmatch(x, table, duplicates.ok) : argument is not of mode character
> rbind(x,y) # ベクトルの行結合
[,1] [,2] [,3] [,4]
x 1 2 3 4
y 5 6 7 8
> dist(rbind(x,y)) # これがx,y間の距離そのもの
[1] 8
> cbind(x,y) # 列結合
x y [1,] 1 5 [2,] 2 6 [3,] 3 7 [4,] 4 8
> dist(cbind(x,y)) # cbind(x,y)の4つの行ベクトル間の距離行列
1 2 3
2 1.414214
3 2.828427 1.414214
4 4.242641 2.828427 1.414214
5.5.2 多変量データのバイプロット biplot()
関数
biplot()
は多変量データのバイプロットグラフを描く.書式:
biplot(x, y, var.axes = TRUE, col, cex = rep(par("cex"), 2), xlabs = NULL, ylabs = NULL, expand = 1,
xlim = NULL, ylim = NULL, arrow.len = 0.1,
main = NULL, sub = NULL, xlab = NULL, ylab = NULL, ...)
引数:
x
当てはめオブジェクト.biplot.default()
に対しては最初の点の集まり(
列 数2
の行列)
で,普通,観測値に付随するy
次の点の集まり(
列数2
の行列)
var.axes
もしTRUE
なら,第二の点集合はそれらを(
スケール化されていない)
軸と して表現する矢印を持つcol
長さ2
のベクトルで,それぞれ第一と第二の点集合(
および対応する軸)
の色を 与える.もし一つの色だけ与えられると,それが双方の軸に対して使われる.も し,何も与えられないと,既定の色が色パレットの中から探される.もしそれが あれば,それと次の色が使われる.さもなければ,パレット中の最初の二つの色 が使われるcex
点のラベルに対して使われる文字の拡大率因子.長さ2
のベクトルを与えれば,二つの点集合に対して異なったサイズを与えることができる
xlabs
第一の点集合のラベルとして使われる文字列ベクトル.既定値はx
の行の次元名か,もしそれが無ければ数値
1:n
が使われるylabs
第二の点集合のラベルとして使われる文字列ベクトル.既定値はy
の行の次元 名か,もしそれが無ければ数値1:n
が使われるexpand
第二の点を第一の点に対してプロットする際に適用される拡大率.これは,二つの点集合を物理的に比較可能にするために,スケールを調整する目的に使うこ とができる
arrow.len var.axis=TRUE
の時にプロットされる軸上の矢印の「やじり」の長さ.arrow.len=0
とすればやじり部分を描かないxlim,ylim
第一変数セットの単位に関するx,y
軸の長さ限界main,sub,xlab,ylab,...
グラフィックスパラメータバイプロットは,多変量データ行列の観測値と変数の双方を同じプロットに表現す ることをねらったプロットである.バイプロットには多くの変種があり,おそらく最も 広く使われているものは
biplot.printcomp()
に移植されているものであろう.関数biplot.default()
は二つの変数を同じ図に描く基礎となる機能を提供するだけである.biplot()
には作図パラメータも引き渡すことができる.関数の副作用として現在のグラフィックスデバイスにプロットを描く.