SSブログ

類似度指数を計算する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らしくみえるように書き直しました