當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


R fisher.test 計數數據的 Fisher 精確檢驗


R語言 fisher.test 位於 stats 包(package)。

說明

執行 Fisher 精確檢驗,以測試具有固定邊際的列聯表中行和列的獨立性是否為零。

用法

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)

參數

x

矩陣形式的二維列聯表或因子對象。

y

一個因子對象;如果 x 是矩陣,則忽略。

workspace

一個整數,指定網絡算法中使用的工作空間的大小。以4字節為單位。僅用於大於的非模擬 p 值 表。自從R版本 3.5.0 中,這還增加了內部堆棧大小,從而可以解決更大的問題,但有時需要數小時。在這種情況下,simulate.p.values=TRUE可能更合理。

hybrid

一個合乎邏輯的。僅用於大於 表,在這種情況下,它指示是否應計算精確概率(默認)或其混合近似值。

hybridPars

長度為 3 的數值向量,默認說明卡方近似有效性的“Cochran 條件”,請參閱“詳細信息”。

control

包含用於低級算法控製的命名組件的列表。目前唯一使用的是"mult", 一個正整數 默認 30 僅用於大於 表。這表示應分配給路徑的空間是鍵的空間的多少倍:請參閱文件‘fexact.c’在這個包的來源中。

or

假設的優勢比。僅用於 情況。

alternative

表示備擇假設,並且必須是 "two.sided""greater""less" 之一。您可以僅指定首字母。僅用於 情況。

conf.int

邏輯指示是否應計算(並返回) 表中優勢比的置信區間。

conf.level

返回的置信區間的置信水平。僅用於 情況以及 conf.int = TRUE

simulate.p.value

指示是否在大於 表中通過蒙特卡洛模擬計算 p 值的邏輯。

B

一個整數,指定蒙特卡羅測試中使用的重複次數。

細節

如果x是一個矩陣,它被視為一個二維列聯表,因此它的條目應該是非負整數。否則,xy 必須是相同長度的向量或因子。刪除不完整的情況,將向量強製轉換為因子對象,並根據這些對象計算列聯表。

對於 情況,p 值是使用(中心或非中心)超幾何分布直接獲得的。另外,計算基於 FORTRAN 子例程 FEXACT 的 C 版本,該子例程實現了由 Mehta 和 Patel (1983, 1986) 開發並由 Clarkson、Fan 和 Joe (1993) 改進的網絡。 FORTRAN 代碼可以從 https://netlib.org/toms/643 獲取。請注意,當表的條目太大時,此操作會失敗(並顯示錯誤消息)。 (如有必要,它會轉置表,使其行數不超過列數。一個約束是行邊際的乘積小於 。)

對於 表,條件獨立性為零相當於優勢比等於 1 的假設。 “精確”推論可以基於觀察,一般來說,給定所有邊際總數固定,列聯表的第一個元素具有非中心超幾何分布,其非中心參數由優勢比給出(Fisher,1935)。單方麵測試的另一種方法是基於優勢比,因此 alternative = "greater" 是比值比大於 or 的測試。

雙邊檢驗基於表格的概率,並將所有概率小於或等於觀察到的表格的表格視為“更極端”,p 值是此類概率的總和。

對於大於 表和hybrid = TRUE,僅當“科克倫條件”(或其修改版本)指定時才使用漸近卡方概率hybridPars = c(expect = 5, percent = 80, Emin = 1)滿足,也就是說,如果沒有單元格的預期計數小於1(= Emin)和超過80%(= percent) 的單元格的預期計數至少為 5 (= expect),否則使用精確計算。對應的一個if()針對所有考慮的 sub-tables 做出決定。偶然,R已經使用過180代替80作為percent, IE。,hybridPars[2]R3.0.0 和 3.4.1(含)之間的版本,即第 2 個hybridPars(所有這些都曾經是hard-coded之前R3.5.0)。因此,在這些版本中R,hybrid=TRUE從來沒有改變過。

的情況下,內部表對於精確測試來說可能會變得太大,在這種情況下會發出錯誤信號。除了充分增加workspace(這可能會導致運行時間很長)之外,使用simulate.p.value = TRUE通常就足夠了,因此是可取的。

模擬是根據行和列邊進行的,並且僅當邊嚴格為正時才有效。 (使用 Patefield (1981) 算法的 C 翻譯。)請注意,默認重複次數 ( B = 2000 ) 意味著最小 p 值約為 0.0005 ( )。

"htest" 的列表包含以下組件:

p.value

檢驗的 p 值。

conf.int

