在R中,p.adjust可计算FDR值。参考网址:https://stat.ethz.ch/R-manual/R-devel/library/stats/html/p.adjust.html
多重检验都得算q-value,即FDR值。原因如下:
参考我的博文:https://www.cnblogs.com/zypiner/p/11777829.html
P-value:
由以上可得知P-value的含义。拒绝零假设的概率、上图的末梢的面积、”GO过程在排序基因集L中富集“这一结论错误的概率。
通常,我们取P值的阀值为0.05。即:P值小于0.05的GO过程都认为在排序基因集中是富集的。
那么,既然错误率是0.05,也就是说:检测100次,有5次是出错的。如果检测1万次,有500次是出错的。也就是说,当检测次数很多时,出错的情况就会多。结合GSEA:GSEA给出的GO过程(P值小于0.01)中,100个GO过程中有5个是出错的。即:100个GO过程中,有5个GO过程在两种phenotype中是不富集的。10000个GO过程中,有500个是不富集的。当GSEA给出富集的GO过程很多时,假阳性的GO过程就很多。
这就是multiple testing problem多重检验的问题。FDR是控制false positie的方法。
参考资料:https://www.statisticshowto.datasciencecentral.com/false-discovery-rate/
“
The FDR approach adjusts the p-value for a series of tests. A p-value gives you the probability of a false positive on a single test; If you’re running a large number of tests from small samples (which are common in fields like genomics and protoemics), you should use q-values instead.
- A p-value of 5% means that 5% of all tests will result in false positives.
- A q-value of 5% means that 5% of significant results will be false positives.
The procedure to control the FDR, using q-values, is called the Benjamini-Hochberg procedure, named after Benjamini and Hochberg (1995), who first described it.
”
FDR调整p-value。p-value给出的是单次检验的false positive率(the probability of a false positive)。如果你对小样本量的数据进行大量的检验,你得用q-value。
比如:call snv时,每个snv有一个p-value值(这一个snv表示a single test),表示这个snv的假阳性率。如果你对一个样本,call了10000个snv(这表示all tests,multiple tests),那么根据p-value=0.05的阀值(10000次检验中,有500此出错),那么这10000个snv中可能有500个是假阳性(即不是snv,却被call出来了)的。此时,需要用q-value。
比如:GSEA将基因集注释到GO过程中时,对每个GO过程有一个p-value来衡量注释到此GO过程出错的概率(假阳性率);GSEA注释到200个GO过程中,那么这200个GO过程可能有10个是错误的。此时,需要用q-value。
问题:
既然如此,为何不直接把p-value的阀值定的很低,这样出错的概率(false positive率)就低了呀?即:提高筛选阳性率的阀值,将该阀值定的很严格,那么我得到的结果的准确率就高。
原因:false positive率低了,false negative率就高了。本来不是阴性的数据,被认为阴性了。即:本来是阳性结果,没检测出来,被认为是阴性了。所以,不能用把p-value阀值定的很低的方法。
什么情况下适合false positive率(假阳性率)高,false negative率低的情况呢?比如:开发治疗艾滋病的疫苗,高的假阳性的数目可能,一些假阳性的疫苗也可能是有效的、未来也可能变成疫苗。可是,如果你过于减少假阳性数目,你会错过很多可能有效的疫苗。