R语言|绘制物种累计曲线

Python017

R语言|绘制物种累计曲线,第1张

物种累积曲线( species accumulation curves)用于衡量和预测群落中物种丰富度随样本量扩大而增加的幅度,在生物多样性和群落调查中,被广泛用于判断样本量是否充分的并估计群落丰富度。

一般而言,在样本量较少的情况下,随着样本数量的增加,将有较大可能性发现大量新的物种,此时曲线呈急剧上升状态;当样本数量已经较大时,此时群落中的ASV/OTU总数将不再随着样本数量增加而显著增加,曲线将趋于平缓。

因此,通过物种累积曲线可以判断样本量是否充分:若曲线始终保持上升趋势,则表明样本量不足,反之,则表明样本量已足以反应群落的物种组成。在样本量充分的前提下,运用物种累积曲线还可以对物种丰富度进行预测。

下面我使用R脚本,vegan包对ASV/OTU丰度矩阵中每个样本所对应的SAV/OTU总数绘制specaccum物种累计曲线。

1.调用vegan包,读取物种数据;

2.使用 specaccum 函数用来计算物种的累计曲线;

3.作图展示。

如图,随着取样样本数量逐渐增加,所观测到的物种种类也不断增加。当曲线趋近平缓时,代表群落中的物种接近全部被观测到;反之不饱和,还需继续观测更多的样本数量。

-- title: R语言中dnorm, pnorm, qnorm与rnorm以及随机数 date: 2018-09-07 12:02:00 type: "tags" tags: 在R语言中,与正态分布(或者说其它分布)有关的函数有四个,分别为dnorm,pnorm,qnorm和rnorm,其中,dnorm表示密度函数,pnorm表示分布函数,qnorm表示分位数函数,rnorm表示生成随机数的函数。在R中与之类似的函数还有很多,具体的可以通过 help(Distributions) 命令去查看,对于分位数或百分位数的一些介绍可以看这篇笔记 《分位数及其应用》 ,关于正态分布的知识可以看这篇笔记 《正态分布笔记》 。 现在这篇笔记就介绍一下这些函数的区别。 R提供了多种随机数生成器(random number generators, RNG),默认采用的是Mersenne twister方法产生的随机数,该方法是由Makoto Matsumoto和Takuji Nishimura于1997年提出来的,其循环周期是 。R里面还提供了了Wichmann-Hill、Marsaglia-Multicarry、Super-Duper、Knuth-TAOCP-2002、Knuth-TAOCP和L'Ecuyer-CMRG等几种随机数生成方法,可以通过 RNGkind() 函数进行更改,例如,如果要改为WIchmann-Hill方法,就使用如下语句: 在R中使用随机数函数,例如 rnorm() 函数来生成的随机数是不一样的,有时我们在做模拟时,为了比较不同的方法,就需要生成的随机数都一样,即重复生成相同的随机数,此时就可以使用 set.seed() 来设置随机数种子,其参数为整数,如下所示:dnorm 中的 d 表示 density , norm 表示正态贫,这个函数是正态分布的 概率密度(probability density)函数 。 正态分布的公式如下所示:给定x,μ和σ后, dnorm() 这个函数返回的就是会返回上面的这个公式的值,这个值就是Z-score,如果是标准正态分布,那么上述的公式就变成了这个样子,如下所示:现在看一个案例,如下所示:dnorm(0,mean=0,sd=1) 由于是标准正态分布函数的概率密度,这个命令其实可以直接写为 dnorm(0) 即可,如下所示: 再看一个非标准正态分布的案例,如下所示: 虽然在 dnorm() 中,x是一个概率密度函数(PDF,Probability Density Function)的独立变量,但它也能看作是一组经过Z转换后的一组变量,现在我们看一下使用 dnorm 来绘制一个正态分布的概率密度函数曲线,如下所示: 现在使用 dnorm() 函数计算一下Z_scores的概率密度,如下所示: 现在绘图,如下所示: 从上面的结果可以看出,在每个Z-score处, dnorm 可以绘制出这个Z-score对应的正态分布的pdf的高度。pnorm 函数中的 p 表示Probability,它的功能是,在正态分布的PDF曲线上,返回从负无穷到 q 的积分,其中这个 q 指的是一个Z-score。现在我们大概就可以猜测出 pnorm(0) 的值是0.5,因为在标准正态分布曲线上,当Z-score等于0时,这个点正好在标准正态分布曲线的正中间,那么从负无穷到0之间的曲线面积就是整个标准正态分布曲线下面积的一半,如下所示:pnorm 函数还能使用 lower.tail 参数,如果 lower.tail 设置为 FALSE ,那么 pnorm() 函数返回的积分就是从 q 到正无穷区间的PDF下的曲线面积,因此我们就知道了, pnorm(q) 与 1-pnorm(q,lower.tail=FALSE) 的结果是一样的,如下所示: 在计算机出现之前的时代里,统计学家们使用正态分布进行统计时,通常是要查正态分布表的,但是,在计算机时代,通常都不使用正态分布表了,在R中, pnorm() 这个函数完全可以取代正态分布表了,现在我们使用一个Z-scores的向量来计算一下相应的累积概率,如下所示: 以上就是标准正态分布的 累积分布函数(CDF,Cumulative Distribution Function) 曲线。 简单来说, qnorm 是正态分布 累积分布函数(CDF,Cumulative Distribution Function) 的反函数,也就是说它可以视为 pnorm 的反函数,这里的 q 指的是quantile,即分位数。 使用 qnorm 这个函数可以回答这个问题:正态分布中的第p个分位数的Z-score是多少? 现在我们来计算一下,在正态分布分布中,第50百分位数的Z-score是多少,如下所示: 再来看一个案例:在正态分布中,第96个百分位的Z-score是多少,如下所示: 再来看一个案例:在正态分布中,第99个百分位的Z-score是多少,如下所示: 再来看一下 pnorm() 这个函数,如下所示: 从上面我们可以看到, pnorm 这个函数的功能是,我们知道某个Z-score是多少,它位于哪个分位数上。 接着我们进一步举例来说明一下 qnorm 和 pnorm 的具体功能,如下所示: 现在进行绘图,如下所示:rnomr() 函数的功能用于生成一组符合正态分布的随机数,在学习各种统计学方法时, rnorm 这个函数应该是最常用的,它的参数有 n , mean , sd ,其中n表示生成的随机数,mean与sd分别表示正态分布的均值与标准差,现在举个例子,如下所示: 现在我们绘制一下上面的几个向量的直方图,看一下它们的均值是否在70附近,如下所示: 在R语言中,生成不同分布的各种类型的函数都是以d,p,q,r开头的,使用原理跟上面的正态分布都一样。sample() 函数是一个用于生成随机数的重要的核心函数,如果仅传递一个数值n给它,就会返回一个从1到n的自然数的排列,如果传递是 n:m 就是生成从n到m的随机数,如是是 7,5 ,则会生成5个小于7的随机数,如下所示: 从上面的结果可以看出来,这些数字都是不同的,也就是说,sample函数默认情况下是不重复抽样,每个值只出现一次,如果允许有重复抽样,需要添加参数 replace = TRUE ,如下所示: sample函数通常会从某些向量中随机挑一些参数,如下所示: 也可以挑日期,如下所示: 上述分布函数前面加上r,p、q、d就可以表示相应的目的:

