p-value,q-value,FDR

  • 假阴性错误(false-negative errors): 高水平的基因可能偶尔没有检测到

  • 假阳性错误(false-positive errors): 低水平表达的基因由于扩增偏差,可能显得过于丰富,导致假阳性错误

  • 错误发现率(False Discovery Rate,FDR):事先犯I-型错误的最大概率,控制FDR值来决定p值的值域,FDR用比较温和的方法对p值进行了校正。其试图在假阳性和假阴性间达到平衡,将假/真阳性比例控制到一定范围之内https://www.omicsclass.com/article/28

  • P and q values in RNA Seq

    The q-value is an adjusted p-value, taking in to account the false discovery rate (FDR). Applying a FDR becomes necessary when we’re measuring thousands of variables (e.g. gene expression levels) from a small sample set (e.g. a couple of individuals). A p-value of 0.05 implies that we are willing to accept that 5% of all tests will be false positives. An FDR-adjusted p-value (aka a q-value) of 0.05 implies that we are willing to accept that 5% of the tests found to be statistically significant (e.g. by p-value) will be false positives. Such an adjustment is necessary when we’re making multiple tests on the same sample


一、P值和q值的定义

P值(P-value)
       即概率,反应某一事件发生的可能性大小。统计学根据显著性检验方法得到的P值,通常以P<0.05为显著,P<0.01为极显著,其含义为:抽样误差导致的样本间的差异的概率小于0.05或0.01。
     根据定义,P值可简单理解为判断结果的“出错率(即假阳性比率,假阳性:不是样本本身有差异,是其他原因(比如抽样)导致的检测结果有差异)”。

q值
       q值(q-value)是p值校正后的结果。可定义为:多重假设检验过程中,错误拒绝(拒绝真的原假设(零假设))的个数占所有拒绝的原假设个数的比例的期望值(也是代表出错率)。   

总结:   p-value和q-value是统计学检验变量,衡量“假阳性概率”,应用到基因检测结果中,可衡量“某个基因差异表达的假阳性概率”,代表差异显著性,小于0.05代表结果有差异。
        如果p-value或q-value/越低,那么“该基因差异结果”是假阳性的概率就越低,可靠性就越高。
        q-value相比于p-value更加严格,当差异基因结果较少时,可退而求其次根据p-value筛选。
        当然,用q值筛选可能会过滤掉少部分真的有差异的基因,所以,q值是个双刃剑。但,相比绝大部分基因的假阳性,以及真阳性被滤掉的小概率,这部分的真阳性的丢失也不是很重要了。
        https://zhuanlan.zhihu.com/p/59731307

二、 为什么差异结果可能存在假阳性?

 举个例子,如下:
        一个胖子一个瘦子,哪个更重?如果让普通人做判断:“这不废话吗,当然是胖子重了。”但,如果让一个严谨的统计学专家做判断,他会说,“这必须要有证据来做判断”。于是,统计学家拿来一个电子秤,把胖瘦两人各称了一遍。结果是:50kg vs 90kg。
        但,专家还是不放心:“虽然从检测结果来看两者有差异,但这个可能是真实差异,也可能是我看走眼、电子秤不稳定… …”。总之,必须要把误差因素考虑上才可以。
        于是,接下来就是多次测量求平均值、t检验,非把犯错的概率P value 算出来才放心。“90.3 > 50.0,P<1.0E-10,”这个结果的含义是:胖子重,而且我看走眼的概率是十亿份之一(假阳性的概率是1.0E-10)”。
        在任何一个严谨的科学测量中,判断两个数值是否有差异,必须要考虑这个差异可能来源两个方面:可能是真实的差异,也可能来自检测误差。
        一般的显著检验的目的,就是计算出观测到的差异来源于随机误差的概率,这样才能评判“结论是否可靠”。例如,通常说的P value(E value是blast中一种特殊的p value)小于1%,代表“做出的判断(胖子比瘦子重)是错误的概率是1%(即假阳性率,False positiverate)”。虽然可能犯错,但犯错是小概率事件,我们就忍了吧,于是接受了这个判断。(类似,上街都可能遭遇车祸,因为是小概率事件,所以,我们也就忍了……)。

