目的 分割表形式で与えられたデータに基づいて,グッドマン・クラスカルのガンマγを計算する。 使用法 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