【问题标题】:Scipy fisher_exact test taking a very long timeScipy Fisher_exact 测试需要很长时间
【发布时间】:2018-09-07 04:03:18
【问题描述】:

我使用的是 scipy 1.0.0 版。

import scipy as sp
x = [[5829225, 5692693], [5760959, 5760959]]
sp.stats.fisher_exact(x)

对于上面的值,scipy 不返回任何内容,而是等待。 这可能是什么原因? 我该如何解决?

但是在 R 中,它几乎立即返回一个 p 值。

a = matrix(c(5829225,5692693,5760959,5760959), nrow=2)
fisher.test(a)

【问题讨论】:

  • 尝试“scipy.stats.fischer_exact(x)”并删除“import scipy as sp”
  • 没有变化。它仍然没有返回任何 p 值。 "scipy.stats.fisher_exact(x)" 应该如何改变?
  • 我认为对于大 N 来说,实现真的很慢;在我的电脑上,它看起来会完成,但大约需要 20 分钟。当然,你应该考虑一下你是否真的想要Fisher
  • 感谢reporting the issue;看起来像一个错误。
  • @Warren Weckesser,不客气。

标签: python scipy


【解决方案1】:

来自documentation中的注释:

计算出的优势比与 R 使用的不同。这个 scipy 实现返回(更常见的)“无条件最大似然估计”,而 R 使用“有条件最大似然估计”。

对于大数表,也可以使用函数chi2_contingency中实现的(不精确的)卡方检验。

(强调我的)

就像提到的 DSM 评论一样,对于您的大值来说,它可能非常慢。并且由于注释调用了较大的值,您可以尝试他们建议的替代方法:

>>> chi2, p, dof, expected = sp.stats.chi2_contingency(x)
>>> p
6.140729432506709e-178

【讨论】:

  • 非常感谢。我想知道大数的定义是什么。 300万?或更少?我做了一些试验:)
  • 当您只有 2X2 列联表时,Fisher 精确测试很好。我猜卡方检验至少需要 5 个值。
猜你喜欢
  • 1970-01-01
  • 2020-03-18
  • 2018-10-16
  • 1970-01-01
  • 2023-04-05
  • 2013-09-07
  • 2020-08-26
  • 2014-10-09
  • 2012-11-26
相关资源
最近更新 更多