グッドマン・クラスカルのガンマγ     Last modified: Nov 17, 2004

目的

分割表形式で与えられたデータに基づいて,グッドマン・クラスカルのガンマγを計算する。

使用法

gamma2(x)

引数

x	分割表(合計欄を含めない)

ソース

インストールは,以下の 1 行をコピーし,R コンソールにペーストする
source("http://aoki2.si.gunma-u.ac.jp/R/src/gamma.R", encoding="euc-jp")

# 分割表形式で与えられたデータに基づいて,グッドマン・クラスカルのガンマγを計算する
gamma2 <- function(f)                                # 合計欄を含めない分割表
{
        R <- nrow(f)+2
        C <- ncol(f)+2
        g <- matrix(0, nr=R, nc=C)
        g[2:(R-1), 2:(C-1)] <- f
        cc <- dd <- 0
        for (i in 2:(R-1)) {
                for (j in 2:(C-1)) {
                        cc <- cc+g[i,j]*sum(g[1:(i-1), 1:(j-1)], g[(i+1):R, (j+1):C])
                        dd <- dd+g[i,j]*sum(g[1:(i-1), (j+1):C], g[(i+1):R, 1:(j-1)])
                }
        }
        return((cc-dd)/(cc+dd))
}


使用例

f  <- matrix(c(
	0, 3, 1, 1,
	1, 4, 4, 0,
	1, 3, 0, 1,
	1, 0, 1, 0), byrow=TRUE, nc=4)	# 4 行 4 列の分割表

gamma2(f)

出力結果例

> gamma2(f)
[1] -0.2523364

別法

R の Hmisc ライブラリにある rcorr.cens 関数を使う。
この場合には,元データでないと計算できない。
分割表データの場合には,元データを生成してやる。
たくさん計算結果が出てくるが,Dxy というのが求めるものである。

分割表は上と同じ f とする。まず,元データを再現する。

> nr <- 4 # f の行数
> nc <- 4 # f の列数

> x <- rep(rep(1:nr, nc), f)
> y <- rep(rep(1:nc, each=nr), f)

> x
 [1] 2 3 4 1 1 1 2 2 2 2 3 3 3 1 2 2 2 2 4 1 3
> y
 [1] 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 4 4
 
> table(x, y) # データを集計してみる。。。同じになった
   y
x   1 2 3 4
  1 0 3 1 1
  2 1 4 4 0
  3 1 3 0 1
  4 1 0 1 0

> library(Hmisc)
> rcorr.cens(x, y, outx=TRUE) # Dxy の数値 -0.252 が解
       C Index            Dxy           S.D.              n        missing 
         0.374         -0.252          0.282         21.000          0.000 
    uncensored Relevant Pairs     Concordant      Uncertain 
        21.000        214.000         80.000          0.000 


・ 直前のページへ戻る  ・ E-mail to Shigenobu AOKI

Made with Macintosh