这是您在应用机器学习中需要的 17 种统计假设检验的快速参考指南。
附有 Python 示例代码。
虽然有数百种统计假设检验可供使用,但在机器学习项目中,您可能只需要使用其中的一小部分。
在本文中,您将发现一个备忘单,其中包含了机器学习项目中应用最广泛的统计假设检验,并附有使用 Python API 的示例。
每个统计检验都以一致的方式呈现,包括:
- 检验的名称。
- 检验的内容。
- 检验的关键假设。
- 如何解读检验结果。
- 用于执行检验的 Python API。
请注意,当涉及到诸如数据的预期分布或样本大小等假设时,如果某个假设被违反,给定检验的结果很可能会逐渐变差,而不是立即变得不可用。
一般来说,数据样本需要能够代表研究领域,并且足够大,以便能通过分析揭示其分布特性。
在某些情况下,可以通过修正数据来满足假设,例如通过移除异常值将近似正态分布的数据修正为正态分布,或者当样本方差不同时在统计检验中对自由度进行校正,这只是两个例子。
最后,对于某个特定的问题(例如正态性检验),可能存在多种检验方法。我们无法通过统计学获得问题的明确答案;相反,我们得到的是概率性答案。因此,通过以不同方式考虑同一问题,我们可能会得出不同的结论。这就是为什么对于某些关于数据的问题,我们需要多种不同的检验方法。
通过我的新书 《机器学习统计学》 来快速启动您的项目,书中包含分步教程以及所有示例的 Python 源代码文件。
让我们开始吧。
- 2018 年 11 月更新:添加了对所涵盖检验的更好概述。
- 2019 年 11 月更新:为每个检验添加了完整的可运行示例。添加了时间序列检验。

