SSブログ

類似度指数・重複度指数を計算する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)))
}