t 检验:适用于均值差异的假设检验。
- Z 检验:用于大样本或已知总体方差的均值差异检验。
- 卡方检验:适用于分类变量的独立性或拟合优度检验。
- 方差分析(ANOVA):用于多个组均值的比较。
- Mann-Whitney U 检验:用于比较两个独立样本的非正态分布数据。
t 检验(t-test)
原理:t 检验主要用于判定两个样本均值之间是否存在显著差异。其基本假设为两个样本源自同一分布,若它们的均值差异明显,则暗示两者可能分属于不同的分布。
原假设(H0):两个样本的均值不存在差异,即。 备择假设(H1):两个样本的均值有显著差异,即。
核心公式:t 检验的关键在于计算 t 统计量,以此来判断样本均值间的差异。对于独立样本 t 检验(双样本 t 检验),公式如下:

其中,和分别为两个样本的均值;和为两个样本的方差;和为两个样本的样本数。通过 t 值查找 t 分布表可得到 p 值,p 值越小,就越能表明样本间差异显著。若 p 值小于显著性水平(通常为 0.05),则拒绝原假设。
推导过程:首先假定两个样本来自同一分布,接着计算样本均值。依据中心极限定理,样本均值的分布呈正态分布。然后计算样本之间的标准误差,并利用公式算出 t 值。最后通过查表或计算获取 p 值,以判断能否拒绝原假设。
优缺点:优点:t 检验操作简便,适用于正态分布的数据。缺点:在面对非正态分布数据以及样本量较小时,结果不够稳定。此外,t 检验还要求样本的方差大致相等。
适用场景:当需要比较两个样本的均值差异时,比如实验组与控制组在表现上的差异等情况。
import numpy as npimport pandas as pdimport matplotlib.pyplot as pltimport seaborn as snsfrom scipy import stats
生成两个不同均值的样本数据np.random.seed(42)group1 = np.random.normal(50, 10, 100) # 均值为50,标准差为10group2 = np.random.normal(55, 12, 100) # 均值为55,标准差为12
t-test 两组数据的均值t_stat, p_value = stats.ttest_ind(group1, group2)print(f”T-statistic: {t_stat}, P-value: {p_value}“)
数据可视化plt.figure(figsize=(10, 6))
密度图sns.kdeplot(group1, label=“Group 1 (Mean=50)”, color=“blue”, shade=True)sns.kdeplot(group2, label=“Group 2 (Mean=55)”, color=“red”, shade=True)
箱线图plt.subplot(1, 2, 2)sns.boxplot(data=[group1, group2], palette=[“blue”, “red”])plt.xticks([0, 1], [“Group 1”, “Group 2”])
plt.suptitle(“t-Test Analysis: Group Comparison”, fontsize=16)plt.tight_layout()plt.show()

