Python双样本T检验

世界各地的大多数程序员都使用Python语言进行编程。作为一种解释型和高级编程语言,Python非常流行。

由于大多数程序员在面向对象的编程中使用Python,人们将其用于网络开发、数据可视化、人工智能和机器学习等部门、后台开发以及作为脚本语言。

Python给我们的一个特点是我们可以进行双样本t检验。通过这篇文章,我们将讨论什么是双样本T检验,以及如何使用Python执行它。

Python中的双样本T检验

双样本t检验是一种我们可以用来确定两个数据组的两个未知种群平均值是否相等的检验。它也被称为独立样本t检验。

它不能有一个组对另一个数据组的任何影响。

在进行双样本t检验之前,我们必须考虑关于数据组的三个假设。

  1. 我们要测试的两个数据组是独立的。
  2. 同质性假设:在这里,我们假设两个数据组具有相同的变异性。
  3. 最后一个假设是数据组中的数据分布是否不同。

有了这些假设,我们就可以进行双样本t检验了。

在分析双样本t检验的结果时,我们可以采取两种假设。

  1. H0dataGroup1 population mean = dataGroup2 population mean.也被称为无效假设。
  2. HAdataGroup1 population mean != dataGroup2 population mean.

有三种主要的方法来进行这种检验。

  1. 使用scipy
  2. 使用pingouin
  3. 使用statsmodels

使用SciPy

SciPy ,也被称为科学Python库,是一个开源的Python库,用于解决科学和数学问题。在SciPy 库中,有几个高级Python命令可用于操作和可视化数据。

SciPy 库下有几个子包。其中一些是:

  1. scipy.stats – 可用于统计和随机数。
  2. scipy.io – 可以用于文件输入和输出。
  3. scipy.linalg – 可用于线性代数操作。
  4. scipy.signal – 可以用于信号处理。

为了进行双样本t检验,我们可以使用这个SciPy 库。

双样本t检验的语法如下。

ttest_ind(dataGroup1, dataGroup2, equal_var=True/False)

这里的ttest_ind 是一个由scipy.stats 子包提供的函数,我们在这里进行测试。在它里面,我们有dataGroup1dataGroup2 ,是我们创建的数据组。

如果equal_var 等于true ,将考虑到人口变异性相等而进行双样本t检验。如果是false ,将进行韦尔奇t检验,考虑到人口变异不相等。

默认情况下,equal_vartrue

检查数据组方差的平等性

在进行检验之前,我们需要检查各数据组是否具有相同的方差。如果我们得到的大数据组与小数据组的比率低于4:1,我们可以说两个数据组的方差相等。

为了检查它,我们可以使用下面的语法。

np.var(dataGroup1), np.var(dataGroup2)

让我们用一个例子来进行t检验。

想象一下,我们有两个样本数据组,每个组包含10个学生的某一科目的分数。我们需要弄清楚这两个组的学生在该科目上的平均分数是否相同。

第一步,我们必须使用pip 命令安装SciPyNumPy 库。

$ pip install scipy
$ pip install numpy

然后,我们应该导入scipy.stats 子库和NumPy 到我们的环境中。如上所述,scipy.stats 将帮助我们进行测试,而NumPy 将帮助我们创建数据组。

我们可以按以下方式导入这两个模块。

import scipy.stats as stats
import numpy as np

然后,我们可以用一些数据创建这两个组,如下所示。

dataGroup1 = np.array([17, 16, 14, 19, 20, 21, 15, 13, 14, 12])
dataGroup2 = np.array([19, 19, 14, 17, 22, 24, 16, 18, 15, 13])

首先,我们可以检查数据组的变异性是否相等,如下所示。

print(np.var(dataGroup1), np.var(dataGroup2))

运行该代码后,我们将得到如下图所示的输出。

Python双样本T检验

正如你所看到的,比率为10.809/8.49 ,小于4:1。所以我们可以说,这两组数据的变异是相等的。

现在我们来进行测试。

print(stats.ttest_ind(dataGroup1, dataGroup2, equal_var=True))

输出:

Python双样本T检验

这里我们得到的p-value0.2889 ,大于alpha 的值,也就是0.05。因此,我们可以说,两组学生的平均分数没有差别,这是无效假设(根据我们前面提到的两个假设)。

完整的代码:

