Rで距離行列を作る

n個の要素がある。要素間に距離という値があるとする。自身から自身への距離は0であるという。要素xから要素yへの距離と要素yから要素xへの距離とは同一であるという。このような距離をnxn行列で表現したものが距離行列である。

今、\frac{n(n-1)}{2}ペアできる。Rのapeパッケージのnh 関数のヘルプにある例を参考にする。

\frac{n(n-1)}{2}個の値をリストとして作る。n-1個の値を第1要素とその他の要素との距離とし、次のn-2個の値を第2要素と第3要素以降の要素のそれとする、という方式で値を入れる。次の例では、n=8,\frac{n(n-1)}{2}=28である。

 x <- c(7, 8, 11, 13, 16, 13, 17, 5, 8, 10, 13,
            10, 14, 5, 7, 10, 7, 11, 8, 11, 8, 12,
            5, 6, 10, 9, 13, 8)

nxn行列を作る。

M <- matrix(NA, 8, 8)

リストxに入れた値が格納されるべき行列Mの右上三角部分のセルは、

row(M) > col(M)

の条件を満たすから

 M[row(M) > col(M)] <- x

また、左下三角部分のセルには

 M[row(M) < col(M)] <- x

のようにして入れる。
ついで、対角成分を0にする。

diag(M) <- 0

行と列とに連番で名前を与える。

 rownames(M) <- colnames(M) <- 1:8

Neighbour-Joining 法でツリーを作って

 tr <- nj(M)

プロットする(unrootedにて)。

 plot(tr,"u")