下面的例子展示了如何使用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 A 71
1 A 72
2 A 72
3 A 75
4 A 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's t-检验
韦尔奇t检验与独立双样本t检验相似,只是它不假设样本来自的两个种群具有相同的方差。
要在与前面例子完全相同的数据集上进行韦尔奇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,我们拒绝了韦尔奇t检验的无效假设,并得出结论:有足够的证据表明这两种方法导致了不同的平均考试分数。
例3:Pandas中的配对样本t检验
成对样本t检验用于确定两个群体的平均值是否相等,其中一个样本中的每个观察值都可以与另一个样本中的观察值配对。
例如,假设一位教授想知道两种不同的学习方法是否会导致不同的平均考试分数。
为了测试这一点,他招募了10名学生使用方法A,然后进行考试。然后,他让同样的10名学生使用方法B,准备并参加另一次难度相似的考试。
由于所有的学生都出现在两个样本中,我们可以在这种情况下进行配对样本的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 A 71
1 A 72
2 A 72
3 A 75
4 A 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中进行独立度的Chi-Square检验
如何在Python中进行单因素方差分析
如何在Python中进行Fisher's Exact检验