千家信息网

如何用R语言做冗余分析

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,今天就跟大家聊聊有关如何用R语言做冗余分析,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。冗余分析(redundancy analysis, R
千家信息网最后更新 2026年11月02日如何用R语言做冗余分析

今天就跟大家聊聊有关如何用R语言做冗余分析,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

冗余分析(redundancy analysis, RDA)自己之前也听过,好像是生态学研究中用的比较多,主要是用来探索环境和一些样本指标之间的关系。最近自己在看一些群体遗传相关的内容,发现RDA也可以用在群体遗传方面 ,比如这个参考链接 https://popgen.nescent.org/2018-03-27_RDA_GEA.html 就介绍了这个分析,主要研究内容自己还没有看明白:大体好像是利用芯片技术测了一些狼的基因型,同时采集了狼生活地点的环境数据,利用RDA同时分析基因型数据和环境数据。这个看的还有些模棱两可,还需要仔细看看。这个链接对应的两篇论文

  • https://onlinelibrary.wiley.com/doi/abs/10.1111/mec.13364

  • https://onlinelibrary.wiley.com/doi/full/10.1111/mec.14584

找资料的时候还找到了另外一篇论文

  • https://onlinelibrary.wiley.com/doi/abs/10.1111/1755-0998.12906


论文对应的数据和代码



https://github.com/Capblancq/RDA-genome-scan


今天的推文重复一下这个论文里的冗余分析的代码

首先是读入数据

sim1.csv这个数据集1:14列是环境数据,后面都是基因型数据

geno<-read.csv("sim1.csv")[,-c(1:14)]
env<-read.csv("sim1.csv")[,c(1:14)]
geno[1:6,1:6]
head(env)
对基因型数据进行过滤

这里又涉及到了最小等位基因频率这个概念

MAF <- 0.05
frequencies <- colSums(geno)/(2*nrow(geno))
maf <- which(frequencies > MAF & frequencies < (1-MAF))
geno <- geno[,maf]
接下来就是RDA分析了
library(vegan)
RDA <- rda(geno ~ env$envir1 + env$envir2 + env$envir3 + env$envir4 + env$envir5 + env$envir6 + env$envir7 + env$envir8 + env$envir9 + env$envir10, env)
library(ggplot2)
p1<-ggplot() +
geom_line(aes(x=c(1:length(RDA$CCA$eig)), y=as.vector(RDA$CCA$eig)), linetype="dotted", size = 1.5, color="darkgrey") +
geom_point(aes(x=c(1:length(RDA$CCA$eig)), y=as.vector(RDA$CCA$eig)), size = 3, color="darkgrey") +
scale_x_discrete(name = "Ordination axes", limits=c(1:9)) +
ylab("Inertia") +
theme_bw()
#library(robustbase)
#install.packages("robust")
# library("robust")
# library(qvalue)
rdadapt<-function(rda,K)
{
loadings<-rda$CCA$v[,1:as.numeric(K)]
resscale <- apply(loadings, 2, scale)
resmaha <- covRob(resscale, distance = TRUE, na.action= na.omit, estim="pairwiseGK")$dist
lambda <- median(resmaha)/qchisq(0.5,df=K)
reschi2test <- pchisq(resmaha/lambda,K,lower.tail=FALSE)
qval <- qvalue(reschi2test)
q.values_rdadapt<-qval$qvalues
return(data.frame(p.values=reschi2test, q.values=q.values_rdadapt))
}
res_rdadapt<-rdadapt(RDA, 5)

p2<-ggplot() +
geom_point(aes(x=c(1:length(res_rdadapt[,1])), y=-log10(res_rdadapt[,1])), col = "gray83") +
geom_point(aes(x=c(1:length(res_rdadapt[,1]))[which(res_rdadapt[,2] < 0.1)], y=-log10(res_rdadapt[which(res_rdadapt[,2] < 0.1),1])), col = "orange") +
xlab("SNPs") + ylab("-log10(p.values)") +
theme_bw()
which(res_rdadapt[,2] < 0.1)
p3<-ggplot() +
geom_point(aes(x=RDA$CCA$v[,1], y=RDA$CCA$v[,2]), col = "gray86") +
geom_point(aes(x=RDA$CCA$v[which(res_rdadapt[,2] < 0.1),1], y=RDA$CCA$v[which(res_rdadapt[,2] < 0.1),2]), col = "orange") +
geom_segment(aes(xend=RDA$CCA$biplot[,1]/10, yend=RDA$CCA$biplot[,2]/10, x=0, y=0), colour="black", size=0.5, linetype=1, arrow=arrow(length = unit(0.02, "npc"))) +
geom_text(aes(x=1.2*RDA$CCA$biplot[,1]/10, y=1.2*RDA$CCA$biplot[,2]/10, label = colnames(env[,2:11]))) +
xlab("RDA 1") + ylab("RDA 2") +
theme_bw() +
theme(legend.position="none")
library(patchwork)
p1/(p2+p3)

看完上述内容,你们对如何用R语言做冗余分析有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注行业资讯频道,感谢大家的支持。

数据 分析 内容 基因 冗余 环境 论文 语言 代码 同时 群体 链接 研究 遗传 最小 模棱 模棱两可 接下来 中用 之间 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技图片 深圳恒合互联网络科技有限公司 科技互联网项目 互联网下的科技发展 互联网金融 科技金融 互联网科技公司有哪些 哈尔滨新华互联网科技 科技与互联网哪个更好 来此购互联网科技有限公司 互联网公司科技股 成都互联网科技公司工作好不好 米聚互联网科技南京有限公司排面 河南住房之家互联网科技 互联网第三次科技革命特征 互联网科技实习生岗位 广东工业互联网大赛深圳学泰科技 中天科技中国工业互联网 上海乐五互联网科技有限公司 互联网硬科技公司 银川新华互联网科技学校原画 耶加雪菲 互联网中国科技 互联网科技视频素材 甘肃拓世互联网科技有限公司 新华互联网科技校企合作 中国科技互联网公司收入 锡山区互联网智能科技产品供应 四川互联网展示科技馆设计 本届互联网大会上的黑科技 互联网大会出现的黑科技
0