参考资料:用python动手学统计学
1、导入库
# 导入库
# 用于数值计算的库
import numpy as np
import pandas as pd
import scipy as sp
from scipy import stats
# 用于绘图的库
from matplotlib import pyplot as plt
import seaborn as sns
sns.set()
2、准备数据
data=pd.DataFrame({
'person':['A', 'B', 'C', 'D', 'E', 'A', 'B', 'C', 'D', 'E'],
'medicine':['before', 'before', 'before', 'before', 'before', 'after', 'after', 'after', 'after', 'after'],
'temp':[36.2, 36.2, 35.3, 36.1, 36.1, 36.8, 36.1, 36.8, 37.1, 36.9]
}
)
data
3、提出假设
零假设H0:服药前后体温不变
备择假设HA:服药前后体温有变化
4、配对数据t检验
4.1求出配对数据间的差值
# 方法1
before=data.query("medicine=='before'")['temp']
after=data.query("medicine=='after'")['temp']
# 转化为数组
before=np.array(before)
after=np.array(after)
# 计算差值
diff=after-before
diff
# 方法2
before=data.loc[data.medicine=='before']['temp']
after=data.loc[data.medicine=='after']['temp']
# 转化为数组
before=np.array(before)
after=np.array(after)
# 计算差值
diff=after-before
diff
# 方法3
data2=data.pivot_table(index='person',columns='medicine',values='temp')
diff=data2.after-data2.before
diff
4.2 进行t检验
方法一:函数scipy.stats.ttest_1samp()
相关参数设置参考:https://blog.csdn.net/maizeman126/article/details/135977775
stats.ttest_1samp(diff,0)
方法二:函数scipy.stats.ttest_rel()
stats.ttest_rel(after,before)
ttest_rel()函数的相关参数设置与ttest_1samp()函数基本一致。
这里对ttest_rel()函数alternative参数的设置进行介绍:
'two-sided':表示a,b两列数据的均值不同。
'less':表示前者的均值小于后者。
'greater':表示前者的均值大于后者。
5、结论
pvalue<0.05,可以认为服药前后体温有显著变化。
6、独立样本t检验
原则上配对数据不适用于独立样本t检验,这里只是为了介绍独立样本t检验,将现有的data数据假设为独立样本数据。
独立样本t检验分为等方差和异方差。在python中都是一个函数,只是在参数设置上不一样。函数为:scipy.stats.ttest_ind()。这里重点介绍:equal_var参数,用于设置等方差还是异方差,默认为True,即等方差;当设置为False时,则进行Welch's t-test。
按照传统教材,独立样本t检验需要检查数据的同方差性,在根据情况进行相应的t检验。但《用python动手学统计学》作者认为忽略两个样本是否为同方差,直接以方差不同位置前提进行检验也无大碍;大家可以根据自身需求选择严谨的t检验步骤或粗放的t检验步骤。
stats.ttest_ind(after,before,equal_var=False)