3.1.2 假设检验: 比较两个组

对于简单的统计检验,我们将可以使用scipy的子摸块scipy.stats:

In [17]:

  1. 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]:

  1. stats.ttest_1samp(data['VIQ'], 0)

Out[18]:

  1. (30.088099970849328, 1.3289196468728067e-28)

根据$10^-28$的p-值,我们可以声称IQ(VIQ的测量值)总体平均数不是0。

3.1.2 假设检验: 比较两个组 - 图1

3.1.2.1.2 双样本 t-检验: 检验不同总体的差异

我们已经看到男性和女性总体VIQ平均数是不同的。要检验这个差异是否是显著的,我们可以用scipy.stats.ttest_ind()进行双样本检验:

In [19]:

  1. female_viq = data[data['Gender'] == 'Female']['VIQ']
  2. male_viq = data[data['Gender'] == 'Male']['VIQ']
  3. stats.ttest_ind(female_viq, male_viq)

Out[19]:

  1. (-0.77261617232750113, 0.44452876778583217)

3.1.2.2 配对实验: 同一个体的重复测量

PIQ、VIQ和FSIQ给出了IQ的3种测量值。让我检验一下FISQ和PIQ是否有显著差异。我们可以使用双样本检验:

In [20]:

  1. stats.ttest_ind(data['FSIQ'], data['PIQ'])

Out[20]:

  1. (0.46563759638096403, 0.64277250094148408)

使用这种方法的问题是忘记了两个观察之间有联系: FSIQ 和 PIQ 是在相同的个体上进行的测量。因此被试之间的差异是混淆的,并且可以使用"配对实验"或"重复测量实验"来消除。

In [21]:

  1. stats.ttest_rel(data['FSIQ'], data['PIQ'])

Out[21]:

  1. (1.7842019405859857, 0.082172638183642358)

3.1.2 假设检验: 比较两个组 - 图2

这等价于单样本的差异检验:

In [22]:

  1. stats.ttest_1samp(data['FSIQ'] - data['PIQ'], 0)

Out[22]:

  1. (1.7842019405859857, 0.082172638183642358)

3.1.2 假设检验: 比较两个组 - 图3

T-tests假定高斯误差。我们可以使用威尔科克森符号秩检验, 放松了这个假设:

In [23]:

  1. stats.wilcoxon(data['FSIQ'], data['PIQ'])

Out[23]:

  1. (274.5, 0.10659492713506856)

注意: 非配对实验对应的非参数检验是曼惠特尼U检验, scipy.stats.mannwhitneyu()

练习

  • 检验男性和女性重量的差异。
  • 使用非参数检验来检验男性和女性VIQ的差异。

结论: 我们发现数据并不支持男性和女性VIQ不同的假设。