|
写在前面:
前几天贴了多样性的基本概念后,收到小朋友的后台留言,询问关于多样性的计算方法。老实说,现在软件满天飞,方法实在是非常多,SPSS,PRIMER,Past,R,等等,都可以做。网上的各种教程也是一抓一大把,甚至有很多在线版,只要输入数据,立刻可以得到结果。但是真正去网上搜索的时候,又很凌乱、分散,可操作性并不是很强。纠结了一下,贴出我自己常用的一些基本代码吧,简单又好用的。这些代码是在R语言里面使用的。我个人比较推荐R,开源,友好,快捷。希望更多人学习和使用R。我不太擅长这种文,所以方法类的并不会经常写。
几点注意事项:
1. R是区分大小写的,贴代码时一定要仔细检查;
2. 导入数据的格式推荐csv;
3. 原始数据格式最好是图1和图2所示,R默认样品为行,变量为列;
4. 若不是这种格式,可以使用t转换行列,下面也有写;
5. 本文代码可以直接复制粘贴,但还是建议自己写几遍,才能更理解;
6. 每一行代码里,没有空格,没有空格,没有空格!
图1. 物种数据
图2. 环境数据
准备
library(vegan)
spe<-read.csv("spe.csv",row.names=1)#输入物种数据
head(spe)#查看数据
spe_trans=t(spe)#行列转换
env<-read.csv("env.csv",row.names=1)#输入环境数据
head(env)
计算alpha多样性
香浓指数
Shannon<-diversity(spe)#计算Shannon指数
Shannon#查看数据,注意大小写
辛普森指数
Inv_Simpson<-diversity(spe,"inv")#计算Inversed Simpson指数
Inv_Simpson
统计物种个数
S<-specnumber(spe)#统计每个样品内的物种个数
S
均匀度指数
Pielou_evenness<-Shannon/log(S)
Pielou_evenness
Simpson_evenness<-Inv_Simpson/S
Simpson_evenness
数据输出
report=cbind(Shannon, Inv_Simpson,Pielou_evenness, Simpson_evenness)
head(report)
write.table(report,file="alpha.txt",sep="\t",col.names=NA)#输出txt格式,拖进excel即可
计算beta多样性
基于丰度的原始数据的Bray-curtis距离矩阵
bray.dist<-vegdist(spe)#默认即为bray-curtis距离
或者
bray.dist<-vegdist(spe,method="bray")
head(bray.dist)#查看结果的前几行
write.table(as.matrix(bray.dist),file="bray.dist.txt",sep="\t",col.names=NA)
对数转换后的基于丰度的Bray-curtis距离矩阵
bray.dist.ln<-vegdist(log1p(spe))#此处是log1p(数字1)
head(bray.dist.ln)
write.table(as.matrix(bray.dist.ln),file="bray.dist.ln.txt",sep="\t",col.names=NA)
基于有无(0, 1矩阵)的Jaccard距离矩阵
spe.jaccard<-vegdist(spe,"jac",binary=TRUE)#不用自己转换,binary=TRUE会实现自动转换
head(spe.jaccard)
write.table(as.matrix(spe.jaccard),file="spe.jaccard.txt",sep="\t",col.names=NA)
环境数据的Euclidean距离矩阵(欧式距离)
env.dist<-dist(scale(env))
write.table(as.matrix(env.dist),file="env.dist.txt",sep="\t",col.names=NA)
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-10-20 01:29
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社