LonghaoWang

V1

2023/04/12阅读:44主题:全栈蓝

审稿人:请给出多重检验校正后的p值

审稿人:请给出多重检验后校正的p值

引言

小编的论文返修时,审稿人要求给出多重比较的标准,用p值实现。

那么什么是多重检验后P值校正呢?

当同一个数据集有n次(n>=2)假设检验时,要做多重假设检验校正。

多重检验后P值校正是一种统计学方法,用于调整进行多次统计检验时得到的P值,以降低发生错误(即错误地拒绝原假设)的风险。

你对数据越苛求,数据会越多地向你供认,但在威逼下得到的供词,在科学询查的法庭上是不容许的。 ——Stephen M.Stigler

在进行多个统计检验时,如果使用标准的显著性水平(例如,P < 0.05)来判断每个检验的结果是否显著,那么进行大量检验的情况下可能会出现误差。因为每个检验都有一定的概率出现错误,这种概率随着进行检验次数的增加而增加。因此,如果进行多个检验而不进行任何校正,可能会导致错误的概率显著增加。

多重检验后P值校正方法的目的是控制错误率,通常是通过降低显著性水平来实现的。常用的多重检验后P值校正方法包括Bonferroni校正、Holm校正、Benjamini-Hochberg校正等。这些方法的基本思想是在保持整体错误率的前提下,对每个检验的显著性水平进行调整,以确保正确地控制整体错误率。

定义

One-Way ANOVA:两两比较检验后,务必进行Post-Hoc检验,也称事后分析,或称为两两比较分析。但具体算法有很多种,各自有哪些差别呢?

Bonferroni法

Bonferroni提出,设H0为真,如果进行m次显著性水准为α的假设检验时,犯Ⅰ类错误的累积概率α’不超 过mα,即有Bonferroni不等式成立 :

所以令各次比较的显著性水准为:

其中0.05为原始阈值(也可自行设定为0.01、0.005等)并规定:

时拒绝H0,基于这样的做法,就可以把Ⅰ类错误的累积概率控制在0.05。这种对检验水准进行修正的方法叫做 Bonferroni调整 (Bonferroni adjustment)法,简称Bonferroni法。使用 t 检验在组均值之间执行成对比较,但通过将每次检验的错误率设置为实验性质的错误率除以检验总数来控制总体误差率。这样,根据进行多个比较的实情对观察的显著性水平进行调整。

Holm法

在统计学中,Holm–Bonferroni 方法也称为Holm 方法或Bonferroni–Holm 方法,用于抵消多重比较问题。它旨在控制系列错误率,并提供比Bonferroni 校正更强大的简单测试。

当考虑多个假设时,多重性问题就出现了:检查的假设越多,获得错误的概率就越高。Holm–Bonferroni 方法是控制错误率的众多方法之一,即通过调整每个单独假设的拒绝标准来控制错误发生的概率。

有m个p值,以及相应的假设H1到Hm,从低到高排序,我们期望错误率不高于某个预先指定的显著性水平α

接下来进行判断,是否:

如果是,则拒绝H1并继续下一步,否则退出,继续判断:

如果是,则拒绝H2并继续下一步,否则退出,以此类推,对于每个P值,检验是否:

如果是,则拒绝Hk并继续检查出较大的P值,最后可以确保错误率在α上。

实现方法

以tips数据集为例,观察有以下数据分布(Sun,Sat,Thur和Fri)

import pandas as pd
import scipy.stats as stats
tips = pd.read_csv('./python/seaborn-data-master/tips.csv')
sns.catplot(data=tips, kind="swarm", x="day", y="total_bill", hue="smoker")

接下来观察组“Sun”和组“Sat”是否具有明显差异?

直观上来看,是没有差异的,用KW检验尝试:

stats.kruskal(tips[tips['day'] == 'Sun']['total_bill'], tips[tips['day'] == 'Sat']['total_bill'])

KruskalResult(statistic=0.8460558571594718, pvalue=0.357670516500295)

结果我们得到一个p值,0.35

接下来观察组“Sun”和组“Thur”的差异:

stats.kruskal(tips[tips['day'] == 'Sun']['total_bill'], tips[tips['day'] == 'Thur']['total_bill'])

KruskalResult(statistic=7.7647256569364105, pvalue=0.005327638803962347)

我们得到的p值比刚才的小,0.0053,但能否说明Sun和Thur的差异比Sun和Sat的差异更大?

直观上来看,看图是可以的,但是仅根据P值,不可以,要经过Bonferroni校正:

import scikit_posthocs as sp
sp.posthoc_dunn(tips, val_col='total_bill', group_col='day', p_adjust='bonferroni')
Fri Sat Sun Thur
Fri 1.000000 0.600554 0.166506 1.000000
Sat 0.600554 1.000000 1.000000 0.296409
Sun 0.166506 1.000000 1.000000 0.033249
Thur 1.000000 0.296409 0.033249 1.000000

校正结果如上表,根据Bonferroni法校正后的p值,能说明Sun和Thur的差异比Sun和Sat的差异更大。

Refs

  1. Holm, S. (1979). "A simple sequentially rejective multiple test procedure". Scandinavian Journal of Statistics. 6 (2): 65–70. JSTOR 4615733. MR 0538597.
  2. Dunn, O. J. (1964). MULTIPLE COMPARISONS USING RANK SUMS. Technometrics, 6(3), 241-&. https://doi.org/10.2307/1266041

分类:

后端

标签:

Python

作者介绍

LonghaoWang
V1