類似度指数を計算するR関数 [統計]
統計ソフトRで類似度指数MorisitaのCλを計算する関数
clambda <- function(c1, c2) { if (length(c1) != length(c2)) { stop("different vector lengths") } else { s <- length(c1) } n1 <- sum(c1) n2 <- sum(c2) l1 <- 0 l2 <- 0 cc <- 0 for (i in 1:s) { l1 <- l1 + c1[i] * (c1[i] - 1) l2 <- l2 + c2[i] * (c2[i] - 1) cc <- cc + c1[i] * c2[i] } l1 <- l1 / (n1 * (n1 - 1)) l2 <- l2 / (n2 * (n2 - 1)) return (2 * cc / ((l1 + l2) * n1 * n2)) }
同じくPiankaの重複度指数。
pianka.alpha <- function(c1, c2) { if (length(c1) != length(c2)) { stop("different vector lengths") } else { s <- length(c1) } p1 <- 0 p2 <- 0 pp <- 0 for (i in 1:s) { p1 <- p1 + c1[i]^2 p2 <- p2 + c2[i]^2 pp <- pp + c1[i] * c2[i] } return (pp / (sqrt(p1) * sqrt(p2))) }
[追記] あまりにもCっぽかったので、Rらしくみえるように書き直しました。