グッドマン・クラスカルのガンマγ 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