在生成的图示中:
左侧部分呈现了两个组的核密度估计(KDE)曲线,清晰地描绘出各自的数据分布态势。右侧部分则以箱线图的形式,直观对比了两个组的中位数及四分位数分布情况。结合这两个图表,我们能够直观地洞察到两个组在均值层面上的显著差异。
z 检验(z-test)
原理:z 检验与 t 检验类似,主要在样本量较大且已知总体标准差的情况下使用。它能够用于检验单样本与总体均值的差异,也能够对两个样本的均值差异进行比较。
原假设(H0):样本均值与总体均值不存在显著差异,或者两个样本均值无显著差异。备择假设(H1):样本均值与总体均值有显著差异,或者两个样本均值有显著差异。
z 检验的核心公式为:。其中,为样本均值;为总体均值;为已知的总体标准差;为样本数量。
推导过程:在大样本的情形下,样本均值的分布近似为正态分布。计算样本均值与总体均值的差异,并将其标准化为 z 分布。依据 z 值在标准正态分布中查找 p 值。
优缺点:优点:z 检验适用于大样本数据,计算较为简单,且适用性广泛。缺点:要求已知总体标准差,主要适用于大样本,不适用于小样本数据。
适用场景:适用于已知总体方差的大样本数据。
z-test示例,使用一个标准的正态分布数据集import numpy as npimport seaborn as snsimport matplotlib.pyplot as pltfrom scipy import stats
生成数据:一个已知均值和方差的总体np.random.seed(42)population_mean = 100population_std = 15n = 50
从该总体中抽取样本sample = np.random.normal(population_mean, population_std, n)
假设总体均值为105,进行单样本z检验sample_mean = np.mean(sample)sample_std = np.std(sample, ddof=1)z_stat = (sample_mean - 105) / (population_std / np.sqrt(n))p_value = 2 * (1 - stats.norm.cdf(abs(z_stat)))
print(f”Z-statistic: {z_stat}, P-value: {p_value}“)
数据可视化plt.figure(figsize=(10, 6))
核密度估计(KDE)显示样本的分布sns.kdeplot(sample, label=“Sample Distribution”, color=“green”, shade=True)
添加总体均值和假设均值的竖线plt.axvline(np.mean(sample), color=‘blue’, linestyle=’—’, label=‘Sample Mean’)plt.axvline(105, color=‘red’, linestyle=’—’, label=‘Hypothetical Mean’)
plt.legend()plt.title(“Z-Test: Sample vs Hypothetical Mean”)plt.tight_layout()plt.show()

- 核密度估计(KDE)展示了抽样数据的分布。
- 红色竖线表示假设的总体均值,蓝色虚线表示样本均值。这可以直观地看到样本均值与假设均值的偏差情况。
卡方检验(Chi-Square Test)
原理:卡方检验主要针对分类变量进行统计推断,其主要用途在于检验变量之间的独立性或者分类分布的拟合度。基本原理是对比观察到的频数与期望的频数之间的差异,以此来判断变量之间是否相互独立。原假设(H0):变量之间彼此独立(不存在关联)。备择假设(H1):变量之间不独立(存在显著关联)。核心公式:卡方检验的统计量公式为:(\chi ^{2}=\sum\frac{(O-E)^{2}}{E})。其中,(O)是观察值,(E)是期望值。推导过程:首先根据原假设计算出每个组合的期望频数。接着使用公式计算卡方统计量,也就是观察值与期望值之间的平方差除以期望值。然后查找卡方分布表,依据自由度和显著性水平来判断是否拒绝原假设。优缺点:优点:适用于分类数据,操作较为简单。尤其适合用于对样本频率进行显著性检验。缺点:需要有足够大的样本量,在小样本情况下可能得出错误的结论;同时,当期望频数较小时,卡方检验的效果不佳。适用场景:常常用于检验两个类别变量之间的独立性或者拟合优度。
import numpy as npimport pandas as pdimport matplotlib.pyplot as pltimport seaborn as snsfrom scipy.stats import chi2_contingency
创建列联表(例如性别和是否购买)data = {‘Gender’: [‘Male’, ‘Male’, ‘Female’, ‘Female’, ‘Male’, ‘Female’, ‘Female’, ‘Male’],‘Purchased’: [‘Yes’, ‘No’, ‘Yes’, ‘No’, ‘Yes’, ‘Yes’, ‘No’, ‘No’]}
df = pd.DataFrame(data)
创建列联表contingency_table = pd.crosstab(df[‘Gender’], df[‘Purchased’])print(contingency_table)
卡方检验chi2, p, dof, expected = chi2_contingency(contingency_table)print(f”Chi2 Statistic: {chi2}, P-value: {p}“)
数据可视化plt.figure(figsize=(8, 6))sns.heatmap(contingency_table, annot=True, cmap=“YlGnBu”, fmt=“d”)plt.title(“Contingency Table Heatmap”)plt.show()

