類似度指数・重複度指数を計算するR関数(改訂) [統計]
前回のは、forでループを回したりするのがRらしくなかったので、書き直してみる。
MorisitaのCλ
clambda <- function(c1, c2) { if (length(c1) != length(c2)) stop("different vector lengths") n1 <- sum(c1) n2 <- sum(c2) l1 <- sum(c1 * (c1 - 1)) / (n1 * (n1 - 1)) l2 <- sum(c2 * (c2 - 1)) / (n2 * (n2 - 1)) cc <- sum(c1 * c2) return (2 * cc / ((l1 + l2) * n1 * n2)) }
Piankaのα
pianka.alpha <- function(c1, c2) { if (length(c1) != length(c2)) stop("different vector lengths") p1 <- sum(c1 * c1) p2 <- sum(c2 * c2) pp <- sum(c1 * c2) return (pp / (sqrt(p1) * sqrt(p2))) }