发布时间:2026/7/8 23:01:11
Kruskal-Wallis 检验后多重比较:Dunn 检验在 Python 中的 3 种实现方案
Kruskal-Wallis 检验后多重比较Dunn 检验在 Python 中的 3 种实现方案当我们在数据分析中发现多个独立样本组间存在显著差异时仅仅知道存在差异往往远远不够。真正的价值在于明确具体哪些组别之间存在差异这正是多重比较方法的价值所在。本文将重点探讨 Kruskal-Wallis 检验显著后如何进行 Dunn 检验的多重比较并详细介绍三种 Python 实现方案。1. 非参数检验与多重比较基础在比较三个或更多独立样本组时当数据不满足正态分布或方差齐性假设时Kruskal-Wallis 检验成为 ANOVA 的非参数替代方法。该检验基于秩次而非原始数据值通过比较各组秩和来判断组间差异。关键概念区分Kruskal-Wallis 检验整体检验判断是否存在至少一组与其他组不同Dunn 检验事后检验确定具体哪些组对存在差异注意只有当 Kruskal-Wallis 检验结果显著通常 p 0.05时才需要进行后续的多重比较。常见的 p 值校正方法包括校正方法公式适用场景Bonferroniα/m (m为比较次数)比较次数较少时保守可靠Sidak1-(1-α)^(1/m)比 Bonferroni 稍强功效Holm逐步调整平衡保守性与检验力2. 手动实现 Dunn 检验理解 Dunn 检验的计算原理有助于我们更好地应用现成的工具包。下面展示如何从零开始计算 Dunn 检验统计量import numpy as np from scipy import stats import itertools def dunn_test(data_groups, alpha0.05, methodbonferroni): 手动实现 Dunn 检验 参数: data_groups: 列表的列表每个子列表代表一个组的数据 alpha: 显著性水平 method: p值校正方法 (bonferroni或sidak) 返回: 包含组对比较结果的字典 # 合并所有数据并分配秩次 all_data np.concatenate(data_groups) ranks stats.rankdata(all_data) # 计算每组平均秩次 group_ranks [] start 0 for group in data_groups: n len(group) group_ranks.append(np.mean(ranks[start:startn])) start n # 总样本量和组数 N len(all_data) k len(data_groups) # 计算标准误差 SE np.sqrt(N*(N1)/12 * (1/sum(len(g) for g in data_groups))) # 进行所有组对比较 comparisons list(itertools.combinations(range(k), 2)) results [] for i, j in comparisons: z (group_ranks[i] - group_ranks[j]) / SE p 2 * (1 - stats.norm.cdf(abs(z))) # 双侧检验 # p值校正 m len(comparisons) if method bonferroni: p_adj min(p * m, 1.0) elif method sidak: p_adj 1 - (1 - p)**m else: raise ValueError(不支持的校正方法) results.append({ group1: i, group2: j, z: z, p: p, p_adj: p_adj, significant: p_adj alpha }) return results使用示例# 示例数据 group_A [28, 30, 33, 35, 38] group_B [22, 25, 26, 28, 29] group_C [18, 20, 21, 23, 24] # 执行Dunn检验 results dunn_test([group_A, group_B, group_C], methodbonferroni) for res in results: print(f组{res[group1]1} vs 组{res[group2]1}: z{res[z]:.3f}, p_adj{res[p_adj]:.4f})3. 使用 scikit-posthocs 进行 Dunn 检验scikit-posthocs 是专门用于事后检验的 Python 库提供了便捷的 Dunn 检验实现import scikit_posthocs as sp import pandas as pd # 准备数据 (长格式) data pd.DataFrame({ values: group_A group_B group_C, groups: [A]*5 [B]*5 [C]*5 }) # 执行Dunn检验 dunn_results sp.posthoc_dunn(data, val_colvalues, group_colgroups, p_adjustbonferroni) print(dunn_results)scikit-posthocs 的优势包括支持多种 p 值校正方法bonferroni, sidak, holm 等输出清晰的矩阵格式结果内置可视化功能结果解读示例ABCA1.00000.02140.0008B0.02141.00000.1423C0.00080.14231.0000表格中的数值表示调整后的 p 值。例如 A 组与 C 组比较的 p0.0008 0.05表明这两组存在显著差异。4. 使用 pingouin 进行 Dunn 检验pingouin 是另一个强大的统计库提供了更丰富的输出信息import pingouin as pg # 执行Kruskal-Wallis检验 kw pg.kruskal(datadata, dvvalues, betweengroups) print(kw) # 如果Kruskal-Wallis显著进行Dunn检验 if kw[p-unc][0] 0.05: dunn pg.pairwise_ttests( datadata, dvvalues, betweengroups, parametricFalse, padjustbonf ) print(dunn)pingouin 的特点自动检查 Kruskal-Wallis 结果是否显著提供效应量等额外指标结果以 DataFrame 形式呈现便于后续处理5. 方法比较与选择建议三种实现方式的对比特性手动实现scikit-posthocspingouin易用性低高中灵活性高中中输出信息基础丰富最丰富可视化支持无有无依赖项少多中选择建议快速分析使用 scikit-posthocs全面报告使用 pingouin教学/自定义需求手动实现实际项目中我通常会先使用 pingouin 进行初步分析当需要更灵活的多重比较调整时转向 scikit-posthocs。对于教育目的或需要完全控制计算过程的情况手动实现提供了最好的学习机会。

