3.1.2 假设检验: 比较两个组
对于简单的统计检验,我们将可以使用scipy的子摸块scipy.stats:
In [17]:
from scipy import stats
也看一下: Scipy是一个很大的库。关于整个库的快速预览,可以看一下scipy 章节。
3.1.2.1 Student’s t检验: 最简单的统计检验
3.1.2.1.1 单样本 t-检验: 检验总体平均数的值
scipy.stats.ttest_1samp()检验数据总体的平均数是否可能等于给定值 (严格来说是否观察值来自于给定总体平均数的正态分布)。它返回一个T统计值以及p-值 (见函数的帮助):
In [18]:
stats.ttest_1samp(data['VIQ'], 0)
Out[18]:
(30.088099970849328, 1.3289196468728067e-28)
根据$10^-28$的p-值,我们可以声称IQ(VIQ的测量值)总体平均数不是0。
3.1.2.1.2 双样本 t-检验: 检验不同总体的差异
我们已经看到男性和女性总体VIQ平均数是不同的。要检验这个差异是否是显著的,我们可以用scipy.stats.ttest_ind()进行双样本检验:
In [19]:
female_viq = data[data['Gender'] == 'Female']['VIQ']
male_viq = data[data['Gender'] == 'Male']['VIQ']
stats.ttest_ind(female_viq, male_viq)
Out[19]:
(-0.77261617232750113, 0.44452876778583217)
3.1.2.2 配对实验: 同一个体的重复测量
PIQ、VIQ和FSIQ给出了IQ的3种测量值。让我检验一下FISQ和PIQ是否有显著差异。我们可以使用双样本检验:
In [20]:
stats.ttest_ind(data['FSIQ'], data['PIQ'])
Out[20]:
(0.46563759638096403, 0.64277250094148408)
使用这种方法的问题是忘记了两个观察之间有联系: FSIQ 和 PIQ 是在相同的个体上进行的测量。因此被试之间的差异是混淆的,并且可以使用"配对实验"或"重复测量实验"来消除。
In [21]:
stats.ttest_rel(data['FSIQ'], data['PIQ'])
Out[21]:
(1.7842019405859857, 0.082172638183642358)
这等价于单样本的差异检验:
In [22]:
stats.ttest_1samp(data['FSIQ'] - data['PIQ'], 0)
Out[22]:
(1.7842019405859857, 0.082172638183642358)
T-tests假定高斯误差。我们可以使用威尔科克森符号秩检验, 放松了这个假设:
In [23]:
stats.wilcoxon(data['FSIQ'], data['PIQ'])
Out[23]:
(274.5, 0.10659492713506856)
注意: 非配对实验对应的非参数检验是曼惠特尼U检验, scipy.stats.mannwhitneyu()。
练习
- 检验男性和女性重量的差异。
- 使用非参数检验来检验男性和女性VIQ的差异。
结论: 我们发现数据并不支持男性和女性VIQ不同的假设。