matlab 多重比较,谈一谈两种常用的多重比较校正方法(附Matlab程序)
作者:kervin
微信号:kervin_zhao
在科学研究的统计分析中,我们往往会遇到多重比较校正问题。多重比较校正的方法很多,如Bonferroni、False Discovery Rate(FDR)、Random-field Theory (RFT)等等,各种校正方法各有优劣,具体应用时要根据自己的统计分析的数据特点进行选择。本文,笔者对Bonferroni和False Discovery Rate(FDR)两种校正方法进行论述,特别是对于应用比较广的FDR校正方法,笔者用具体的例子详细阐述了其原理,并给出其Matlab程序。
为什么要进行多重比较校正
当在同一个数据集上进行多次统计检验时,就需要进行多重比较校正。举个简单的例子,A、B两组被试,我们从每个被试身上得出10个指标。如果我们要研究A、B两组被试的某一个指标是否存在显着差异,那么此时我们只做一次统计分析就行;假设这个指标的p值小于0.05,我们会认为这个指标在A、B两组之间存在显着差异,此时,我们犯错的概率(或者称为假阳性率)是5%。假设我们把这10个指标都进行了统计分析,即使每个独立的指标的p值都小于0.05,此时我们犯错的概率不再是5%,而是1-(0.95)^10=0.4013,也就是说此时我们犯错的概率达到40%多,这在统计学上是不可接受的。因此,需要进行多重比较校正。
Bonferroni 校正方法
Bonferroni校正方法非常简单,若单次显着性水平为0.05,那么Bonferroni 校正后的p值应该为0.05/n,其中n为统计比较的次数。Bonferroni 校正方法应该属于最严格的一种校正方法,当统计比较的次数比较多时,Bonferroni 校正后的p值会非常小,此时不推荐使用这种校正方法。当统计比较的次数较小时,如小于几十个时,可以尝试使用。
FDR 校正方法
这里,笔者主要对FDR校正方法的原理进行论述。FDR校正方法是Benjamini和Hochberg于1995年提出了一种多重比较校正的方法。其实,FDR具体的算法也有多种,如Storey法(由Storey等人提出)、Benjamini-Hochberg法(简称BH法)等。其中BH法目前应用最广,这里主要介绍这种方法的基本原理。
基于BH法的FDR校正过程:
第一步:将我们单独统计得到的一系列的p=[p1,p2,…,pn]从大到小进行重新排序,计为P=[P1,P2,…,Pn];
第二步:按照以下公式计算每个P值所对应的校正前的FDR值,这里称之为Q值:Q = Pi* (n/r),Pi表示P中元素值,n是P值个数,r依次为n,n-1,…,1。
第三步:对Q进行校正,得到FDR值。对于计算出来的Q=[Q1,Q2,…,Qn],若某一个Qi值大于前一位Qi-1值,则把Qi的值赋值为Qi-1;反之则保留相应的Q值。最终得到Q值称之为校正后的FDR值。
第四步:按照重排序之前的顺序返回各个p值对应的校正后的FDR值。
例子:假设p=[0.01, 0.005, 0.03, 0.03, 0.02, 0.04, 0.05],计算相应的校正后的FDR值。
笔者按照上述步骤,自行编制相应的Matlab程序,计算过程和结果如下:
按照上述第一步步骤,计算得到P=[0.0500, 0.0400, 0.0300, 0.0300, 0.0200, 0.0100, 0.0050];
按照第二步中的方法,计算得到Q=[0.0500, 0.0467, 0.0420, 0.0525, 0.0467, 0.0350, 0.0350];
按照第三步:得到校正后的FDR值为:FDR=[ 0.0500, 0.0467, 0.0420, 0.0420, 0.0420, 0.0350, 0.0350];
最后,转换成原来的顺序:FDR=[0.0350, 0.0350, 0.0420, 0.0420, 0.0420, 0.0467, 0.0500].
对于本例来说,如果总体的显着性水平设置为0.05,那么从得到的最后的FDR值来说,这几个p值都具有显着性差异。
总结
本文,笔者对为什么要进行多重比较校正做了简单介绍,并重点论述了FDR多重比较校正方法。关于本文中FDR校正对应的Matlab程序,如有朋友需要,请先转发本文到您的朋友圈,然后截图发给我(微信号:kervin_zhao),我会把相应代码发给您(原创不易,请大家理解)。对于多重比较校正遇到的问题,也可以加笔者进行交流。如果各位朋友觉得本文对您有帮助,也烦请各位积极转发本文到您的朋友圈,并点击文末右下方的“在看”。
原创不易,请各位朋友积极转发,多多支持,您的每一次转发就会给我们的创作增加一份动力,谢谢!推荐阅读
如何计算EEG信号的香农熵Shannon entropy(附Matlab程序)
聊一聊置换检验Permutation test的原理
脑科学研究中常用的神经电信号记录电极介绍
大脑中的结构连接、功能连接和有效连接
基于图论的复杂脑网络分析中的常用指标
关注我们
matlab 多重比较,谈一谈两种常用的多重比较校正方法(附Matlab程序)相关推荐
- 两种常用AD转换数字滤波方法
核心思想是多次样本求平均值,在求平均值之前剔除掉干扰值.干扰值一般是最大或最小,当然还可以扩大范围,将次大次小值也进行剔除. 递推中位值滤波法还可以演变成即时的,获取AD值后立即处理,不进行缓存,进一 ...
- pytorch两种常用的学习率衰减方法
阶梯式衰减 torch.optim.lr_scheduler.StepLR(optimizer, step_size, gamma=0.1, last_epoch=-1) 每个训练step_size个 ...
- c++ 两种常用的分割字符串方法
C++字符串分割 1.substr函数 头文件:#include 原型:string substr(size_t pos = 0, size_t n = nops); 参数说明: pos 起始位置(默 ...
- c语言中软件去干扰,10种常用的软件滤波方法及示例程序
一.限幅滤波法 A.方法: 根据经验判断,确定两次采样允许的最大偏差值(设为A) 每次检测到新值时判断: 如果本次值与上次值之差<=A,则本次值有效 如果本次值与上次值之差>A,则本次值无 ...
- 网页html文档头部声明的两种常用模式
Html文档头部声明的两种常用模式 第一种,XHTML1.0严格模式,对很多废除的标签不支持,书写要严格遵守W3C的要求,是找虐的好方法: <!DOCTYPE html PUBLIC " ...
- Silve37.Silverlight和ASP.NET相互传参的两种常用方式(QueryString,Cookie)
在本节中将讲述Silverlight和ASP.NET页面的相互传参的两种常用方式:Cookie和QueryString.首先我们新建一个名 为SLConnectASP.NET的Silverlight应 ...
- Spring Cloud Config采用Git存储时两种常用的配置策略
由于Spring Cloud Config默认采用了Git存储,相信很多团队在使用Spring Cloud的配置中心时也会采用这样的策略.即便大家都使用了Git存储,可能还有各种不同的配置方式,本文就 ...
- Windows校验文件哈希hash的两种常用方式
大家经常都到哪儿去下载软件和应用程序呢?有没想过下载回来的软件.应用程序或资源是否安全呢?在 Windows 10 和 Office 2016 发布当初,很多没权限的朋友都使用第三方网站去下载安装映像 ...
- 数据中心两种常用流量模型运用mininet的实现
为什么80%的码农都做不了架构师?>>> 编者按:在网络性能评估中一个巨大的挑战就是如何生成真实的网络流量,还好可以通过程序来创造人工的网络流量,通过建立测试环境来模拟真实的状 ...
最新文章
- BZOJ 1801 [Ahoi2009]中国象棋(线性动规)(洛谷P2051)
- unity延迟执行下一行代码_Python代码在Linux环境下执行错误异常
- [转]HDR渲染器的实现(基于OpenGL)
- 14 调整数组顺序使奇数位于偶数前面
- web页面在线编辑功能
- Mr. Panda and Kakin(拓展欧几里得 + O(1)快速乘)
- 比欧拉公式更美的公式!
- 微软悬赏25万美元捉拿Conficker蠕虫作者
- printf以及各种变种
- Java正则匹配美元表达式_Java中的正则表达式“ $”(美元)元字符
- Riverbed实现云内外的端到端可视化
- Unity学习笔记:unity脚本常用API
- 堆排序(超详细图解 java版)
- Seaweedfs 详细说明
- linux之ab测试
- cacheable 表达式,多个方法参数的@Cacheable键
- 图形学基础之透视校正插值
- 层次化局域网模型 - 核心层、汇聚层、接入层
- 简单理解云桌面的模板,桌面池和虚拟机的概念
- request.getLocale()