クラメールの連関係数
クラメールの連関係数を求めるための関数です。
cramer.coe <- function(dat){
row.sum <- apply(dat, 1, sum)
col.sum <- apply(dat, 2, sum)
row.length <- length(dat[,1])
col.length <- length(dat[1,])
my.sum = 0
for(i in 1:row.length){
for(j in 1:col.length){
num <- dat[i,j]^2 / (row.sum[i] * col.sum[j])
my.sum <- my.sum + num
}
}
coe <- sqrt((my.sum - 1) / (row.length - 1))
coe
}
〜使用例〜
> dat <- matrix(c(18,0,4,3,7,16,8,12,8),ncol=3,byrow=TRUE)
> dat
[,1] [,2] [,3]
[1,] 18 0 4
[2,] 3 7 16
[3,] 8 12 8
> cramer.coe(dat)
[1] 0.4624463
【注意点】
クラメールの連関係数にも書いていますが、この関数はk×l(k <= l)分割表について計算されるものです。クラメールの連関係数は行列を転置しても、その計算結果は同じものになります。例えば2×3の行列をインプットとした場合も、3×2の行列をインプットとした場合も同じ値になるということです。しかし、この関数は前述したように k×l(k
<= l) という条件を課している点に注意してください(インプットとして、行数は列数「以下」でなくてはならない、ということです)。ちなみに、今は(2016.9.17時点記述)vcdパッケージに含まれているassocstatsという関数を使えば簡単に結果を得ることができます。
#### vcdパッケージをインストール
> install.packages("vcd")
> library(vcd)
#### 上記と同じ行列を用意
> dat <- matrix(c(18,0,4,3,7,16,8,12,8),ncol=3,byrow=TRUE)
> dat
[,1] [,2] [,3]
[1,] 18 0 4
[2,] 3 7 16
[3,] 8 12 8
#### 一番下に表示されている Cramer's V がクラメールの連関係数
> assocstats(dat)
X^2 df P(> X^2)
Likelihood Ratio 36.327 4 2.4787e-07
Pearson 32.506 4 1.5074e-06
Phi-Coefficient : NA
Contingency Coeff.: 0.547
Cramer's V : 0.462