如何在Python中进行两个样本的 T 检验
在本文中,我们将了解如何在Python中进行两个样本的 T 检验。
该检验的另一个名称是独立样本 t 检验。它主要用于检查给定组对的未知总体均值是否相等。 tt 允许人们检验两组均值相等的原假设
假设
在使用Python进行两样本 t 检验之前,让我们讨论一下这个参数检验的假设。基本上,我们可以对数据组做出三个假设:
- 两个样本数据组是否独立。
- 各组中的数据元素是否服从正态分布。
- 给定的两个样本是否具有相似的方差。这个假设也被称为同质性假设。
请注意,即使我们的数据组不遵循上面讨论的三个假设。这是因为如果我们的数据不属于正态分布,或者我们可以使用平方根、对数等不同技术转换相关数据组,则存在替代测试
Python中的两个示例T-Test
让我们考虑一个例子,我们有两个样本数据,每个数据包含一个班级 15 名学生的身高。我们需要检查两个不同班级的学生是否具有相同的平均身高。在Python中进行双样本 T-Test 有三种方法。
方法一:使用 Scipy 库
Scipy 代表科学Python ,顾名思义,它是一个科学Python库,它在封面下使用 Numpy。该库提供了在数据科学中非常有用的各种功能。首先,让我们创建示例数据。现在让我们执行两个样本 T 检验。为此,我们在Python中有 ttest_ind()函数。
Syntax: ttest_ind(data_group1, data_group2, equal_var=True/False)
Here,
- data_group1: First data group
- data_group2: Second data group
- equal_var = “True”: The standard independent two sample t-test will be conducted by taking into consideration the equal population variances.
- equal_var = “False”: The Welch’s t-test will be conducted by not taking into consideration the equal population variances.
请注意,默认情况下 equal_var 为 True
在进行双样本 T 检验之前,我们需要确定给定数据组是否具有相同的方差。如果较大的数据组与较小的数据组的比例小于 4:1,那么我们可以认为给定的数据组具有相等的方差。要找到数据组的方差,我们可以使用以下语法,
Syntax: print(np.var(data_group))
Here,
- data_group: The given data group
Python3
# Python program to display variance of data groups
# Import library
import scipy.stats as stats
# Creating data groups
data_group1 = np.array([14, 15, 15, 16, 13, 8, 14,
17, 16, 14, 19, 20, 21, 15,
15, 16, 16, 13, 14, 12])
data_group2 = np.array([15, 17, 14, 17, 14, 8, 12,
19, 19, 14, 17, 22, 24, 16,
13, 16, 13, 18, 15, 13])
# Print the variance of both data groups
print(np.var(data_group1), np.var(data_group2))
Python3
# Python program to demonstrate how to
# perform two sample T-test
# Import the library
import scipy.stats as stats
# Creating data groups
data_group1 = np.array([14, 15, 15, 16, 13, 8, 14,
17, 16, 14, 19, 20, 21, 15,
15, 16, 16, 13, 14, 12])
data_group2 = np.array([15, 17, 14, 17, 14, 8, 12,
19, 19, 14, 17, 22, 24, 16,
13, 16, 13, 18, 15, 13])
# Perform the two sample t-test with equal variances
stats.ttest_ind(a=data_group1, b=data_group2, equal_var=True)
Python3
# Python program to conduct two-sample
# T-test using pingouin library
# Importing library
from statsmodels.stats.weightstats import ttest_ind
import numpy as np
import pingouin as pg
# Creating data groups
data_group1 = np.array([160, 150, 160, 156.12, 163.24,
160.56, 168.56, 174.12,
167.123, 165.12])
data_group2 = np.array([157.97, 146, 140.2, 170.15,
167.34, 176.123, 162.35, 159.123,
169.43, 148.123])
# Conducting two-sample ttest
result = pg.ttest(data_group1,
data_group2,
correction=True)
# Print the result
print(result)
Python3
# Python program to conduct
# two-sample t-test using statsmodels
# Importing library
from statsmodels.stats.weightstats import ttest_ind
import numpy as np
import pingouin as pg
# Creating data groups
data_group1 = np.array([160, 150, 160, 156.12,
163.24,
160.56, 168.56, 174.12,
167.123, 165.12])
data_group2 = np.array([157.97, 146, 140.2, 170.15,
167.34, 176.123, 162.35,
159.123, 169.43, 148.123])
# Conducting two-sample ttest
ttest_ind(data_group1, data_group2)
输出:
在这里,比率为 12.260 / 7.7275,小于 4:1。
执行两个样本 T 检验
Python3
# Python program to demonstrate how to
# perform two sample T-test
# Import the library
import scipy.stats as stats
# Creating data groups
data_group1 = np.array([14, 15, 15, 16, 13, 8, 14,
17, 16, 14, 19, 20, 21, 15,
15, 16, 16, 13, 14, 12])
data_group2 = np.array([15, 17, 14, 17, 14, 8, 12,
19, 19, 14, 17, 22, 24, 16,
13, 16, 13, 18, 15, 13])
# Perform the two sample t-test with equal variances
stats.ttest_ind(a=data_group1, b=data_group2, equal_var=True)
输出:
分析结果:
两样本 t 检验有以下假设:
H0 => µ1 = µ2 (population mean of dataset1 is equal to dataset2)
HA => µ1 ≠µ2 (population mean of dataset1 is different from dataset2)
在这里,由于 p 值 (0.53004) 大于 alpha = 0.05,因此我们不能拒绝检验的原假设。我们没有足够的证据表明两个数据组之间学生的平均身高不同。
方法 2:Pingouin 的两样本 T 检验
Pingouin 是一个基于 Pandas 和 NumPy 的统计类包项目。 Pingouin 提供了广泛的功能。该包用于进行 T 检验,但也用于计算自由度、拜耳因子等。
首先,让我们创建示例数据。我们正在创建两个数组,现在让我们执行两个示例 T 检验。为此,我们在Python的 pingouin 包中有 ttest()函数。语法如下,
Syntax: ttest(data_group1, data_group2, correction = True/False)
Here,
- data_group1: First data group
- data_group2: Second data group
- correction = “True”: The standard independent two sample t-test will be conducted by taking into consideration the homogenity assumption.
- correction = “False”: The Welch’s t-test will be conducted by not taking into consideration the homogenity assumption.
请注意,默认情况下 equal_var 为 True
例子:
Python3
# Python program to conduct two-sample
# T-test using pingouin library
# Importing library
from statsmodels.stats.weightstats import ttest_ind
import numpy as np
import pingouin as pg
# Creating data groups
data_group1 = np.array([160, 150, 160, 156.12, 163.24,
160.56, 168.56, 174.12,
167.123, 165.12])
data_group2 = np.array([157.97, 146, 140.2, 170.15,
167.34, 176.123, 162.35, 159.123,
169.43, 148.123])
# Conducting two-sample ttest
result = pg.ttest(data_group1,
data_group2,
correction=True)
# Print the result
print(result)
输出:
解释结果
现在是分析结果的时候了。检验的 p 值等于 0.523,大于显着性水平 alpha(即 0.05)。这意味着我们可以说一个班级学生的平均身高与另一个班级学生的平均身高在统计上没有差异。此外,在 t 检验中获得的 Cohen's D 是相对强度。根据科恩的说法:
- cohen-d = 0.2 被认为是“小”效应大小
- cohen-d = 0.5 被认为是“中等”效应大小
- cohen-d = 0.8 被认为是“大”效应大小
这意味着即使两个数据组的平均值相差不超过 0.2 个标准差或更多,即使差异具有统计学意义,差异也是微不足道的。
方法 3:使用 Statsmodels 的两样本 T 检验
Statsmodels 是一个Python库,专门用于计算不同的统计模型和进行统计测试。这个库利用了 R 风格的模块和数据框。
首先,让我们创建示例数据。我们正在创建两个数组和 现在让我们执行两个样本的 T 检验。 Statsmodels 库提供 ttest_ind()函数来进行两个样本的 T-Test,其语法如下所示,
Syntax: ttest_ind(data_group1, data_group2)
Here,
- data_group1: First data group
- data_group2: Second data group
例子:
Python3
# Python program to conduct
# two-sample t-test using statsmodels
# Importing library
from statsmodels.stats.weightstats import ttest_ind
import numpy as np
import pingouin as pg
# Creating data groups
data_group1 = np.array([160, 150, 160, 156.12,
163.24,
160.56, 168.56, 174.12,
167.123, 165.12])
data_group2 = np.array([157.97, 146, 140.2, 170.15,
167.34, 176.123, 162.35,
159.123, 169.43, 148.123])
# Conducting two-sample ttest
ttest_ind(data_group1, data_group2)
输出:
解释结果:
现在是分析结果的时候了。检验的 p 值等于 0.521,大于显着性水平 alpha(即 0.05)。这意味着我们可以说一个班级学生的平均身高与另一个班级学生的平均身高在统计上没有差异。