等分散じゃないからKruskal-Wallis検定ってダメだから(続き)

前回、「等分散じゃないからクラスカル・ウォリス(KW)検定をやりました」という態度はいけないと書きましたが(少なくとも平均値や中央値に関しては)、どの程度いけないのかという点についてはたしかに実験しないとわかりませんね。

第1種の過誤(母集団に差がないのにあると結論する誤り)に絞り、サンプル数(n1, n2)と標準偏差(sd1, sd2)が異なるとき、KW検定のP値の分布がどうなるかを実験してみました。正規母集団を仮定しました。なお、第一種の過誤は5%に設定されるのが普通です。

前提
2グループ、いずれも正規母集団。母中央値(=母平均)は等しい(ゼロ)
サンプル数 n1 = 100(固定), n2 可変
標準偏差 sd1 = 1(固定)、sd2 可変
それぞれの組み合わせについて、1000反復のシミュレーション
P < 0.05 (誤って帰無仮説を棄却)になる割合(res)

resを3Dプロット(Geminiのコピペ)
(repの数値が大きいと時間がかかるので、適当に下げてください)

# 第1種の過誤のシミュレーション_KW-test
# 2026-01-27

rep <- 1000		# シミュレーションの反復数

# 1. 関数定義

kw.p <- function(n2, sd2){   
	# 各グループのデータ数、標準偏差SD
	
	n1 <- 100		# グループ1のサンプル数:100に固定
	sd1 = 1			# グループ1のSD:1に固定
	
	pt <- numeric(rep)  # P-value を格納する変数
	x <- factor(rep(c("A","B"), c(n1, n2)))  # カテゴリー変数(グループ x データ数)
	
	for (i in 1:rep){
		y1 <- rnorm(n1, sd = sd1)   # 各グループの正規母集団(平均0)
		y2 <- rnorm(n2, sd = sd2)
		pt[i] <- kruskal.test(c(y1, y2) ~ x)$p.value	# KW検定
	}
	
	mean (pt < 0.05)   # 第1種の過誤
}

# 2. シミュレーション

n.v <- seq(10, 100, 10) # nの変化
sd.v <- 1:10						# SDの変化

res <- matrix(NA, nrow = length(n.v), ncol = length(sd.v))
rownames(res) <- n.v
colnames(res) <- sd.v

for (i in 1:length(n.v)){			# グループ2のサンプル数
	for (j in 1:length(sd.v)){		# グループ2のSD
		res[i,j] <- kw.p (n2 = n.v[i], sd2 = sd.v[j])    
	}
}

res

# 3. プロット

persp(n.v, sd.v, res,
			theta = 130,    # 回転角度
			phi = 20,      # 少し上から見下ろす
			expand = 0.5,  # z軸の高さの倍率
			col = "gray",
			border = "black", # 網目の色
			ticktype = "detailed",
			xlab = "n2", ylab = "sd2", zlab = "Error Rate",
			zlim = c(0, 0.25),
			main = "Kruskal-Wallis Simulation",
			lwd = 2,
			cex.axis = 1.2,
			cex.lab = 1.5
)

表1. クラスカル・ウォリス検定における第1種の過誤率(res)
縦軸はサンプル数 n2, 横軸は sd2(なお、n1 = 100, sd1 = 1)
太字は第1種の過誤が0.05台で収まっている組み合わせです。
2グループのサンプル数が異なり、標準偏差の違いが大きくなるほど、第一種の過誤が大きくなる傾向にあることがわかりました。しかも 0.2 を超える場合すらあります。

| | 1| 2| 3| 4| 5| 6| 7| 8| 9| 10|
|10 | 0.033| 0.128| 0.159| 0.184| 0.205| 0.205| 0.211| 0.224| 0.255| 0.257|
|20 | 0.055| 0.112| 0.153| 0.160| 0.182| 0.179| 0.196| 0.191| 0.210| 0.200|
|30 | 0.046| 0.098| 0.116| 0.122| 0.173| 0.168| 0.149| 0.173| 0.168| 0.184|
|40 | 0.042| 0.105| 0.124| 0.133| 0.136| 0.162| 0.132| 0.147| 0.184| 0.159|
|50 | 0.051| 0.087| 0.120| 0.124| 0.127| 0.119| 0.135| 0.153| 0.151| 0.138|
|60 | 0.056| 0.071| 0.091| 0.114| 0.106| 0.116| 0.122| 0.120| 0.151| 0.150|
|70 | 0.047| 0.088| 0.070| 0.114| 0.106| 0.115| 0.134| 0.117| 0.111| 0.120|
|80 | 0.050| 0.075| 0.102| 0.101| 0.108| 0.101| 0.117| 0.117| 0.121| 0.103|
|90 | 0.036| 0.059| 0.072| 0.096| 0.083| 0.093| 0.112| 0.080| 0.088| 0.122|
|100 | 0.056| 0.060| 0.064| 0.076| 0.087| 0.085| 0.075| 0.093| 0.088| 0.098|

図1.表1のグラフ

 そういうわけで、分散が異なるとき(とくにサンプル数が違いが大きいとき)には、 母平均(母中央値)に差がない分布からサンプリングしても、KW検定は有意差を出しやすくなるという結論になりました。今回は正規分布を仮定しましたが、他の分布を仮定してもそれほど改善するとは思えません。じゃあどんな場面を想定しているのかについて次回は触れます。



いいなと思ったら応援しよう!