5.1 分割表
分割表contingency table
複数の項目の同時集計をクロス集計cross tabulationと呼ぶことがある。
とくに問題なくスルー
5.2 フィッシャー正確検定 Fisher’s exact test
壺に赤玉4個、城玉6個、ランダムに5個取り出す。
———- 赤玉 白玉
取り出した玉 3 2
壺の中 1 4
4C3 * 6C2 / 10C5
1 2 |
> choose(4,3) * choose(6,2) / choose(10,5) [1] 0.2380952 |
1 2 3 4 5 6 7 8 9 10 11 12 |
> fisher.test(matrix(c(3,1,2,4), nrow=2)) Fisher's Exact Test for Count Data data: matrix(c(3, 1, 2, 4), nrow = 2) p-value = 0.5238 alternative hypothesis: true odds ratio is not equal to 1 95 percent confidence interval: 0.218046 390.562917 sample estimates: odds ratio 4.918388 |
1 2 3 4 5 6 7 |
> fisher.test(matrix(c(195,123,61,144, 102,82,38,107), ncol=2)) Fisher's Exact Test for Count Data data: matrix(c(195, 123, 61, 144, 102, 82, 38, 107), ncol = 2) p-value = 0.2431 alternative hypothesis: two.sided |
データフレームを使用すれば、
1 2 3 4 5 6 7 8 9 |
> x = data.frame(内向=c(195,123,61,144), 外向=c(102,82,38,107)) > row.names(x) = c("A","B","AB","O") # 計算には不要だが行に名前を付けると便利 > fisher.test(x) Fisher's Exact Test for Count Data data: x p-value = 0.2431 alternative hypothesis: two.sided |
fisher.test()はオッズ比(OR)も出力する。オッズとは「当たりの確率」を「外れの確率」で割ったのも。
fisher.test()での計算方法では、p値とオッズ比の信頼区間は別の方法で計算されるので、以下のように同じ結果にならない。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
> ex1 = matrix(c(6,12,12,5), nrow=2) > fisher.test(ex1) Fisher's Exact Test for Count Data data: ex1 p-value = 0.04371 alternative hypothesis: true odds ratio is not equal to 1 95 percent confidence interval: 0.03888003 1.05649145 sample estimates: odds ratio 0.2189021 |
そこで、exact2x2パッケージのfisher.exact()を使う。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
> install.packages("exact2x2") URL 'https://cran.rstudio.com/bin/macosx/el-capitan/contrib/3.4/exact2x2_1.5.2.tgz' を試しています Content type 'application/x-gzip' length 1319222 bytes (1.3 MB) ================================================== downloaded 1.3 MB The downloaded binary packages are in /var/folders/0j/j_y5y9pj73g9f1r01zqzycxm0000gp/T//RtmprLHWfH/downloaded_packages > library(exact2x2) > fisher.exact(ex1) Two-sided Fisher's Exact Test (usual method using minimum likelihood) data: ex1 p-value = 0.04371 alternative hypothesis: true odds ratio is not equal to 1 95 percent confidence interval: 0.0435 0.9170 sample estimates: odds ratio 0.2189021 |
5.3 カイ二乗検定
1 2 3 4 5 6 7 8 9 10 |
> chisq.test(matrix(c(3,1,2,4), nrow=2)) Pearson's Chi-squared test with Yates' continuity correction data: matrix(c(3, 1, 2, 4), nrow = 2) X-squared = 0.41667, df = 1, p-value = 0.5186 警告メッセージ: chisq.test(matrix(c(3, 1, 2, 4), nrow = 2)) で: カイ自乗近似は不正確かもしれません |
1 2 3 4 5 6 7 8 9 10 |
> chisq.test(matrix(c(3,1,2,4), nrow=2), correct=FALSE) Pearson's Chi-squared test data: matrix(c(3, 1, 2, 4), nrow = 2) X-squared = 1.6667, df = 1, p-value = 0.1967 警告メッセージ: chisq.test(matrix(c(3, 1, 2, 4), nrow = 2), correct = FALSE) で: カイ自乗近似は不正確かもしれません |
5.4 オッズ比、相対危険度
5.5 相対危険度・オッズ比の求め方
ーーーー肺がんあり 肺がんなし
喫煙あり 231 23036
喫煙なし 26 10813
1 2 3 4 5 |
> x = matrix(c(231,26,23036,10813), nrow=2) > x [,1] [,2] [1,] 231 23036 [2,] 26 10813 |
1 2 3 4 5 6 |
> rownames(x) = c("喫煙", "非喫煙") > colnames(x) = c("肺がんあり", "肺がんなし") > x 肺がんあり 肺がんなし 喫煙 231 23036 非喫煙 26 10813 |
1 2 3 4 5 |
> x = matrix(c(12,5,6,12), nrow=2) > x [,1] [,2] [1,] 12 6 [2,] 5 12 |
1 2 3 4 5 6 7 8 9 10 |
> (x[1,1]/x[1,2]) / (x[2,1]/x[2,2]) [1] 4.8 > log((x[1,1]/x[1,2]) / (x[2,1]/x[2,2])) [1] 1.568616 > 1/x[1,1] + 1/x[1,2] + 1/x[2,1] + 1/x[2,2] [1] 0.5333333 > pnorm(-1.568616 / sqrt(0.5333333)) * 2 [1] 0.03172043 > exp(1.568616 + qnorm(c(0.025,0.975)) * sqrt(0.5333333)) [1] 1.147127 20.084960 |