相关新闻

Kendall‘s W 与 Friedman 检验:3 个案例详解非参数检验的选择与关联
2026/7/8 23:01:11

Kendall‘s W 与 Friedman 检验:3 个案例详解非参数检验的选择与关联

Kendalls W 与 Friedman 检验:3 个案例详解非参数检验的选择与关联在科研与数据分析中,我们常常需要评估多个评价者对同一组对象的排序一致性,或者比较不同条件下重复测量的差异。Kendalls W 和 Friedman 检验是两种常用的非参数方法&#xf…

阅读更多
Seurat4 参考映射 3 大常见错误排查:锚点过滤、坐标投影与批次效应
2026/7/8 23:01:11

Seurat4 参考映射 3 大常见错误排查:锚点过滤、坐标投影与批次效应

Seurat4参考映射实战:锚点优化、UMAP校准与批次效应处理指南1. 引言:单细胞参考映射的技术挑战单细胞RNA测序技术的快速发展使得构建大规模注释参考图谱成为可能,而将这些图谱应用于新数据集分析的需求也日益增长。Seurat4的参考映射功能为这…

阅读更多
三维模型表面积计算:网格简化对精度影响分析(从10万面到1千面)
2026/7/8 22:01:11

三维模型表面积计算:网格简化对精度影响分析(从10万面到1千面)

三维模型网格简化与表面积精度:工程实践中的量化分析在实时渲染和Web3D应用开发中,我们常常面临一个关键矛盾:模型精度与性能之间的平衡。想象一下这样的场景——当你的游戏角色模型从10万面片简化到1千面片时,那些消失的三角面究…

阅读更多
OpenCV 余弦定理实战:3种方法计算图像中任意三点夹角
2026/7/9 1:01:12

OpenCV 余弦定理实战:3种方法计算图像中任意三点夹角

OpenCV 余弦定理实战:3种方法计算图像中任意三点夹角在计算机视觉领域,精确测量图像中几何元素的角度关系是一项基础而关键的任务。无论是工业检测中的零件定位、医学影像分析中的骨骼角度测量,还是自动驾驶中的道路边界识别,角度…

阅读更多
Fortify 扫描 Mass Assignment 漏洞:5个真实案例分析与修复指南
2026/7/9 1:01:12

Fortify 扫描 Mass Assignment 漏洞:5个真实案例分析与修复指南

Fortify扫描Mass Assignment漏洞:5个真实案例分析与修复指南在企业级应用开发中,安全扫描工具如Fortify经常能发现Mass Assignment(批量赋值)漏洞,这类漏洞可能让攻击者通过HTTP请求篡改敏感字段。本文将深入分析5个真…

阅读更多
我怎么把开发过程中的笔记,慢慢整理成后续还能继续用的资产
2026/7/9 1:01:12

我怎么把开发过程中的笔记,慢慢整理成后续还能继续用的资产

很多开发笔记的问题,不是没写,而是写完就停在那里了。 当时看当然有用,过一段时间再回头看,会发现它们还是停留在“临时记录”层面,并没有继续变成更高价值的东西。 我后来越来越明确的一件事是: 开发笔…

阅读更多
基于TLA2518与PIC18F45K80的高精度多通道ADC系统设计
2026/7/9 1:01:12

基于TLA2518与PIC18F45K80的高精度多通道ADC系统设计

1. 项目概述:高精度模拟信号数字化方案在工业测量、医疗设备和自动化控制等领域,将模拟信号可靠地转换为数字格式是系统设计的关键环节。本项目采用TI的TLA2518 12位ADC与Microchip的PIC18F45K80微控制器构建了一套高精度信号采集系统,实现了…

阅读更多
FanControl V270:Windows终极风扇控制解决方案,告别噪音拥抱静音
2026/7/9 1:01:12

FanControl V270:Windows终极风扇控制解决方案,告别噪音拥抱静音

FanControl V270:Windows终极风扇控制解决方案,告别噪音拥抱静音 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.c…

阅读更多
Python logging 与链路追踪:Agent 每一步都要能溯源到具体输入输出
2026/7/9 0:01:12

Python logging 与链路追踪:Agent 每一步都要能溯源到具体输入输出

