R语言物种丰度矩阵的实现基本操作与生物物种多样性指数计算

Posted DU Group

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了R语言物种丰度矩阵的实现基本操作与生物物种多样性指数计算相关的知识,希望对你有一定的参考价值。




本文由“壹伴编辑器”提供技术支持

在使用R语言处理数据的过程中,最基础的一步是把数据导入为合理的数据格式,因为不同的R命令只会匹配特定的数据格式。在生态学野外调查研究中,我们获取的实验数据往往是列表的形式,图1的数据中我们在每个样地(site)中设置了5个样方(plot),对于5个样方的调查,描述了样地的物种组成和物种对于环境的适应度,本调查中用草本物种的盖度代替了物种的丰度。


R语言物种丰度矩阵的实现基本操作与生物物种多样性指数计算

图1 植物群落数据举例


但是,我们在用R处理数据时,图1的数据格式不能拿来直接计算,矩阵是运用最广的数据格式,基于物种丰度(相对丰度)的群落数据矩阵用于许多生态学常用指数的计算(生物多样性指数、距离矩阵等)。
那么如何将列表数据转换成矩阵呢?我的思路是,首先将样方为单位的数据整理成样地为单位的数据,再将样地数据转换为丰度矩阵。
首先我们将原始数据保存成文件名为rawdata的csv格式文件。



代码如下:

#读取数据

rawdata= read.csv("rawdata.csv", header = T) #第一行为表头

library(doBy)#加载R包(需提前安装)

rawdata.site= summaryBy(abun ~ site + species, data=rawdata, FUN=mean)

#将abun列的数据按照每个样地中的

#每个物种为单位(site +species)

#计算均值

names(rawdata.site)[3]="abun"

#对均值列的列名重新命名为“abun”

head(rawdata.site)#查看前六行的数据


R语言物种丰度矩阵的实现基本操作与生物物种多样性指数计算

得到的rawdata.site即为样地为单位的数据列表。
随后,我们将列表转换成丰度矩阵(代码来自赖江山R语言学习班)。代码大致思路为:首先根据所有样地出现的物种和样地数量,建立一个行数为样地数,列数为物种数的空矩阵,然后利用循环语句,将数据填入空矩阵中。



代码如下:

tram.sitedata= function(data1)

{Species=unique(data1$species)

#提取所有的不重复物种名称并赋给

#Species向量

Site=unique(data1$site)

#提取所有不重复样方编号并赋给Site向量

n=length(Species) 

#计算不重复物种数并赋值给n

m=length(Site)  

#计算不重复的样方数并赋值给m

newdata=as.data.frame(matrix(0,m,n))

#构建一个新m×n的矩阵,然后将矩阵

#转为数据框,才能添加行名和列名

names(newdata)=Species 

#将列名改为物种名称

row.names(newdata)=Site 

#将行名改为样地的名称

#做一个行循环,然后进行填空

for(iin 1:m)

{newdata1=data1[data1$site==Site[i],]

#提取原始数据第i个样地的数据


newspecies=newdata1$species          

#提取第i个样地的物种名

newn=length(newspecies)             

#提取第i个样地的物种数

#做一个列循环,看多少个物种,

#就插入多少数值

for (jin 1:newn)

{Ncol=which(Species==newspecies[j])

#提取第i个样地的物种所在的位置

newdata[i,Ncol]=newdata1$abun[j]   

#第i行物种所在的位置依次#填入

#当前的物种多度值

}

}

return(newdata)#返回结果

}

spe.matrix= tram.sitedata(rawdata.site)#丰度矩阵

library(vegan)#(需提前安装)

spe.rel.matrix<- decostand(spe.matrix, "total")#相对丰度矩阵

write.csv(spe.rel.matrix,"spe.rel.csv")

#输出结果



将数据读出到spe.rel.csv文件中,结果如下:


图2转换后的相对丰度矩阵

根据物种相对丰度矩阵,我们可以计算生物多样性指数(以物种多样性为例)。



代码如下:

library(vegan)

Richness=rowSums(spe.rel.matrix>0)#物种丰富度指数

Shannon=diversity(spe.rel.matrix,"shannon")

#shannon多样性指数

Simpson=diversity(spe.rel.matrix,"simpson")

#Simpson多样性指数

H=diversity(spe.rel.matrix)

Pielou=H/log(Richness) #Pielou均匀度指数


R学习感言:R语言是生态学研究中常用的工具,因为其功能的多样性与代码的开源性,得到广大生态学者们的青睐。R语言比SPSS等软件上手难度大,刚接触R的同 学,一定要保持一个好的心态,不管遇到什么Error也不要怕,微笑面对它,不要放弃学习。入门之后就可以根据自己的需要,自学代码了。下一期分享的代码可以根据大家的需求决定。






本文编辑


2016级博士 衣世杰




以上是关于R语言物种丰度矩阵的实现基本操作与生物物种多样性指数计算的主要内容,如果未能解决你的问题,请参考以下文章

使用R语言获得16S物种丰度

R语言绘制稀释曲线

生态入侵对物种引进有啥启示?

扩增子分析解读7物种分类统计 筛选进化树和其它

OTU rank curve(Rank Abundance 曲线)基本概念

数学建模试题:请你建立合理的数学模型,设计一个全面而有效的评价生物多样性 的指标。拜托大家看一下