• 検索結果がありません。

補助関数

ドキュメント内 ためになった他の人のサイト script of (ページ 186-189)

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

n

i=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()

には作図パラメータも引き渡すことができる.関数の副作用として現在のグラ

フィックスデバイスにプロットを描く.

ドキュメント内 ためになった他の人のサイト script of (ページ 186-189)