Python logging 与链路追踪:Agent 每一步都要能溯源到具体输入输出 一、深度引言与场景痛点 大家好,我是赵咕咕。 你有没有遇到过这种情况:Agent 跑了一天,用户反馈说"它昨天下午3点给出的答案有问题",但你翻…

阅读更多
通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御
2026/7/8 4:53:25

通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御

1. 项目概述与漏洞背景最近在梳理一些历史OA系统的安全风险时,通达OA v11.6版本中的一个老漏洞又进入了我的视线。这个漏洞位于/general/bi_design/appcenter/report_bi.func.php文件中,是一个典型的SQL注入点。虽然这个漏洞的利用方式看起来并不复杂&am…

阅读更多
3步彻底解决Windows右键菜单混乱问题:ContextMenuManager使用全攻略
2026/7/9 0:51:16

3步彻底解决Windows右键菜单混乱问题:ContextMenuManager使用全攻略

3步彻底解决Windows右键菜单混乱问题:ContextMenuManager使用全攻略 【免费下载链接】ContextMenuManager 🖱️ 纯粹的Windows右键菜单管理程序 项目地址: https://gitcode.com/gh_mirrors/co/ContextMenuManager 你是否曾为Windows右键菜单中那些…

阅读更多
GXDE OS下Wayland兼容性实战:从deepin-mutter原理到VMware Tools修复
2026/7/8 22:48:04

GXDE OS下Wayland兼容性实战:从deepin-mutter原理到VMware Tools修复

如果你正在用 GXDE OS 或者任何基于 Deepin 的发行版,并且遇到了“检测到窗口系统采用 Wayland 协议,程序即将退出”这类弹窗,或者发现 VMware Tools 在 Ubuntu 24.04 这类默认 Wayland 的系统上启动失败,那这篇文章就是为你准备的…

阅读更多
Unity WebGL部署Apache Tomcat:MIME配置、Gzip压缩与缓存优化实战
2026/7/9 0:01:12

Unity WebGL部署Apache Tomcat:MIME配置、Gzip压缩与缓存优化实战

1. 项目概述:当Unity WebGL遇上Apache Tomcat如果你是一名Unity开发者,想把精心制作的WebGL游戏或应用部署到自己的服务器上,那么Apache Tomcat大概率是你绕不开的一环。这不仅仅是把一堆构建出来的文件扔进一个文件夹那么简单。我见过太多项…

阅读更多
掌握Docker多阶段构建镜像优化技巧
2026/7/9 0:01:12

掌握Docker多阶段构建镜像优化技巧

掌握Docker多阶段构建镜像优化技巧在容器化技术日益普及的今天,Docker已成为开发与运维领域的基石工具。然而,随着应用复杂度提升,构建出的Docker镜像体积庞大、层数繁多、安全性欠佳等问题逐渐凸显,直接影响着部署效率、传输速度…

阅读更多
Ansible的AWX与作业模板调度
2026/7/9 0:01:12

Ansible的AWX与作业模板调度

在当今快速迭代的IT运维与开发领域,自动化已成为提升效率、保障一致性的核心支柱。Ansible作为一款强大的IT自动化工具,以其无代理、简单易用的特点广受欢迎。而AWX,作为Ansible上游项目提供的企业级Web界面、API及任务引擎,则将A…

阅读更多
基于Dify与DeepSeek构建私有知识库问答系统实战指南
2026/7/8 18:15:39

基于Dify与DeepSeek构建私有知识库问答系统实战指南

在业务中快速构建一个能理解私有文档、准确回答专业问题的智能助手,是很多开发团队面临的共同挑战。传统方案往往需要从零开始搭建复杂的 RAG(检索增强生成)系统,涉及文档解析、向量化、检索、大模型调用等多个环节,整…

阅读更多
FAE放射组学分析工具:医学影像特征探索的完整解决方案
2026/7/8 10:11:21

FAE放射组学分析工具:医学影像特征探索的完整解决方案

FAE放射组学分析工具:医学影像特征探索的完整解决方案 【免费下载链接】FAE FeAture Explorer 项目地址: https://gitcode.com/gh_mirrors/fae/FAE 你是否曾经面对海量医学影像数据感到无从下手?想要从CT、MRI等影像中提取有价值的定量特征&#…

阅读更多
DesktopNaotu:你的终极离线思维导图解决方案,告别网络依赖!
2026/7/7 9:58:00

DesktopNaotu:你的终极离线思维导图解决方案,告别网络依赖!

DesktopNaotu:你的终极离线思维导图解决方案,告别网络依赖! 【免费下载链接】DesktopNaotu 桌面版脑图 (百度脑图离线版,思维导图) 跨平台支持 Windows/Linux/Mac OS. (A cross-platform multilingual Mind Map Tool) 项目地址:…

阅读更多