間違った解釈をしないように!
(再掲)
severity <- c(rep("severe", 12), rep("mild", 6), rep("severe", 3), rep("mild", 8))
severity <- factor(severity, levels=c("severe", "mild"))
levels(severity)
#[1] "severe" "mild"
effect <- c(rep("yes", 18), rep("no", 11))
effect <- factor(effect, levels=c("yes", "no"))
levels(effect)
#[1] "yes" "no"
tab <- xtabs( ~ severity + effect)
print(tab)
> print(tab)
effect
severity yes no
severe 12 3
mild 6 8
帰無仮説: severeのオッズ = mildのオッズ
対立仮説: severeのオッズ > mildのオッズ
severeのオッズ がmildのオッズより有意に大きいことを証明します。Fisherの直接法により有意水準5%で検定します。
fisher.test(tab)
> fisher.test(tab)
Fisher's Exact Test for Count Data
data: tab
p-value = 0.06043
alternative hypothesis: true odds ratio is not equal to 1
95 percent confidence interval:
0.8163182 40.7244582
sample estimates:
odds ratio
5.003853
p=0.06となり有意差はありません・・・、という回答は間違っています。fisher.testのデフォルトを確認しましょう。
?fisher.test
fisher.test(x, y = NULL, workspace = 200000, hybrid = FALSE,
hybridPars = c(expect = 5, percent = 80, Emin = 1),
control = list(), or = 1, alternative = "two.sided",
conf.int = TRUE, conf.level = 0.95,
simulate.p.value = FALSE, B = 2000)
alternative = “two.sided”がデフォルトで、両側検定が初期設定となっています。しかし今回の検定は 「片側検定を5%水準で行う」と宣言しています。alternative = “less” または、”greater”を設定しなければなりません。さてどちらを選択すればよいでしょうか。
先に述べましたように X≧12 となる確率を求めることになります。alternative = “greater” と設定して上側検定を実行します。
fisher.test(tab, alternative = "greater")
> fisher.test(tab, alternative = "greater")
Fisher's Exact Test for Count Data
data: tab
p-value = 0.04601
alternative hypothesis: true odds ratio is greater than 1
95 percent confidence interval:
1.029929 Inf
sample estimates:
odds ratio
5.003853
p=0.046となり帰無仮説は棄却され、severeのオッズは mildのオッズより有意に大きいという結果になります。
ここで重要なのは、オッズ比の見方になります。分割表が以下のように入れ替わった場合は、もちろん答えも変わってきます。どちらが分母で、どちらが分子になっているか判断しなければなりません。以下の分割表ではnoとyesを入れ替えています。
tab_m <- tab[, c(2, 1)]
print(tab_m)
> print(tab_m)
effect
severity no yes
severe 3 12
mild 8 6
これで列が入れ替わりました.検定してみましょう。
fisher.test(tab_m, alternative = "greater")
> fisher.test(tab_m, alternative = "greater")
Fisher's Exact Test for Count Data
data: tab_m
p-value = 0.9935
alternative hypothesis: true odds ratio is greater than 1
95 percent confidence interval:
0.03358399 Inf
sample estimates:
odds ratio
0.199846
この場合のオッズ比は、
tab_mのオッズ比=$\frac{severのno}{severのyse}/\frac{mildのno}{mildのyse}$
Rで分割表を検定する場合は、このことに十分気を付けながら実行しなければなりません。
3群以上の場合
tab3 <- matrix(c(15, 12, 6, 3, 3, 10), 3, 2)
rownames(tab3) <- c("level 1", "level 2", "level 3")
colnames(tab3) <- c("yes", "no")
print(tab3)
> print(tab3)
yes no
level 1 15 3
level 2 12 3
level 3 6 10
オッズ=$\frac{yes}{no}$
帰無仮説:レベル1, 2, 3のオッズは等しい
対立仮説:レベル1, 2, 3のオッズは等しくない(3群のどこかでが異なる)
fisherの正確検定
fisher.test(tab3)
> fisher.test(tab3)
Fisher's Exact Test for Count Data
data: tab3
p-value = 0.0103
alternative hypothesis: two.sided
fisherの正確検定は大変複雑な計算になりますが、Rでは一瞬で算出してくれます。両側検定をした結果は、p = 0.048 となり統計学的に差があるという結果になりました。
カイ二乗検定
chisq.test(tab3)
> chisq.test(tab3)
Pearson's Chi-squared test
data: tab3
X-squared = 9.6654, df = 2, p-value = 0.007965
警告メッセージ:
chisq.test(tab3) で: カイ自乗近似は不正確かもしれませ
p値は少し異なりますが、カイ二乗検定もやはり有意という回答になりました。
多重比較
グループ間の割合に差があるということなので、多重比較を行う場合が多いと思われます。でも、個人的には井口先生のご意見に賛成です。以下をご参照ください。
このことを理解した上で、多重比較の方法のみを記載しておきます。使用するパッケージは、RVAideMemoire。インストールしてない場合は install.packages(“RVAideMemoire”)。
library(RVAideMemoire)
以下のようなp値調整の方法があります。
p.adjust.methods
# c("holm", "hochberg", "hommel", "bonferroni", "BH", "BY",
# "fdr", "none")
Adjust P-values for Multiple Comparisons
ホルム
実際にやってみましょう.A=1行目、B=2行目、C=3行目.
fisher.multcomp(tab3, p.method="holm")
> fisher.multcomp(tab3, p.method="holm")
Pairwise comparisons using Fisher's exact test for count data
data: tab3
level 1 level 2
level 2 1.00000 -
level 3 0.03673 0.05802
P value adjustment method: holm
ボンフェローニ
fisher.multcomp(tab3, p.method="bonferroni")
> fisher.multcomp(tab3, p.method="bonferroni")
Pairwise comparisons using Fisher's exact test for count data
data: tab3
level 1 level 2
level 2 1.00000 -
level 3 0.03673 0.08702
P value adjustment method: bonferroni
どちらの方法も1行目と3行目に有意差ありという判定でした。
コメント欄 『間違い』や『分かりにくい部分』などのご意見もお寄せください