【问题标题】:Fisher test more than 2 groups2组以上的Fisher检验
【发布时间】:2013-12-10 16:24:09
【问题描述】:

主要编辑: 我决定重写这个问题,因为我的原件写得不好。我将在下面留下原始问题以保持记录。基本上,我需要在大约 200 个观察值的 4 x 5 大的表上进行 Fisher 检验。事实证明,正如here 所解释的那样,这通常是一个主要的计算挑战(我认为,我不能完全遵循它)。当我同时使用 R 和 Stata 时,我将使用一些虚构的数据来为这两者提出问题。

状态:

    tabi 1 13 3 27 46 \ 25 0 2 5 3 \ 22 2 0 3 0 \ 19 34 3 8 1 , exact(10)

您可以将exact() 增加到最大值 1000(但可能需要一天时间才能返回错误)。

R:

    Job <- matrix(c(1,13,3,27,46, 25,0,2,5,3, 22,2,0,3,0, 19,34,3,8,1), 4, 5,
         dimnames = list(income = c("< 15k", "15-25k", "25-40k", ">40k"),
         satisfaction = c("VeryD", "LittleD", "ModerateS", "VeryS", "exstatic")))
    fisher.test(Job)

至少对我来说,这两个程序都会出错。那么问题是如何在 Stata 或 R 上进行此计算?

原问题: 我有Stata和R可以玩。 我有一个包含各种分类变量的数据集,其中一些有多个类别。 因此,我想对超过 2 x 2 个类别进行 Fisher 精确检验 即将 Fisher's 应用于 2 x 6 表或 4 x 4 表。

这可以用 R 或 Stata 完成吗?

编辑:虽然这可以在 Stata 中完成 - 它不适用于我的数据集,因为我有太多类别。 Stata 经历了无休止的迭代,即使放置一天或更长时间也不会产生解决方案。

我的问题是真的 - R 可以做到这一点,并且可以快速做到吗?

【问题讨论】:

  • 你的桌子有多大仍然是一个关键细节。
  • 是的,你是对的——现在就检查一下。 n = 191,第 1 类有 4 个分区,第 2 类有 5 个分区。这绝对不适合我。大约一天半后,它返回一个错误,说值太多
  • 这变得更令人费解了。我看不出有什么理由让 Stata 紧张。你能发布数据吗?
  • 啊...我真的不能(保密原因)。我的理解是,它只是一种原始的处理能力——每次添加一个类别时,你都会以指数方式增加观察的可能分布的数量,甚至在 4 x 5 和 n = 191 时,它的繁重计算
  • 我收到了对tabi 2 2 2 2 2 \ 13 13 13 13 13 \ 4 4 4 4 4 \ 20 20 20 20 20 , exact 的即时回复。这不是一个证明,但它是 4 x 5(n 约为 200)表必然有问题的想法的反例。我想知道你的记忆要求是否会让事情变得更糟。

标签: r statistics stata


【解决方案1】:

你研究过R函数fisher.test的文档吗?引用help("fisher.test"):

对于 2 x 2 的情况,p 值直接使用 (central or 非中心)超几何分布。否则,计算是 基于 FORTRAN 子例程 FEXACT 的 C 版本,它实现 由 Mehta 和 Patel (1986) 开发并改进的网络 克拉克森、范和乔 (1993)。

这是文档中给出的示例:

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)

# Fisher's Exact Test for Count Data
# 
# data:  Job
# p-value = 0.7827
# alternative hypothesis: two.sided

【讨论】:

  • 谢谢罗兰。是的,我看到了,但我并没有真正理解它(我没有矩阵或 Fortan 子例程的 c 版本的经验)。我必须为我最初的问题道歉,因为这个问题今天再次困扰我,所以我没有想到就从臀部发出了这个问题。以前当我在 stata 中处理我的多类别表时,stata 无法处理类别的数量。我想我想知道的是 R 会更好(毕竟相同的 CPU)
  • 您不需要使用 C 版本的 Fortran 子例程的经验。这一切都在 R 函数中。当然,在使用它之前,您应该阅读 R 的基本介绍。矩阵是 R 中非常基本的数据结构。由于fisher.test 在内部使用 C 代码,所以它应该相当快。
  • 即便如此,我之前没有理由在 R 中使用矩阵
  • 好吧,你不需要矩阵。阅读文档。它允许以另一种方式将输入数据传递给函数。
  • 那么为什么需要精确的 p 值呢?在 R 中,您可以使用 fisher.test(x, y, simulate.p.value = TRUE, B=1e7) 轻松运行 MC 模拟(如果满足某些条件)。对于大多数应用程序来说,这应该足够精确。
【解决方案2】:

就 Stata 而言,您最初的陈述完全不正确。 search fisher 快速引导至 help tabulate twoway

  • exact 选项的帮助说明它可以应用于 r x c 以及 2 x 2 表

  • Fisher 精确检验在同一位置的第一个示例强调了 Stata 不限于 2 x 2 表。

在本网站的任何地方,您都希望阅读基本文档。请!

【讨论】:

  • 抱歉,我过于简单化了——这已经有一段时间没有想到了,今天又想起来了。我将编辑问题以更正。过去我已经广泛搜索和阅读了这方面的基本文档,我急于添加但无法解决我的问题
  • 您的陈述甚至没有过于简单化!我已经给你提示了如何找到东西。带有关键字的search 是一种开始方式。 stata.com/manuals13/i.pdf 是一个可搜索的、可访问的文档摘要,您只需按几下键就可以到达我的位置。您只需要“Fisher”作为开始。
  • 我在这条路上走得很远。 Stata 无法满足我的需求。刚刚打开了我之前的脚本。即使这在我身上大约 30 小时后也崩溃了:tab categorical1 categorical2, exact(1000)
  • 我相信你,但你浪费了人们的时间,你的时间也是如此,而不是问你真正的问题。
  • 我再次道歉。老实说 - 我已经有几个月没有看过它了,这是我的大脑记得的简短形式,直到你促使我思考它。下次发帖之前我会做更多的思考。感谢您抽出宝贵时间来回答。
猜你喜欢
  • 2021-06-16
  • 1970-01-01
  • 1970-01-01
  • 2021-11-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-18
相关资源
最近更新 更多