比值比的置信區間。僅出現在 情況和 if 參數 conf.int = TRUE 中。

estimate

優勢比的估計。請注意,使用的是條件最大似然估計 (MLE),而不是無條件 MLE(樣本優勢比)。僅出現在 情況下。

null.value

空值下的優勢比 or 。僅存在於 情況下。

alternative

說明備擇假設的字符串。

method

字符串 "Fisher's Exact Test for Count Data"

data.name

給出數據名稱的字符串。

例子

## Agresti (1990, p. 61f; 2002, p. 91) Fisher's Tea Drinker
## A British woman claimed to be able to distinguish whether milk or
##  tea was added to the cup first.  To test, she was given 8 cups of
##  tea, in four of which milk was added first.  The null hypothesis
##  is that there is no association between the true order of pouring
##  and the woman's guess, the alternative that there is a positive
##  association (that the odds ratio is greater than 1).
TeaTasting <-
matrix(c(3, 1, 1, 3),
       nrow = 2,
       dimnames = list(Guess = c("Milk", "Tea"),
                       Truth = c("Milk", "Tea")))
fisher.test(TeaTasting, alternative = "greater")
## => p = 0.2429, association could not be established

## Fisher (1962, 1970), Criminal convictions of like-sex twins
Convictions <- matrix(c(2, 10, 15, 3), nrow = 2,
	              dimnames =
	       list(c("Dizygotic", "Monozygotic"),
		    c("Convicted", "Not convicted")))
Convictions
fisher.test(Convictions, alternative = "less")
fisher.test(Convictions, conf.int = FALSE)
fisher.test(Convictions, conf.level = 0.95)$conf.int
fisher.test(Convictions, conf.level = 0.99)$conf.int

## A r x c table  Agresti (2002, p. 57) Job Satisfaction
Job <- matrix(c(1,2,1,0, 3,3,6,1, 10,10,14,9, 6,7,12,11), 4, 4,
           dimnames = list(income = c("< 15k", "15-25k", "25-40k", "> 40k"),
                     satisfaction = c("VeryD", "LittleD", "ModerateS", "VeryS")))
fisher.test(Job) # 0.7827
fisher.test(Job, simulate.p.value = TRUE, B = 1e5) # also close to 0.78

## 6th example in Mehta & Patel's JASA paper
MP6 <- rbind(
        c(1,2,2,1,1,0,1),
        c(2,0,0,2,3,0,0),
        c(0,1,1,1,2,7,3),
        c(1,1,2,0,0,0,1),
        c(0,1,1,1,1,0,0))
fisher.test(MP6)
# Exactly the same p-value, as Cochran's conditions are never met:
fisher.test(MP6, hybrid=TRUE)

參考

Agresti, A. (1990). Categorical data analysis. New York: Wiley. Pages 59-66.

Agresti, A. (2002). Categorical data analysis. Second edition. New York: Wiley. Pages 91-101.

Fisher, R. A. (1935). The logic of inductive inference. Journal of the Royal Statistical Society Series A, 98, 39-54. doi:10.2307/2342435.

Fisher, R. A. (1962). Confidence limits for a cross-product ratio. Australian Journal of Statistics, 4, 41. doi:10.1111/j.1467-842X.1962.tb00285.x.

Fisher, R. A. (1970). Statistical Methods for Research Workers. Oliver & Boyd.

Mehta, Cyrus R. and Patel, Nitin R. (1983). A network algorithm for performing Fisher's exact test in contingency tables. Journal of the American Statistical Association, 78, 427-434. doi:10.1080/01621459.1983.10477989.

Mehta, C. R. and Patel, N. R. (1986). Algorithm 643: FEXACT, a FORTRAN subroutine for Fisher's exact test on unordered contingency tables. ACM Transactions on Mathematical Software, 12, 154-161. doi:10.1145/6497.214326.

Clarkson, D. B., Fan, Y. and Joe, H. (1993) A Remark on Algorithm 643: FEXACT: An Algorithm for Performing Fisher's Exact Test in Contingency Tables. ACM Transactions on Mathematical Software, 19, 484-488. doi:10.1145/168173.168412.

Patefield, W. M. (1981). Algorithm AS 159: An efficient method of generating r x c tables with given row and column totals. Applied Statistics, 30, 91-97. doi:10.2307/2346669.

也可以看看

chisq.test

fisher.exact 位於 exact2x2 包中,用於對 表的雙邊檢驗和置信區間進行替代解釋。

相關用法


注:本文由純淨天空篩選整理自R-devel大神的英文原創作品 Fisher's Exact Test for Count Data。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。