前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >R语言系列第四期:①R语言单样本双样本差异性检验

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

作者头像
微点
修改2019-05-13 10:26:02
1.9K0
修改2019-05-13 10:26:02
举报
文章被收录于专栏:sci666sci666

之前详细介绍了利用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

本文系转载,前往查看

如有侵权,请联系?cloudcommunity@tencent.com 删除。

本文系转载前往查看

如有侵权,请联系?cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据保险箱
数据保险箱(Cloud Data Coffer Service,CDCS)为您提供更高安全系数的企业核心数据存储服务。您可以通过自定义过期天数的方法删除数据,避免误删带来的损害,还可以将数据跨地域存储,防止一些不可抗因素导致的数据丢失。数据保险箱支持通过控制台、API 等多样化方式快速简单接入,实现海量数据的存储管理。您可以使用数据保险箱对文件数据进行上传、下载,最终实现数据的安全存储和提取。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com