当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。