如何在Python中进行假设测试(附例子)

159 阅读5分钟

假设检验是我们用来拒绝或不能拒绝某些统计假设的正式统计检验。

本教程解释了如何在Python中进行下列假设检验。

  • 单样本t检验
  • 双样本t检验
  • 成对的样本t检验

让我们跳进去吧!

例1:Python中的单样本t检验

单样本t检验是用来检验一个种群的平均数是否等于某个值。

例如,假设我们想知道某个品种的乌龟的平均体重是否等于310磅。

为了检验这一点,我们出去收集一个简单的随机的海龟样本,其重量如下。

重量。300, 315, 320, 311, 314, 309, 300, 308, 305, 303, 305, 301, 303

下面的代码显示了如何使用 scipy.stats库中的ttest_1samp()函数来进行单样本t检验。

import scipy.stats as stats

#define data
data = [300, 315, 320, 311, 314, 309, 300, 308, 305, 303, 305, 301, 303]

#perform one sample t-test
stats.ttest_1samp(a=data, popmean=310)

Ttest_1sampResult(statistic=-1.5848116313861254, pvalue=0.1389944275158753)

t检验的统计量是-1.5848 ,相应的双侧p值是0.1389

这个特定的单样本t检验的两个假设如下。

  • H0: µ = 310 (该种龟的平均体重是310磅)
  • HA:µ≠310(平均体重 不是310磅)。

因为我们测试的P值 (0.1389) 大于α=0.05,所以我们不能拒绝测试的无效假设。

我们没有足够的证据说这个特定种类的海龟的平均体重与310磅不同。

例2:Python中的双样本t检验

双样本t检验是用来检验两个种群的平均值是否相等的。

例如,假设我们想知道两种不同种类的海龟的平均体重是否相等。

为了检验这一点,我们从每个物种中收集一个简单的随机样本,其重量如下。

样本1:300、315、320、311、314、309、300、308、305、303、305、301、303

样本2:335,329,322,321,324,319,304,308,305,311,307,300,305

下面的代码显示了如何使用 scipy.stats库中的ttest_ind()函数来进行这个双样本t检验。

import scipy.stats as stats 

#define array of turtle weights for each sample
sample1 = [300, 315, 320, 311, 314, 309, 300, 308, 305, 303, 305, 301, 303]
sample2 = [335, 329, 322, 321, 324, 319, 304, 308, 305, 311, 307, 300, 305]

#perform two sample t-test
stats.ttest_ind(a=sample1, b=sample2) 

Ttest_indResult(statistic=-2.1009029257555696, pvalue=0.04633501389516516) 

t检验的统计量是-2.1009,相应的双侧p值是0.0463

这个特殊的双样本t检验的两个假设如下。

  • H0: µ1= µ2 (两个物种之间的平均重量是相等的)
  • HA:µ1 ≠µ2 (两个物种之间的平均重量不相等)

由于检验的P值(0.0463)小于0.05,所以我们拒绝无效假设。

这意味着我们有足够的证据说明这两个物种之间的平均重量是不相等的。

例三:Python中的配对样本t检验

当一个样本中的每个观察值都可以与另一个样本中的观察值配对时,配对样本t检验用于比较两个样本的平均值。

例如,假设我们想知道某个训练计划是否能够提高篮球运动员的最大垂直跳跃(英寸)。

为了测试这一点,我们可以招募12名大学篮球运动员的简单随机样本,并测量他们每个人的最大垂直起跳高度。然后,我们可以让每个球员使用该训练计划一个月,然后在月底再次测量他们的最大垂直跳跃。

下面的数据显示了每个球员在使用训练计划前后的最大跳高(英寸)。

之前:22,24,20,19,19,20,22,25,24,23,22,21

使用23, 25, 20, 24, 18, 22, 23, 28, 24, 25, 24, 20

下面的代码显示了如何使用scipy.stats库中的ttest_rel()函数来进行这个成对样本的t检验。

import scipy.stats as stats  

#define before and after max jump heights
before = [22, 24, 20, 19, 19, 20, 22, 25, 24, 23, 22, 21]
after = [23, 25, 20, 24, 18, 22, 23, 28, 24, 25, 24, 20]

#perform paired samples t-test
stats.ttest_rel(a=before, b=after)

Ttest_relResult(statistic=-2.5289026942943655, pvalue=0.02802807458682508)

t检验的统计量为-2.5289,相应的双侧p值为0.0280

这个特定的配对样本t检验的两个假设如下。

  • H0:µ1=µ2 (使用程序前后的平均跳跃高度是相等的)
  • HA:µ1 ≠µ2 (使用该程序前后的平均跳跃高度不相等)

由于检验的P值(0.0280)小于0.05,我们拒绝了无效假设。

这意味着我们有足够的证据可以说,使用训练计划前后的平均跳跃高度是不相等的。

其他资源

你可以使用以下在线计算器来自动执行各种t检验。

单样本t检验计算器
双样本t检验计算器
成对样本t检验计算器