クラメールの連関係数
クラメールの連関係数を求めるための関数です。
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