wqshengsf的个人博客分享 http://blog.sciencenet.cn/u/wqshengsf

博文

冗余分析(RDA)在R语言中的实现

已有 33431 次阅读 2018-10-6 13:16 |个人分类:R语言|系统分类:科研笔记| 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())

image.png


那么,如果我们要以不同形状(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())

image.png

有没有发现特别简单呢?其实,真正的分析就三步:数据导入→转化→分析,后面的代码都是用来美化图。然而在实操中,数据分析从来不是件容易的事,例如,我们在做RDA,要检测解释变量与轴的相关性,当解释变量个数较多时,我们需要去掉那些无关紧要的变量,或者,当RDA结果不理想时,我们需要用其他方法来辅助甚至替代RDA。本文仅从 个人角度阐述,对R感兴趣的朋友,欢迎加扣扣群335774366,指教。

















https://blog.sciencenet.cn/blog-3374043-1139183.html


收藏 IP: 117.188.1.*| 热度|

0

该博文允许注册用户评论 请点击登录 评论 (1 个评论)

数据加载中...

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-4-27 05:07

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部