例如比较6个算法的排序是否有显著性差异。
python 实现配对t检验
导入库函数
```python
import numpy as np
import pandas as pd
from scipy import stats
from scipy.stats import ttest_rel #配对t检验,方法1
import scipy.stats as ss
不同算法的排名值(这里有6个算法,13个数据集)
chebyshev = np.array([[3,2,5,6,4,1],[5,2.5,6,2.5,4,1],[5,4,6,2.5,2.5,1],[5,6,4,2,3,1],[6,3,5,2,4,1],
[4.5,6,2.5,2.5,4.5,1],[4,3,6,5,2,1],[2,5,3,6,4,1],[6,4.5,2,4.5,3,1],
[4,5,6,3,2,1],[5,4,6,2,3,1],[2,5,6,3,4,1],[3,5,2,6,4,1]])
clark = np.array([[3,4,5,6,2,1],[5,2,6,3.5,3.5,1],[4,5.5,5.5,2.5,2.5,1],[5,6,4,2,3,1],[6,3,5,2,4,1],
[3.5,6,2,3.5,5,1],[4,3,6,5,2,1],[2,5,3,6,4,1],[5,3,2,4,6,1],[4,5,6,3,2,1],[5,3,6,2,4,1],[2,5,6,3,4,1],[3,5,2,6,4,1]])
# 配对t检验,方法1
def pairt(pairt):
rank = pairt.T
print(ttest_rel(rank[0],rank[-1]))
print(ttest_rel(rank[1],rank[-1]))
for i in lst:
value = pairt(i)
print("——————————————————")``
输出结果:
Ttest_relResult(statistic=8.545657877029525, pvalue=1.9014291761226591e-06)
Ttest_relResult(statistic=9.066742813310547, pvalue=1.0211483925250366e-06)
# 方法2.
def pairT(rank):
rank =rank.T
sub0 = rank[0]-rank[-1]
sub1 = rank[1]-rank[-1]
# 配对样本t检验
# stats.ttest_rel(fun1,fun2)
print(stats.ttest_1samp(sub0,0))
print(stats.ttest_1samp(sub1,0))
for i in lst:
value = pairT(i)
print("——————————————————")
输出结果:
Ttest_1sampResult(statistic=8.545657877029525, pvalue=1.9014291761226591e-06)
Ttest_1sampResult(statistic=9.066742813310547, pvalue=1.0211483925250366e-06)
wilcoxon符号检验:
def wilcoxon(rank):
rank =rank.T
data0 = rank[0]
data1 = rank[1]
data = rank[-1]
# sub5 = rank[5]-rank[-1]
# 配对样本t检验
# stats.ttest_rel(fun1,fun2)
stat0, p0 = ss.ranksums(data0, data)
stat1, p1 = ss.ranksums(data1, data)
print("statistic",round(stat0,3), "pvalue:",round(p0,3))
print("statistic",round(stat1,3), "pvalue:",round(p1,3))
for i in lst:
value = wilcoxon(i)
输出结果:
statistic 4.333 pvalue: 0.0
statistic 4.333 pvalue: 0.0