1. 安装和加载包

绘制Kaplan-Meier生存曲线需要用到的R包:survminer和survival。

library(survminer) # 加载包

library(survival) # 加载包

2 拟合曲线

R中使用survfit()函数来拟合生存曲线。

fit.3<-survfit(Surv(住院天数+病程,组别)~cd1656,data=data)

3. 绘制曲线函数

ggsurvplot(fit, data = NULL, fun = NULL, color = NULL,

          palette = NULL, linetype = 1, conf.int = FALSE,

          pval = FALSE, pval.method = FALSE,

          test.for.trend = FALSE, surv.median.line = "none",

          risk.table = FALSE, cumevents = FALSE,

          cumcensor = FALSE, tables.height = 0.25,

          group.by = NULL, facet.by = NULL, add.all = FALSE,

          combine = FALSE, ggtheme = theme_survminer(),

          tables.theme = ggtheme, ...)

# 参数解释

fit # 拟合的生存曲线对象

data # 用来拟合生存曲线的数据集

fun  # 常用三个字符参数;

# "event"绘制累积事件(f(y)=1-y),

# "cumhaz"绘制累积危害函数(f(y)=-log(y))

# "pct"绘制生存概率(百分比)。

color # 设置生存曲线的颜色。

# 如果只有1条曲线,则直接设置color="blue";

# 如果有多条曲线,默认color="strata",按分组为生存曲线着色;

# 也可以自定义调色板来设置曲线颜色。

palette # 调色板,默认"hue"。

# 可选调色板有"grey","npg","aaas","lancet",

# "jco", "ucscgb","uchicago","simpsons"和"rickandmorty".

linetype = 1 # 设置曲线线型。可以按"strata"设置线型;

# 或按数字向量c(1, 2)或按字符向量c("solid", "dashed")设置

conf.int # 逻辑词;默认FASLE;为TRUE则绘制曲线置信区间

pval = FALSE # 逻辑词;为TRUE则将统计检验计算的p值添加到图上;

# 为数字,则直接指定P值大小,如pval = 0.03;

# 为字符串,则添加字符串到图上,如pval = "p-value: 0.031"

pval.method  # 逻辑词,是否添加计算p值的统计方法的文本;

# 只有当 pval = TRUE时, 才会在图上添加检验方法文本

test.for.trend # 逻辑词,默认为FALSE;

# 为TRUE则返回趋势p值的检验,趋势检验旨在检验生存曲线的有序差异

surv.median.line # 在中位生存时间点处绘制水平或垂直线的字符向量;

# 可用值有"none"、"hv"、"h"、"v";其中v绘制垂直线,h绘制水平线。

risk.table = FALSE  # 逻辑词,图上是否添加风险表;

# "absolute" 显示处于风险中的绝对数量;

# "percentage" 显示处于风险中的百分比数量

# "abs_pct" 显示处于风险中的绝对数量和百分比

cumevents # 逻辑词,是否添加累计事件表

cumcensor # 逻辑词,是否添加累计删失表

tables.height = 0.25 # 生存曲线图下所有生存表的高度,数值0-1之间

group.by  # 包含分组变量名称的字符向量,向量长度≤2

facet.by # 字符向量,指定绘制分面生存曲线的分组变量(应≤2)的名称

ggtheme=theme_survminer() # 设置ggplot2主题,如theme_bw()

tables.theme # 作用于生存表的ggplot2主题名称

# 有theme_survminer、theme_cleantable()

add.all = FALSE # 逻辑词;是否添加总患者生存曲线到主生存图中