三、为什么要进行校正?

        但是,在很多科学实验中,我们要做多次判断。例如,我们要判断两组样本的10000个基因的表达量是否存在组间差异:基因A是否有差异?基因B是否有差异?基因C是否有差异?….. ,如此下去,我们要进行10000次判断。如果以p value=1% (假阳性的概率是1%)作为阈值,并假设每次判断都是彼此独立的,那么即使这10000个基因实际上都没差异,也可能得出有100个差异基因的结论(100=10000*1%,阳性结果的错误率(FDR值)为100%,下文会讲到)。
        也就是说,一个小效率事件在多次反复尝试后,变成了一个多次出现的事件。也就是俗话说的,“常在河边走,哪有不湿鞋”。举个极端的例子,虽然扎针患艾滋病的概率很低,但是,普通人去医院检查偶尔扎针,和经常注射吸毒人相比,哪个感染艾滋病的概率更高?
        假如10000个基因中有100个基因是真正有差异的,在 p value=1%的阈值下,可能会得出199个基因有差异的结论(为什么是199个?真正有差异的100个基因 + 错误判断得出的99个假阳性基因。阳性结果的错误率,即FDR值约为50%(=99/199)。
        此结果表明,在进行多次检验后(即多重检验,multiple test),基于单次比较的检验标准变得过于宽松,使得阳性结果中的错误率(FDR值)已经大到令人不可忍受的地步。
        那怎么办?提高判断的标准(qvalue),单次判断的犯错概率就会下降,那么总体犯错的概率也将下降(类似,在多次相亲中,你可通过提高标准来减少看走眼的概率)。在多重检验中提高判断标准的方法,就是统计学里经常提到的“多重检验校正”。

四、 矫正方法

  1. 最简单严厉的方法要属Bonferroni校正。

      举例:判断10000个基因是否有差异时,单次比较判断的出错率p value=1 %,判断10000次,犯错的次数就是100次,将p value进行校正,提高其阈值,怎样提高?1% / 100000 = 10-6(10的负6次方)。即,用原来的P值除以比较的次数,1万个基因要比较1万次,就用1% 除以10000,整体假阳性次数被控制在0.01次(1×10-6✖️10000次),最终使得预期犯错误的次数不到1次,抹杀了一切假阳性的概率。
      Perfect,滴水不漏,管控够严了。但有一个问题,标准定太高了,导致最后找不到显著表达的蛋白,如果一些基因真的存在表达差异,也很有可能达不到我们的阈值标准,被误判为没有差异,这就是假阴性率提高了(类似如果相亲标准定太高了,也可能会导致我们错失本来合适的另一半)。
      其他参考资料:https://wenku.baidu.com/view/c0008226a58da0116d17492e.html
    
  2. 于是,各路统计学的大侠设计了各种折中的方案。

     目前在RNA-seq结果分析中,应用最广泛的是Benjamini andHochberg在1995年第一次提出的FDR(FalseDiscoveryRate)的概念以及相应的多重检验校正方法(这个非参数的方法简单、粗暴、实用,谷歌学术显示此文章被引用了21670次,神一般的文章)。
     其出发点就是基于Bonferroni的保守性,给出了控制FDR的方法(这是FDR控制方法的祖师爷了),努力在假阳性和假阴性间达到平衡。FDR本质是一种控制阳性结果中的假阳性率的思路,其将假/真阳性比例控制到一定范围之内。
     举例:判断10000个基因是否有差异,设定的阈值为FDR值<5%,意味着:无论得到多少个差异蛋白,这些差异蛋白中出现假阳性的概率保持在5%之内,这就叫FDR<5%。
     
    那么,怎么从p value 来估算FDR?
     举例:Benjamini andHochberg对p值进行多重检验校正的过程实际上非常简单,总结起来就2句话,如下:
     1.  当同一个数据集有n次(n>=2)假设检验时,要做多重假设检验(multipletesting)校正,改进其对假阳性估计的保守性。
     2. BH校正是对每个p-value做校正,转换为q-value。q=p*n/rank,其中rank是指p-value从小到大排序后的次序。(Bonferroni校正,是简单地将p-value的cutoff除以n,然后整体都采用这个标准,没有针对每一次比较的p值进行区分对待。)
    

举个具体的实例:

     检测了M个基因在A,B,C,D,E一共5个时间点的表达量,求其中的差异基因,具体做法:
     (1)首先做ANOVA,确定这M个基因中有哪些基因至少出现过差异
     (2)5个时间点之间两两比较,一共比较5*4/2=10次,则多重假设检验的比较次数n=10
     (3)每个基因做完10次假设检验后都有10个p-value,对这10个p值进行校正,得到q-value
     (4)根据q-value判断在哪两组之间存在差异
  • 17
    点赞
  • 59
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在R语言中,可以使用一些常用的包来绘制火山图并对基因进行标签。下面是一个简单的示例代码: ```R # 安装和加载所需的包 install.packages("ggplot2") install.packages("ggrepel") library(ggplot2) library(ggrepel) # 创建示例数据 set.seed(123) genes <- paste0("Gene", 1:100) logFC <- rnorm(100, 2, 1) pvalue <- runif(100, 0, 0.01) data <- data.frame(Gene = genes, logFC = logFC, pvalue = pvalue) # 绘制火山图 ggplot(data, aes(x = logFC, y = -log10(pvalue))) + geom_point(size = 2, color = "grey", alpha = 0.5) + geom_point(data = subset(data, pvalue < 0.01 & abs(logFC) > 1), aes(color = "red"), size = 2) + geom_text_repel(data = subset(data, pvalue < 0.01 & abs(logFC) > 1), aes(label = Gene), size = 3, nudge_x = 0.2) + scale_color_manual(values = c("red" = "red")) + theme_minimal() + labs(x = "logFC", y = "-log10(p-value)", title = "Volcano Plot") ``` 这段代码使用了`ggplot2`包和`ggrepel`包来绘制火山图。首先,我们创建了一个示例数据集,其中包含基因名称、logFC和p-value。然后,使用`ggplot()`函数创建一个基础图层,并使用`geom_point()`函数添加散点图。接下来,使用`geom_point()`函数和`geom_text_repel()`函数分别在火山图上标记显著的基因。最后,使用`scale_color_manual()`函数设置基因标签的颜色,使用`theme_minimal()`函数设置图表主题,以及使用`labs()`函数设置轴标签和标题。 你可以根据自己的需求修改代码中的数据和绘图参数,以得到符合你要求的火山图。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值