Fisher精确检验的通俗理解

本文通过对Fisher精确检验的研究,详细介绍了其原理及应用。包括超几何分布的概念、2*2列联表的使用方法,并给出了几个实际案例,帮助读者更好地理解和应用这一统计学工具。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

从事心理咨询的同学转发了一片有关喝茶的文章(详见:http://www.zjfj66.com/article/qinggan/14379314.html).

文中作者为了检验自己能否品出不同年份的普洱茶,做了严格的测试,原文如下:

**************************

我把不同年代的生普掰下一块,一字摆开,泡了测试它们的味道到底有什么不同。我经历了反复多次试验,双盲的对照的,其设计和执行的严格程度完全参考美国FDA的条款,最后的实验结果很沮丧地表明,十年以内的茶的味道的差别,我无法可靠地进行分辨。 

**************************

然后又引述了统计学界的一个公案:Fisher测试某位女士是否能分辨出先放茶再加奶和先放奶再冲茶的味道是否不同。这个测试就是后来著名的Fisher精确检验。

作为一个数据分析伪从业人员,我对Fisher精确检验很感兴趣, 但一开始就被2*2的实验结果列联表搞蒙了,看不明白这个表格含义所在,为何要弄出这么一个表格来。于是就搜索了Fisher精确检验的详细资料,翻阅资料后把自己的理解用非专业的词汇总结一下。

Fisher精确检验原理描述:

假设检验用来检验一次随机实验的结果是否支持对于某个随机实验的假设。具体如下:随机事件发生的概率小于0.05则认定该事件为小概率事件。一般原则认为在某个假设前提下,一次随机实验的结果不会出现小概率事件。若一次随机实验的结果出现了小概率事件则认定该假设不被支持。

 

1. 理论依据是:超几何分布(无放回产品抽样实验):非卡方检验的范畴。超几何分布的一个形象例子是:有N件物品,M件为次品,求取n件,其中有k件为次品的概率。=(M,k)*(N-M,n-k)/(N,n)

2. 基本思想是:在2*2列联表中,四格表周边和(即边际分布)计数固定不变的条件下,计算表内4个实际频数变动时的各种组合之概率Pi;而这个具体的实例可以分解出8个类似产品抽样实验的具体实例结果。根据给出的数据可以计算出每个抽样结果基于假设的超几何分布概率。根据其中之一抽样结果的概率,通过假设检验的原则即可推定假设是否成立。

注:以上两条来源:http://blog.sina.com.cn/s/blog_6b1c9ed50101kh2f.html

超几何分布是统计学上一种离散概率分布。它描述了由有限个物件中抽出n个物件,成功抽出指定种类的物件的次数(不归还)。称为超几何分布,是因为其形式与“超几何函数”的级数展式的系数有关。

例如 判断节食与性别是否相关:

                   男        女

   节食          a         b

不节食         c         d

 

四格表周边和(即边际分布)计数固定不变的条件下(男性总数固定(a+c),女性总数不变(b+d),节食总人数不变(a+c),不节食总人数不变(c+d)),可以分解出下列超几何分布抽样:

1. 一共 (a+b+c+d)人,其中男性(a+c)人, 节食有(a+b)人,则其中节食男性为a人的概率;

2. 一共 (a+b+c+d)人,其中男性(a+c)人, 不节食有(c+d)人,则其中不节食男性为c人的概率;

3. 一共 (a+b+c+d)人,其中女性(b+d)人, 节食有(a+b)人,则其中节食女性为b人的概率;

4. 一共 (a+b+c+d)人,其中女性(b+d)人, 不节食有(c+d)人,则其中不节食女性为d人的概率;

5. 一共 (a+b+c+d)人,其中节食(a+b)人, 男性(a+c)人,则其中节食男性为a人的概率;

6. 一共 (a+b+c+d)人,其中节食(a+b)人, 女性(b+d)人,则其中节食女性为b人的概率;

7. 一共 (a+b+c+d) 人,其中不节食(c+d)人, 男性(a+c)人,则其中不节食男性为c人的概率;

8. 一共 (a+b+c+d)人,其中不节食(c+d)人, 女性(b+d)人,则其中不节食女性为d人的概率;

 

Fisher精确检验是统计显著性检验方法,用于检查两个二进制变量的相关性。所谓二进制变量就是变量的值域只有两个值,例如:性别为男或女;在特定场景下规定变量只有两个可用值,如:规定出行方式为火车或飞机,收入为高或低等。

Fisher精确检验的例子:

1.   两个候选人的得票是否和投票人性别相关。

2.   性别和是否节食是否相关。

3.   收入高低是否和出行方式(火车/飞机)相关。

Fisher精确检验适用于样本量n<40或者理论频数T<1的情况。

其中n为2*2列联表的实际发生的总频数(a+b+c+d),理论频数T是指如果原假设成立则每个格子中理论上应该出现的频数。

对于上述2*2列联表而言:a,b,c,d是实际测试的各个格子实际发生的频数,n为2*2列联表的实际发生的总频数(a+b+c+d)

理论频数是指总体的频数,可以根据检验假设的样本数据推断出近似值。 具体方法是,假设原假设成立,两组样本数据差别仅是由抽样误差所致,则两组样本数据的并集的男性所占比率可以作为总体数据中男性所占比率,即理论频率,如下例:

                                男        女

   节食&不节食          a+c     b+d       ----- 男性所占比率:P=(a+c)/n

    则 总体理论上男的所占频率(比率)可以用 P 来近似表示。因为原假设成立节食与否与男女性别无关,因此在节食的人中男性比率也应该是P。以此为依据便可推算出四格表中相应的四格的理论数。对于a格的理论频数 (a+b)*P = (a+b)*(a+c)/n,即所在行的频数之和*所在列的频数之和/总频数。

 

 

<think>嗯,用户现在问的是关于enrichKEGG的参数。首先,我需要确定用户对enrichKEGG的了解程度。可能他们正在用clusterProfiler做富集分析,遇到了参数设置的问题,或者想优化分析结果。 首先,回忆一下enrichKEGG函数的功能。它是用来做KEGG通路富集分析的,属于超几何检验的一种应用。用户可能需要调整参数来控制分析的严格性或者适应不同的数据情况。 用户之前的问题是关于pvalue和padj的区别,现在转向参数,可能是在实际使用中遇到了结果不显著或者太多/太少通路的问题。所以需要详细解释各个参数的作用,尤其是影响结果的key参数,比如gene、universe、pvalueCutoff、pAdjustMethod等。 需要分清楚哪些参数是必须的,哪些是可选的。比如gene参数是必须的,而universe可选,但设置正确的universe很重要,因为它影响背景基因集。如果用户没有设置universe,函数默认使用所有基因,这可能导致偏差。 接下来是pvalueCutoff和qvalueCutoff,这两个参数直接影响结果筛选。用户可能不清楚如何设置合适的阈值,需要解释默认值以及调整的建议,比如在探索性分析时放宽qvalueCutoff。 pAdjustMethod也是一个关键点,用户之前的问题涉及到多重检验校正,这里需要说明不同校正方法的区别,比如BH、Bonferroni,以及它们对结果的影响。 organism参数可能容易出错,比如用户可能使用了错误的物种缩写,导致无法获取通路数据。需要提醒常见的物种代码,比如hsa代表人类,mmu代表小鼠。 keyType关系到基因ID的类型,用户的数据可能使用不同的ID,比如Entrez ID或Symbol,需要确认输入的基因ID类型是否正确,否则会导致匹配失败,没有结果。 minGSSize和maxGSSize控制通路的大小范围,用户可能需要过滤太小或太大的通路,提高结果的可靠性。需要解释默认值及调整的影响。 use_internal_data参数涉及到是否使用在线或本地数据,如果用户没有网络连接或版本问题,可能需要使用本地数据,但需注意数据版本的一致性。 在示例代码部分,给出一个具体的例子,帮助用户理解如何实际应用这些参数。同时,常见问题部分需要涵盖用户可能遇到的典型错误,比如无结果、报错等,提供解决方法。 还要考虑用户可能的深层需求,比如如何优化分析结果,如何处理结果过多或过少的情况,这时候调整参数的建议就很重要,比如调整pvalueCutoff或更换校正方法。 最后,确保语言通俗易懂,结构清晰,分点列出参数,方便用户查阅。同时强调关键参数和常见错误,帮助用户避免踩坑。</think>--- ### 一、核心功能 `enrichKEGG` 是 **clusterProfiler** 包中用于 **KEGG通路富集分析** 的核心函数,基于超几何分布/Fisher精确检验识别显著富集的生物学通路。以下详解其关键参数设置与优化策略。 --- ### 二、关键参数分类解析 #### 1. **输入数据参数** | 参数名 | 类型 | 默认值 | 作用说明 | |------------|------------|--------|--------------------------------------------------------------------------| | `gene` | 必须参数 | 无 | **目标基因列表**,需为Entrez ID(如"1017"),或通过`bitr`转换后的字符向量 | | `universe` | 可选参数 | NULL | **背景基因集合**(建议显式指定),默认使用KEGG数据库全部基因 | | `organism` | 可选参数 | "hsa" | **物种标识**(如"hsa"=人类,"mmu"=小鼠,"rno"=大鼠) | #### 2. **统计检验参数** | 参数名 | 类型 | 默认值 | 计算公式与作用 | |-------------------|----------|--------|---------------------------------------------------------------| | `pvalueCutoff` | 数值 | 0.05 | 筛选通路的原始p值阈值(未校正) | | `qvalueCutoff` | 数值 | 0.2 | 校正后q值阈值(BH方法),clusterProfiler默认比常规更宽松 | | `pAdjustMethod` | 字符 | "BH" | 多重检验校正方法(可选:"BH", "bonferroni", "holm", "none"等) | | `minGSSize` | 整数 | 10 | 通路最小基因数(过滤过小通路) | | `maxGSSize` | 整数 | 500 | 通路最大基因数(过滤过大通路) | #### 3. **高级控制参数** | 参数名 | 类型 | 默认值 | 特殊作用 | |----------------------|---------|--------|--------------------------------------------------------------------------| | `keyType` | 字符 | "kegg" | 输入基因ID类型(若用Symbol需先转换,或设为"ncbi-geneid") | | `use_internal_data` | 逻辑值 | FALSE | 是否使用本地KEGG数据(TRUE时避免网络请求,需提前`download_KEGG()`更新) | --- ### 三、参数优化示例 #### 1. **基础分析(人类基因)** ```r # 转换基因ID为Entrez(若原始数据为Symbol) gene_entrez <- bitr(gene_symbol, fromType="SYMBOL", toType="ENTREZID", OrgDb="org.Hs.eg.db")$ENTREZID # 执行富集分析 kegg_res <- enrichKEGG( gene = gene_entrez, organism = "hsa", pvalueCutoff = 0.05, qvalueCutoff = 0.2, minGSSize = 15, # 过滤基因数<15的通路 keyType = "ncbi-geneid" # 明确指定输入为Entrez ID ) ``` #### 2. **自定义背景基因集** ```r # 指定背景为表达矩阵中所有检测到的基因 universe_genes <- rownames(expr_matrix) |> bitr(fromType="SYMBOL", toType="ENTREZID", OrgDb="org.Hs.eg.db")$ENTREZID kegg_res <- enrichKEGG( gene = gene_entrez, universe = universe_genes, # 关键修改! organism = "hsa" ) ``` #### 3. **调整统计阈值** ```r # 探索性分析:放宽q值阈值,使用更严格p值 kegg_res <- enrichKEGG( gene = gene_entrez, pvalueCutoff = 0.01, # 原始p值<1% qvalueCutoff = 0.3, # 允许30%假阳性 pAdjustMethod = "fdr" # 与qvalueCutoff配合 ) ``` --- ### 四、常见问题与解决方案 #### 1. **无显著结果** - **检查点**: - 确认`organism`是否正确(如小鼠用"mmu"而非"mouse") - 验证基因ID类型是否匹配(通过`head(gene)`查看是否为数字型Entrez ID) - 尝试增大`qvalueCutoff`或降低`pvalueCutoff` #### 2. **网络请求失败** ```r # 启用本地数据模式 download_KEGG("hsa", keggDataDir="/path/to/save") # 下载最新数据 kegg_res <- enrichKEGG(..., use_internal_data=TRUE) ``` #### 3. **通路数量过少** - **参数调整策略**: - 减小`minGSSize`(如设为5) - 增大`maxGSSize`(如设为800) - 更换校正方法为`pAdjustMethod = "none"`(需谨慎!) --- ### 五、输出结果解读 典型结果包含以下关键列: - **ID**: KEGG通路编号(如hsa04110) - **Description**: 通路名称 - **GeneRatio**: 目标基因在通路中的比例(如5/200) - **BgRatio**: 背景基因在通路中的比例 - **pvalue/p.adjust/qvalue**: 不同严格度的统计值 - **geneID**: 富集基因列表(Entrez ID,以"/"分隔) --- ### 六、文献支持 1. **clusterProfiler作者指南** (Yu et al., 2012):推荐优先设置`universe`参数以避免背景偏差 2. **KEGG数据库更新策略** (Kanehisa et al., 2023):`organism`参数需与KEGG官方物种代码严格对应 --- **总结**:`enrichKEGG`的参数设置需平衡灵敏度与特异性,核心在于`universe`的合理定义、校正方法的选择及基因ID类型的正确匹配。建议通过`dotplot()`/`cnetplot()`可视化辅助结果解读。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值