p値はawful

MikuHatsune2017-01-09

ここで紹介されているこの例をやってみた。

状況としてはこんな図と実験がある。
ある腫瘍細胞に薬#1 と#2 を単独もしくは両者ともにふりかける実験をする。#1 のみもしくは#2 のみふりかけた実験では対照と有意差はなく、#1#2 と同時にふりかけた場合は有意差がでたので、この薬はsynergy 効果がすごい!!
 
というのはシミュレーションでおかしいというのがわかる。例えば対照は平均1、#1 と#2 は平均2 の正規分布からサンプリングし、#1#2 は2*2 の平均4 からサンプリングしたとすれば、そもそも#1(もしくは#2) でも対照に比べて差は出うる、けど、有意差が出なかったのはサンプル具合によった偶然の結果。
 
p値が難しい、誤認される原因として、帰無仮説検定の枠組みについて言及しているが、元記事と合わせて重要そうだなと思うのが、p値というものは帰無仮説の元でのみ意味を持ちうる、強烈すぎる非線型変換である(p=0.13 がZ値1.5 に相当するのに対して、p=0.003 がZ=3 に相当するということが紹介されている)ことと、すべてのことはなんらかのeffect size を持つものだから差がない、という帰無仮説がそもそもなあ…というのが気になった。
 

m0 <- 1
sd0 <- 0.75
m1 <- m2 <- 2
N <- 10

d0 <- rnorm(N, m0, sd0)
d1 <- rnorm(N, m1, sd0)
d2 <- rnorm(N, m2, sd0)
d12 <- rnorm(N, m1*m2, sd0*2.5)

d <- cbind(d0, d1, d2, d12)
p <- mapply(function(z) t.test(d0, z)$p.value, list(d1, d2, d12))

b <- boxplot(d, names=c("none", "#1", "#2", "#1 & #2"), xlab="Treatment", ylab="Measurement", ylim=c(min(d), max(d)+1), las=1)
y <- tail(b$stats, 1)
yd <- c(1, 2, 1)*0.5
for(i in 1:3){
  segments(1, y[i+1]+yd[i], i+1, lwd=3)
  text(mean(c(1, i+1)), y[i+1]+yd[i], paste0("p= ", round(p[i], 4)), pos=3)
}