Python 统计假设检验速查表
照片由 davemichuda 拍摄,保留部分权利。
教程概述
本教程分为 5 个部分;它们是:
- 正态性检验
- 夏皮罗-威尔克检验 (Shapiro-Wilk Test)
- D’Agostino’s K^2 检验
- 安德森-达令检验 (Anderson-Darling Test)
- 相关性检验
- 皮尔逊相关系数
- 斯皮尔曼等级相关 (Spearman's Rank Correlation)
- 肯德尔等级相关 (Kendall's Rank Correlation)
- 卡方检验 (Chi-Squared Test)
- 平稳性检验
- 增强迪基-福勒检验 (Augmented Dickey-Fuller)
- Kwiatkowski-Phillips-Schmidt-Shin 检验
- 参数统计假设检验
- 学生 t 检验 (Student's t-test)
- 配对学生 t 检验 (Paired Student's t-test)
- 方差分析检验 (ANOVA)
- 重复测量方差分析检验 (Repeated Measures ANOVA Test)
- 非参数统计假设检验
- Mann-Whitney U 检验
- Wilcoxon 符号秩检验
- Kruskal-Wallis H 检验
- Friedman 检验
1. 正态性检验
本节列出了可用于检查数据是否呈高斯分布的统计检验。
夏皮罗-威尔克检验 (Shapiro-Wilk Test)
检验数据样本是否服从高斯分布。
假设
- 每个样本中的观测值都是独立同分布的 (iid)。
解释
- H0:样本服从高斯分布。
- H1:样本不服从高斯分布。
Python 代码
1 2 3 4 5 6 7 8 9 |
# 夏皮罗-威尔克正态性检验示例 from scipy.stats import shapiro data = [0.873, 2.817, 0.121, -0.945, -0.055, -1.436, 0.360, -1.478, -1.637, -1.869] stat, p = shapiro(data) print('stat=%.3f, p=%.3f' % (stat, p)) if p > 0.05: print('可能服从高斯分布 (Probably Gaussian)') else: print('可能不服从高斯分布 (Probably not Gaussian)') |
更多信息
D’Agostino’s K^2 检验
检验数据样本是否服从高斯分布。
假设
- 每个样本中的观测值都是独立同分布的 (iid)。
解释
- H0:样本服从高斯分布。
- H1:样本不服从高斯分布。
Python 代码
1 2 3 4 5 6 7 8 9 |
# D'Agostino's K^2 正态性检验示例 from scipy.stats import normaltest data = [0.873, 2.817, 0.121, -0.945, -0.055, -1.436, 0.360, -1.478, -1.637, -1.869] stat, p = normaltest(data) print('stat=%.3f, p=%.3f' % (stat, p)) if p > 0.05: print('可能服从高斯分布 (Probably Gaussian)') else: print('可能不服从高斯分布 (Probably not Gaussian)') |
更多信息
安德森-达令检验 (Anderson-Darling Test)
检验数据样本是否服从高斯分布。
假设
- 每个样本中的观测值都是独立同分布的 (iid)。
解释
- H0:样本服从高斯分布。
- H1:样本不服从高斯分布。
1 2 3 4 5 6 7 8 9 10 11 |
# 安德森-达令正态性检验示例 from scipy.stats import anderson data = [0.873, 2.817, 0.121, -0.945, -0.055, -1.436, 0.360, -1.478, -1.637, -1.869] result = anderson(data) print('stat=%.3f' % (result.statistic)) for i in range(len(result.critical_values)): sl, cv = result.significance_level[i], result.critical_values[i] if result.statistic < cv: print('在 %.1f%% 水平下可能服从高斯分布' % (sl)) else: print('在 %.1f%% 水平下可能不服从高斯分布' % (sl)) |
更多信息
2. 相关性检验
本节列出了可用于检查两个样本是否相关的统计检验。
皮尔逊相关系数
检验两个样本之间是否存在线性关系。
假设
- 每个样本中的观测值都是独立同分布的 (iid)。
- 每个样本中的观测值服从正态分布。
- 每个样本中的观测值具有相同的方差。
解释
- H0:两个样本相互独立。
- H1:样本之间存在依赖关系。
Python 代码
1 2 3 4 5 6 7 8 9 10 |
# 皮尔逊相关性检验示例 from scipy.stats import pearsonr data1 = [0.873, 2.817, 0.121, -0.945, -0.055, -1.436, 0.360, -1.478, -1.637, -1.869] data2 = [0.353, 3.517, 0.125, -7.545, -0.555, -1.536, 3.350, -1.578, -3.537, -1.579] stat, p = pearsonr(data1, data2) print('stat=%.3f, p=%.3f' % (stat, p)) if p > 0.05: print('可能相互独立 (Probably independent)') else: print('可能存在依赖关系 (Probably dependent)') |
更多信息
斯皮尔曼等级相关 (Spearman's Rank Correlation)
检验两个样本是否存在单调关系。
假设
- 每个样本中的观测值都是独立同分布的 (iid)。
- 每个样本中的观测值可以进行排序。
解释
- H0:两个样本相互独立。
- H1:样本之间存在依赖关系。
Python 代码
1 2 3 4 5 6 7 8 9 10 |
# 斯皮尔曼等级相关检验示例 from scipy.stats import spearmanr data1 = [0.873, 2.817, 0.121, -0.945, -0.055, -1.436, 0.360, -1.478, -1.637, -1.869] data2 = [0.353, 3.517, 0.125, -7.545, -0.555, -1.536, 3.350, -1.578, -3.537, -1.579] stat, p = spearmanr(data1, data2) print('stat=%.3f, p=%.3f' % (stat, p)) if p > 0.05: print('可能相互独立 (Probably independent)') else: print('可能存在依赖关系 (Probably dependent)') |
更多信息
肯德尔等级相关 (Kendall's Rank Correlation)
检验两个样本是否存在单调关系。
假设
- 每个样本中的观测值都是独立同分布的 (iid)。
- 每个样本中的观测值可以进行排序。
解释
- H0:两个样本相互独立。
- H1:样本之间存在依赖关系。
Python 代码
1 2 3 4 5 6 7 8 9 10 |
# 肯德尔等级相关检验示例 from scipy.stats import kendalltau data1 = [0.873, 2.817, 0.121, -0.945, -0.055, -1.436, 0.360, -1.478, -1.637, -1.869] data2 = [0.353, 3.517, 0.125, -7.545, -0.555, -1.536, 3.350, -1.578, -3.537, -1.579] stat, p = kendalltau(data1, data2) print('stat=%.3f, p=%.3f' % (stat, p)) if p > 0.05: print('可能相互独立 (Probably independent)') else: print('可能存在依赖关系 (Probably dependent)') |
更多信息
卡方检验 (Chi-Squared Test)
检验两个分类变量是相关还是独立。
假设
- 用于计算列联表的观测值是独立的。
- 列联表的每个单元格中有 25 个或更多的样本。
解释
- H0:两个样本相互独立。
- H1:样本之间存在依赖关系。
Python 代码
1 2 3 4 5 6 7 8 9 |
# 卡方检验示例 from scipy.stats import chi2_contingency table = [[10, 20, 30],[6, 9, 17]] stat, p, dof, expected = chi2_contingency(table) print('stat=%.3f, p=%.3f' % (stat, p)) if p > 0.05: print('可能相互独立 (Probably independent)') else: print('可能存在依赖关系 (Probably dependent)') |
更多信息
3. 平稳性检验
本节列出了可用于检查时间序列是否平稳的统计检验。
增强迪基-福勒单位根检验
检验时间序列是否存在单位根,例如是否存在趋势或更普遍地说是自回归的。
假设
- 观测值按时间排序。
解释
- H0:存在单位根(序列非平稳)。
- H1:不存在单位根(序列平稳)。
Python 代码
1 2 3 4 5 6 7 8 9 |
# 增强迪基-福勒单位根检验示例 from statsmodels.tsa.stattools import adfuller data = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] stat, p, lags, obs, crit, t = adfuller(data) print('stat=%.3f, p=%.3f' % (stat, p)) if p > 0.05: print('可能非平稳 (Probably not Stationary)') else: print('可能平稳 (Probably Stationary)') |
更多信息
Kwiatkowski-Phillips-Schmidt-Shin 检验
检验时间序列是否为趋势平稳。
假设
- 观测值按时间排序。
解释
- H0:时间序列是趋势平稳的。
- H1:时间序列不是趋势平稳的。
Python 代码
1 2 3 4 5 6 7 8 9 |
# Kwiatkowski-Phillips-Schmidt-Shin 检验示例 from statsmodels.tsa.stattools import kpss data = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] stat, p, lags, crit = kpss(data) print('stat=%.3f, p=%.3f' % (stat, p)) if p > 0.05: print('可能平稳 (Probably Stationary)') else: print('可能非平稳 (Probably not Stationary)') |
更多信息
4. 参数统计假设检验
本节列出了可用于比较数据样本的统计检验。
学生 t 检验 (Student's t-test)
检验两个独立样本的均值是否存在显著差异。
假设
- 每个样本中的观测值都是独立同分布的 (iid)。
- 每个样本中的观测值服从正态分布。
- 每个样本中的观测值具有相同的方差。
解释
- H0:样本的均值相等。
- H1:样本的均值不相等。
Python 代码
1 2 3 4 5 6 7 8 9 10 |
# 学生 t 检验示例 from scipy.stats import ttest_ind data1 = [0.873, 2.817, 0.121, -0.945, -0.055, -1.436, 0.360, -1.478, -1.637, -1.869] data2 = [1.142, -0.432, -0.938, -0.729, -0.846, -0.157, 0.500, 1.183, -1.075, -0.169] stat, p = ttest_ind(data1, data2) print('stat=%.3f, p=%.3f' % (stat, p)) if p > 0.05: print('可能服从相同分布 (Probably the same distribution)') else: print('可能服从不同分布 (Probably different distributions)') |
更多信息
配对学生 t 检验 (Paired Student's t-test)
检验两个配对样本的均值是否存在显著差异。
假设
- 每个样本中的观测值都是独立同分布的 (iid)。
- 每个样本中的观测值服从正态分布。
- 每个样本中的观测值具有相同的方差。
- 每个样本中的观测值是配对的。
解释
- H0:样本的均值相等。
- H1:样本的均值不相等。
Python 代码
1 2 3 4 5 6 7 8 9 10 |
# 配对学生 t 检验示例 from scipy.stats import ttest_rel data1 = [0.873, 2.817, 0.121, -0.945, -0.055, -1.436, 0.360, -1.478, -1.637, -1.869] data2 = [1.142, -0.432, -0.938, -0.729, -0.846, -0.157, 0.500, 1.183, -1.075, -0.169] stat, p = ttest_rel(data1, data2) print('stat=%.3f, p=%.3f' % (stat, p)) if p > 0.05: print('可能服从相同分布 (Probably the same distribution)') else: print('可能服从不同分布 (Probably different distributions)') |
更多信息
方差分析检验 (ANOVA)
检验两个或更多独立样本的均值是否存在显著差异。
假设
- 每个样本中的观测值都是独立同分布的 (iid)。
- 每个样本中的观测值服从正态分布。
- 每个样本中的观测值具有相同的方差。
解释
- H0:样本的均值相等。
- H1:一个或多个样本的均值不相等。
Python 代码
1 2 3 4 5 6 7 8 9 10 11 |
# 方差分析检验示例 from scipy.stats import f_oneway data1 = [0.873, 2.817, 0.121, -0.945, -0.055, -1.436, 0.360, -1.478, -1.637, -1.869] data2 = [1.142, -0.432, -0.938, -0.729, -0.846, -0.157, 0.500, 1.183, -1.075, -0.169] data3 = [-0.208, 0.696, 0.928, -1.148, -0.213, 0.229, 0.137, 0.269, -0.870, -1.204] stat, p = f_oneway(data1, data2, data3) print('stat=%.3f, p=%.3f' % (stat, p)) if p > 0.05: print('可能服从相同分布 (Probably the same distribution)') else: print('可能服从不同分布 (Probably different distributions)') |
更多信息
重复测量方差分析检验 (Repeated Measures ANOVA Test)
检验两个或更多配对样本的均值是否存在显著差异。
假设
- 每个样本中的观测值都是独立同分布的 (iid)。
- 每个样本中的观测值服从正态分布。
- 每个样本中的观测值具有相同的方差。
- 每个样本中的观测值是配对的。
解释
- H0:样本的均值相等。
- H1:一个或多个样本的均值不相等。
Python 代码
目前 Python 中尚不支持。
更多信息
5. 非参数统计假设检验
Mann-Whitney U 检验
检验两个独立样本的分布是否相等。
假设
- 每个样本中的观测值都是独立同分布的 (iid)。
- 每个样本中的观测值可以进行排序。
解释
- H0:两个样本的分布相等。
- H1:两个样本的分布不相等。
Python 代码
1 2 3 4 5 6 7 8 9 10 |
# 曼-惠特尼 U 检验示例 from scipy.stats import mannwhitneyu data1 = [0.873, 2.817, 0.121, -0.945, -0.055, -1.436, 0.360, -1.478, -1.637, -1.869] data2 = [1.142, -0.432, -0.938, -0.729, -0.846, -0.157, 0.500, 1.183, -1.075, -0.169] stat, p = mannwhitneyu(data1, data2) print('stat=%.3f, p=%.3f' % (stat, p)) if p > 0.05: print('可能服从相同分布 (Probably the same distribution)') else: print('可能服从不同分布 (Probably different distributions)') |
更多信息
Wilcoxon 符号秩检验
检验两个配对样本的分布是否相等。
假设
- 每个样本中的观测值都是独立同分布的 (iid)。
- 每个样本中的观测值可以进行排序。
- 每个样本中的观测值是配对的。
解释
- H0:两个样本的分布相等。
- H1:两个样本的分布不相等。
Python 代码
1 2 3 4 5 6 7 8 9 10 |
# 威尔科克森符号秩检验示例 from scipy.stats import wilcoxon data1 = [0.873, 2.817, 0.121, -0.945, -0.055, -1.436, 0.360, -1.478, -1.637, -1.869] data2 = [1.142, -0.432, -0.938, -0.729, -0.846, -0.157, 0.500, 1.183, -1.075, -0.169] stat, p = wilcoxon(data1, data2) print('stat=%.3f, p=%.3f' % (stat, p)) if p > 0.05: print('可能服从相同分布 (Probably the same distribution)') else: print('可能服从不同分布 (Probably different distributions)') |
更多信息
Kruskal-Wallis H 检验
检验两个或更多独立样本的分布是否相等。
假设
- 每个样本中的观测值都是独立同分布的 (iid)。
- 每个样本中的观测值可以进行排序。
解释
- H0:所有样本的分布均相等。
- H1:一个或多个样本的分布不相等。
Python 代码
1 2 3 4 5 6 7 8 9 10 |
# 克鲁斯卡尔-沃利斯 H 检验示例 from scipy.stats import kruskal data1 = [0.873, 2.817, 0.121, -0.945, -0.055, -1.436, 0.360, -1.478, -1.637, -1.869] data2 = [1.142, -0.432, -0.938, -0.729, -0.846, -0.157, 0.500, 1.183, -1.075, -0.169] stat, p = kruskal(data1, data2) print('stat=%.3f, p=%.3f' % (stat, p)) if p > 0.05: print('可能服从相同分布 (Probably the same distribution)') else: print('可能服从不同分布 (Probably different distributions)') |
更多信息
Friedman 检验
检验两个或更多配对样本的分布是否相等。
假设
- 每个样本中的观测值都是独立同分布的 (iid)。
- 每个样本中的观测值可以进行排序。
- 每个样本中的观测值是配对的。
解释
- H0:所有样本的分布均相等。
- H1:一个或多个样本的分布不相等。
Python 代码
1 2 3 4 5 6 7 8 9 10 11 |
# 弗里德曼检验示例 from scipy.stats import friedmanchisquare data1 = [0.873, 2.817, 0.121, -0.945, -0.055, -1.436, 0.360, -1.478, -1.637, -1.869] data2 = [1.142, -0.432, -0.938, -0.729, -0.846, -0.157, 0.500, 1.183, -1.075, -0.169] data3 = [-0.208, 0.696, 0.928, -1.148, -0.213, 0.229, 0.137, 0.269, -0.870, -1.204] stat, p = friedmanchisquare(data1, data2, data3) print('stat=%.3f, p=%.3f' % (stat, p)) if p > 0.05: print('可能服从相同分布 (Probably the same distribution)') else: print('可能服从不同分布 (Probably different distributions)') |
更多信息
进一步阅读
如果您想深入了解,本节提供了更多关于该主题的资源。
总结
在本教程中,您了解了在机器学习项目中可能需要使用的关键统计假设检验。
具体来说,你学到了:
- 在不同情况下应使用的检验类型,例如正态性检验、变量间关系检验以及样本间差异检验。
- 每个检验的关键假设以及如何解释检验结果。
- 如何使用 Python API 实现该检验。
你有什么问题吗?
在下面的评论中提出你的问题,我会尽力回答。
我是否遗漏了某个重要的统计检验或所列检验之一的关键假设?
在下面的评论中告诉我。
嗨,这个列表看起来不错。有几处遗漏。费希尔精确检验和伯纳德检验(可能比费希尔精确检验有更强的功效)。
关于安德森-达令检验的一点说明。在某些领域,使用 p 值来确定拟合优度(GoF)的做法已不被鼓励。
说得好,谢谢你,Jonathan。
的确,我记得有一本心理学期刊已经采用“估计统计学”来替代假设检验报告结果。
非常非常好的有用文章
谢谢,很高兴听到这个。
嗨,感谢这个不错的概述。
其中一些检验,比如 friedmanchisquare,要求组内事件数量随时间保持不变。但在实践中,情况并非总是如此。
假设对一组 100 人进行 4 次观察,但该组的响应规模随时间变化,响应者数量分别为 n1=100, n2=95, n3=98, n4=60。
n4 较小是因为某些外部因素,比如天气不好。
对于如何处理这种随时间变化的“响应者”规模,您有什么建议?
好问题。
或许可以查阅相关文献,了解在这种情况下如何对自由度进行校正?
难道不应该说皮尔逊相关性衡量的是变量之间的线性关系吗?我会说“单调”意味着一种不一定是线性的“递增”或“递减”关系。
是的,皮尔逊是线性关系,而像斯皮尔曼这样的非参数方法是单调关系。
谢谢,已修正。
没问题。感谢你这个很棒的博客!它让我接触到了许多有趣且有用的主题。
很高兴听到这个!
关于数据正态性检验的两点/问题
(1) 在夏皮罗/威尔克、D'Agostino 和安德森/达令检验中,您是否会使用所有这三种检验来确定您的数据很可能呈正态分布?或者换一种方式问,如果这三种检验中只有一种或两种表明数据可能是高斯分布,该怎么办?
(2) 使用图形方法怎么样,比如数据的直方图——它是否对称?正态概率图呢 https://www.itl.nist.gov/div898/handbook/eda/section3/normprpl.htm 如果线是直的,那么结合(1)中描述的统计检验,你就可以评估数据很可能来自高斯分布。
谢谢你,
悉尼的Anthony
更多关于使用何种正态性检验(图形及其他)的信息在这里
https://machinelearning.org.cn/a-gentle-introduction-to-normality-tests-in-python/
这非常有用,谢谢 Jason。
不客气。
哇.. 这正是我要找的。现成的东西,随时参考。
谢谢分享,Jason。
我很高兴它有帮助!
非常感谢,Jason!你最棒了。我一直在网上搜索一篇关于在机器学习中实际应用推断统计学的文章,已经有一段时间了!
很多文章翻来覆去都是同样的理论内容,但没有一篇像这样。
谢谢,很高兴对您有帮助。
嗨 Jason,Statsmodels 是另一个提供了很多功能的模块,但网上关于如何使用的信息很少。与 scipy 相比,其文档也不够全面。你写过关于 Statsmodels 的文章吗?一篇类似的文章会非常有帮助。
是的,我有很多教程展示如何使用 statsmodels 进行时间序列分析
https://machinelearning.org.cn/start-here/#timeseries
以及使用 statsmodels 进行一般统计
https://machinelearning.org.cn/start-here/#statistical_methods
嘿 Jason,感谢你这个超赞的博客。它让我对一些不熟悉的主题有了很好的了解!
如果你想让这些易于应用的假设检验更完整,我建议加上柯尔莫哥洛夫-斯米尔诺夫检验,它和夏皮罗-威尔克检验差别不大。
– https://docs.scipy.org.cn/doc/scipy/reference/generated/scipy.stats.ks_2samp.html
– https://www.researchgate.net/post/Whats_the_difference_between_Kolmogorov-Smirnov_test_and_Shapiro-Wilk_test
谢谢你的建议,Thomas。
哪种方法适用于分类或回归数据集?哪些统计检验适用于半监督/非监督数据集?
这篇文章会有帮助:
https://machinelearning.org.cn/statistical-significance-tests-for-comparing-machine-learning-algorithms/
你好,
非常感谢你的博客!
我想知道如何检查“每个样本中的观测值具有相同的方差”……有没有检验可以检查这个?
很好的问题。
您可以计算每个区间的均值和标准差。
您也可以绘制序列图,直观地观察方差是否在增加。
有没有类似弗里德曼检验的检验?它具有相同的特性“检验两个或多个配对样本的分布是否相等”。
是的,配对学生 t 检验。
嗨,Jason,感谢你精彩的博客。我有一个问题。我有两个不同大小的样本(一个有 102 个,另一个有 2482 个),而且它们的方差也不同,哪种统计假设方法是合适的?谢谢你。
这个差异非常大。
检验方法取决于你试图回答的问题的性质。
这份速查表里几乎所有的假设和解释都是错的。我不能推荐这份资料,因为如果一个学生在统计学考试或由统计学家主持的面试中重复这些内容,很可能会不及格。我经常收到一些年轻有为的数据科学家的信息,他们因为重复网上的文本而遇到了问题,所以我请求您不要让学习者面临这种情况。
1. 配对 t 检验的假设完全错误,或者是复制粘贴的。解释也是错的。
2. Anova 不是一个检验,但好吧,我就当没看见。解释不正确。如果你照着做,做事后检验(post-hoc)时你可能会非常惊讶。
3. 重复测量方差分析 (RM-ANOVA) 的解释是错误的。
4. 曼-惠特尼检验 (Mann-Whitney) 的描述不精确。
5. 配对威尔科克森检验 (Paired Wilcoxon) 的解释是错误的。
6. 正态性检验——全都是错的。正态性检验中的“每个样本”是什么意思?它并不能判断数据是否是高斯分布!它只是说在这个样本量下,数据被正态分布近似的程度是否可以接受。我随时可以给你举出从对数正态或威布尔分布中抽取的样本被报告为“高斯分布”的例子。
值得注意的是,有超过 270 种检验方法,其中 50 种在日常中常用,并因行业和专业领域而异。在谷歌中输入“100 statistical tests PDF”或查找 Sheskin 的参数和非参数方法手册(也有 PDF 版本),可以对此有个粗略的了解。你了解得越多,受到的限制就越少。每种检验都有其优缺点,使用前应该了解。始终注意零假设和假设条件。@Jason Brownlee
谢谢你的反馈,Adrian。
先生,你太高傲了。
我正处于这一切的学习初期,Jason 的帖子在帮助我构建所有知识点的语义树方面非常有帮助。没有他的很多帖子,我的知识点会是零散的。
我不确定你指出的准确性问题,但你评论中缺乏建设性意见,这令人担忧。你没有提供你认为是正确的解释。
我真的不想看到这样的评论。Jason,请继续你的好工作!
谢谢你的支持!
Adrian,偶然看到这个博客,我必须说,这是一个极度没有帮助的评论。Jason 为那些非该领域专家的人们整理了一份简单、简洁且有用的结构化统计指南。而你所做的只是喷了一堆负能量。一些礼貌、感激和建设性的评论会更有用。像你这样的人正是许多人对统计学望而却步的原因。谢谢你,Jason,请继续你那有帮助的内容。
谢谢你,Jason。我处理的问题是:我有两组结果,患者组有 102 个特征,健康组有 2482 个特征,我想对这两组的特征进行显著性检验,以测试该特征是否适合区分这两组。我不确定哪种方法适合这种情况。您能给我一些建议吗?谢谢。
听起来你想要一个分类(判别)模型,而不是一个统计检验?
是的,我想你是对的。我将使用支持向量机(SVM)来对特征进行分类。谢谢你。
嗨,Jason,感谢这篇非常有用的帖子。弗里德曼检验是否有仅适用于两组测量数据的变体?我有一个实验,在同一些人身上测试了两种条件。我期望两种条件之间存在一个半恒定的变化,这样块内的排名预计会保持非常相似。
是的:威尔科克森符号秩检验 (Wilcoxon Signed-Rank Test)
尊敬的先生,
我有一个问题,如果我们从一个庞大的数据集中取一个子集,根据中心极限定理,“样本均值服从正态分布”。那么在这种情况下,我们应该考虑非参数统计假设检验还是参数统计假设检验?
抱歉,我没太明白你的问题,你能重新表述一下吗?
通常,非参数统计使用排序而不是高斯分布。
什么是 A/B 测试?它在机器学习中如何发挥作用?它与假设检验有区别吗?
更多关于 A/B 测试的信息
https://en.wikipedia.org/wiki/A/B_testing
它与机器学习没有直接关系。
相反,在机器学习中,我们会评估不同机器学习算法的性能,并比较性能估计的样本,以判断算法之间的性能差异是否显著。
这有帮助吗?
更多信息在这里
https://machinelearning.org.cn/statistical-significance-tests-for-comparing-machine-learning-algorithms/
你无法想象我找到这样一张速查表有多高兴!也感谢你提供的链接。
谢谢,很高兴它有帮助!
嗨,Jason –
感谢您帮助将统计学理论应用于日常实践!
我希望你能包含一个等效性 t 检验的例子。这与标准的 t 检验略有不同,并且有很多应用——例如,证明机器学习算法的 2.0 版本与 1.0 版本相匹配。这对于那些不想重新验证其仪器的客户,或者需要回答这些版本性能是否与彼此相同的制造商来说,实际上非常重要。
我在以下地址观察到一个库
https://statsmodels.cn/0.9.0/generated/statsmodels.stats.weightstats.ttost_paired.html#statsmodels.stats.weightstats.ttost_paired
但它没有解释如何设定合理的低限和高限。
无论如何,感谢这些例子!
很好的建议,谢谢 Chris!
嗨,Jason,
很棒的文章。
如果我想比较两组之间的性别差异,卡方检验是个好选择吗?
我想像对数值变量做 t 检验那样,检验显著性差异。
这取决于数据,或许可以先用一个原型来探索它是否合适?
嗨,Jason,
我想用非参数统计假设检验来分析序数数据(好、一般、差)或分类数据,我应该把它们编码成数值数据然后按照上面的步骤操作吗?您能给些建议吗?
谢谢。
好问题。不,我认为那样做是不正确的。
也许可以寻找专门针对这类数据的检验方法?
重复测量方差分析可以在 Python 中使用 Pingouin 库进行 https://pingouin-stats.org/generated/pingouin.rm_anova.html
感谢分享。
嗨,Jason,
感谢这篇信息量很大的文章。在一篇文章中看到所有的假设检验真是太棒了。
1) 您能帮忙说明一下什么时候使用参数统计假设检验,什么时候使用非参数统计假设检验吗?
知道在特定情况下该用什么会非常有帮助。
2) 在涉及多个特征的情况下,两个实验分布不同时进行 A/B 测试,您会推荐参数统计假设检验还是非参数统计假设检验?
(我尝试过参数统计假设检验,但由于涉及多个特征,很难达到统计显著性)
当你的数据是高斯分布且表现良好时,使用参数检验;否则,使用非参数检验。
抱歉,我对手头的 A/B 测试显著性检验不太了解。我预计样本分布是离散的。也许卡方检验会比较合适?我这是凭感觉说的。
嗨 Jason,对图像分类使用统计假设检验,并结合机器学习,有意义吗?对于一个判断图像属于 A 类还是 B 类的图像分类问题,哪种方法更合适?
在这种情况下不是,机器学习模型会为你执行这个预测。
嗨,Jason,
感谢这篇文章,内容非常丰富。
假设由于某些原因,变量之间存在非单调关系,假设检验还会有很大帮助吗?
在进行任何特定的假设检验以获取更深入的统计见解之前,先通过实际验证关系是否是单调的来检查先前的信念,这样不是更有意义吗?
这取决于你想要回答的问题。
嗨,Jason,
祝贺您在这些主题上所做的工作。每次我需要在这个领域获取快速而精确的内容时,它都真的帮助了我。
不过,我确实有一个问题。关于 stats.f_oneway 模块(ANOVA),我尝试用不同大小的样本运行它,结果返回了一个错误“ValueError: arrays must all be same length”。
我试着在社区里找解决方案,但没找到。您能帮我解决这个问题吗?我应该输入 np.nan 值来“填充”样本中的空白,使它们都达到相同的长度吗?
提前感谢!
来自巴西的诚挚问候。
谢谢!
也许有更合适的检验方法?
或许你可以复制一些样本(这可能会使结果的有效性降低)?
也许你可以找到一个替代的实现方案?
或许你可以根据教科书开发自己的实现方案?
希望这些能给你一些思路。
嗨,Jason,
我们可以用交叉熵来进行假设检验吗?
交叉熵和 p 值之间有关系吗?
你可以对交叉熵值进行假设检验。
就我目前能想到的,交叉熵和统计假设检验之间没有直接联系。
嗨,Jason,
非常感谢您提供的这份统计检验摘要。我们可以通过它来检查特征分布和相互关系等。我们也欣赏您以代码为导向的解释方式,这是一种教授和实践这些统计概念的好方法。
在试验您的小段代码时,我分享以下几点评论。
1º) 如果我们在卡方检验函数的表格中设置两个相同的数据数组(但如果改变顺序则不同),你会得到一个令人惊讶的答案(它们是独立的!)。我猜 chi2-contingency() 模块库中有些问题。
2º) 如果我们在配对学生 t 检验的参数中设置相同的两个数据数组,我们会得到同样糟糕的结果(它们是不同的分布!)。对可能失败的库实现有同样的评论。
3º) 如果我们在威尔科克森符号秩检验中设置相同的两个数据数组,我们会收到一个错误消息,指出如果两个数组完全相同则无法工作。
4º) 关于弗里德曼检验。两点评论。它只适用于 3 个或更多的数据数组(如你所写,两个是不够的)。如果你设置了 3 个相同的数组,你会得到同样令人惊讶的结果,即它们是不同的分布。
你可以在不到1分钟的时间内检验这些实验。
此致,
JG
很棒的实验,我本该自己做的!
这些函数应该在它们的单元测试中包含这种情况...
谢谢你,Jason!
伏尔泰说过,完美是优秀的敌人!
所以我喜欢你的启发性以及你的代码帖子的巨大价值,它们可以快速投入使用……我对完美不感兴趣……因为与此同时,你可能会忽略其他正在取代你所寻求价值的新兴选择!🙂
谢谢!
谢谢你,Jason!很棒的读物,非常有帮助。我也会在 LinkedIn 上分享给我那些热衷于机器学习的朋友们。
不客气!
感谢你出色的工作!
很高兴你喜欢它!
你做得太棒了。我们很高兴地学习机器学习。你付出了巨大的努力。谢谢
TR RAO
不客气。
嗨,很棒的文章。如果您能为所有测试更新文章,并附上一个应用示例,那就太棒了。顺便说一句,感谢您所有精彩的文章。
感谢您的建议。我们会考虑的。
嘿,请检查一下本文中关于Kwiatkowski-Phillips-Schmidt-Shin检验的部分。Ho 和 H1 似乎弄反了……
您是对的!已经更正了。
太棒了。如果您能制作一个关于贝叶斯分析的教程,我们将不胜感激。
您想学习哪个具体的例子呢?
嗨,Jason,感谢您这篇精彩而全面的文章。补充一点,statsmodels中有一个可用于重复测量方差分析(ANOVA)的检验。值得探索一下。
from statsmodels.stats.anova import AnovaRM
感谢您的反馈,Prem!
你好,Jason。只有一个简单的问题。你为什么要定义cv和cv2?这不意味着这两个模型将在不同的数据分割上进行训练和评估吗?如果只用一个cv会有问题吗?
我本想在另一篇文章中问这个问题。请删除它。
非常感谢这篇精彩的文章。
我可以用上面提到的哪种统计检验来比较我的预期标签和原始标签?
例如
t_value,p_value=stats.ttest_rel(y_test,y_pred_proba)
这样正确吗?
嗨,Mohammad…是的,正确。
非常感谢.. 我很感激..
很棒,并且清楚地说明了假设。但是,代码本身的输出可能会有点误导,因为它经常给出一个二元输出,比如“可能是高斯分布”或“可能不是高斯分布”。但我们不是这样解释假设检验的。“可能不是高斯分布”是可以接受的(更普遍地说,“拒绝原假设”),但是“可能是高斯分布”是不正确且具有误导性的。这应该改为“未能拒绝原假设”,并且不应被视为原假设为真的有力证据。
感谢您的反馈,Stephen!
嗨,Stephen,
“可能”这个词是否能表达出“不应被视为原假设为真的有力证据”这层意思呢?
这非常有用。谢谢你。
非常欢迎你,Dibea!我们感谢您的支持和反馈!
你好,有个问题,我有一个用神经网络保存的用于图像检测的算法,只有图像,没有数值数据。我可以用什么方法来进行假设验证,以及如何在python中编程实现呢?先谢谢了。
嗨,Jason,
感谢这份非常有价值的速查表,也感谢这个博客,我非常喜欢你的文章。
我想补充一点,也有一些检验可以检查两个序列的方差是否相同,例如,如果序列不服从正态分布,可以使用Levene检验;如果服从正态分布,则使用Bartlett检验。此外,在学生t检验中,通过在ttest_ind函数中使用参数equal_var=False,可以处理方差不同的情况。
谢谢!
嗨,Leire… 非常欢迎!感谢您与我们的社区分享您的知识!
一个有点技术性的问题,我试图查看这两组数据的均值是否具有统计显著性。它们来自同一个人在两个不同时间的配对数据。
您会推荐哪种检验?
它们不符合正态分布。
我尝试了自助法(Bootstrap)、威尔科克森符号秩检验(Wilcoxon Signed-Rank Test)、置换检验(Permutation),但都得出了非常不同的答案。
威尔科克森符号秩检验似乎关注
# 数据
setA = [0.9995, 1.0000, 1.0000, 1.0000, 1.0000, 0.0000, 0.9993, 0.9381, 0.6929, 0.7971,
0.8464, 0.0220, 0.9979, 0.8584, 0.7538, 0.8027, 0.8768, 0.0231, 0.9990, 0.8611,
0.6294, 0.7273, 0.8146, 0.0294, 0.9992, 0.8466, 0.7284, 0.7831, 0.8641, 0.0252]
setB = [0.9996, 0.9870, 0.7755, 0.8686, 0.8877, 0.0146, 0.9993, 0.9688, 0.6327, 0.7654,
0.8163, 0.0240, 0.9992, 0.8571, 0.6735, 0.7543, 0.8366, 0.0272, 0.9989, 0.7375,
0.6020, 0.6629, 0.8008, 0.0380, 0.9993, 0.8372, 0.7347, 0.7826, 0.8672, 0.0253]
嗨 Zizzou…以下资源可能对您有帮助
https://www.statisticshowto.com/probability-and-statistics/hypothesis-testing/mean-difference/
很棒的资源汇编,已收藏。🙂
感谢您的反馈和支持,Satya!我们非常感谢!