数学いらずの医科統計学PART6 の話。
対応のない/あるt検定について。
今回は平均値の比較がしたいということで、t検定を考えている。
t検定は教科書的には、正規分布を仮定しているが、正規分布には平均と分散の2パラメータが必要である。
帰無仮説:若いマウスと年寄りマウスの膀胱括約筋弛緩は、同一の分布から得られる。
対立仮説:若いマウスと年寄りマウスの膀胱括約筋弛緩は、平均が異なる分布から得られる。
サンプルの集合
正規分布
として、確率の最尤推定値を、(パラメータが平均と分散)と(パラメータは平均x2と分散x1 or 2)の場合で…
とやるのは非常に面倒なので、t検定がうまく作られているのだろう…
平均に差があるかをリサンプリング(ブートストラップ)法でやる。
帰無仮説:若いマウスと年寄りマウスの膀胱括約筋弛緩は、同一の分布から得られる。
対立仮説:若いマウスと年寄りマウスの膀胱括約筋弛緩は、平均が異なる分布から得られる。
を流用しよう。今、
若いマウスのサンプル
年寄りマウスのサンプル
がある。
は、若いマウスと年寄りマウスを合わせたからリサンプリングして、を作る。そしてこの2群それぞれの平均、の差が、オリジナルな2群の平均の差より大きくなることがどれだけあるか数えればいい。
old <- c(20.8, 2.8, 50, 33.3, 29.4, 38.9, 29.4, 52.6, 14.3) young <- c(45.5, 55, 60.7, 61.5, 61.1, 65.5, 42.9, 37.5) all_sample <- c(old, young) # 合わせた分布 diff_mean <- mean(young) - mean(old) niter <- 100000 # リサンプリングする回数 temp_old <- matrix(sample(all_sample, size=niter*length(old) , replace=TRUE), nr=niter) temp_young <- matrix(sample(all_sample, size=niter*length(young), replace=TRUE), nr=niter) result <- rowMeans(temp_young) - rowMeans(temp_old) sum(abs(result) >= diff_mean)/niter # p値 par(mfcol=c(1,2)) hist(rowMeans(temp_young), nclass=100, col=2, main="young mice") abline(v=mean(rowMeans(temp_young)), lwd=4) hist(rowMeans(temp_old), nclass=100, col=5, main="old mice") abline(v=mean(rowMeans(temp_old)), lwd=4) par(mfcol=c(1,1))