Storey FDR矫正方法

  • 简介
  • 零假设(null hypothesis)的P-values为均匀分布
  • 真实多次测试的p-values将在0处出现峰值
  • 从一个p-value阈值获得FDR
  • p-values映射到q-values
  • R语言实现

简介

John Storey 创建了一种将系列p值转换为q值的方法,不同之处在于p值用于衡量单个测试为空假设模型的累积概率,而q值用于衡量False Discovery。通过接受给定的测试以及每个测试具有较小p值。

q值需要解决的主要问题是多重假设检验问题。问题在于,长时间执行假设检验的标准p值在同时执行多个检验时并不可靠。这是个常见的生物学问题,例如当我们要问基因表达在整个基因组中是否显著(比如在酵母中检测了6,000多次,而在人类中检测了20,000多次)。所以在单次检验中,你可能因为p小于0.05而拒绝零假设(意思就是零假设产生的观测值或者极值只有小于5%的可能性)。但是在多重检验中,有可能出现任何假设错误的几率将会随着测试次数增加而极具增加,所以将p值的阈值设置为0.05将会导致错误的测试超过5%。

假设我们真正需要的是FDR值,FDR定义为通过阈值但是为假的测试比例。初次逼近时,似乎通过乘以测试次数来矫正p值可以比较好的近似所需FDR,而且实际上这正是Bonferroni矫正所作的。但是不幸的是,这个做法太苛刻而导致丢失太多好的测试结果。此后更高级的FDR矫正被开发出来,而Storey矫正被认为是最好的方法以取得真实测试和减少错误测试之间的平衡。Storey给出了很多很好的理论,到那时我们只用图形的方法对他的原理进行补充阐述,这样可是使大家直观理解并完成q值的过程。有兴趣可以参阅Storey 原文(Storey,2002)。

零假设(null hypothesis)的P-values为均匀分布

想象一下进行多个测试时,我们确认每次测试零假设为true。所有p值的直方图如上图所示。对于真实的数据,我们将会期望出现小的波动,上图没有显示,但是趋势仍然时均匀分布的。如果可以的话,推荐查看一下p值的直方图:收集一个希望零假设为真的数据集,如果p值不是均匀分布,那么就要查看有没有正确计算p值,或者检查零假设是否有误。p值正确对分析过程至关重要。

真实多次测试的p-values将在0处出现峰值


这里的假设是,在零检验为false的多次测试中,最小的p值会被富集。重要的是,p值的分布在远离p=0处应该保持均匀,当然仍然会有一些小波动,因为大部分的测试仍然为符合零检验。否则与之前同样需要警惕,要么p值计算有误,要么零假设有问题。

Storey FDR过程的关键在于:估计在p=0附近有多少false预测。想象p值的分布其实是两个基础分布的混合,一个是 零假设 为true,则p值分布均匀;另一个是 零假设 为false,则在p=0附近存在峰值。

Storesy FDR过程需要 π0\pi0π0,定义为零检验为真在所有检验中的比例。在上图中,大约为零检验分布的高度,很容易估计该值。估计时越远离p=1,那么估计π0\pi0π0所需要的数据越多,估计的方差则低,但是可能会冒零假设为false的风险,也就是获得的值会大于真实的π0\pi0π0。

如果确实觉得无法可靠的估计π0\pi0π0,那么就直接将其设置为1.这样将会减少FDR的功效,因为实际FDR将会小于估计,所以将会丢失些真实预测。但是通常π0\pi0π0非常接近于1,如果大多数检验满足零假设的话。实际上,设置为1是将Storey的过程简化为BH方法。

从一个p-value阈值获得FDR

如上图所示,假设t为p值的阈值,也就是说每个p<t的检验将被通过。FDR包含两个部分。假设总面积被归一化为1,分母时p<t的面积;或者是p<t的检验个数与总检验个数的比值。分子是p<t false tests的面积。为了重申我们前面的所说的false test总面积为π0\pi0π0, 并考虑p<t面积的分数,因为是均匀的,所以就是t∗π0t*\pi0t∗π0。最后的估计false的公式显示在上图中。
Arandom(t)=tπ0Arandom(t)=t\pi0Arandom(t)=tπ0 为p<t时false的面积
KaTeX parse error: Expected 'EOF', got '#' at position 9: Aall(t)=#̲{p<t}/#{p} 为p<t时所有面积
KaTeX parse error: Expected 'EOF', got '#' at position 31: …t)/All(t)=t\pi0#̲{p}/#{p<t} 即为FDR

p-values映射到q-values

所以如果先选好了t再获得FDR就非常方便了。但是我们通常都是先想要FDR,然后再找到我们想要的t。甚至,我们是不是可以不设定FDR的情况下分析数据呢?Storey提供的定理表明我们可以很方便的完成上述任务。

首先,我们生成从 t 到 FDR(t) 的映射。本质上就是我们从t = 0步进到 t = 1,并且随之存储FDR值。如果仔细编写代码,可以非常有效地完成此操作。我们可以将 FDR§ 视为p的q值,但我们可以做得更好。通常 FDR§ 随p的增加而增加(如上图所示),但是实际数据波动很大时,情况并非总是如此。在这种情况下,t 阈值的 FDR(t) 可能小于我们查找的p!将FDR(t)用作p的q值是有意义的,因为我们将同时获得更多的预测和更低的FDR!

所以,q§= p<t 时 t 的最小值;FDR(t) 时 p值的最终定义。 这样,q值时随p单调变化的。为了计算,一旦 FDR(t) 映射被计算,然后就反向沿着 t 从1到0的方向, 以查找最小值。现在,如果你需要一个0.05的FDR,那么你就可以接受所有 q<0.05;而如果你需要一个0.1的FDR,那么就使用 q<0.1, 如此即可!

