R语言系列第四期:①R语言单样本双样本差异性检验

2019-05-23 22:50:16 浏览数 (1)

之前详细介绍了利用R语言进行统计描述,详情点击:R语言系列第三期:③R语言表格及其图形展示、R语言系列第三期:①R语言单组汇总及图形展示、R语言系列第三期:②R语言多组汇总及图形展示

从这个部分我们就开始为大家介绍统计推断的内容了,我们将重点放到相关统计函数的特定参数及其输出的解释上。

一些最基础的统计检验基本上都是比较连续数据之间的差异,可能是两个组之间的比较,也可能是单组与特定值或预设值之间的比较,这便是本章的主题了。

首先介绍两个函数:用来进行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

End

0 人点赞