从这个部分我们就开始为大家介绍统计推断的内容了,我们将重点放到相关统计函数的特定参数及其输出的解释上。
一些最基础的统计检验基本上都是比较连续数据之间的差异,可能是两个组之间的比较,也可能是单组与特定值或预设值之间的比较,这便是本章的主题了。
首先介绍两个函数:用来进行t检验的t.test()和进行Wilcoxon检验的wilcox.test()。它们能够对单样本、两独立样本与配对样本进行检验。
#Tips:统计推断的部分我们不会把重点放到统计原理上,如果对统计学原理感兴趣的朋友请查阅相关的统计书籍,我们只会把部分必须解释的统计内容呈现出来。
A. 单样本t检验
适用条件:满足正态分布的连续型数据,数据之间保持随机性和独立性。
适用范围:比较当前数据总体与单个预期值的大小。
实例:11位女性的每日摄入能量记录存放到intake变量中:
> intake=c(5260,5470,5640,6180,6390,6515,6805,7515,7516,8230,8770)
我们可以先进行简单的描述再来作推断:
> mean(intake)
[1] 6753.727
> sd(intake)
[1] 1142.19
> quantile(intake)
0% 25% 50% 75% 100%
5260.0 5910.0 6515.0 7515.5 8770.0
也许你想检验一下这些女性的摄入能量是不是与推荐值7725千焦相差甚远。首先,我们需要检验一下正态性,这里介绍一个最简单的正态性检验的方法:用夏皮罗-威尔克(Shapiro-Wilk)法检验数据正态性,即W检验,1965 年提出,适用于样本含量n ≤50 时的正态性检验。shapiro.test()
> shapiro.test(intake)
Shapiro-Wilk normality test
data: intake
W = 0.95238, p-value = 0.6744
#Tips:重点是p-value的结果,这里的值是0.6744>0.05(检验水准也可以是0.1),满足正态性。如果P值过小的情况下,就不满足正态性了,可以先进行数据转换,比如说对数转换,平方根反正弦变换,倒数变换等等方法,如果都不能满足正态的话,使用非参数的方式计算,比如后文的Wilcoxon。另外检查数据正态性的方法有很多,这里不一一列举,其实前面作图的时候讲过的QQ图也可以用来检验正态性。
我们通过W检验,得知数据服从正态分布,那么我们接下来的要做的就是检验这个分布是否满足μ=7725。
> t.test(intake,mu=7725)
One Sample t-test
data: intake
t = -2.8203, df = 10, p-value = 0.01815
alternative hypothesis: true mean is not equal to 7725
95 percent confidence interval:
5986.394 7521.061
sample estimates:
mean of x
6753.727
结果解释:One Sample t-test
这里是对所做的检验类型的描述,告诉我们是单样本的t检验,在这个函数里,如果一个向量参数和一个mu参数,那么做的就是单组独立样本的t检验。
t = -2.8203, df = 10, p-value = 0.01815
结果显示中t=-2.8203是统计量,df代表自由度,p-value是最终的p值,p=0.01815<0.05,于是在检验水准在0.05的条件下,拒绝零假设,认为数据显著地偏离了原假设中的均值7725千焦。
alternative hypothesis: true mean is not equal to 7725
两个信息:1.原假设里的均值是7725;2.这是一个双侧检验(not equal to)。
95 percent confidence interval:
5986.394 7521.061
这个是均值的95%置信区间。置信区间也可以作为假设检验的一种方式,查看设定均值在不在这个区间内,如果不在,则可拒绝零假设。
sample estimates:
mean of x
6753.727
这最后一部分就是观测值的均值,是样本均值的点估计结果。
#Tips:这个函数还有几个可选的参数,除了mu设立的零假设的均值,还有alternative设定单侧检验还是双侧检验,默认双侧,如果设定成“greater”和“less”则成为单侧检验。还有一个conf.level=0.99/0.90等,来设定置信区间范围。也可以通过缩写的方式设定参数,比如al=“g”也是可以的。
B. Wilcoxon符号秩和检验(单样本)
t检验在数据来自正态分布时比较稳定,在不满足正态分布的数据也不错,尤其是大样本条件下,把握度相对较高。而如果想要使用不依赖数据分布的方法,就需要Wilcoxon这样的方法了,它们往往把数据替换成相应的顺序统计量,比较的是中位数。
对Wilcoxon秩和检验的实际应用基本上与t检验一致(对分布无要求)
> wilcox.test(intake,mu=7725)
Wilcoxon signed rank test
data: intake
V = 8, p-value = 0.02441
alternative hypothesis: true location is not equal to 7725
#Tips:这里比t.test的输出短,因为一个非参数检验不会出现类似于参数估计以及置信区间的概念。
这里V代表正数对应的秩和。P=0.02441同样拒绝零假设,结论同t检验。
#Tips:除了跟t.test一样有mu和alternative两个参数外,还有一个correct参数,用于指示是否需要连续性校正,默认是校正的(T)。还有exact,用来指示是否精确计算。
C. 两样本t检验
我们以energy数据集作为例子,来比较一下肥胖和消瘦的两组人群的能量消耗是否有差别:
> attach(energy)
> energy
expend stature
1 9.21 obese
2 7.53 lean
3 7.48 lean
4 8.08 lean
5 8.09 lean
...
17 8.79 obese
18 9.69 obese
19 9.68 obese
20 7.58 lean
21 9.19 obese
22 8.11 lean
这个数据框的两列包含了我们所需要的信息,分类变量stature包含了分组信息,而数值变量expend包含了能量消耗情况。我们只要传递一个模型方程,就能通过R中的t.test和wilcox.test来分析这样格式的数据。
我们的目的是比较两组的能量消耗水平是否有差异,所以我们使用如下的t检验(设定数据满足正态分布):
> t.test(expend~stature)
Welch Two Sample t-test
data: expend by stature
t = -3.8555, df = 15.919, p-value = 0.001411
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
-3.459167 -1.004081
sample estimates:
mean in group lean mean in group obese
8.066154 10.297778
这里“~”指明expend是通过stature来描述的。其它内容基本上跟之前的单样本t检验一致,95%置信区间是均值之差的,区间估计的检验结果与p值所得结果一致。
#Tips:R里t检验默认不假设两组方差相等。这样也导致了自由度非整数。上面的t检验在统计上叫做t’检验。
为了进行平常我们所用的t检验,需要明确方差相等这个参数,可以通过使参数ver.equal=T来达到这一点。
> t.test(expend~stature,var.equal=T)
Two Sample t-test
data: expend by stature
t = -3.9456, df = 20, p-value = 0.000799
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
-3.411451 -1.051796
sample estimates:
mean in group lean mean in group obese
8.066154 10.297778
#Tips:这个是我们平常使用的t检验,其实差别不是很大。
如果数据存储的形式不是向上述一样的数据框,而是已经区分开来的两个向量。比如说如下的状态,肥胖组和消瘦组的能量消耗情况分别存放在expob和exple两个变量里,就可以通过“,”分隔开两个变量的形式罗列到t.test()的参数里:
> expob=subset(energy$expend,energy$stature=="obese")
> exple=subset(energy$expend,energy$stature=="lean")
> expob
[1] 9.21 11.51 12.79 11.85 9.97 8.79 9.69 9.68 9.19
> exple
[1] 7.53 7.48 8.08 8.09 10.15 8.40 10.88 6.13 7.90 7.05 7.48
[12] 7.58 8.11
> t.test(expob,exple)
Welch Two Sample t-test
data: expob and exple
t = 3.8555, df = 15.919, p-value = 0.001411
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
1.004081 3.459167
sample estimates:
mean of x mean of y
10.297778 8.066154
#Tips:这里的结果跟数据框存放的数据计算结果相同,但是需要注意不同的数据存放形式,需要不同的代码。同时wilcoxon检验当前存放方式也适用,下文不赘述。
D. 比较方差
为了给上面的t检验做一个方差齐性的证据,我们可以做一下两组方差检验的F检验:
> var.test(expend~stature)
F test to compare two variances
data: expend by stature
F = 0.78445, num df = 12, denom df = 8, p-value = 0.6797
alternative hypothesis: true ratio of variances is not equal to 1
95 percent confidence interval:
0.1867876 2.7547991
sample estimates:
ratio of variances
0.784446
这里的计算结果的判断与正态性检验的类似,都是p值大于0.05,则满足正态性或者方差齐性。所以可以使用常规的t检验来比较。
#Tips:方差齐性检验不能用在配对的数据中,只能用在独立的两组数据上。
E. 两样本Wilcoxon检验
使用wilcoxon检验和t.test相似:
> wilcox.test(expend~stature)
Wilcoxon rank sum test with continuity correction
data: expend by stature
W = 12, p-value = 0.002122
alternative hypothesis: true location shift is not equal to 0
Warning message:
In wilcox.test.default(x = c(7.53, 7.48, 8.08, 8.09, 10.15, 8.4, :
无法精確計算带连结的p值
这里不多解释,适用所有分布类型的样本,结果p-value与检验标准α比较,得出结论。
F. 配对t检验
我们有时会遇到数据之间不独立,两组之间的数据相互关联的情况,比如说用药前用药后的数据,或者一种样本被两种方式检测得出两组数据,这样的数据就可以当成配对的数据进行分析。同时,配对的数据要求两组的样本量是一致的,需要一一对应。
这部分的数据使用ISwR里的intake数据集(能量摄入数据)作为例子。
#Tips:本节前面的部分有一个与intake数据集重名的变量,在索引intake的时候,会优先找出变量intake而不是数据集intake,因此我们可以通过> rm(intake)来先把intake变量删除,方便准确使用intake数据集。
> intake
pre post
1 5260 3910
2 5470 4220
3 5640 3885
4 6180 5160
5 6390 5645
6 6515 4680
7 6805 5265
8 7515 5975
9 7515 6790
10 8230 6900
11 8770 7335
我们可以计算下11位女性月经前后摄入能量的差值:
> post-pre
[1] -1350 -1250 -1755 -1020 -745 -1835 -1540 -1540 -725 -1330 -1435
我们可以看出它们都是负数,相比于月经前,所有女性都在月经后有更低的能量摄入。配对t检验可以通过下面代码实现:
> t.test(pre,post,paired=T)
Paired t-test
data: pre and post
t = 11.941, df = 10, p-value = 3.059e-07
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
1074.072 1566.838
sample estimates:
mean of the differences
1320.455
#Tips:这里注意paired=T的参数是必须的。然后这里的95%置信区间是差值的均值置信区间,而两个独立样本的区间是均值的差值的置信区间,这两个是有本质差别的。
G. 配对Wilcoxon检验
同样,它的参数里paired=T也是必须的。
> wilcox.test(pre,post,paired=T)
Wilcoxon signed rank test with continuity correct
data: pre and post
V = 66, p-value = 0.00384
alternative hypothesis: true location shift is not equal to 0
Warning message:
In wilcox.test.default(pre, post, paired = T) : 无法精確計算带连结的p值
总结一下。本节介绍了两个方法,t检验和wilcoxon检验,这两个检验很类似,最大区别在于参数检验t检验适用于小样本的正态分布数据,而非参数检验wilcoxon检验对样本的分布无要求。t检验的检验效能高于wilcoxon检验。我们还介绍了正态性检验和方差齐性检验,只有满足两种分布才能使用常规的t检验。随后我们介绍了三种情况,分别是单组独立样本与预设值比较,两组独立样本比较,以及配对样本的比较。
当然并不是所有数据分类都只有两种及以下,当出现三组数据比较的时候我们有应该怎么处理呢,且听下回分解。
参考资料:
1. 《R语言统计入门(第二版)》 人民邮电出版社 Peter Dalgaard著
2. 《R语言初学者指南》 人民邮电出版社 Brian Dennis著
3. Vicky的小笔记本《blooming for you》by Vicky
生信发文助手
如需生信分析服务请加微信:keyan-zhishi2
多点好看,少点脱发