如何在 python 中执行 nemenyi 事后测试
Friedman 检验是 重复测量方差分析的非参数替代方法。它用于确定每组中出现相同受试者的三个或更多组的平均值之间是否存在统计显着差异。
如果 Friedman 检验的 p 值具有统计显着性,那么我们可以执行Nemenyi 事后检验来准确确定哪些组不同。
以下分步示例展示了如何在 Python 中执行 Nemenyi 测试。
第 1 步:创建数据
假设研究人员想知道患者对三种不同药物的反应时间是否相同。为了测试这一点,他测量了 10 名不同患者对三种药物的反应时间(以秒为单位)。
我们可以创建以下三个表,其中包含每位患者对三种药物中每种药物的反应时间:
group1 = [4, 6, 3, 4, 3, 2, 2, 7, 6, 5] group2 = [5, 6, 8, 7, 7, 8, 4, 6, 4, 5] group3 = [2, 2, 5, 3, 2, 2, 1, 4, 3, 2]
步骤 2:执行弗里德曼检验
接下来,我们将使用 scipy.stats 库中的Friedmanchisquare() 函数执行弗里德曼测试:
from scipy import stats #perform Friedman Test stats. friedmanchisquare (group1, group2, group3) FriedmanchisquareResult(statistic=13.3513513, pvalue=0.00126122012)
弗里德曼检验使用以下原假设和备择假设:
原假设 (H 0 ):每个总体的平均值相等。
备择假设: (Ha):至少有一个总体平均值与其他总体平均值不同。
在此示例中,检验统计量为13.35135 ,相应的 p 值为0.00126 。由于该 p 值小于 0.05,因此我们可以拒绝所有三种药物的平均响应时间相同的原假设。
换句话说,我们有足够的证据可以得出结论,所使用的药物类型会导致反应时间出现统计学上的显着差异。
第 3 步:执行 Nemenyi 测试
然后我们可以执行 Nemenyi 事后检验来准确确定哪些组具有不同的均值。
为此,我们需要安装 scikit-posthocs 库:
pip install scikit-posthocs
接下来,我们将使用posthoc_nemenyi_friedman()函数来执行 Nemenyi 事后测试:
import scikit_posthocs as sp
import numpy as np
#combine three groups into one array
data = np. array ([group1, group2, group3])
#perform Nemenyi post-hoc test
sp. posthoc_nemenyi_friedman ( data.T )
0 1 2
0 1.000000 0.437407 0.065303
1 0.437407 1.000000 0.001533
2 0.065303 0.001533 1.000000
注意:我们必须转置 numpy 数组 (data.T) 才能正确执行事后测试。
Nemeyi 的事后检验返回每个均值成对比较的 p 值。从结果中我们可以看到以下 p 值:
- 第 0 组与第 1 组相比的 P 值: 0.4374
- 第 0 组与第 2 组相比的 P 值: 0.0653
- 第 1 组与第 2 组相比的 P 值: 0.0015
当 α = 0.05 时,仅有组 1 和组 2 具有统计显着差异。
注: Nemenyi 的检验将组数从 1,2,3 转换为 0,1,2。因此原始数据中存在显着差异的组为组 2 和组 3。