📜  如何在Python中执行 Nemenyi 测试

📅  最后修改于: 2022-05-13 01:55:42.702000             🧑  作者: Mango

如何在Python中执行 Nemenyi 测试

Nemenyi 检验:弗里德曼检验用于确定两个以上组的平均值之间是否存在显着差异。在这样的组中,相同的主题出现在每个组中。如果弗里德曼检验的 p 值在统计上显着,那么我们可以进行 Nemenyi 检验以准确找出哪些组不同。此测试也称为 Nemenyi 事后测试。

弗里德曼检验遵循以下假设:

  • 原假设 (H0):每个总体的平均值相等。
  • 备择假设:(Ha):至少一个总体均值与其他均值不同。

安装所需库的语法,包括 scipy、scikit-posthocs 和 NumPy:-

pip3 install scipy scikit-posthocs numpy

在Python中执行 Nemenyi 测试:

第 1 步:创建数据。

让我们考虑一个例子,在这个例子中,研究人员有兴趣知道掺入三种不同发动机油的汽车行驶里程是否相等。为了确定这一点,他们测量了 10 辆不同汽车在三种发动机油中的每一种行驶里程(每公里)。我们可以创建以下三个数组,其中包含每辆汽车在掺杂三种发动机油时的响应时间。

Python3
# Data groups
data_group1 = [44, 56, 53, 46, 53,
               46, 42, 47, 46, 45]
data_group2 = [35, 46, 38, 47, 37,
               38, 44, 46, 44, 35]
data_group3 = [32, 42, 54, 43, 32,
               32, 43, 36, 8, 29]


Python3
# Importing library
from scipy import stats
 
# Data groups
data_group1 = [44, 56, 53, 46, 53,
               46, 42, 47, 46, 45]
data_group2 = [35, 46, 38, 47, 37,
               38, 44, 46, 44, 35]
data_group3 = [32, 42, 54, 43, 32,
               32, 43, 36, 8, 29]
 
# Conduct the Friedman Test
stats.friedmanchisquare(data_group1, data_group2, data_group3)


Python3
# Importing libraries
from scipy import stats
import scikit_posthocs as sp
import numpy as np
 
# Data groups
data_group1 = [44, 56, 53, 46, 53,
               46, 42, 47, 46, 45]
data_group2 = [35, 46, 38, 47, 37,
               38, 44, 46, 44, 35]
data_group3 = [32, 42, 54, 43, 32,
               32, 43, 36, 8, 29]
 
# Conduct the Friedman Test
stats.friedmanchisquare(data_group1, data_group2, data_group3)
 
# Combine three groups into one array
data = np.array([data_group1, data_group2, data_group3])
 
# Conduct the Nemenyi post-hoc test
sp.posthoc_nemenyi_friedman(data.T)


第 2 步:进行弗里德曼测试。

现在我们将执行弗里德曼检验。 scipy.stats 库提供了friedmanchisquare()函数来执行弗里德曼测试。

Python3

# Importing library
from scipy import stats
 
# Data groups
data_group1 = [44, 56, 53, 46, 53,
               46, 42, 47, 46, 45]
data_group2 = [35, 46, 38, 47, 37,
               38, 44, 46, 44, 35]
data_group3 = [32, 42, 54, 43, 32,
               32, 43, 36, 8, 29]
 
# Conduct the Friedman Test
stats.friedmanchisquare(data_group1, data_group2, data_group3)

输出:

弗里德曼测试

在这里,检验统计量等于 8.599,相应的 p 值等于 0.013。由于这个 p 值小于 0.05,我们可以拒绝所有三种发动机油的平均里程相同的原假设。简而言之,我们有足够的证据表明所使用的发动机油类型在响应时间上产生了统计学上的显着差异。

第 3 步:进行 Nemenyi 测试。

现在,我们可以进行 Nemenyi 检验,以准确找出哪些组具有不同的均值。 scikit-posthocs 库提供了 posthoc_nemenyi_friedman()函数,我们可以使用它来进行 Nemenyi 测试。

Python3

# Importing libraries
from scipy import stats
import scikit_posthocs as sp
import numpy as np
 
# Data groups
data_group1 = [44, 56, 53, 46, 53,
               46, 42, 47, 46, 45]
data_group2 = [35, 46, 38, 47, 37,
               38, 44, 46, 44, 35]
data_group3 = [32, 42, 54, 43, 32,
               32, 43, 36, 8, 29]
 
# Conduct the Friedman Test
stats.friedmanchisquare(data_group1, data_group2, data_group3)
 
# Combine three groups into one array
data = np.array([data_group1, data_group2, data_group3])
 
# Conduct the Nemenyi post-hoc test
sp.posthoc_nemenyi_friedman(data.T)

输出:

内门尼测试

我们需要转置 NumPy 数组 (data.T) 以有效地进行事后测试。正如您在输出中看到的,Nemenyi 事后检验为每个成对的均值比较生成 p 值。这些值是:

  • 第 0 组与第 1 组的 P 值:0.503
  • 第 0 组与第 2 组的 P 值:0.010
  • 第 1 组与第 2 组的 P 值:0.173

对于 α = 0.05,只有两组似乎具有统计学上显着不同的平均值,即组 0 和组 2。