目錄
- 適用實(shí)例
- 計(jì)算原理
- 計(jì)算實(shí)例
3.1 解答過(guò)程
3.2 R語(yǔ)言代碼 - Fisher精確檢驗(yàn)和卡方檢驗(yàn)的選擇
1. 適用實(shí)例
Fisher's exact test和卡方檢驗(yàn)的目的一樣,都屬于獨(dú)立性檢驗(yàn)蔑赘。目的是為了檢驗(yàn)兩個(gè)事件是否相互獨(dú)立狸驳,如果不相互獨(dú)立,則證明兩者之間有相關(guān)性缩赛。例如:
性別和是否節(jié)食是否相關(guān)
兩個(gè)候選人的得票是否和投票人性別相關(guān)
收入高低是否和出行方式(火車/飛機(jī))相關(guān)
……
2. 計(jì)算原理
實(shí)質(zhì)就是各項(xiàng)階乘的商耙箍。
這里求出的p值是假設(shè)兩者無(wú)相關(guān)性的前提下,利用超幾何檢驗(yàn)的思想計(jì)算出的當(dāng)節(jié)食男為a的情況下的P值酥馍,而Fisher's exact test的P值則是把更加罕見的情況(P值更小的情況)全部計(jì)算出來(lái)并相加即可辩昆。
3. 計(jì)算實(shí)例
我們要觀察性別和是否節(jié)食是否相關(guān),統(tǒng)計(jì)結(jié)果如下:
3.1 解答過(guò)程
建立H0假設(shè):性別和是否節(jié)食無(wú)關(guān)物喷。
計(jì)算所有情況下的P值:
這里以節(jié)食男為12個(gè)的情況進(jìn)行舉例計(jì)算:
接下來(lái)計(jì)算出所有比該情況更加罕見的情況下的P值:
case a b c d P value
1 0 15 15 2 0.0000002
2 1 14 14 3 0.0000180
3 2 13 13 4 0.0004417
4 3 12 12 5 0.0049769
5 4 11 11 6 0.0298613
6 5 10 10 7 0.1032349
7 6 9 9 8 0.2150728
8 7 8 8 9 0.2765221
9 8 7 7 10 0.2212177
10 9 6 6 11 0.1094916
11 10 5 5 12 0.0328475
12 11 4 4 13 0.0057426
13 12 3 3 14 0.0005469
14 13 2 2 15 0.0000252
15 14 1 1 16 0.0000005
16 15 0 0 17 0.0000000
我們需要將case13卤材,也就是前面題目中出現(xiàn)的這種情況遮斥,以及比case13更加極端的情況下的P值進(jìn)行相加:
單側(cè)檢驗(yàn):P=0.0005726
case13+case14+case15+case16=0.0005469+0.0000252+0.0000005+0.0000000=0.0005726
雙側(cè)檢驗(yàn):P=0.0010325
case13+case14+case15+case16+case1+case2+case3=0.0005469+0.0000252+0.0000005+0.0000000+0.0000002+0.0000180+0.0004417=0.0010325
3.2 R語(yǔ)言代碼
為了驗(yàn)證,我們先用R語(yǔ)言按照公式計(jì)算每個(gè)結(jié)果
1# 編寫公式用來(lái)計(jì)算每種情況下的概率p
2fish <- function(a){
3 b=15-a
4 c=15-a
5 d=32-a-c-b
6 factorial(15)*factorial(15)*factorial(17)*factorial(17)/factorial(32)/factorial(a)/factorial(b)/factorial(c)/factorial(d)
7}
8# 計(jì)算出所有情況下的p值
9result <- data.frame(case=seq(1,16),
10 a=seq(1,16)-1,
11 p=sapply(seq(1,16)-1, fish))
12result
13# case a p
14# 1 1 0 2.404005e-07
15# 2 2 1 1.803003e-05
16# 3 3 2 4.417358e-04
17# 4 4 3 4.976890e-03
18# 5 5 4 2.986134e-02
19# 6 6 5 1.032349e-01
20# 7 7 6 2.150728e-01
21# 8 8 7 2.765221e-01
22# 9 9 8 2.212177e-01
23# 10 10 9 1.094916e-01
24# 11 11 10 3.284748e-02
25# 12 12 11 5.742566e-03
26# 13 13 12 5.469110e-04
27# 14 14 13 2.524205e-05
28# 15 15 14 4.507509e-07
29# 16 16 15 1.767650e-09
30
31# 計(jì)算單側(cè)檢驗(yàn)的結(jié)果
32sum(result[result$a>=12,3])
33# 0.0005726056 結(jié)果一致
34
35# 計(jì)算雙側(cè)檢驗(yàn)的結(jié)果
36sum(result[result$p<=fish(12),3])
37# 0.001032612 結(jié)果一致
接下來(lái)直接使用R語(yǔ)言自帶函數(shù)進(jìn)行驗(yàn)證:
1mytable <- data.frame(men = c(12,3),
2 women = c(3,14))
3mytable
4# men women
5# 1 12 3
6# 2 3 14
7fisher.test(mytable)# 雙側(cè)檢驗(yàn)
8# p-value = 0.001033
9fisher.test(mytable, alternative = "greater")# 單側(cè)檢驗(yàn)
10# p-value = 0.0005726
alternative選項(xiàng)僅僅適用于2x2列聯(lián)表的情況下使用扇丛,"greater" or "less" 針對(duì)的是a.
4. Fisher精確檢驗(yàn)和卡方檢驗(yàn)的選擇
Fisher精確檢驗(yàn)和卡方檢驗(yàn)解決的問(wèn)題非常相似术吗,以至于我們?cè)谶x擇上
需要注意。
但是目前更認(rèn)為Fisher精確檢驗(yàn)適用于總樣本量n<40或者理論頻數(shù)Ei<1的情況帆精。
卡方檢驗(yàn)和Fisher精確檢驗(yàn)的區(qū)別在于:
所有的理論頻數(shù)Ei >= 5并且總樣本量n >= 40较屿,用卡方檢驗(yàn)
如果有理論數(shù)Ei < 5或總樣本量n >= 40,則用連續(xù)性校正的卡方進(jìn)行檢驗(yàn)
如果有理論數(shù)Ei < 1或總樣本量n < 40卓练,則用Fisher’s檢驗(yàn)