:::

小樣本的卡方檢定:費雪爾正確概率檢定 / Fisher’s Exact Test: An Example

image

本學期在教卡方檢定的時候,一併研究起小樣本時SPSS時常使用的另一種卡方檢定「費雪爾正確概率檢定 (Fisher's exact test)」。這是一種用於2x2列聯表、行列的總數不超過20個、有細格期望值小於5的情況下所使用的無母數檢定法,可分析兩組類別資料之間是否有顯著相關。我翻找了許多書籍跟網頁,最後找到Ina Parks S. Howell的統計課講義「Fisher’s Exact Test: An Example」對費雪爾正確概略檢定有最詳細的介紹。內容不多,但還挺好理解的,那我就根據講義的內容,把計算過程整理一下吧。

 


問題與列聯表資料 / Question

現在學校內有「甲班」跟「乙班」兩個不同班級,兩個班級的人數都很少。但老師非常嚴格,到了期末的時候當掉了不少學生。兩個班級在學期末通過與未通過的列聯表資料如下:

  通過 未通過 列總合
甲班 8 14 22
乙班 1 3 4
行總合 9 17 26

乍看之下,甲班只有36%的學生過關(8/22),乙班卻只有25%的學生通過(1/4)。

乙班學生非常生氣,希望能夠找到足夠的證據來證明乙班的老師過於嚴格。這時候我們就能用費雪爾正確概率檢定來計算這件事情。

假設 / Hypothesis

在此問題中的對立假設與虛無假設如下:

  • 對立假設 H1: 兩個班級的通過比例不同。
  • 虛無假設 H0:兩個班級的通過比例沒有不同。

甲班與乙班的通過與未通過是兩個獨立的二項實驗 (binomial experiments,得到結果只有「是」或「否」兩種),而且樣本數量非常小,因此我們可以使用費雪爾正確概率檢定來計算。

在本例子中的顯著水準α 設為0.05,最後費雪爾正確概率檢定計算出的機率值p值必須要小於0.05 (在講義中寫<=,但我認為是<),我們才能推翻虛無假設、接受對立假設。

列聯表定義 / Contingency Tables Definition

為了方便計算,我們有必要給列聯表的各個位置一個代號。原始資料如下:

  通過 未通過 列總合
甲班 8 14 22
乙班 1 3 4
行總合 9 17 26

以列變項為i,行變項為j,代號如下:

  j = 1 j = 2  
i = 1 n11 n12 n1.
i = 2 n21 n22 n2.
  n.1 n.2 n

上面為綠底的部分為細格的個數。沒有標示的n即為樣本總數。而上面標示黃底有標示「.」的總合數字,包括「n1.」、「n2.」、「n.1」、「n.2」,是為邊際總合。


計算過程 / Calculations

1. 找尋可能的細格組合 / Possible Cells

在費雪爾正確概率檢定中,假設邊際總合(黃底位置)是固定的,而細格個數(綠底)則是可能改變的數字。

這個組合要怎麼找呢?步驟如下:

  1. 找到邊際總合最小的位置,是位於n2.的「4」。其中i=2,意思是我們要考慮的是「n21」跟「n22」的組合。
  2. 「n21」跟「n22」的原始個數是(1,3)。在總合為4,不可小於0的條件下,可能有以下5種組合:(0, 4), (1, 3), (2, 2), (3, 1) 跟 (4,0)。
  3. 根據「n21」跟「n22」的組合,調整「n11」跟「n12」,即可得到5種不同的細格組合。

這5種細格組合如下,以(n11,n12,n21,n22)呈現:

  • (9, 13, 0, 4)
  • (8, 14, 1, 3) <-原始組合
  • (7, 15, 2, 2)
  • (6, 16, 3, 1)
  • (5, 17, 4, 0)
2. 計算機率值 / Probability Computing

接著我們要為每一種細格組合計算機率值,公式如下:

image

裡面的「n!」是階乘運算。此例的「n!」即為「26!」。

image

你可以用Google計算機來計算階乘。

接著我們試著將以上的5種細格組合各別機率值:

  • (9, 13, 0, 4):p = 0.159197
  • (8, 14, 1, 3):p = 0.409365<-原始組合
  • (7, 15, 2, 2):p = 0.327492
  • (6, 16, 3, 1):p = 0.095518
  • (5, 17, 4, 0):p = 0.008428

(原始講義這邊打錯,以上面我的修正為主)

3. 計算雙尾檢定的機率值p值 / Two-tailed P-Value

若要計算雙尾檢定的機率值p值,其做法如下:

  1. 找出原始組合的機率值:(8, 14, 1, 3):p = 0.409365
  2. 將所有組合的機率值小於或等於原始組合機率值加總,即可得到雙尾檢定的機率值。

0.159197 + 0.409365 + 0.327492 + 0.095518 + 0.008428 = 1

結論:雙尾檢定的機率值為1,大於0.05顯著水準,無法拒絕虛無假設。意思是兩個班級的通過比例沒有不同。

4. 計算單尾檢定的機率值p值 / One-tailed P-Value

計算單尾檢定的機率值p值比較複雜。首先我們要計算的n11期望值:(n1. * n.1) / n = ( 22 * 9 ) / 26 = 7.6。

n11個數8大於期望值7.6,因此我們要找出細格組合中大於期望值7.6的組合:

  • (9, 13, 0, 4):p = 0.159197
  • (8, 14, 1, 3):p = 0.409365<-原始組合

將以上機率值加總,即可得到單尾檢定的機率值:

0.159197 + 0.409365 = 0.568562

結論:單尾檢定的機率值為0.569,大於0.05顯著水準,一樣無法拒絕。我們不能說甲班的通過比例高過乙班。

但大部分列聯表的計算都是看有無差異的雙尾檢定,單尾檢定則不是重點就是了。


小結 / In Closing

image

image

以上計算結果與SPSS相同,費雪爾正確概率檢定計算結束。

1280px-Nice_Cup_of_Tea

話說回來,費雪爾正確概率檢定原本是費雪爾跟他的同事在玩「能不能猜出這杯奶茶是先加奶精、還是先加茶」的遊戲中,所發展出的一種小樣本統計方法,有興趣可以看看應數博黃士峰的「統計方法應用--- Fisher’s Exact Test」介紹,很有趣吧。

總共10 則留言, (我要發問)

  1. 是統計白癡的研究小助理2020年5月7日 下午4:37

    布丁布丁:這是我第一次留言,想先感謝你用這麼深入淺出、圖文並茂的方式說明這麼多統計操作與解釋,整個就是我這種統計白癡的救星!我現在遇到一個難題,我的資料是5x6列聯表,但是其中有5個細格個數為0、3個細格個數<5,我看了不少資料(包含你的「類別變項的相關檢定:卡方獨立性檢定」一文),發現我的狀況無法參考Pearson卡方(因為至少一個細格<5)、費雪(因為不是2x2列聯表、行列的總數不超過20個、其中有細格為0)、連續性校正(因為不是2x2列聯表)的卡方值,請問我這樣的資料難道真的無法跑卡方了嗎?QQ 謝謝你

    回覆刪除
    回覆
    1. To 是統計白癡的研究小助理,

      傳統的做法會建議你合併細格
      就是你分太多類型了,把一些沒資料的類型合併吧!

      我也看過有人用全部+1來規避細格為0的問題,但一時間找不到到底是在哪看到的

      還是認真看看大家是怎麽分析的吧
      Agresti, A.(2003)。類別資料分析導論(劉應興譯)。臺北市:華泰。
      作者提到許多次數為零且細格次數很小的資料,使用卡方獨立性檢定的結果不太適合,應該使用費雪爾正確概率檢定。

      擴展正確檢定的多變量版本的超幾何分佈,一樣是考慮所有行、列邊緣和觀測表相同的所有表。首先要決定可以用來描述觀測資料和虛無假設H0距離的檢定統計量,然後計算所有可能的表中,該統計量至少和觀測表一樣大的機率和。對於類別型的變數來說,採用的統計量就是X^2,P值即是與X^2至少與觀測值一樣大的虛無機率。

      這個機率就是用費雪爾正確分佈來計算,並不是用大樣本卡方分佈來計算了。

      實務計算上,作者介紹的是StatXact,這是用於無母數分析的商用軟體
      https://www.linksoft.com.tw/product/statxact

      不過根據ResearchGate的討論,其實SPSS跟R也能做得到
      https://www.researchgate.net/post/Alternatives_of_Fishers_exact_test_for_more_than_2_groups2

      SPSS: crosstabs->Exact-->then click the exact box
      R package "coin"或是fisher.text()都行

      刪除
    2. 是統計白癡的研究小助理2020年5月8日 上午10:45

      布丁布丁:由於我的研究資料是醫療生理數據的分組,不同組別代表的健康意義不同,所以我一直沒有辦法考慮合併細格。至於SPSS上面的操作,我是用「Exact」裡的「精確:每一檢定的時間限制5分」為設定去跑,但是在輸出結果報表「Fisher's精確檢定」一列中顯示的「數值」都為.000(Pearson卡方分別為53.936和94.034;精確顯著性(雙尾)亦皆為.000;有3格10.0%的預期個數少於5),但我不是很清楚也還暫時查不到費雪精確檢定的卡方值為.000是否具有意義、可以參考? 如果我在SPSS的操作設定有錯誤,還煩請您指教,非常感謝!

      刪除
    3. To 是統計白癡的研究小助理,

      我知道你的問題是什麼了

      那就是沒看過SPSS說明
      ftp://public.dhe.ibm.com/software/analytics/spss/documentation/statistics/20.0/en/client/Manuals/IBM_SPSS_Exact_Tests.pdf

      加油

      刪除
    4. 是統計白癡的研究小助理2020年5月11日 上午9:52

      布丁布丁:謝謝您提供給我SPSS的說明大全!我這幾天反覆看了好幾次,實在有看沒有懂、似懂非懂的(很多細格數少於5的例子並沒有提及卡方值怎麼看,也可能是我真的沒有看懂...),我則是從其他書籍中有看到一說是如果使用Fisher's 精確檢定則不需要呈現卡方檢定結果,這是否也是您上一次提到Agresti, A.(2003)說不適合用卡方獨立性檢定結果的意思呢?如果是這樣,是代表在研究結果表格中的卡方值一格呈現「-」即可嗎? 很不好意思,我的統計概念真的很差,問的問題可能很基礎而過於愚笨,如果您願意,還請多指教,真的很感謝!

      刪除
    5. To 是統計白癡的研究小助理,

      費雪爾精確檢定一般來說只有計算機率值p
      去找個學術論文看別人是怎麽分析的看看?

      刪除
  2. 是統計白癡的研究小助理2020年5月14日 下午1:23

    布丁布丁:我瞭解了,我會再去參考學術論文!真的很感謝你不厭其煩地解惑!

    回覆刪除