DS01-群体差异性比较
2019-11-05
差异性比较分类
我们经常会需要去衡量试验是否有效果,或者两个群体在某一个指标上是否有着显著的差异。此时我们便需要对两个群体做组件比较。
如果我们仅通过收集数据中发现的两组数据平均数存在有差异(即使是比较显著的差异),而断言两个群体之间有着明显的差异,是没有足够的说服力的。一般来说,收集到的数据收到很多方面的影响从而不可能完全的相同,肯定存在有或多或少的差异,此时,两组数据中差异的显著性变成了我们所关注的指标。
数据差异的显著性可以用在多种类型的科学研究中。例如可以研究某种教学法是否有效、或某种新药是否对患者有效。
- 均值差异显著性检验
方法名称 | 数据要求 | 研究目的 |
配对样本T检验 | 两组高测度数据,接近正态分布,数据有一一对应关系 | 两组一一对应的数据之间的均值差异性 |
独立样本T检验 | 两组高测度数据,接近正态分布,数据无一一对应关系 | 两组不对应数据之间的均值差异性 |
单因素方差分析 | 正态分布的高测度数据,基于单因素,进行多个水平的分组 | 基于单个因素分成多个水平的数据之间的均值差异 |
多因素方差分析 | 正态分布的高测度数据,基于多因素对数据进行分组 | 检验基于多因素变量纷呈的多组数据之间的均值差异性,主要考察变量之间的相互作用 |
- 非参数检验
方法名称 | 数据要求 | 研究目的 |
2关联样本非参数检验 | 两组高测度数据,不符合正态分布,两组数据间有一一对应关系 | 两组一一对应的数据之间是否存在分布差异性或秩分不一致性 |
K关联样本非参数检验 | 多组高测度数据,不符合正态分布,多组数据间有一一对应关系 | 多组一一对应的数据之间是否存在分布差异性或秩分不一致性 |
2独立样本非参数检验 | 两组高测度数据,不符合正态分布,两组数据间没有一一对应关系 | 两组数据之间是否存在分布差异性或秩分不一致性 |
K独立样本非参数检验 | 多组高测度数据,不符合正态分布,多组数据间没有一一对应关系 | 多组数据之间是否存在分布差异性或秩分不一致性 |
一般流程
一般来说,我们在进行差异比较时所获得的的数据并不一一对应的关系,因此我们使用的都为独立样本的检验方式。我们在进行检验时需要注意以下两个问题,其将决定我们最重的检验方法:
- 正态性
- 方差齐性
因很多检验方法有着样本正态性和两样本间方差齐性的假设,因此在正态性和方差齐性不能够得到充足满足的前提下,我们需要谨慎的选择适用的检验方法。
正态性检验方法
-
scipy.stats.kstest(rvs, cdf, args=(), N=20, alternative='two-sided', mode='approx')
使用Kolmogorov-Smirnov检验分布。
参数:
- rvs: 待检验的数据
- cdf: 检验方法,'norm'为正态性检验
alternative: 默认为双尾检验
返回:第一个参数为统计数,第二个为P值
-
scipy.stats.shapiro(x, a=None, reta=False)
使用Shapiro-Wilk检验正态性。不适用于样本数大于5000的正态性检验
直接输入待检验的数据,返回值为统计量和P值。
-
scipy.stats.normaltest(a, axis=0)
使用D'Agostino's K-squared test和Pearson's chi-squared test检验正态性。
输入为待检测的数据,返回值为统计量和P值。
-
scipy.stats.anderson(x, dist='norm')
使用Anderson-Darling检验数据是否符合某一分布。
参数:
- x: 待检验的数据
dist: 需要检验的分布,可选{'norm','expon','logistic','gumbel','gumbel_l','gumbel_r','extreme1'}
返回: 统计量,评判值和显著性水平。
对于正态分布来说,显著性水平分别为[15%, 10%, 5%, 2.5%, 1%]
方差齐性检验方法
-
输入为多个样本的数据,可以有着不同的长度。返回值为统计量和P值。
原假设为所有输入的样本数据来自于方差齐性的群体。
对于非正态分布数据,Levene's test更加的鲁棒。
-
进行Levene方差齐性检验。
参数:
center: {'mean','median','trimmed'} 默认为median。
median:推荐有偏斜非正态分布使用
mean:推荐对称中尾分布使用
trimmed:推荐重尾分布使用
- proportiontocut: 当center是trimmed时,两端的数据被删除。默认为0.05的数据。
原假设为所有输入的样本数据来自于方差齐性的群体。
差异显著性检验方法
Student T Test
学生T检验被用来比较两样本平均值之间是否具有显著性差异。要求数据是正态分布的。
常见的类型:
One-Sample T-Test: 用来比较单个样本的平均值和一个给定的理论值之间是否存在差异。
scipy.stats.ttest_1samp(a, popmean, axis=0, nan_policy='propagate')
参数:
- a: 观测到的样本数据
popmean: 总体的平均数
原假设为样本均值与总体均值相等。
Independent Samples T-Test: 用来比较两组独立样本平均值是否有显著差异。
scipy.stats.ttest_ind(a, b, axis=0, equal_var=True, nan_policy='propagate')
参数:
- a,b: 需要计算的两个独立样本
equal_var: 两个样本是否有着相同的方差。如果有着相同的方差,使用标准的两独立样本t检验流程;如果否,则使用无方差齐性的假设的Welch's t检验。
原假设为均值相等。当我们观测到大于显著性水平的值时,不能够拒绝原假设。
Paired T-Test: 用来比较两个相关样本组之间的平均值是否有显著差异。
scipy.stats.ttest_rel(a, b, axis=0, nan_policy='propagate')
原假设为均值相等。当我们观测到大于显著性水平的值时,不能够拒绝原假设。
ANOVA
ANOVA(Analysis of variance)多样本均值显著性检验。原假设为样本均值均相同。
Wilcoxon秩和检验
Wilcoxon signed-rank test配对样本是否来自于同一个分布的检验。原假设为两配对样本来自于同一个分布。Wilcoxon秩和检验是配对T检验的非参数版本。
scipy.stats.wilcoxon(x, y=None, zero_method='wilcox', correction=False, alternative='two-sided')
当输入y为空时,x应为两样本间各项的差值。
Mann-Whitney U检验
Mann–Whitney U test一种检验两个独立样本是否是从同一个分布中获取到的非参数检验方法。
scipy.stats.mannwhitneyu(x, y, use_continuity=True, alternative=None)
当每个样本样本数在20个以上且两样本独立时使用。
Kruskal-Wallis H检验
Kruskal-Wallis H test是用来检验两个及以上独立样本是否来自同一个分布,是Mann-Whitney U test的拓展。
方法的选择
样本 | 正态性 | 等方差 | 方法 | 说明 |
单样本 | 正态分布 | - | ttest_1samp | |
单样本 | 非正态分布 | - | wilcoxon | 是否等于0 |
两独立样本 | 正态分布 | 等方差 | ttest_ind | |
两独立样本 | 正态分布 | 异方差 | ttest_ind | equal_var设置为False |
两独立样本 | 非正态分布 | - | mannwhitneyu | 样本数在20以上 |
两配对样本 | 正态分布 | - | ttest_rel | |
多独立样本 | 正态分布 | - | f_oneway | |
多独立样本 | 非正态分布 | - | kruskal |
参考
- 如何理解数据差异的显著性检验 ?
- Normality test
- scipy.stats.kstest
- Kolmogorov-Smirnov检验
- scipy.stats.shapiro
- Shapiro-Wilk检验
- scipy.stats.normaltest
- D'Agostino's K-squared test
- Pearson's chi-squared test
- scipy.stats.anderson
- Anderson-Darling检验
- F-test of equality of variances
- scipy.stats.bartlett
- Bartlett's test
- scipy.stats.levene
- Levene's test
- Student's T Test
- scipy.stats.ttest_1samp
- scipy.stats.ttest_ind
- scipy.stats.ttest_rel
- ANOVA
- scipy.stats.f_oneway
- Wilcoxon signed-rank test
- scipy.stats.wilcoxon
- Mann–Whitney U test
- scipy.stats.mannwhitneyu
- Kruskal-Wallis H test
- scipy.stats.kruskal