弗里德曼测试和 Python 的事后测试

机器算法验证 Python 非参数 事后 广义估计方程 弗里德曼测试
2022-03-25 18:22:23

在我的数据集中,我有五个(序数)组,测量量为 x。因为违反了同方差性,所以我进行了弗里德曼卡方检验以查看组之间是否存在任何统计差异:

fried = stats.friedmanchisquare(*[grp for idx, grp in df.iteritems()]))

这返回了一个统计差异,但现在我想找出哪些组之间存在差异。对此R有一个很好的解决方案(弗里德曼的测试和事后分析https://www.r-statistics.com/2010/02/post-hoc-analysis-for-friedmans-test-r-code/) ,他们使用 Wilcoxon-Nemenyi-McDonald-Thompson 测试,但我找不到 Python 测试。

是否有可能对弗里德曼检验进行事后分析?或者,对于确实允许我在组之间进行比较的弗里德曼检验,我们有什么好的替代方法,例如广义估计方程?

3个回答

我目前正在自己​​研究这个问题;根据本文,执行事后测试有多种可能性(更新:可以在此处找到有关使用非参数测试的扩展):

  • 对所有成对组合执行Nemenyi测试;这类似于 ANOVA 的Tukey检验。
  • 执行Bonferroni-Dunn测试;在此设置中,将所有值与控制值列表进行比较。
  • 或者,可以执行升压和降压程序,依次测试按重要性排序的假设。可以使用Holm 的降压程序、Hochberg的升压程序或Hommel的程序。

STAC Python 库似乎包括所有这些测试,除了 Hommel 的过程

补充另一个答案,因为您询问了 Python 中事后测试的实现:Orange 库实现了事后测试(Nemenyi 和 Bonferroni-Dunn),包括绘制关键差异图的函数 [1]

http://docs.orange.biolab.si/3/data-mining-library/reference/evaluation.cd.html(参见“CD 图”部分)

[1] Janez Demsar,多个数据集上分类器的统计比较,2006 年 7 月(1 月):1-30。

您可以使用scikit-posthocs包执行以下任何测试:Conover、Nemenyi、Siegel 和 Miller 事后测试。