Python 双样本 T 检验
世界上大多数程序员都使用 Python 语言进行编程。 Python 作为一种解释型和高级编程语言非常流行。
由于大多数程序员在面向对象编程中使用 Python,因此人们将其用于 Web 开发、数据可视化、人工智能和机器学习等领域、后端开发以及作为脚本语言。
Python 为我们提供的一个功能是我们可以执行双样本 t 检验。 通过本文,我们将讨论什么是双样本 t 检验以及如何使用 Python 执行它。
Python 中的双样本 T 检验
双样本t检验是我们可以用来判断两个数据组的两个未知总体均值是否相等的一种检验。 也称为独立样本 t 检验。
它不能对一个组对另一个数据组有任何影响。
在执行双样本 t 检验之前,我们必须考虑有关数据组的三个假设。
- 我们测试的两个数据组是独立的。
- 同质性假设:在这里,我们假设两个数据组具有相同的方差。
- 最后一个假设是数据组中的数据分布是否不同。
有了这些假设,我们就可以进行双样本 t 检验。
在分析双样本 t 检验的结果时,我们可以采取两个假设。
- H0 - dataGroup1 总体平均值 = dataGroup2 总体平均值。 也称为原假设。
- HA - dataGroup1 总体平均值 != dataGroup2 总体平均值。
执行此测试的主要方法有三种。
- 使用 scipy
- 使用 pingouin
- 使用统计模型
使用 SciPy 库
SciPy,也称为科学 Python 库,是一个解决科学和数学问题的开源 Python 库。 SciPy 库中有几个高级 Python 命令可用于操作和可视化数据。
SciPy 库下有几个子包。 他们之中有一些是:
- scipy.stats - 可用于统计和随机数。
- scipy.io - 可用于文件输入和输出。
- scipy.linalg - 可用于线性代数运算。
- scipy.signal - 可用于信号处理。
要执行双样本 t 检验,我们可以使用此 SciPy 库。
双样本 t 检验的语法如下。
ttest_ind(dataGroup1, dataGroup2, equal_var=True/False)
这里的 ttest_ind 是我们执行测试的 scipy.stats 子包提供的函数。 在其中,我们有 dataGroup1 和 dataGroup2,这是我们创建的数据组。
如果 equal_var 等于 true,则将通过考虑相等的总体方差来执行双样本 t 检验。 如果为假,则考虑到总体方差不相等,将进行 Welch 的 t 检验。
默认情况下,equal_var 为真。
检查数据组方差的平等性
在执行测试之前,我们需要检查数据组是否具有相同的方差。 如果我们得到大数据组与小数据组的比率低于 4:1,我们可以说两个数据组具有相等的方差。
要检查它,我们可以使用以下语法。
np.var(dataGroup1), np.var(dataGroup2)
让我们使用示例执行 t 检验。
想象一下,我们有两个样本数据组,每个组包含 10 名学生的某个科目的分数。 我们需要澄清两组学生在这门学科上的平均分相同。
第一步,我们必须使用 pip 命令安装 SciPy 和 NumPy 库。
$ 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))
运行代码后,我们将得到如下图所示的输出。
如您所见,比率为 10.809/8.49,小于 4:1。 所以我们可以说数据组的方差是相等的。
现在让我们进行测试。
print(stats.ttest_ind(dataGroup1, dataGroup2, equal_var=True))
输出:
这里我们得到的 p 值为 0.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 包。 它是一个基于 NumPy 和 pandas 的开源包,具有统计特性。
要使用 pingouin,我们需要使用 pip 命令安装它。
$ pip install pingouin
然后我们可以使用以下语法进行 t 检验。
ttest(dataGroup1, dataGroup2, correction = True/False)
这里的 ttest 函数由 pingouin 包提供。 dataGroup1 和 dataGroup2 是我们要测试的组。
如果校正为真,将通过考虑同质性假设进行检验。 如果为假,则与之前一样,进行 Welch 的 t 检验,而不考虑同质性假设。
让我们以前面的例子来执行 t 检验。 首先,我们可以导入 NumPy 和 pingouin 包。
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))
输出:
如您所见,我们将 0.2891 作为 p 值,它大于 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 是一个基于 SciPy、NumPy 和 Matplotlib 构建的 Python 模块。 它为用户提供函数和类来执行统计测试和估计。
我们也可以使用 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))
输出:
如您所见,我们收到 0.2889 作为 p 值,它大于 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 中执行它。 正如我们所了解的,主要有三种测试方法:使用 SciPy、pingouin 和 statsmodels。
这三种方法需要不同的库和函数来进行测试。
我们举了一个例子来理解这个概念并将它应用到所有的方法中。 然后我们使用假设和假设分析了结果。
相关文章
在 Python 中生成随机 4 位数字
发布时间:2023/06/17 浏览次数:174 分类:Python
-
本文讨论如何使用 randint() 和 randrange() 方法生成四位数。 此外,我们还讨论了另一种获得随机四位数的方法。
Python中ReLU函数的导数
发布时间:2023/06/16 浏览次数:152 分类:Python
-
就深度学习而言,ReLU 函数在机器学习中使用最频繁。 本文讨论如何在Python中实现ReLU推导以及实现ReLU功能。
计算 Python 中一个句子的平均字长
发布时间:2023/06/16 浏览次数:62 分类:Python
-
本篇文章将介绍用 Python 计算句子中的平均字长。在 Python 中使用 split()、sum() 和 len() 计算句子中的平均字长
Python 中的可选链
发布时间:2023/06/16 浏览次数:80 分类:Python
-
本文描述了我们在适应 Python 中的可选链接时可以遵循的方法。 适应以下方法之一将使在 Python 而不是 JavaScript 中使用可选链接变得容易。
Python中另一个函数调用的模拟补丁一个函数
发布时间:2023/06/16 浏览次数:122 分类:Python
-
本篇文章介绍模拟对象及其重要性,并使用 patch() 作为装饰器、上下文管理器和手动启动/停止来演示如何模拟补丁由另一个函数调用的一个函数。
Python 四舍五入到最接近的十位
发布时间:2023/06/16 浏览次数:124 分类:Python
-
本篇文章将讨论使用 Python 的 ceil() 函数将数字四舍五入到最接近的十。Python 整数到最接近的十 Python 具有三个内置函数 round()、floor() 和 ceil(),可用于对数字进行舍入。
Python 中的模拟函数
发布时间:2023/06/16 浏览次数:127 分类:Python
-
Mock 是为与 unittest 一起使用而创建的,它基于操作到断言模式而不是大多数模拟框架中使用的记录到重播。 对于以前版本的 Python,有一个 unittest.mock 的反向移植。
基于 Python 中输入的模拟返回值
发布时间:2023/06/16 浏览次数:171 分类:Python
-
本文将介绍如何在 Python 中创建一个根据输入返回不同值的模拟函数。 我们还将向您展示如何测试我们的模拟函数。最后,我们将向您展示一些更高级的模拟函数的技术。
Python 模拟导入
发布时间:2023/06/16 浏览次数:129 分类:Python
-
在这篇 Python 文章中,我们将研究 mock 库并学习如何有效地使用它。 我们将从简单的示例开始,然后查看更高级的用法。Python 模拟导入 我们将学习模拟对象和模拟的用途和陷阱。