# Importing the libraries
import scipy.stats as stats
import numpy as np
# Defining the data groups
dataGroup1 = np.array([17, 16, 14, 19, 20, 21, 15, 13, 14, 12])
dataGroup2 = np.array([19, 19, 14, 17, 22, 24, 16, 18, 15, 13])
# Check the equality of the variances of the data groups
print(np.var(dataGroup1), np.var(dataGroup2))
# Executing the test
print(stats.ttest_ind(dataGroup1, dataGroup2, equal_var=True))

使用pingouin

另一种我们可以进行双样本t检验的方法是使用pingouin 包。它是一个基于NumPypandas 的具有统计学特征的开源包。

要使用pingouin ,我们需要使用pip 命令来安装它。

$ pip install pingouin

然后我们可以使用下面的语法来进行t检验。

ttest(dataGroup1, dataGroup2, correction = True/False)

这里的ttest 函数是由pingouin 包提供的。dataGroup1dataGroup2 是我们要测试的组。

如果correctiontrue ,测试将考虑同质性假设。如果是false ,和前面一样,进行韦尔奇t检验,不考虑同质性假设。

让我们以前面的例子来进行t检验。首先,我们可以导入NumPypingouin 包。

import pingouin as pg
import numpy as np

然后我们定义数据组。

dataGroup1 = np.array([17, 16, 14, 19, 20, 21, 15, 13, 14, 12])
dataGroup2 = np.array([19, 19, 14, 17, 22, 24, 16, 18, 15, 13])

现在我们可以进行测试了。

print(pg.ttest(dataGroup1, dataGroup2, correction=True))

输出:

Python双样本T检验

正如你所看到的,我们将0.2891 作为p-value ,它大于alpha 的值,也就是0.05 。它决定了两组的平均分数在统计上没有差异。

完整的代码:

# Importing the libraries
import pingouin as pg
import numpy as np
# Defining the data groups
dataGroup1 = np.array([17, 16, 14, 19, 20, 21, 15, 13, 14, 12])
dataGroup2 = np.array([19, 19, 14, 17, 22, 24, 16, 18, 15, 13])
# Executing the test
print(pg.ttest(dataGroup1, dataGroup2, correction=True))

使用statsmodels 模块

Statsmodels 是一个基于 、 和 的Python模块。它为用户提供了执行统计测试和估计的函数和类。SciPy NumPy Matplotlib

我们也可以使用statsmodels 模块进行双样本t检验。我们应该使用pip 命令来安装该模块,以使用它。

$ pip install statsmodels

我们可以使用下面的语法来进行t检验。

ttest_ind(dataGroup1, dataGroup2)

ttest_ind 是我们用来进行测试的函数, 和 是我们用来测试的组。dataGroup1 dataGroup2

让我们试试用前面的例子进行测试。

首先,我们需要从statsmodels 中导入ttest_ind 函数。然后我们可以导入numpy 库。

from statsmodels.stats.weightstats import ttest_ind
import numpy as np

现在,我们可以像前面那样定义数据组。

dataGroup1 = np.array([17, 16, 14, 19, 20, 21, 15, 13, 14, 12])
dataGroup2 = np.array([19, 19, 14, 17, 22, 24, 16, 18, 15, 13])

然后我们就可以进行下面的测试了。

print(ttest_ind(dataGroup1, dataGroup2))

输出:

Python双样本T检验

正如你所看到的,我们收到了0.2889 ,作为p-value ,它大于alpha 的值。因此,我们可以说学生组的平均分数在统计上与其他组没有区别。

完整的代码:

# Importing libraries
from statsmodels.stats.weightstats import ttest_ind
import numpy as np
# Definig the data groups
dataGroup1 = np.array([17, 16, 14, 19, 20, 21, 15, 13, 14, 12])
dataGroup2 = np.array([19, 19, 14, 17, 22, 24, 16, 18, 15, 13])
# Executing the test
print(ttest_ind(dataGroup1, dataGroup2))

结论

通过这篇文章,我们讨论了什么是双样本t检验以及如何用Python进行检验。正如我们所了解的,有三种主要的方法来做检验:使用SciPypingouinstatsmodels

这三种方法需要不同的库和函数来做测试。

我们举了一个例子来理解这个概念,并将其应用于所有的方法。然后,我们用假设和假定对结果进行分析。