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らしくみえるように書き直しました


nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:学問・資格(旧テーマ)

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

Facebook コメント

トラックバック 0