t检验主要用于检验计量资料(连续变量)的两组均值是否存在差异
一、t检验介绍
无论是哪种t检验,都有以下的基本前提条件:
- 样本数据服从正态分布
- 样本数据之间互相独立
检验步骤:
- 提出原假设和备择假设
- 构造t统计量
- 计算t统计量
- 对得到的P值进行分析,P>0.05则接受原假设,否则拒绝原假设(P值是指在原假设成立的条件下,观察到的试验差别是由于机遇所致的概率)
各t检验的应用场景
名称 | 应用场景 |
---|---|
单样本t检验 | 检验单组样本均数与已知总体均数之间有无差异 |
独立样本t检验 | 检验两组不相关样本之间的均数有无差异 |
配对样本t检验 | 检验两组相关样本之间的均数有无差异 |
二、单样本t检验
-
应用场景
比较单组样本均值与已知总体均值之间是否存在差异。已知总体均数一般为标准值、理论值和经过大量观察后得到的比较稳定的指标值
-
原假设与备择假设
- H0: 样本均数与已知总体均数相等
- H1: 样本均数与已知总体均数不相等
-
例子
-
以往通过大规模调查已知某地新生儿的平均出生体重为3.30kg。从该地难产儿中随机抽取35名新生儿作为研究样本,平均出生体重为3.42kg,标准差为0.40kg,问该地难产儿出生体重与一般新生儿体重有无差异
# 已知:总体均值3.30kg,样本数量35,样本均值3.42kg,标准差0.40kg。问:样本均值与总体均值是否有差异? # # 提出原假设和备择假设: # H0: 样本均值与总体均值相等,无差异 # H1: 样本均值与总体均值不相等,存在差异 from scipy.stats import ttest_1samp from scipy import stats # 1. 生成均值为3.42,标准差为0.40的样本 samp = stats.norm.rvs(loc=3.42, scale=0.40, size=35) print(f"samp's type is {type(samp)}, size = {len(samp)}, mean = {samp.mean()}, std = {samp.std()}") # out: samp's type is <class 'numpy.ndarray'>, size = 35, mean = 3.3751406109024398, std = 0.3993899466032266 # 2. 第一个参数是样本数据,第二个参数是已知总体均数 t, p = ttest_1samp(samp, 3.42) print(f"t = {t}, p = {p}") # t = -1.2655105930679713, p = 0.21429231177437397 # 结论:p = 0.214 > 0.05,表明差异无统计学意义,按 α = 0.05的水准接受H0, # 即根据现有的样本信息,尚不能认为样本均值与总体均值存在差异
-
三、独立样本t检验
-
应用场景
比较两不相关的样本之间的均数是否存在差异。若两总体的方差相等,即方差齐性,则进行独立样本t检验,否则进行近似t检验
-
原假设与备择假设
- H0: 两组样本之间的均数相等
- H1: 两组样本之间的均数不相等
-
例子
-
某项研究评估低氧环境(模拟高原环境)对运动者心肌血流量的影响,将17名男性志愿者随机分成两组,分别在正常含氧环境(正常组)和低氧环境(低氧组)中测定运动后的心肌血流量。问两种环境中运动者的心肌血流量是否有差异
# 原假设与备择假设 # H0: 两种环境中运动者的心肌血流量的总体均数相同 # H1: 两种环境中运动者的心肌血流量的总体均数不同 from scipy import stats from scipy.stats import ttest_ind import numpy as np normal_group = np.array([3.5, 3.1, 3.1, 2.7, 2.5, 2.3, 2.3, 2.2, 2.2]) hypoxia_group = np.array([6.4, 5.7, 5.6, 5.3, 5.1, 4.9, 4.7, 3.5]) # 进行levene检验(检验方差齐性) _, levene_p = stats.levene(normal_group, hypoxia_group) print(f"levene_p = {levene_p}") # levene_p = 0.31920582497946387 if levene_p > 0.05: t, p = ttest_ind(normal_group, hypoxia_group, equal_var=true) else: t, p = ttest_ind(normal_group, hypoxia_group, equal_var=False) print(f"t = {t}, p = {p}") # t = -7.578738236840621, p = 1.6655366374516882e-06 # 结论:p = 1.665e-06 < 0.05, 说明差异具有统计学意义,按 α = 0.05 的水准拒绝H0, # 即认为两种环境中运动者的心肌血流量存在差异
-
四、 配对样本t检验
-
应用场景
检验两相关样本的均数所代表的未知总体均数是否有差异
-
原假设与备择假设
- H0: 两组样本之间的均数相等
- H1: 两组样本之间的均数不相等
-
例子
-
某项研究评估咖啡因对运动者的心肌血流量的影响,先后测定了12名男性志愿者饮用咖啡前后运动状态下的心肌血流量。问饮用前后运动者的心肌血流量有无差异
# 原假设与备择假设 # H0: 饮用前后运动者的心肌血流量无差异 # H1: 饮用前后运动者的心肌血流量有差异 from scipy.stats import ttest_rel import numpy as np before = np.array([4.8, 5.1, 6.4, 5.7, 5.6, 5.3, 5.1, 4.9, 4.7, 3.5, 5.2, 5.3]) after = np.array([4.8, 4.9, 4.5, 5.4, 4.7, 3.8, 4.1, 3.2, 3.0, 3.2, 5.3, 5.1]) t, p = ttest_rel(before, after) print(f"t = {t}, p = {p}") # t = 3.7398870259524446, p = 0.0032668229904865296 # 结论:p = 0.003< 0.05, 说明差异具有统计学意义,按 α = 0.05 的水准拒绝H0, # 即认为饮用前后运动者的心肌血流量有差异
-
网友评论