冗余分析(RDA)在R语言中的实现
2018-10-6 13:16
阅读:36283
标签:ggplot2, RDA
在生态环境领域中,我们研究的对象可被分为两种:“解释变量”与“响应变量”,常用的分析方法主要有约束排序和非约束排序,常用软件为CANOCO和R,前者容易上手,操作简单,但欠缺灵活,后者相对较难上手,但操作灵活、分析方法多、出图漂亮,是目前科研领域数据分析、绘图软件不二之选。本文以RDA为例,希望越来越多的人由CANOCO转向R,或者结合两者的优势助力科研写作。
library(vegan)
library(ggplot2)
library(ggrepel)
fc=read.csv("D:\\wyktang\\factor.csv",header = T,row.names = 1)###读取解释变量数据
sp=read.csv("D:\\wyktang\\sp.csv",header = T,row.names = 1)###读取响应变量数据
spp=decostand(sp,method = "hellinger")###对响应变量做hellinger转化
fcc=log10(fc)###对解释变量取对数
uu=rda(spp~.,fcc)###做冗余分析
ii=summary(uu)###查看分析结果
sp=as.data.frame(ii$species[,1:2])*5###提取相应变量坐标,乘以5是使图美观,不影响分析
st=as.data.frame(ii$sites[,1:2])###提取样方坐标,有两种模式,可根据自己数据探索:二选一即可
yz=as.data.frame(ii$biplot[,1:2])###提取解释变量坐标
ggplot() +
geom_text_repel(data = st,aes(RDA1,RDA2,label=row.names(st)),size=4)+
geom_segment(data = sp,aes(x = 0, y = 0, xend = RDA1, yend = RDA2),
arrow = arrow(angle=22.5,length = unit(0.35,"cm"),
type = "closed"),linetype=1, size=0.6,colour = "red")+
geom_text_repel(data = sp,aes(RDA1,RDA2,label=row.names(sp)))+
geom_segment(data = yz,aes(x = 0, y = 0, xend = RDA1, yend = RDA2),
arrow = arrow(angle=22.5,length = unit(0.35,"cm"),
type = "closed"),linetype=1, size=0.6,colour = "blue")+
geom_text_repel(data = yz,aes(RDA1,RDA2,label=row.names(yz)))+
labs(x="RDA1 42.72%",y="RDA2 26.10%")+
geom_hline(yintercept=0,linetype=3,size=1) +
geom_vline(xintercept=0,linetype=3,size=1)+
theme_bw()+theme(panel.grid=element_blank())
那么,如果我们要以不同形状(shape)表现样方类型,该如何操作呢?代码如下:
grp=as.data.frame(c(rep("a",4),rep("b",4),rep("c",4),rep("d",4)))###对样方分组
colnames(grp)="group"###重命名列名
ggplot() +
geom_point(data = st,aes(RDA1,RDA2,shape=grp$group,fill=grp$group),size=4)+###此处修改
scale_shape_manual(values = c(21:25))+
geom_segment(data = sp,aes(x = 0, y = 0, xend = RDA1, yend = RDA2),
arrow = arrow(angle=22.5,length = unit(0.35,"cm"),
type = "closed"),linetype=1, size=0.6,colour = "red")+
geom_text_repel(data = sp,aes(RDA1,RDA2,label=row.names(sp)))+
geom_segment(data = yz,aes(x = 0, y = 0, xend = RDA1, yend = RDA2),
arrow = arrow(angle=22.5,length = unit(0.35,"cm"),
type = "closed"),linetype=1, size=0.6,colour = "blue")+
geom_text_repel(data = yz,aes(RDA1,RDA2,label=row.names(yz)))+
labs(x="RDA1 42.72%",y="RDA2 26.10%")+
geom_hline(yintercept=0,linetype=3,size=1) +
geom_vline(xintercept=0,linetype=3,size=1)+
guides(shape=guide_legend(title=NULL,color="black"),
fill=guide_legend(title=NULL))+###此处修改
theme_bw()+theme(panel.grid=element_blank())
有没有发现特别简单呢?其实,真正的分析就三步:数据导入→转化→分析,后面的代码都是用来美化图。然而在实操中,数据分析从来不是件容易的事,例如,我们在做RDA,要检测解释变量与轴的相关性,当解释变量个数较多时,我们需要去掉那些无关紧要的变量,或者,当RDA结果不理想时,我们需要用其他方法来辅助甚至替代RDA。本文仅从 个人角度阐述,对R感兴趣的朋友,欢迎加扣扣群335774366,指教。
转载本文请联系原作者获取授权,同时请注明本文来自吴求生科学网博客。
链接地址:https://wap.sciencenet.cn/blog-3374043-1139183.html?mobile=1
收藏
上一篇
下一篇
当前推荐数:0
推荐到博客首页
网友评论1 条评论