よい検定、わるい検定

この二つの解説は非常に分かりやすい。
http://aoki2.si.gunma-u.ac.jp/lecture/BF/index.html
http://aoki2.si.gunma-u.ac.jp/lecture/BF/sankouzu.html
2群はwelchのt検定、3群はoneway.test(ANOVA(aov)はNG)が良いとのこと。なるほど。
一つ気になるのは、はずれ値があるとどうなるかということ。
そこでちょっと試してみた。はずれ値は発生する乱数の分布を参考に10,15,20,25を選んで、50の乱数に0個から3個加えて見た。

結果は、左からパラメトリックな検定、log変換後にパラメトリックな検定、ノンパラメトリックな検定の順に表示。
p < 0.05の割合なので、0.05に近い値が出ることが望ましい。
やはり期待した通り、パラメトリックな検定ははずれ値の影響を受けやすい。
(全く違うタイプの検定を比較することには意味がないかもしれないけど)無相関検定の方がより大きな影響がある。
先のサイトの解説を加味すると、2群の平均の差の検定ではlog変換した後にwelchのt検定が無難かなぁ。
無相関検定に関してはやはり、Spearmanを一番の候補にしておく方がよさそう。


n.samples <- 50
n.trials <- 10000

hist(rchisq(n.trials, 4))
outlier <- c(10,15,20,25)

cat("Two sample test")

for (n.rep in 0:3) {
	cat("----\n# of outliers:", n.rep, "\n")
	for (ol in outlier) {
		results <- matrix(NA, nrow=n.trials, ncol=3)
		for (i in 1:n.trials) {
			x <- c(rchisq(n.samples, 4), rep(4, n.rep))
			y <- c(rchisq(n.samples, 4), ol+rnorm(n.rep))
			results[i,] <-
				c(t.test(x, y)$p.value,
				  t.test(log(x), log(y))$p.value,
				  wilcox.test(x, y)$p.value)
		}
		cat("outlier:", ol, "\n")
		print(colSums(results<0.05)/n.trials)
	}
}

cat("Correlation test")

for (n.rep in 0:3) {
	cat("----\n# of outliers:", n.rep, "\n")
	for (ol in outlier) {
		results <- matrix(NA, nrow=n.trials, ncol=3)
		for (i in 1:n.trials) {
			x <- c(rchisq(n.samples, 4), ol+rnorm(n.rep))
			y <- c(rchisq(n.samples, 4), ol+rnorm(n.rep))
			results[i,] <-
				c(cor.test(x, y, method="pearson")$p.value,
				  cor.test(log(x), log(y), methodd="pearson")$p.value,
				  cor.test(x, y, method="spearman")$p.value)
		}
		cat("outlier:", ol, "\n")
		print(colSums(results<0.05)/n.trials)
	}
}

2群検定

      • -
# of outliers: 0 outlier: 10 [1] 0.0487 0.0498 0.0486 outlier: 15 [1] 0.0460 0.0457 0.0445 outlier: 20 [1] 0.0504 0.0491 0.0485 outlier: 25 [1] 0.0488 0.0470 0.0460
      • -
# of outliers: 1 outlier: 10 [1] 0.0482 0.0486 0.0494 outlier: 15 [1] 0.0476 0.0404 0.0437 outlier: 20 [1] 0.0491 0.0506 0.0509 outlier: 25 [1] 0.0456 0.0473 0.0490
      • -
# of outliers: 2 outlier: 10 [1] 0.0591 0.0512 0.0508 outlier: 15 [1] 0.0733 0.0530 0.0523 outlier: 20 [1] 0.0863 0.0533 0.0502 outlier: 25 [1] 0.0871 0.0581 0.0513
      • -
# of outliers: 3 outlier: 10 [1] 0.0749 0.0547 0.0573 outlier: 15 [1] 0.1159 0.0622 0.0530 outlier: 20 [1] 0.1593 0.0729 0.0612 outlier: 25 [1] 0.1649 0.0783 0.0605

無相関検定

      • -
# of outliers: 0 outlier: 10 [1] 0.0536 0.0541 0.0534 outlier: 15 [1] 0.0520 0.0488 0.0487 outlier: 20 [1] 0.0474 0.0508 0.0493 outlier: 25 [1] 0.0531 0.0498 0.0507
      • -
# of outliers: 1 outlier: 10 [1] 0.0838 0.0525 0.0539 outlier: 15 [1] 0.3786 0.0706 0.0584 outlier: 20 [1] 0.8768 0.0956 0.0637 outlier: 25 [1] 0.9965 0.1157 0.0590
      • -
# of outliers: 2 outlier: 10 [1] 0.1840 0.0764 0.0829 outlier: 15 [1] 0.8351 0.1401 0.0974 outlier: 20 [1] 0.9993 0.2284 0.1084 outlier: 25 [1] 1.0000 0.3211 0.1065
      • -
# of outliers: 3 outlier: 10 [1] 0.3187 0.1154 0.1346 outlier: 15 [1] 0.9747 0.2388 0.1722 outlier: 20 [1] 1.0000 0.4171 0.1784 outlier: 25 [1] 1.0000 0.5852 0.1866