読者です 読者をやめる 読者になる 読者になる

カイ二乗値、対数オッズ比、ファイ係数の相関を調べる

 先日の頻度差の検定の効果量としてオッズ比を用いるという記事と、頻度差の検定の効果量としてファイ係数とクラメールのVを用いるという記事に関連して、カイ二乗値、対数オッズ比、ファイ係数の相関を調べてみました。*1
 以下は、乱数を使って、2×2の分割表をn個生成し、そこから求めたカイ二乗値、対数オッズ比(の絶対値)、ファイ係数を使って、散布図行列を作る関数です。

chi.sim <- function(n){ 
	library(vcd) # パッケージの読み込み
	library(psych)
	chisq <- c() # 空のベクトルを用意
	or <- c()
	phi <- c()
	for (i in seq(1, n, 1)){ # 繰り返し処理
		mat <- matrix(sample(1 : 100, 4, replace = T), nrow = 2) # 1〜100までの数をランダムに生成し、分割表を作成
		options(warn = -1) # 警告の抑止
		chisq <- append(chisq, chisq.test(mat, correct = F)$statistic) # カイ二乗値の計算
		or <- append(or, oddsratio(mat)) # 対数オッズ比の計算
		phi <- append(phi, assocstats(mat)$phi) # ファイ係数の計算
	}
	results <- cbind(chisq, abs(or), phi) # 計算結果から行列を作成(その際、対数オッズ比を絶対値に)
	colnames(results) <- c("Chi-Squared", "LOR", "Phi"); rownames(results) <- c() # ラベルの作成
	pairs.panels(results) # 散布図行列の作成
}

 この関数を使う場合は、以下のように、繰り返しの回数を指定します。

# 関数の実行(繰り返し回数の指定)
chi.sim(100)

 上記のスクリプトを実行すると、以下のような散布図行列が作成されます。*2 そして、カイ二乗値、対数オッズ比、ファイ係数の積率相関係数が0.93〜0.96となっていることが分かります。

f:id:langstat:20150128195547p:plain

*1:対数オッズ比とファイ係数に関しては、こちらの記事も参考になります。

*2:乱数を使っているため、実行するたびに結果が微妙に変化します。