<<目次へ


クラメールの連関係数



 クラメールの連関係数を求めるための関数です。

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