图中显示了一个性别和是否购买的列联表(交叉表),并用热图可视化两个变量的频数分布。通过此表和图,可以观察到不同性别下是否购买的频率分布。
方差分析(ANOVA, Analysis of Variance)
原理:方差分析(ANOVA)主要用于比较多个组的均值,以判断这些组之间是否存在显著差异。其通过对比组间方差与组内方差的比值,来评估不同组的均值是否相同。
原假设(H0):多个样本组的均值相等。备择假设(H1):至少有一个样本组的均值不相等。
核心公式:ANOVA 使用的统计量是 F 值,公式为:

其中,是第组的均值;是总体均值;是第组的样本数;是总样本数;是组数。
推导过程:首先计算每组均值与总体均值之间的方差(组间方差)。接着计算每组内部数据与组均值的方差(组内方差)。然后通过 F 统计量的比值,查找 F 分布表,以判断是否拒绝原假设。
优缺点:优点:可以同时比较多个组,适用于多个样本组的均值差异检验。缺点:要求样本数据满足正态性,且各组之间的方差相等。
适用场景:用于比较三个或更多组之间的均值差异,常用于实验设计分析。
import numpy as npimport pandas as pdimport matplotlib.pyplot as pltimport seaborn as snsfrom scipy import stats
生成三个组的数据np.random.seed(42)group1 = np.random.normal(50, 10, 30)group2 = np.random.normal(55, 10, 30)group3 = np.random.normal(60, 10, 30)
方差分析f_stat, p_value = stats.f_oneway(group1, group2, group3)print(f”F-statistic: {f_stat}, P-value: {p_value}“)
数据可视化plt.figure(figsize=(12, 6))
箱线图显示各组的分布sns.boxplot(data=[group1, group2, group3], palette=“Set3”)plt.xticks([0, 1, 2], [‘Group 1’, ‘Group 2’, ‘Group 3’])plt.title(“ANOVA Analysis: Group Comparison”)plt.show()

箱线图展示了三个组的分布情况,包括每个组的中位数和四分位数。通过箱线图,可以直观地观察各组之间均值和数据分布的差异。
Mann-Whitney U 检验
原理:Mann-Whitney U 检验属于一种非参数检验方法,主要用于比较两个独立样本的分布是否相同,尤其在数据不满足正态分布的情况下非常适用。
原假设(H0):两个样本的分布完全相同。备择假设(H1):两个样本的分布不同。
核心公式:Mann-Whitney U 检验的统计量为 U 值,计算公式为:,,其中和分别是两个样本的样本量,是样本 1 的秩和。
推导过程:首先将两个样本的数据进行排序,并为其分配秩次。接着计算每个样本的秩和,进而计算 U 值。然后通过 U 值查找标准正态分布或 U 分布表,以此来判断是否拒绝原假设。
优缺点:优点:适用于非正态分布的数据,不要求方差相等。缺点:不能精确地评估均值,只能对分布进行比较。
适用场景:当两个独立样本的数据不满足正态分布时,常用于社会科学实验和非正态分布数据的分析。
import numpy as npimport pandas as pdimport matplotlib.pyplot as pltimport seaborn as snsfrom scipy.stats import mannwhitneyu
生成两个非正态分布的数据np.random.seed(42)group1 = np.random.exponential(scale=2, size=100)group2 = np.random.exponential(scale=3, size=100)
Mann-Whitney U 检验u_stat, p_value = mannwhitneyu(group1, group2)print(f”U-statistic: {u_stat}, P-value: {p_value}“)
数据可视化plt.figure(figsize=(10, 6))
KDE 图显示分布差异sns.kdeplot(group1, label=“Group 1”, color=“blue”, shade=True)sns.kdeplot(group2, label=“Group 2”, color=“orange”, shade=True)plt.title(“Mann-Whitney U Test: Group Distributions”)plt.legend()plt.show()

KDE图展示了两个组的分布差异,数据明显呈现非正态分布。通过这些图,可以观察两个组在分布形状上的不同。