R语言进行PCoA分析
1:只使用物种组成数据的排序称作非限制性排序(unconstrained ordination)
(1)主成分分析(principal components analysis,PCA)
(2)对应分析(correspondence analysis, CA)
(3)去趋势对应分析(Detrended correspondence analysis, DCA)
(3)主坐标分析(principal coordinate analysis, PCoA)
(4)非度量多维尺度分析(non-metric multi-dimensional scaling, NMDS)
2:同时使用物种和环境因子组成数据的排序叫作限制性排序(constrained ordination)
(1)冗余分析(redundancy analysis,RDA)
(2)典范对应分析(canonical correspondence analysis, CCA)
我们先来仔细看看PCA与PCoA分析:
另外,我们还知道无论是PCA还是PCoA,一般都需要降维处理(一般物种数目都超过3个,样本数目都超过4个),而降维就会产生数据损失。多数情况下,我们在做降维处理的时候,期望维数越低越好,这样我们就可以最大程度地保真原始数据。比如一维和二维数据一般不需要降维处理(直接呈现);再比如要想把三维坐标系的数据降维到一维坐标系上,我们首先要把三维空间的数据降维到二维空间上(此时损失一部分),再将二维空间的数据降维到一维空间上(再损失一部分)。
那这样就好办了。
如果样本数目比较多,而物种数目比较少,那肯定首选PCA;如果样本数目比较少,而物种数目比较多,那肯定首选PCoA。
注:PC1 和PC2 是两个主坐标成分,PC1 表示尽可能最大解释数据变化的主坐标成分,PC2 为解释余下的变化度中占比例最大的主坐标成分,PC3 等依次类推。
下面重点介绍一下PCoA
1.在Excel准备好原始数据,组别为行,检测变量为列,注意一定要遵循此规则
2.同样我们需要准备好原始数据的分组信息:
3.读取数据,先读取原始数据,分组信息暂时不读入:
>library(openxlsx)
>mydata<- read.xlsx("pcoa_genera.xlsx",sheet = 1)
>str(mydata)#因为后面我们会用到我们数据集的行与列的数据,因此我们通常利用str()函数来观察数据集的信息。
4.依次加载以下三个R包
>library(permute)
>library(lattice)
> library(vegan)# vegan 包是进行群落数据分析最常用的R包
5.计算距离
>distance<-vegdist(mydata[1:14,2:21],method='bray') # 注意我们的数据是从第一行第二列开始,因此我们输入的数据为(mydata[1:14,2:21],另外我们计算距离的方法为Bray-Curtis,特此说明。
>distance
6.保存结果
>write.csv(as.matrix(distance),'distance.csv')
7.随后我们对导出的结果再次导入到控制台
>mydata<- read.xlsx("Bray-curtis_HBR.xlsx",sheet = 1)
或者不需要导入,直接进行如下操作更加便捷
8.加载ape包
>library(ape)
>res=pcoa(distance, correction="none")
>head(res$value)
> head(res$value)
>biplot(res)
>group<- read.xlsx("pca_genera_name.xlsx",sheet = 1)
>dune.ano <- with(mydata[1:14,2:21], anosim(distance, group$site))
>summary(dune.ano)#distance是我们的计算的矩阵,group$site是我们的分组名字,mydata是计算矩阵的出去表头的数据。
>plot(dune.ano)
>library(ggplot2)
>P=dune.ano$signif
>R=round(dune.ano$statistic,3)
>data=res$vectors[,1:2]
>data=data.frame(data)
>colnames(data)=c('x','y')
>eig=as.numeric(res$value[,1])
>type=group$site #我们分组信息
>data=cbind(data,type)
>p =ggplot(data, aes(x=x, y=y, color=type))+geom_point(alpha=.7, size=2) +labs(x=paste("PCoA 1 (",format(100* eig[1] / sum(eig), digits=4), "%)", sep=""),y=paste("PCoA 2 (", format(100*eig[2] / sum(eig), digits=4), "%)", sep=""),title="PCoA")
>p
经过ggplot2美化后的PCoA图就出来了,不得不感叹,ggplot2是真的强大,在R语言的学习中有专门针对ggplot2包的学习资料,笔者就购买了一本有关ggplot2的书,在这里一并推荐给大家:R数据可视化分析
后面如果需要调整图的颜色,大小,字体,可以利用AI实现。
END