如何在 pandas 上执行 t 检验(3 个示例)
以下示例展示了如何使用 pandas DataFrame 执行三种不同的 t 检验:
- 独立双样本 t 检验
- 韦尔奇的双样本 t 检验
- 配对样本 t 检验
示例 1:pandas 中的独立双样本 t 检验
独立的双样本 t 检验用于确定两个总体的平均值是否相等。
例如,假设一位教授想知道两种不同的学习方法是否会导致考试的平均成绩不同。
为了测试这一点,他招募了 10 名学生使用方法 A,并招募 10 名学生使用方法 B。
以下代码展示了如何将每个学生的分数输入 pandas DataFrame,然后使用SciPy库的ttest_ind()函数执行独立的双样本 t 检验:
import pandas as pd
from scipy. stats import ttest_ind
#create pandas DataFrame
df = pd. DataFrame ({'method': ['A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A',
'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B'],
'score': [71, 72, 72, 75, 78, 81, 82, 83, 89, 91, 80, 81, 81,
84, 88, 88, 89, 90, 90, 91]})
#view first five rows of DataFrame
df. head ()
method score
0 to 71
1 To 72
2 To 72
3 to 75
4 to 78
#define samples
group1 = df[df[' method ']==' A ']
group2 = df[df[' method ']==' B ']
#perform independent two sample t-test
ttest_ind(group1[' score '], group2[' score '])
Ttest_indResult(statistic=-2.6034304605397938, pvalue=0.017969284594810425)
从结果我们可以看出:
- t 检验统计量: – 2.6034
- p 值: 0.0179
由于 p 值小于 0.05,我们拒绝 t 检验的原假设,并得出结论,有足够的证据表明这两种方法会导致不同的平均考试成绩。
示例 2:Pandas 中的 Welch t 检验
Welch t 检验与独立双样本 t 检验类似,不同之处在于它不假设从中抽取样本的两个总体具有相等的方差。
要在与前面的示例完全相同的数据集上执行 Welch t 检验,我们只需在ttest_ind () 函数中指定equal_var=False,如下所示:
import pandas as pd
from scipy. stats import ttest_ind
#create pandas DataFrame
df = pd. DataFrame ({'method': ['A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A',
'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B'],
'score': [71, 72, 72, 75, 78, 81, 82, 83, 89, 91, 80, 81, 81,
84, 88, 88, 89, 90, 90, 91]})
#define samples
group1 = df[df[' method ']==' A ']
group2 = df[df[' method ']==' B ']
#perform Welch's t-test
ttest_ind(group1[' score '], group2[' score '], equal_var= False )
Ttest_indResult(statistic=-2.603430460539794, pvalue=0.02014688617423973)
从结果我们可以看出:
- t 检验统计量: – 2.6034
- p 值: 0.0201
由于 p 值小于 0.05,我们拒绝 Welch t 检验的原假设,并得出结论:有足够的证据表明这两种方法会导致不同的平均考试成绩。
示例 3:Pandas 的配对样本 t 检验
配对样本 t 检验用于确定两个总体平均值是否相等,其中一个样本中的每个观测值可以与另一个样本中的观测值相关联。
例如,假设一位教授想知道两种不同的学习方法是否会导致考试的平均成绩不同。
为了测试这一点,他招募了 10 名学生使用方法 A,然后进行测试。然后,他让使用方法 B 的 10 名学生准备并参加另一场类似难度的测试。
由于所有学生都出现在两个样本中,因此我们可以在这种情况下执行配对样本 t 检验。
以下代码展示了如何将每个学生的分数输入 pandas DataFrame,然后使用SciPy库的ttest_rel()函数执行配对样本 t 检验:
import pandas as pd
from scipy. stats import ttest_rel
#create pandas DataFrame
df = pd. DataFrame ({'method': ['A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A',
'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B'],
'score': [71, 72, 72, 75, 78, 81, 82, 83, 89, 91, 80, 81, 81,
84, 88, 88, 89, 90, 90, 91]})
#view first five rows of DataFrame
df. head ()
method score
0 to 71
1 To 72
2 To 72
3 to 75
4 to 78
#define samples
group1 = df[df[' method ']==' A ']
group2 = df[df[' method ']==' B ']
#perform independent two sample t-test
ttest_rel(group1[' score '], group2[' score '])
Ttest_relResult(statistic=-6.162045351967805, pvalue=0.0001662872100210469)
从结果我们可以看出:
- t 检验统计量: – 6.1620
- p 值: 0.0001
由于 p 值小于 0.05,我们拒绝配对样本 t 检验的零假设,并得出结论,有足够的证据表明这两种方法会导致不同的平均考试成绩。
其他资源
以下教程解释了如何在 Python 中执行其他常见任务:
如何在 Python 中执行卡方独立性检验
如何在 Python 中执行单向方差分析
如何在 Python 中执行 Fisher 精确检验