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。
这三种方法需要不同的库和函数来进行测试。
我们举了一个例子来理解这个概念并将它应用到所有的方法中。 然后我们使用假设和假设分析了结果。
相关文章
Pandas DataFrame DataFrame.shift() 函数
发布时间:2024/04/24 浏览次数:133 分类:Python
-
DataFrame.shift() 函数是将 DataFrame 的索引按指定的周期数进行移位。
Python pandas.pivot_table() 函数
发布时间:2024/04/24 浏览次数:82 分类:Python
-
Python Pandas pivot_table()函数通过对数据进行汇总,避免了数据的重复。
Pandas read_csv()函数
发布时间:2024/04/24 浏览次数:254 分类:Python
-
Pandas read_csv()函数将指定的逗号分隔值(csv)文件读取到 DataFrame 中。
Pandas 多列合并
发布时间:2024/04/24 浏览次数:628 分类:Python
-
本教程介绍了如何在 Pandas 中使用 DataFrame.merge()方法合并两个 DataFrames。
Pandas loc vs iloc
发布时间:2024/04/24 浏览次数:837 分类:Python
-
本教程介绍了如何使用 Python 中的 loc 和 iloc 从 Pandas DataFrame 中过滤数据。
在 Python 中将 Pandas 系列的日期时间转换为字符串
发布时间:2024/04/24 浏览次数:894 分类:Python
-
了解如何在 Python 中将 Pandas 系列日期时间转换为字符串