【4.1.2】Fisher精确检验(超几何分布、富集分析、Fisher's Exact Test)

经常看到一些饼图,描述某些事物的组成,比如说有钱人的学历分布,然后我们可以看到高学历所占比例并不高,根据这个比例下结论通常是错的,这些比例说明不了问题,如果把各种学历在总体人口中的分布做为背景进行考虑的话,你就会发现学历还是有点用的。

当我们用组学测定了一大堆分子之后,我们希望站在更高的角度去看这些分子和那些生物学过程相关。那么通常各种注释,对这些基因/蛋白进行分类,那么从分类的比例上,是不能草率下结论,正如上面有钱人学历分布的例子一样。我们需要把总体的分布考虑进去。

在做富集分析的时候,会涉及到这么一个概念。

检验两个二进制变量是否是独立的。该检验可以分析 2x2 列联表,并产生精确的 p 值,以检验以下假设:

  • H0:行变量和列变量是独立的
  • H1:行变量和列变量是相关的

Fisher 精确检验中的 p 值对于所有样本数量都是准确的,而当单元格计数较小时,用于检查相同假设的卡方检验的结果可能不准确。

例如,可以使用 Fisher 精确检验来分析下面的竞选结果列联表,以确定投票是否独立于投票人的性别。

- 候选人 A 候选人 B
9 26
21 35

转化为概率问题就是,从9+21+26+35=91个里面有30个候选人a,61个候选人b,从中抽取35人,9人为候选人a,26人为候选人b的概率,p=(309)(6126)/(9135)。对于该表,Fisher 精确检验产生的 p 值为0.263。由于该 p 值大于常用的 a 水平0.05,因此数据与原假设一致。因而,没有证据表明在竞选中投票人的性别会影响其选择。

您还可以使用 Fisher 精确检验来确定两个总体比率是否相等。对于此应用,原假设假定两个总体比率是相等的 (H0:p1 = p2);备择假设可以是左尾 (p1 < p2)、右尾 (p1 > p2),或双尾 (p1≠p2)。Fisher 精确检验作为两个比率的检验十分有用,因为它对于所有样本数量都是准确的,而当事件数小于 5 时,以及试验数减去事件数的结果小于 5 时,基于正态近似的 2 个比率的检验可能不准确。

Fisher 精确检验基于超几何分布。因此,p 值在表的边际合计中是有条件的。

四格列联表的独立性或齐性χ2检验法,当理论频数小于5或总观测频数小于30时,一般统计书都用Fisher的概率检验法

在研究生教学用书《医学统计学 》中有描述:当四格表中的总观测频数小于40,或者理论频数小于1时,或者用卡方专用公式得到的p值和阈值(0.05)接近时,用Fisher的概率检验法,可能是想提高关联的精确性吧

ps:这个就相当于求出事情发生的概率,如果发生概率大于0.05,就说明有可能发生,无影响。

四、讨论

4.1 四格表统计中该用Fisher确切概率法还是卡方检验

为便于说明情况,我将这位朋友做的课题简要介绍下:比较两种方法(方法A和方法B)治疗某种疾病的效果,设计的细节就不再赘述了。最终研究者发现29例患者接受了A法治疗,15例有效;27位患者接受了B法治疗,21位有效。如下表所示:

对于此类数据的处理,相信大多数同行都会异口同声地说应该用卡方检验。的确,这种典型的四格表,且没有任何配对设计的元素,理论上讲是可以用卡方检验观察两个变量之间是否有关联的。经卡方检验后,得出P等0.042(具体的过程略,感兴趣者可阅读后续章节中关于如何在GraphPad Prism中进行卡方检验的内容)。于是研究者认定:B法优于A法!

这个结论看起来是成立的,但事实真是如此吗?

如果我们换一种统计方法,用Fisher确切概率法,会得到什么结果呢?笔者算了一下,P=0.054。这下问题来了:卡方检验和Fisher确切概率法的结果,该取哪一个呢?

统计学教科书上通常会说:

  • 如果总样本量大于40,最小理论频数大于5,就应该用卡方检验;
  • 如果总样本量大于40,最小理论频数介于1和5之间,就应该使用卡方检验的校正公式;
  • 如果总样本量小于40,或(注意这个或字)最小理论频数小于1,就应该用Fisher确切概率法。

在本案例中,总样本量为56,最小理论频数为:27×20/56=9.64,明显是大于5的,因此应采用卡方检验。

这里穿插一段关于最小理论频数的计算方法,实际上就是最小的横排合计数据和最小的纵列合计数据的乘积再除以总样本量。在本案例中,横排合计数据只有两个(29和27),纵列合计数据也只有两个(36和20),总样本量是56,因此最小理论频数就是27×20/56=9.64。在多行多列表格中寻找最小理论频数的方法与此类似。

  实际上,在本案子里中,笔者认为应该采用Fisher确切概率法的结果,即两组治疗效果之间的差异无统计学意义。教科书上虽然说明了如果总样本量大于40,最小理论频数大于5,就应该用卡方检验,但部分教科书会遗漏一句很关键的话,即“如果采用卡方检验得到的P值在0.05附近时,应该用Fisher确切概率法”。本案例中,卡方检验得到的P值是0.042,属于0.05附近,因此应采用Fisher确切概率法进行统计。实际上,对于未进行配对的四格表的卡方检验,任何时候都应该以Fisher确切概率法结果为准。

也许有的读者会说:为什么发表的SCI论文,教科书上都说卡方检验呢?笔者分析主要是以下原因:

  1. 卡方检验最大的优势在于计算比较简便,不需要任何计算器,徒手都能算出卡方值,然后到卡方界值表中查找相应的结果即可。相比之下,Fisher确切概率法的计算要相对复杂些,尤其是样本量很大时。
  2. 如果差异很大,采用卡方检验和Fisher确切概率法得到的结果是相差甚小。比如卡方检验得到P=0.00025,而Fisher确切概率法可能会得到P=0.00026。即不管采用何种方法,不会改变研究结论。
  3. 在发明统计软件以前,人们无法用Fisher确切概率法分析数据,且已经习惯于用卡方检验,久而久之,认为卡方检验才是正确的检验的方法。熟不知,在统计软件发明后,Fisher确切概率法的计算已经是十分简单的事情了。

  既然历史和现实难免产生摩擦,应该如何权衡呢?在发表论文时,应该如何描述自己的统计学方法,如何进行统计学分析呢?笔者建议采用以下策略:

  1. 在论文的统计学中描述中,统一采用“the differences between rates were tested by χ2 or Fisher exact tests, if appropriate”的阐述。之所以采用这样的阐述,实属无奈之举,因为卡方检验对研究人员的影响太深刻了,如果作者不写卡方检验,可能会遭到审稿专家质疑,特别是自己还不是学术界大腕时。

  2. 在进行统计学处理时,应同时进行卡方检验和Fisher确切概率法进行统计。如果出现上述“相互矛盾”的情况,应以Fisher确切概率法结果为准。

五、代码实现;

fisher.test()

六、具体应用

富集分析需要用到的工具:

  • GOstat
  • 跟 david 和 onto——tool比较来说了
  • onto-tool
  • GOEAST
  • wego
  • go slim
  • GSEA貌似是最有名的软件,但是搞了半天,发现是基于芯片的分析软件,各种输入文件的要求
  • DAVID直接通过gene id或者symbol做GO富集分析

注:本来是想做go,kegg的富集分析的,后来发现,做富集分析需要两个条件:

  1. 针对差异表达的基因(比如说基因芯片或者转录组的数据)
  2. 需要该物种的基因组的所有基因组注释结果作为背景。

参考资料:

这里是一个广告位,,感兴趣的都可以发邮件聊聊:tiehan@sina.cn
个人公众号,比较懒,很少更新,可以在上面提问题,如果回复不及时,可发邮件给我: tiehan@sina.cn