R语言实现

BiocManager::install("qvalue")
library(qvalue)
qvalue(p, fdr.level = NULL, pfdr = FALSE, lfdr.out = TRUE, pi0 = NULL, ...)
Arguments
p A vector of p-values (only necessary input).
fdr.level A level at which to control the FDR. Must be in (0,1]. Optional; if this is selected, a vector of TRUE and FALSE is returned that specifies whether each q-value is less than fdr.level or not.
pfdr An indicator of whether it is desired to make the estimate more robust for small p-values and a direct finite sample estimate of pFDR – optional.
lfdr.out If TRUE then local false discovery rates are returned. Default is TRUE.
pi0 –It is recommended to not input an estimate of pi0. Experienced users can use their own methodology to estimate the proportion of true nulls or set it equal to 1 for the BH procedure.
Additional arguments passed to pi0est and lfdr.

*** http://viiia.org/fdrFigs/?l=en-us

Storey FDR矫正方法相关推荐

  1. p-value矫正方法

    几个同义词概念 p-value:常用的统计学显著性检验指标,衡量一次检验假阳性率的指标(False positive rate) : Q value:调整后p-value,衡量错误发现率的指标(Fal ...

  2. 鱼眼摄像头的畸变矫正方法-python+opencv

    鱼眼摄像头畸变校正的方法: 1. 棋盘矫正法 2. 经纬度矫正法. 相机为什么会出现畸变? 当前相机的畸变主要分为径向畸变和切向畸变两种. 径向畸变产生的原因:相机的光学镜头厚度不均匀,离镜头越远场景 ...

  3. matlab几何畸变矫正,【2017年整理】基于神经网络的数字图像几何畸变矫正方法.pdf...

    [2017年整理]基于神经网络的数字图像几何畸变矫正方法 第28卷 第 17期 计算机工程与设计 2007年9月 Vo1.28 No.17 ComputerEngineeringandDesign S ...

  4. 一种适用于小型无人机的加速度计与陀螺仪的矫正方法

    本人研究飞控也有些年月了,一直想写点什么东西,但是一直没有时间,今天,就试着写写自己在飞控的研发过程中所弄明白的一些问题,如果后续效果好,我会一一把飞控研发中的重点和难点写出来.这样有两个好处,一是方 ...

  5. 什么是FDR校正,核磁共振成像中FDR校正方法有哪些?如何进行FDR校正?

    FDR校正 背景 多重比较校正 FDR校正 基本思想 FDR 校正 FDR 调整 例子 脑科学中的FDR校正的例子 如何在 R 中进行 FDR 校正? 如何在 Matlab 中进行 FDR 校正? 背 ...

  6. python 相关性fdr矫正_你的p值,进行FDR校正了吗?

    原标题:你的p值,进行FDR校正了吗? 在生信分析中,隔三差五地就需要和p值探讨是否显著差异,还要搬出FDR对p值进行校正.让每个基因根据p值大小从小到大排个队,拿个号牌,然后把自己的p值乘上总基因数 ...

  7. Android电池矫正方法

    电池校正方法有哪些? 手机电池校正方法介绍. 现在很多智能手机电池都不够用,因此电池耐用的手机成了大家追求的目标.但是,对于已经买了手机的朋友,电池校正的方法有哪些呢? 下面就来看看详细的介绍吧. 电 ...

  8. python 相关性fdr矫正_T-test 、 pvalue FDR矫正 R语言实现 付代码实例

    T-test简介: 对分组变量的差异显著性检验,T-test是最为常用的检验方法,t-test要求数据符合正态分布.不符合用(Mann-Whitney U) 正态性检验  shapiro.test(x ...

  9. Navagent 相互碰撞被弹飞的矫正方法

    if(!_navMeshAgent.isOnNavMesh){Vector3 pos = _navMeshAgent.transform.position;pos.y = -0.3f;_navMesh ...

最新文章

  1. python读取文件模式_python如何读取文件的数据
  2. boost::log::sinks::syslog用法的测试程序
  3. CSS样式为什么放在head中,而不放在body底部
  4. Centos 编译安装nodejsexpress框架
  5. 成本预算的四个步骤_工业企业成本管理之成本控制体系的构建
  6. 演示:扩展ACL的配置与应用技巧
  7. MATLAB 2015B中文安装激活破解方法图文教程
  8. oracle中的ROLLUP函数
  9. 计算机显卡故障与排除,电脑显卡常见故障排除方法
  10. 命令行测速工具 linux,Linux命令行下常用的网络测速工具
  11. Python基础_第2章_Python运算符与if结构
  12. 黑产系列01-如何发现黑产情报
  13. VMware vSphere 服务器虚拟化部署安装图解
  14. python if main_python if __name__ == 'main' 的作用和原理()
  15. 沙奎尔·奥尼尔——盘点那些“巨人”的事①
  16. 如何使用计算机的加减乘除,计算机是怎么懂加减乘除的
  17. sessionStorage存储数据和取数据
  18. 二叉树的二叉链表表示与基本操作
  19. [随笔] 以不变的学习,应对外界的万变
  20. pcb二次钻孔_妈妈再也不用担心我打孔打偏了,制作PCB钻模板!

热门文章

  1. JAVA基础之JDK、JRE、JVM关系
  2. 认真分析mmap:what? why? how?
  3. Mac IDA单步调试本地程序
  4. PyQt5系列(二)Mac下使用py2app打包python项目
  5. 蓝牙avrcp协议源码分析
  6. android恢复出厂设置的流程
  7. ios ffmpeg audio decode
  8. educoder MongoDB 文档的高级查询操作
  9. 磁盘结构非常详细的介绍
  10. RAID5阵列掉盘显示未初始化---解决过程