Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >R语言系列第四期:①R语言单样本双样本差异性检验

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

作者头像
微点
修改于 2019-05-13 02:26:02
修改于 2019-05-13 02:26:02
2.3K0
举报
文章被收录于专栏: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 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
统计学分析
用户10803254
2023/12/19
2310
R语言系列第四期:③R语言表格数据率的比较
连续型数据的组间比较往往可以采用t检验/wilcoxon检验或者ANOVA方差分析/KW检验来完成。但是对于分类资料来说,这些方法就是行不通的了。详情点击:R语言系列第四期:①R语言单样本双样本差异性检验R语言系列第四期:②R语言多组样本方差分析与KW检验
微点
2019/05/11
3.1K0
「R」统计检验函数汇总
通常先用 lm() 函数对数据建立线性模型,再用 anova() 函数提取方差分析的信息更方便。
王诗翔呀
2020/07/03
2.5K0
R in action读书笔记(6)-第七章:基本统计分析(下)
相关系数可以用来描述定量变量之间的关系。相关系数的符号(±)表明关系的方向(正相关或负相关),其值的大小表示关系的强弱程度(完全不相关时为0,完全相关时为1)。除了基础安装以外,我们还将使用psych和ggm包。
Ai学习的老章
2019/04/10
1.4K0
R in action读书笔记(6)-第七章:基本统计分析(下)
R语言T检验的简单小例子
T检验是用来检验两组数据之间均值是否有差异的一种方法,比如下面我们用到的数据包括20个男生和20个女生的体重数据。
用户7010445
2020/08/07
1.6K0
R语言T检验的简单小例子
「R」t 检验
你想要检验来自两个总体的样本是否有不同的均值(显著性差异),或者检验从一个总体抽取的样本均值和理论均值有显著性差异。
王诗翔呀
2020/07/02
1.6K0
「R」t 检验
【数据分析 R语言实战】学习笔记 第七章 假设检验及R实现(下)
程序包BDSA中的函数z.test()可以快速地实现方差己知时两总体均值差的假设检验。
Ai学习的老章
2019/04/10
2.2K0
【数据分析 R语言实战】学习笔记 第七章 假设检验及R实现(下)
R语言系列第四期:④R语言简单相关与回归
lm(formula = short.velocity ~ blood.glucose)
百味科研芝士
2019/05/23
1.6K0
「R」基本统计分析
因为书中列举的方法和知识点比较多,没必要全都掌握,会一种,其他的了解即可。我就简要地整理一下我觉得重要的吧。
王诗翔呀
2020/07/06
1.8K0
「Workshop」第十三期:统计检验与多重矫正
假设检验(hypothesis testing),又称统计假设检验,是用来判断样本与样本、样本与总体的差异是由抽样误差引起还是本质差别造成的统计推断方法。
王诗翔呀
2020/08/20
2.7K0
「Workshop」第十三期:统计检验与多重矫正
数据科学19 | 统计推断-t分布置信区间
当样本量足够大,总体标准差已知时,根据中心极限定理可以用标准正态分布估计总体均值;t分布适用于小样本估计呈正态分布的总体均值。
王诗翔呀
2020/07/03
3.9K0
数据科学19 | 统计推断-t分布置信区间
一入统计深似海-t检验
翻开统计学的书,让我有种当年看《红楼梦》的错觉;嗯,名著(高级),要看下去;可是人(概念)怎么这么多,我还是慢慢来!!! 没有自己的理解串起来,会比较枯燥,之后再持续更新。 假设检验 三步走: 1.提
生信技能树
2019/05/24
7630
机器学习与R语言实战笔记(第三章)
这里记录下这本书里我之前不了解的内容,欢迎一起交流!向量的模式作者写了个函数来干这件事,我学习下,登上巨人的肩膀。我的理解,这个是相当于motif,计数最多的元素的意思。
用户1075469
2021/12/18
1.2K0
机器学习与R语言实战笔记(第三章)
T检验:两样本数据的差异性
我最近在研究TCGA的RNAseq数据表达差异性的分析,常用的并且最简单的方法是统计量T检验。下面用一个例子来验证T检验的弊端问题所在。
努力在北京混出人样
2019/02/18
2K0
「Workshop」第四十期 常用的差异分析方法
如今在生物学研究中,差异分析越来越普遍,也有许多做差异分析的方法可供选择。但是在实际应用中,大多数人不知道该使用哪种方法来处理自己的数据,所以今天我就来介绍下目前几种常用的差异分析方法及其适用场景。
王诗翔呀
2021/04/23
1.8K0
【数据分析 R语言实战】学习笔记 第七章 假设检验及R实现(上)
对总体参数的具体数值所作的陈述,称为假设;再利用样本信息判断假设足否成立,这整个过程称为假设检验。
Ai学习的老章
2019/04/10
2.3K0
【数据分析 R语言实战】学习笔记 第七章 假设检验及R实现(上)
R语言各种假设检验实例整理(常用)
一、正态分布参数检验 例1. 某种原件的寿命X(以小时计)服从正态分布N(μ, σ)其中μ, σ2均未知。现测得16只元件的寿命如下:                  159 280 101 212 224 379 179 264                   222 362 168 250 149 260 485 170     问是否有理由认为元件的平均寿命大于255小时? 解:按题意,需检验                      H0: μ ≤ 225 H1: μ > 225    
用户1680321
2018/04/27
4.6K0
R语言各种假设检验实例整理(常用)
数据分析:假设检验方法汇总及R代码实现
显著性检验方法,通常也被称为假设检验方法,是统计学中用于评估样本统计量是否显著不同于某个假设值的一种重要工具。以下是假设检验方法使用时需要考虑的三个条件的书面化表述:
生信学习者
2024/06/20
1.1K0
数据分析:假设检验方法汇总及R代码实现
【数据分析 R语言实战】学习笔记 第六章 参数估计与R实现(下)
在R中编写计算置信区间的函数twosample.ci()如下,输入参数为样本x, y,置信度α和两个样本的标准差。
Ai学习的老章
2019/04/10
2.2K0
【数据分析 R语言实战】学习笔记 第六章 参数估计与R实现(下)
R中的常用的检验方法
如,年长的男性与年轻的男性失业率概率是否相同,此时,年龄与失业率是有关的,所以是非独立的。 非独立样本的t检验假定组间差异呈正态分布。 调用格式:其中y1,y2为非独立的数值向量
生信编程日常
2020/11/26
1.1K0
R中的常用的检验方法
推荐阅读
相关推荐
统计学分析
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档