引言:计量资料的假设检验中,最为简单、常用的方法是t检验(t-test/student’s t-test),在这一小节中主要以案例的形式谈及各种t检验方法的用途、使用条件和注意事项,并且小编将用R语言来展示统计过程。
总论——t检验应用总体条件:
对于单样本或两样本计量资料,当σ未知且样本含量n较小时(如n<60),理论上要求t检验的样本随机地取自正态分布的总体,两小样本均数比较时还要求两样本所对应的两总体方差相等(σ12=σ22),即方差齐性。在实际应用时,如与上述条件略有偏离,对结果亦影响不大。
当样本含量n较大时,t值近似于u值,有人将其称为u检验(u-test)或Z检验(Z-test),实际上它是t检验的特例。
一、单样本t检验(one sample/group t-test)
定义:单样本t检验即已知样本均数x ̅(代表未知总体均数μ)与已知总体均数μ0(一般为理论值、标准值或经过大量观察所得的稳定值等)的比较。其检验统计量按下式计算:
举个例子:如一个小吃制造商对80g包装的平均净重很感兴趣。假设随着时间的推移,一个消费者在不同商店随机购买了44个80g包装,井称其重量。记录如下: (87.7,80.01,77.28,78.76,81.52,74.2,80.71,79.5,77.87,81.94,80.7,82.32,75.78,80.19,83.91,79.4,77.52,77.62,81.4,74.89,82.95,73.59,77.92,77.18,79.83,81.23,79.28,78.44,79.01,80.47,76.23,78.89,77.14,69.94,78.54,79.7,82.45,77.29,75.52,77.21,75.99,81.94,80.41,77.7) 消费者说产品的重量被缩减,因为结果数据不是来自一个平均值μ=80的分布,因此真实的重量肯定小于80。为了调查这一说法,制造商使用显著性水平α=0.05进行检验假设。具体步骤如下:
首先:定义零假设、备择假设及显著性水平
H0:μ=80
H1:μ≠80
显著性水平:α=0.05
接着,小编使用R语言来展示详细的统计运算:
#单个均值与总体均值t检验
#1.输入原始数据
snacks <- c (87.7,80.01,77.28,78.76,81.52,74.2,80.71,79.5,77.87,81.94,80.7,
82.32,75.78,80.19,83.91,79.4,77.52,77.62,81.4,74.89,82.95,
73.59,77.92,77.18,79.83,81.23,79.28,78.44,79.01,80.47,76.23,
78.89,77.14,69.94,78.54,79.7,82.45,77.29,75.52,77.21,75.99,
81.94,80.41,77.7)
#2.计算均值(snacks.mean)和标准误(snacks.se )
n <- length(snacks)
n
#[1] 44
snacks.mean <- mean(snacks)
snacks.mean
#[1] 78.91068
snacks.sd <- sd(snacks)
snacks.sd
#[1] 3.056023
snacks.se <- snacks.sd/sqrt(n)
snacks.se
#[1] 0.4607128
#3.计算t统计量和p值
snacks.t <- (snacks.mean-80)/snacks.se
snacks.t
#[1] -2.364419
pt(snacks.t,df=n-1)
#[1] 0.01132175
最后,做出结论:如果H0为真,那么作为一个随机现象,它只有1%或者更小的机会会观察到消费者的样本均值为78.91。该p值<0.05,故制造商会得出拒绝零假设而接受备择假设的结论,表明真实值μ小于80g。同时,我们在用95%置信区间的方式验证一下:
snacks.mean + c(-1,1)*qt(0.975,df=n-1)*snacks.se
#[1] 77.98157 79.83980
通过结过我们可以很清楚的看到,95%的置信区间并不包括80g,证实前面t检验结果。
来个高级点的,使用 t.test()
从数据到结果,一步搞定,具体结果解释可结合前面的详细步骤:
#t.test()
t.test(x=snacks,mu=80,alternative = "two.sided")
# One Sample t-test
#
# data: snacks
# t = -2.3644, df = 43, p-value = 0.02264
# alternative hypothesis: true mean is not equal to 80
# 95 percent confidence interval:
# 77.98157 79.83980
# sample estimates:
# mean of x
# 78.91068
简要解释一下 t.test()
函数中各个参数的含义,对于理解该函数非常重要:
参数 | 意义 |
---|---|
x | 需要进行t检验的数据 |
mu | 总体均值 |
alternative | 备择假设的选择,可以为”two.sided”、”less”、”greater”,默认为”two.sided” |
conf.level | 置信区间,可以根据需要设置,如0.95 |
var.equal | 布尔逻辑值,当FALSE时,假定不满足方差齐性;当TRUE时,满足方差齐性 |
paird | 布尔逻辑值,当为TRUE时,采用配对t检验 |
二、配对样本t检验(paired/matched t-test)
配对与非配对t检验的结果截然不同,因为它涉及两组观察值之间的依赖性,而两独立样本t检验中每组中的测量值是独立的。
如果两组观察的测量结果记录在同一个个体上,或者如果它们以某些其他重要或明显的方式相关就会出现配对数据。这种情况的典型例子是“之前”和“之后”观察,例如一个人在经过某种干预治疗之前和之后的两次测量,这时就要使用配对样本t检验。其检验统计量的公式构造如下:
- 看一个例子,考虑一个公司感兴趣药物的疗效,旨在减少每分钟(pm)的静息心率, 首先测量16个个体的静息心事。然后对个体施用治疗过程,并再次测量其静息心率。数据由如下的rate. before和rate after提供:
rate.before <- C(52,66,89,87,89,72, 66, 65,49, 62,70,52,75,63,65, 61)
rate.after <- c(51,66,71,73,70,68,60,51, 40,57,65,53,64,56, 60,59)
为什么考虑数据前后的依赖性?心跳速率受个人的年龄和身体健康水平等因素的影响。60岁得个体可能比20岁的个体有更高的基线静息心率,如果对两个人都给予相同的药物来降低心率,则他们的最终心率仍然可能反映其基线水平。因此,如果我们使用两独立样本t检验分析,那么药物的真正效果就可能被隐藏了。为了解决这个问题,配对两样本t检验考察每对值之间的差异。将一组n个测量值分别标记为x1,x2,…,xn,将另一组n个观察值标记为y1,y2,…,yn,差值d定义为di=yi-xi:i=1,2,…,n。通过转换,我们可以看出,两配对样本的t检验可以转换为差值均值d ̅与差值均值0的单样本t检验。
下面在R中逐步演示两配对样本t检验的全过程:
#1测量原始数据
rate.before <- c(52,66,89,87,89,72,66,65,49,62,70,52,75,63,65,61)
rate.after <- c(51,66,71,73,70,68,60,51,40,57,65,53,64,56,60,59)
#2.计算成对的差异
rate.d <- rate.after-rate.before
rate.d
#[1] -1 0 -18 -14 -19 -4 -6 -14 -9 -5 -5 1 -11 -7 -5 -2
#3.差异d的样本均值与标准差
rate.dbar <- mean(rate.d)
rate.dbar
#[1] -7.4375
rate.sd <- sd(rate.d)
rate.sd
#[1] 6.196437
#4.根据配对样本的公式计算t值和p值
rate.t <- rate.dbar/(rate.sd/sqrt(16))
rate.t
#[1] -4.801146
p.value <- pt(rate.t,df=15)
p.value
#[1] 0.000116681
我们再用 t.test()
操作一下:
#5.t.test()函数直接计算统计量,通过与前面步骤的比较,就可以对结果的解释一目了然
t.test(x = rate.after,y = rate.before,alternative ="two.sided",conf.level = 0.95,paired = TRUE )
# Paired t-test
#
# data: rate.after and rate.before
# t = -4.8011, df = 15, p-value = 0.0002334
# alternative hypothesis: true difference in means is not equal to 0
# 95 percent confidence interval:
# -10.739348 -4.135652
# sample estimates:
# mean of the differences
# -7.4375
解释结果:以上的结果中p=0.0002334,按照α=0.05的标准,我们可以得出拒绝H0原假设,认为服药前后的差异是由显著性意义的。结合服药后心率减去服药前心率的均值-7.4375,我们可以认为服药后的心率低于服药前的心率,认为该药有降低心率的作用。
三、两独立样本t检验(two sample/group t-test)
两样本检验又称成组t检验(two sample/group t-test),适用于完全随机设计两样本均数的比较(两组完全随机设计是将受试对象完全随机分配到两个不同处理组),此时人们关心的是两样本均数所代表的两总体均数是否不等。
当两样本含量较小[如n1 ≤ 60或(和)n2 ≤60]且均来自正态总体时,根据两总体方差是否相等而采用不同检验方法。
-
- 1.总体方差相等的t检验:
- 当两总体方差相等: 即σ12=σ22时,可将两样本方差合并,求两者的共同方差一合并方差Sc2。其检验统计量公式在H0(μ=μ1-μ2=0)的条件下构造:
- 当两总体方差相等: 即σ12=σ22时,可将两样本方差合并,求两者的共同方差一合并方差Sc2。其检验统计量公式在H0(μ=μ1-μ2=0)的条件下构造:
- 1.总体方差相等的t检验:
-
-
- 举一个例子:为研究国产新药阿卡波糖胶囊的降血糖效果,某医院用40名2型糖尿病患者进行同期随机对照试验。研究者将这些患者随机等分到试验组(用阿卡波糖胶囊)和对照组(用拜唐苹胶囊),分别测得试验开始前和试验8周时的空腹血糖,算得空腹血糖下降值见表3,能否认为该国产新药阿卡波糖胶囊与拜唐苹胶囊对空腹血糖的降糖效果不同?
-
假定方差齐性的条件下,使用R进行两独立样本t检验
- 举一个例子:为研究国产新药阿卡波糖胶囊的降血糖效果,某医院用40名2型糖尿病患者进行同期随机对照试验。研究者将这些患者随机等分到试验组(用阿卡波糖胶囊)和对照组(用拜唐苹胶囊),分别测得试验开始前和试验8周时的空腹血糖,算得空腹血糖下降值见表3,能否认为该国产新药阿卡波糖胶囊与拜唐苹胶囊对空腹血糖的降糖效果不同?
-
#两独立样本t检验
aka <- c(-0.70,-5.60,2.00,2.80, 0.70,3.50,4.00, 5.80,7.10,-0.50,-1.60,1.70, 3.00,0.40,4.50,4.60,2.50,6.00,-1.40,2.50)
btp <- c(3.70,6.50,5.00,5.20,0.80,0.20, 0.60,3.40,6.60, -1.10,6.00, 3.80, 2.00,1.60, 2.00,2.20,1.20,3.10,1.70,-2.00)
#假定检验的两样本方差齐性相等
t.test(x=aka,y=btp,alternative = "two.sided",conf.level = 0.95,var.equal = TRUE)
# Two Sample t-test
#
# data: aka and btp
# t = -0.64187, df = 38, p-value = 0.5248
# alternative hypothesis: true difference in means is not equal to 0
# 95 percent confidence interval:
# -2.326179 1.206179
# sample estimates:
# mean of x mean of y
# 2.065 2.625
结果说明,p=0.525>0.05,按照α=0.05的水平,不拒绝H0,差异无显著意义,尚不能认为阿卡波糖和拜糖苹两种胶囊对空腹血糖的降糖效果不同。
- 2.总体方差不相等的t’检验(Cochran & Cox 近似t检验)
- 进行两个小样本均数比较,若两总体方差不等,即σ12≠σ22时,可采用近似t检验(t’检验),常用近似t检验有Cochran & Cox 法,Satterthwaite法和Welch法。补充一句,
- 案例仍然是例3-1,如果我们不能假定其方差相等时(方差齐性检验常用levene 检验),就要进行未合并方差的两样本t检验,`t test()`函数默认方差不齐下的t’ 检验为Welch 检验。
#假定检验的两样本方差齐性不相等
t.test(x=aka,y=btp,alternative = "two.sided",conf.level = 0.95,var.equal = FALSE)
# Welch Two Sample t-test
#
# data: aka and btp
# t = -0.64187, df = 36.086, p-value = 0.525
# alternative hypothesis: true difference in means is not equal to 0
# 95 percent confidence interval:
# -2.32926 1.20926
# sample estimates:
# mean of x mean of y
# 2.065 2.625
最后,将结果可视化:
#绘制直方图并增加显著性标志
library("ggplot2")
library("ggpubr")
data <- data.frame(group=c(rep("aka",20),rep("btp",20)),
value=c(aka,btp))
p1 <- ggplot(data,aes(x=group,y=value,fill=group))+geom_boxplot(notch = F, alpha=0.95, outlier.colour = "black",
outlier.shape = 21,
outlier.size = 0.65)
p2 <- p1 + stat_compare_means(label = "p.format",method = "t.test",show.legend=T)+
theme(legend.position = "top")+
labs(title = "Two Sample t-test")+
scale_y_continuous(name = "血糖下降值")+
scale_x_discrete(name="分组")+
theme_classic()+
theme(axis.text.x = element_text(angle = 90, hjust = 1,size = 13,face = "bold"),
axis.text.y = element_text(angle = 90, size = 13,face = "bold"),
axis.title.y = element_text(angle = 90, size = 15,face = "bold")
四、总结
在本小节中,我们了解了3种t检验(请大家务必掌握3种t检验的英语单词,因为对正确理解SCI文章的数据处理很重要)的应用条件,简单概括就是随机性、正态性和(或)方差齐性。同时结合实际数据展示了如何应用、解释t检验的结果,并演示了R如何实现这一分析。为了避免大家对SPSS的审美疲劳,小编另辟蹊径的找了R语言t.test(),祝大家学的愉快。拜拜,我们下期继续学习单因素方差分析~~