大家好,欢迎来到IT知识分享网。
来源:我得学城本文约5900字,建议阅读10分钟本文我们将介绍比较两个(或多个)分布以及评估它们之间差异的大小和显著性的不同方法。
在数据科学中,比较不同组之间的变量的经验分布是一个常见的问题。特别是在因果推断中,当我们需要评估随机化的质量时,这个问题经常出现。
当我们想评估某个政策(或用户体验特性、广告活动、药物等)的因果效应时,因果推断中的黄金标准是随机对照试验(randomized control trials),也被称为A/B测试( A/B tests)。
在实践中,我们选择一个样本进行研究,并随机将其分为对照组(control)和实验组(treatment),然后比较两个组之间的结果。随机化确保两个组之间唯一的区别是实验,平均而言,这样我们就可以将结果差异归因于实验效果。
问题在于,尽管进行了随机化,但两个组永远不会完全相同。
然而,有时它们甚至都不是“相似的”。
例如,一个组中可能有更多的男性或年长的人等。我们通常称这些特征为协变量(covariates)或控制变量(control variables)。
当出现这种情况时,我们无法确定结果差异仅仅是由于实验导致的,而不能归因于不平衡的协变量。因此,在随机化之后,检查所有观察变量在各组之间是否平衡,并且是否没有系统性差异,是非常重要的。
另一种选择是通过分层抽样来确保在先验条件下某些协变量是平衡的。
我们将考虑两种不同的方法,即可视化(visual)和统计方法(statistical)。
这两种方法通常在直观性和严谨性方面进行权衡:通过图表,我们可以快速评估和探索差异,但很难确定这些差异是系统性的还是由于噪音引起的。
文章来源:
https://towardsdatascience.com/how-to-compare-two-or-more-distributions-9b06ee4d30bf 作者为 Matteo Courthoud
1. 示例介绍
让我们假设我们需要对一组个体进行实验,并将他们随机分为实验组和对照组。我们希望他们在尽可能多的方面相似,以便将两组之间的任何差异归因于实验效果本身。我们还将实验组分为不同的分组,以测试不同的实验方法(例如同一药物的轻微变化)。
针对这个例子,我模拟了一个包含1000个个体的数据集,我们观察到其中一组特征。我从src.dgp导入了数据生成过程dgp_rnd_assignment(),还从src.utils导入了一些绘图函数和库。
我们拥有 1000 个个体的信息,我们观察到他们的性别、年龄和每周收入。每个个体被分配到实验组或对照组,并且接受实验的个体分布在四个实验组中。
2. 两组对比—绘图(Plots)
我们先从最简单的设置开始:我们想比较实验组和对照组之间收入的分布。我们首先探索可视化方法,然后再使用统计方法。第一种方法的优势是直观性,而第二种方法的优势是严谨性。
在大多数可视化中,我将使用 Python 的 seaborn 库。
2.1 箱线图(Boxplot)
第一种可视化方法是箱线图。
箱线图在总结统计和数据可视化之间取得了很好的平衡。箱子的中间代表中位数,边界分别代表第一(Q1)和第三(Q3)四分位数。而箱线图的须(whiskers)则延伸到离箱子外部超过 1.5 倍四分位距(Q3 – Q1)的第一个数据点。落在须外的点会单独绘制,通常被认为是异常值(outliers)。
因此,箱线图既提供了总结统计信息(箱子和须),又提供了直接的数据可视化(异常值)。
实验组的收入分布似乎稍微更分散:橙色的箱子更大,须覆盖的范围更广。然而,箱线图的问题在于它隐藏了数据的形状,只告诉我们一些总结统计信息,而不显示实际的数据分布。
2.2 直方图(Histogram)
绘制分布最直观的方法是使用直方图。
直方图将数据分组到等宽的箱(bins)中,并绘制每个箱内的观察次数。
这个图表存在多个问题:
- 由于两组观察数量不同,两个直方图不可比较。
- 箱子的数量是任意的。
我们可以通过使用 stat 选项绘制密度而不是计数,并将 common_norm 选项设置为 False 来解决第一个问题,以单独对每个直方图进行归一化。
现在这两个直方图是可比较的!
然而,一个重要的问题仍然存在:箱子的大小是任意的。在极端情况下,如果我们将数据分组得较少,就会出现最多只有一个观察的箱子;如果我们将数据分组得更多,就会得到一个单一的箱子。在这两种情况下,如果我们过度夸大,图表将失去信息性。这是一个经典的偏差-方差权衡(bias-variance trade-off)。
2.3 核密度估计(Kernel Density Estimation)
一种可能的解决方案是使用核密度函数,它尝试用连续函数来近似直方图,称之为核密度估计(KDE)。
从图中可以看出,实验组的收入估计核密度具有更”厚的尾部”(即方差较高),而平均值在各组之间似乎相似。
核密度估计的问题在于它有点像黑匣子,可能掩盖了数据的相关特征。
2.4 累积分布函数(Cumulative Distribution)
两个分布的更透明的表示是它们的累积分布函数。在 x 轴(收入)的每个点上,我们绘制了具有相等或更低值的数据点的百分比。累积分布函数的主要优点是:
- 我们不需要做任何任意选择(例如,箱子的数量);
- 我们不需要进行任何近似(例如,使用 KDE),而是表示所有数据点。
我们如何解读这个图呢?
- 由于这两条线在 0.5(y 轴)左右交叉,这意味着它们的中位数相似;
- 由于橙色线在左侧高于蓝色线,在右侧低于蓝色线,这意味着实验组的分布具有更厚的尾部。
2.5 Q-Q图
一个相关的方法是Q-Q 图,其中Q代表分位数。Q-Q图将两个分布的分位数相互绘制。如果两个分布相同,我们应该得到一条 45 度的线。
Python 中没有原生的 Q-Q 图函数,虽然 statsmodels 包提供了一个 plot 函数,但使用起来相对繁琐。因此,我们将手动绘制。
首先,我们需要使用百分位函数计算两组的四分位数。
现在我们可以将两个分位数分布相互绘制,并绘制 45 度线,代表完美拟合的基准。
Q-Q 图对于累积分布图来说提供了非常相似的解释。实验组的收入具有相同的中位数(线在中心交叉),但尾部更宽(点在左端下方,在右端上方)。
3. 两组对比—检验(Tests)
到目前为止,我们已经看到了不同的可视化方法来显示分布之间的差异。可视化的主要优势是直观性:我们可以通过目测差异并直观地评估它们。
然而,我们可能希望更加严谨,并尝试评估分布之间差异的统计显著性,即回答“观察到的差异是系统性的还是由于抽样噪声?”的问题。
现在,我们将分析不同的检验方法来区分两个分布。
3.1 T检验(T-test)
第一个也是最常见的检验是学生t检验。T检验通常用于比较均值。在这种情况下,我们想要检验两个组之间的收入分布的均值是否相同。两个均值比较检验的检验统计量为:
其中 是样本均值, 是样本标准差。在一些温和的条件下,检验统计量的渐近分布服从学生t分布。
我们使用 scipy 库的 ttest_ind 函数进行t检验。该函数返回检验统计量和相应的 值。
检验的 值为 0.12,因此我们不拒绝在实验组和对照组之间均值无差异的原假设。
注意:t 检验假设两个样本的方差相同,因此其估计是在联合样本上计算的。Welch’s t检验允许两个样本的方差不相等。
3.2 标准化均值差异(Standardized Mean Difference,SMD)
通常,当我们进行随机对照试验或 A/B 测试时,对实验组和对照组之间所有变量的均值差异进行测试是一种良好的做法。
然而,由于 t检验统计量的分母依赖于样本大小,t检验因使得 值难以在不同研究间进行比较而受到批评。实际上,我们可能在一个差异幅度非常小但样本量很大的实验中得到显著结果,而在一个差异幅度很大但样本量很小的实验中得到非显著结果。
一个被提出的解决方案是标准化均值差异(SMD)。
顾名思义,这不是一个适当的检验统计量,而只是一个标准化的差异,可以计算为:
通常,小于 0.1 的值被视为“小”的差异。
在进行 A/B 测试时,将实验组和对照组之间所有变量的平均值以及两者之间的距离度量(无论是 t 检验还是 SMD)汇总到一个称为平衡表的表格中是一个好的做法。
我们可以使用 causalml 库中的 create_table_one 函数生成该表格。正如函数名称所示,平衡表应该是在进行 A/B 测试时首先呈现的表格。
在前两列中,我们可以看到实验组和对照组之间不同变量的平均值,括号内为标准误差。在最后一列中,SMD 的值对应的标准化差异对于所有变量都大于 0.1,表明这两组可能存在差异。
3.3 Mann–Whitney U 检验
另一种替代的检验是 Mann–Whitney U 检验。该检验的零假设(null hypothesis)是两组具有相同的分布,而备择假设(alternative hypothesis)是一组的值比另一组更大(或更小)。
与我们之前见过的其他测试不同,Mann–Whitney U 检验不受异常值的影响,而是集中在分布的中心。
检验步骤如下:
- 将所有数据点组合并对它们进行排名(按升序或降序排列);
- 计算 ,其中 是第一组数据点的排名之和, 是第一组中的数据点数量;
- 计算第二组的 相似性;
- 检验统计量由 给出。
在零假设下,即两个分布之间没有系统的排名差异(即相同的中位数),检验统计量的渐近正态分布具有已知的均值和方差。
计算 和 的背后的直觉是:如果第一个样本中的值都大于第二个样本中的值,则 ,因此 将为零(最小可达值)。否则,如果两个样本相似, 和 将非常接近于 (最大可达值)。
我们使用 scipy 库的 mannwhitneyu 函数进行测试。
我们得到一个 值为 0.6,这意味着我们不拒绝收入分布在实验组和对照组中相同的零假设。
注意:与 t 检验类似,Mann-Whitney U 检验也存在一种适用于两个样本方差不相等的版本,即 Brunner-Munzel 检验。
3.4 置换检验(Permutation Tests)
非参数的另一种选择是置换检验。
其思想是,在零假设下,两个分布应该是相同的,因打乱(shuffling)组标签不会显著改变任何统计量。
我们可以选择任何统计量,并检查原始样本中该统计量的值与组标签排列的分布相比如何。例如,让我们将样本均值之差作为测试统计量。
置换检验给出的 值为 0.053,在 5%的显著性水平下略微不拒绝零假设。
我们如何解释 值呢?这意味着数据中的均值差异大于 1-0.053=94.4%的置换样本均值差异。
我们可以通过将测试统计量在置换样本中的分布与其样本值进行绘图来可视化测试结果。
正如我们所看到的,样本统计量在置换样本中的值相对来说非常极端,但并不过分。
3.5 卡方检验(Chi-Squared Test)
卡方检验是一种非常强大的检验方法,主要用于测试频率的差异。
卡方检验的其中一个较少被人了解的应用是测试两个分布之间的相似性。其思想是将两个组的观测值分组。如果两个分布是相同的,我们期望每个组中的观测频数相同。重要的是,我们需要每个组中有足够的观测值,以使检验有效。
移步一文掌握卡方检验 了解更多。
我将生成与对照组中收入分布的十分位数对应的分组,并计算如果两个分布相同,则实验组中每个分组中预期的观测数目。
现在我们可以通过比较实验组中观测到的观测数目( )和预期观测数目( )来进行检验,分别对应于每个分组。检验统计量由下式给出:
其中,分组由 索引, 是分组 中观测到的数据点数, 是分组 中预期的数据点数。由于我们使用对照组中收入分布的十分位数生成了这些分组,我们期望实验组中每个分组中的观测数目在各个分组中相同。检验统计量在渐近情况下服从卡方分布。
为了计算检验统计量和检验的 值,我们使用 scipy 中的 chisquare 函数。
与迄今为止的所有其他测试不同,卡方检验强烈拒绝了两个分布相同的零假设。
为什么会这样?
原因在于两个分布具有类似的中心但不同的尾部,而卡方检验测试的是整个分布的相似性,而不仅仅是中心,这与我们之前的测试不同。
这个结果告诉我们一个警示故事:在从 值中得出盲目结论之前,了解自己实际在测试什么非常重要!
3.6 Kolmogorov-Smirnov 检验
Kolmogorov-Smirnov 检验可能是比较分布的最常用的非参数检验。
Kolmogorov-Smirnov 检验的思想是比较两个组的累积分布。特别地,Kolmogorov-Smirnov 检验统计量是两个累积分布之间的最大绝对差异。
Kolmogorov-Smirnov 检验统计量公式如下:
其中 和 是两个累积分布函数, 是底层变量的值。Kolmogorov-Smirnov 检验统计量的渐近分布是 Kolmogorov 分布。
为了更好地理解这个检验,让我们绘制累积分布函数和检验统计量。首先,我们计算累积分布函数。
我们现在需要找到累积分布函数之间绝对距离最大的点。
我们可以通过绘制两个累积分布函数和检验统计量的值来可视化检验统计量的值。
从图中可以看出,检验统计量的值对应于在收入约为 650 时两个累积分布之间的距离。在那个收入值下,我们可以看到两个组之间的不平衡最大。
我们现在可以使用 scipy 的 kstest 函数执行实际的检验。
值低于 5%:我们以 95%的置信度拒绝了两个分布相同的零假设。
注意1:KS 检验过于保守,很少拒绝零假设。Lilliefors 检验通过使用不同的测试统计分布(Lilliefors 分布)来纠正这种偏差。
注意2:KS 检验使用的信息非常有限,因为它只在一个点上比较了两个累积分布:距离最大的点。而Anderson-Darling 检验和 Cramér-von Mises 检验则通过积分沿整个定义域比较了两个分布(两者的差异在于平方距离的加权)。
4. 多组-绘图(Plots)
到目前为止,我们只考虑了两组的情况:实验组和对照组。
但如果我们有多个组呢?我们上面介绍的一些方法可以很好地适用于多个组,而其他方法则不行。
作为一个工作示例,我们现在要检查在不同的实验方案中收入分布是否相同。
4.1 箱线图(Boxplot)
当我们有几个组时,箱线图可以很好地扩展,因为我们可以将不同的箱子(box)并排放置。
从图中可以看出,在不同的实验方案中,收入分布似乎是不同的,较高编号的方案具有较高的平均收入。
4.2 小提琴图(Violin Plot)
小提琴图是箱线图的一个很好的扩展,它结合了摘要统计和核密度估计。小提琴图沿着 轴显示单独的密度图,使它们不会重叠。默认情况下,它还在内部添加了一个小型箱线图。
与箱线图类似,小提琴图表明在不同的实验方案中,收入是不同的。
4.3 山脊图(Ridgeline Plot)
最后,山脊图沿 轴绘制多个核密度分布,使它们比小提琴图更直观,但部分重叠。
不幸的是,matplotlib 和 seaborn 中都没有默认的 Ridgeline 图。我们需要从 joypy 导入它。
再次,Ridgeline 图表明较高编号的实验方案具有较高的收入。从这个图中,我们也更容易看出分布的不同形状。
5. 多组-检验
最后,让我们考虑用于比较多个组的假设检验。为简单起见,我们将集中讨论最流行的假设检验方法:F 检验。
5.1 F检验
在多组情况下,最常见的检验方法是 F检验。
F 检验用于比较不同组之间变量的方差。这种分析也称为方差分析(ANOVA)。
实际上,F 检验统计量如下所示:
其中 是组的数量, 是观测数量, 是总体均值, 是组 内的均值。在组独立的零假设下,F 统计量服从 F 分布。
检验的 值接近于零,表示我们强烈拒绝了在不同实验方案之间收入分布无差异的零假设。
6. 结论
本文介绍了许多不同的方法来比较两个或多个分布,我们看到了不同的方法可能更适用于不同的情况。可视化方法对于建立直观理解非常有用,但统计方法对于决策至关重要,因为我们需要能够评估差异的大小和统计显著性。
希望本文对各位的科研工作有所帮助。
获取本文资料,请关注微信公众号数据派THU至后台回复“”进行下载。
参考文献
[1] Student, The Probable Error of a Mean (1908), Biometrika.
[2] F. Wilcoxon, Individual Comparisons by Ranking Methods (1945), Biometrics Bulletin.
[3] B. L. Welch, The generalization of “Student’s” problem when several different population variances are involved (1947), Biometrika.
[4] H. B. Mann, D. R. Whitney, On a Test of Whether one of Two Random Variables is Stochastically Larger than the Other (1947), The Annals of Mathematical Statistics.
[5] E. Brunner, U. Munzen, The Nonparametric Behrens-Fisher Problem: Asymptotic Theory and a Small-Sample Approximation (2000), Biometrical Journal.
[6] A. N. Kolmogorov, Sulla determinazione empirica di una legge di distribuzione (1933), Giorn. Ist. Ital. Attuar..
[7] H. Cramér, On the composition of elementary errors (1928), Scandinavian Actuarial Journal.
[8] R. von Mises, Wahrscheinlichkeit statistik und wahrheit (1936), Bulletin of the American Mathematical Society.
[9] T. W. Anderson, D. A. Darling, Asymptotic Theory of Certain “Goodness of Fit” Criteria Based on Stochastic Processes (1953), The Annals of Mathematical Statistics.
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/123708.html