用R做群落α、β多样性分析

做完抽平以后就是我们最关心的多样性分析,其实所有过程都能在qiime2里面做。但是,当我们只看群落中某一科的多样性变化时,我发现qiime2就不再那么灵活。

α多样性是指一个特定区域或生态系统内的多样性,是反映丰富度和均匀度的综合指标。 α多样性主要与两个因素有关:一是种类数目,即丰富度;二是多样性,群落中个体分配上的均匀性。α多样性主要关注局域均匀生境下的物种数目,因此对它的分析也是最直观。平时在分析多样性时,通常是先分析α多样性,如果没有显著差异,我们在分析β多样性,或者将二者结合分析。

###α多样性计算
#清除所有变量
rm(list=ls())
#加载vegan包
library(vegan)
#读入物种数据
otu<-read.table('totalcp.txt',header = T,row.names = 1,check.names=F)
#Shannon 指数
Shannon<-diversity(otu, index = "shannon", MARGIN = 2, base = exp(1))
#Simpson 指数
Simpson<-diversity(otu, index = "simpson", MARGIN = 2, base = exp(1))
#Richness 指数
Richness <- specnumber(otu,MARGIN = 2)
#合并
index<-as.data.frame(cbind(Shannon,Simpson,Richness))
#接下来分析的多样性指数一般不作为重点分析对象,但既然要写,就整理的完整一些
#转置物种数据
totu<-t(otu)
totu<-ceiling(as.data.frame(t(otu)))
#多样性指数
obs_chao1_ace<-t(estimateR(totu))
obs_chao1_ace<-obs_chao1_ace[rownames(index),]
index$Chao1<-obs_chao1_ace[,2]
index$Ace<-obs_chao1_ace[,4]
index$Sobs<-obs_chao1_ace[,1]
index$Pielou <- Shannon / log(Richness, 2)
index$Goods_coverage <- 1 - colSums(otu == 1) / colSums(otu)
#合并、导出数据
write.table(cbind(sample=c(rownames(index)),index),'totalcp.alpha.txt',row.names = F,sep = '\t',quote = F)

β多样性又称生境间的多样性(between-habitat diversity),是指沿环境梯度不同生境群落之间物种组成的相异性或物种沿环境梯度的更替速率。 控制β多样性的主要生态因子有土壤、地貌及干扰等。β多样性计算不再是直观地依据物种数量来,而是均以群落相似(或相异)程度为基础,即不同群落之间的距离。常用的距离指数包括Bray-Crutis距离、Unifrac距离等。而具体的分析方法,通常包括PCoA、NMDS等分析。

今天仅以基于Bray-Crutis距离的NMDS分析为例,计算β多样性。

###NMDS分析
#加载包,ape是计算bray距离的包
library(ggplot2)
library(vegan)
library(ape)
#导入群落数据
sample <- read.table("juke.txt",sep = "\t",header = T)
rownames(sample)<-sample[,1]
sample<-sample[,-1]
sample<-data.frame(t(sample))
#计算距离指数
bray<-vegdist(sample,method="bray")
bray<-as.matrix(bray)
#导入群落分组信息
group <- read.table("env.txt",sep = "\t",row.names=1,header = T)
nmds<-metaMDS(bray,k = 2)
summary(nmds)
###提取数据
#NMDS的压迫系数,大于0.2表明不适用NMDS分析
nmds.stress <- nmds$stress
nmds.point <- data.frame(nmds$point)
#导出NMDS的1、2轴,留作后续分析使用,这一步可不做
write.table (nmds.point, file ="totalcp_NMDS12.csv",sep =",", quote =FALSE) 
nmds.species <- data.frame(nmds$species)
sample_site <- nmds.point[1:2]
sample_site$names <- rownames(sample_site)
colnames(sample_site)[1:2] <- c('NMDS1', 'NMDS2')
#合并分组数据
sample_site <- cbind(sample_site,group)
#NMDS图绘制
P1<-ggplot(data=sample_site,aes(NMDS1,NMDS2))+theme_bw()+theme(panel.grid= element_line(color =NA),
                                                               panel.grid.minor = element_line(color = NA),
                                                               panel.border = element_rect(fill = NA, colour ="black"),
                                                               axis.text.x  = element_text(size=15,family="A", colour="black",hjust = 0.7),
                                                               axis.title.x = element_text(vjust=0.2, size = 15,family="A"),
                                                               axis.text.y  = element_text(size=15,family="A", colour="black",hjust = 0.7),
                                                               axis.title.y = element_text(vjust=1, size = 15,family="A", colour="black"))+
  geom_point(aes(color=Biodiversity),size=2,alpha=0.9)+theme(legend.position= "top")+theme(panel.grid=element_blank())+
#下面的#00FF00等分别是颜色的16进制代码,可自己百度,需要注意的是,点的颜色用scale_color_manual()函数,置信椭圆用scale_fill_manual()
  scale_color_manual(values=c(R1 = "#00FF00", R2 = "#F74ED6", R4 = "#AD07E3"))+
  stat_ellipse(data=sample_site,geom = "polygon",aes(fill=Biodiversity),alpha=0.35,level = 0.95)+
  scale_fill_manual(values=c(R1 = "#00FF00", R2 = "#F74ED6", R4 = "#AD07E3"))
P1

如果以上代码不能满足大家的需求,可以评论或给我私信。我再更新PCoA等方法。如有错误欢迎大家指出。谢谢。

 

在R语言中,使用Principal Coordinate Analysis (PCoA) 进行&beta;多样性(物种丰富度或物种分布差异)分析通常需要以下步骤: 1. **数据准备**: - 确保你有一个生物样本矩阵(如 Vegan包中的`vegdist()`函数处理的距离矩阵),其中行代表样品,列代表物种,值表示物种丰度。 2. **计算距离矩阵**: - 使用`vegan` 包中的`vegdist()` 函数,输入样本矩阵,选择适合的相似度或距离度量方法(如Bray-Curtis、Jaccard等)。 ```r library(vegan) sample_matrix <- read.csv("your_sample_data.csv") # 替换为实际文件名 distance_matrix <- vegdist(sample_matrix, method = "bray") ``` 3. **构建协方差/相关性矩阵**: - 如果使用的是物种丰富度数据,可以先将距离转换为相似度,然后创建协方差或相关性矩阵。 ```r similarity_matrix <- vegdist(distance_matrix, method = "binary") / 100 ``` 4. **主坐标分析(PCoA)**: - 使用`cmdscale()` 或 `ordiplot()` 函数执行PCoA,它会基于构建的相似性或相关性矩阵生成二维或三维的坐标图。 ```r pcoa_results <- cmdscale(similarity_matrix) plot(pcoa_results, type = "n", xlab = "PC1", ylab = "PC2") # 创建空白图形 points(pcoa_results[,1], pcoa_results[,2]) # 绘制点 ``` 5. **结果解释与可视化**: - 分析得分(PC1和PC2等)之间的意义,可能涉及群组间的差异、环境因素或其他变量的相关性。 - 可以添加形状或颜色编码,显示样品属性(例如采样地点、时间或某个分类变量)。 6. **保存与展示结果**: - 最后,保存图形并可能导出结果以便进一步的数据探索或报告。
评论 39
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值