配对样本 t检验 用于两个不同条件下,对同一对象进行测量所得的两个样本均值的区别。
比如吃药前和吃药后体温是否有变化,大鱼钩和小鱼钩钓的鱼的体长是否有差异等。
配对样本是什么?
配对样本需要满足两个基本条件:
1. 样本间存在某种相关性或相互依赖关系,或者同一对象;
2. 配对样本间的差异是变量,变量的选择取决于研究目的。
比如要研究不同药物对高血压的影响,那么需要将参与者分为两组,一组接受药物A,一组接受药物B。
但是如果两组参与者的年龄、性别、体重等因素存在很大差异,那么就很难判断药物A和药物B的差异是否真正反映出各自的治疗效果。
为了解决这个问题,可以把每一位年龄相近、性别相同、体重相近的参与者都被配对在一起,然后再将每一对参与者分别随机分配到药物A组和药物B组,这样就可以消除年龄、性别、体重等因素对结果的影响。
我们举的这个例子则比较简单,检验吃药前后体温是否有差异,也即检验同一对象前后的变化。
提出假设
原假设:体温差为0,吃药前后的体温没有差异
备择假设:体温差不为0,吃药前后的体温有差异
导入数据:
data = {'person':['A','B','C','D','E','A','B','C','D','E'],
'medicine':['before','before','before','before','before','after','after','after','after','after'],
'body_temperature':[36.2,36.2,35.3,36.1,36.1,36.8,36.1,36.8,37.1,36.9]}
# 转为DataFrame格式
paired_test_data = pd.DataFrame(data,columns=['person','medicine','body_temperature'])
print(paired_test_data)
计算差值:
# 服药前后的样本均值
before = paired_test_data.query(
'medicine == "before"')["body_temperature"]
after = paired_test_data.query(
'medicine == "after"')["body_temperature"]
# 转化为数组型
before = np.array(before)
after = np.array(after)
# 计算差值
diff = after - before
diff
代码详解:
query()用于从DataFrame中选择符合特定条件的行。
query()[]结合起来表示从DataFrame中选择符合特定条件的行,并提取指定列的数据。中括号内是列名。
np.array()把数据转为数组格式。
计算t值和p值:
stats.ttest_1samp(diff, 0)
代码详解:
ttest_1samp()用于检验样本的均值是否与给定的值相同。
diff是我们计算好的两组样本均值的差值,0表示检验差值的均值是否等于0。
statistic=2.90169是方差, pvalue=0.044043是p值。
最后计算的p值为0.04,小于0.05,则认为吃药前后的体温有显著性变化。