久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

RDA_環(huán)境因子_群落結構_統(tǒng)計檢驗_可視化

 宏基因組 2021-10-16

RDA環(huán)境因子群落結構統(tǒng)計檢驗可視化

環(huán)境因子的篩選及數(shù)據(jù)的轉化方面請參閱宏基因組公眾號之前的推文,,本文主要側重統(tǒng)計分析與可視化

看到師兄文章里的圖自己可能用到,想復現(xiàn)一下,于是就嘗試了一下,順便寫個推文記錄,在黃靜同學的幫助下完成

百度云鏈接:https://pan.baidu.com/s/1vNmxPV5kw51Ek_oXMmNycw
提取碼:no73

因公眾號文章不可修改,如以上鏈接失效,或想獲取代碼的更新版,,請在“宏基因組”公眾號后臺回復本文關鍵字“rdaenv”獲取最新下載地址

rm(list=ls())
library(pacman)
p_load(ggplot2,patchwork,vegan,geosphere,psych,corrplot,
permute,lattice,ggpubr,RColorBrewer,tidyverse,graphics)
data=read.csv("sum_c.csv",row.names = 1)#讀入物種(以Phylum水平為例)矩陣表
head(data,n=3)
env=read.csv("env.csv",row.names = 1)#讀入環(huán)境因子數(shù)據(jù)(示例為隨機數(shù))
head(env,n=3)
print(decorana(t(data)))
#DCA分析,,根據(jù)Axis lengths行的第一個值選擇排序分析模型
#Axis Lengths >4.0-CCA(基于單峰模型,,典范對應分析);
#如果在3.0-4.0之間-RDA/CCA均可,;
#如果小于3.0-RDA(基于線性模型,,冗余分析)
B.rda=rda(t(data),env[-1],scale = T)#RDA分析,如果沒有環(huán)境因子參數(shù),,就是PCA分析
#提取樣本得分
B.rda.data=data.frame(B.rda$CCA$u[,1:2],
env$Treat,rep(c("Mar","Apr","May","Jun","Jul","Aug"),each = 3))#為了仿師兄的圖添加的
colnames(B.rda.data)=c("RDA1","RDA2","group","Month")
head(B.rda.data,n=3)
#提取物種得分
B.rda.spe=data.frame(B.rda$CCA$v[,1:2])
B.rda.spe=as.data.frame(B.rda.spe)
B.rda.spe$Species<-rownames(B.rda.spe)
head(B.rda.spe,n=3)
#提取環(huán)境因子得分
B.rda.env <- B.rda$CCA$biplot[,1:2]
B.rda.env <- as.data.frame(B.rda.env)
head(B.rda.env,n=3)
#帶有環(huán)境因子,,物種信息且進行不同月份不同處理標記的RDA圖(仿師兄)
yanse<-c("darkolivegreen3","gold","dodgerblue4","darkseagreen",
"chartreuse4","darkorange","burlywood2","brown3","#984EA3","cyan3")
p1=ggplot(data=B.rda.data,aes(RDA1,RDA2))+
geom_point(aes(color=Month,fill=Month,shape=group),size=5)+
scale_color_manual(values=yanse)+
scale_shape_manual(values = c(21,22,23))+
scale_fill_manual(values = yanse)+
geom_point(data=B.rda.spe,aes(RDA1,RDA2),pch=8,size=5)+
geom_text(data=B.rda.spe,aes(x=B.rda.spe[,1],y=B.rda.spe[,2],label=Species),
size=5.5,colour="black",hjust=0.5,vjust=1)+
labs(title = "B RDA plot",
x=paste("RDA1",round(B.rda$CCA$eig[1]/sum(B.rda$CCA$eig)*100,2)," %"),
y=paste("RDA2",round(B.rda$CCA$eig[2]/sum(B.rda$CCA$eig)*100,2)," %"))+
geom_hline(yintercept = 0,lty=3)+
geom_vline(xintercept = 0,lty=3)+
geom_segment(data=B.rda.env,aes(x=0,y=0,xend=B.rda.env[,1],yend=B.rda.env[,2]),
colour="blue",size=0.8,arrow=arrow(angle = 35,length=unit(0.3,"cm")))+
geom_text(data=B.rda.env,aes(x=B.rda.env[,1],y=B.rda.env[,2],
label=rownames(B.rda.env)),size=6.5,colour="blue",
hjust=(1-sign(B.rda.env[,1]))/2,angle=(180/pi)*atan(B.rda.env[,2]/B.rda.env[,1]))+
ggprism::theme_prism()
p1

#統(tǒng)計
B.sum=summary(B.rda)
B.sum$constr.chi/B.sum$tot.chi #constrained表示環(huán)境因子對群落結構差異的解釋度
B.sum$unconst.chi/B.sum$tot.chi#unconstrained表示環(huán)境因子對群落結構不能解釋的部分
#環(huán)境因子對群落結構差異解釋量的餅圖繪制
cor_data=data.frame(row.names = c("Explained","Unexplained"),
B=c(B.sum$constr.chi/B.sum$tot.chi,B.sum$unconst.chi/B.sum$tot.chi))
cor_data$group=rownames(cor_data)
head(cor_data,n=3)
cor_data <- data.frame(cor_data)
cor_data=arrange(cor_data,B)
head(cor_data,n=3)
labs<-paste0(cor_data$group,"\n(",round(cor_data$B/sum(cor_data$B)*100,2),"%)")
pie(cor_data$B,labels=labs,init.angle = 90,col=brewer.pal(nrow(cor_data),"Reds"),boder="black")
#在R中手動導出,右側出圖區(qū)Export-PDF

#anova.cca檢驗
B.perm=permutest(B.rda,permu=999) # permu=999是表示置換999次
B.perm #是做環(huán)境因子整體與群落結構差異的相關性(解釋量),,anova.cca {vegan}
#envfit檢驗 envfit函數(shù)跟mantel(見下文)的功能是一樣的
B.ef=envfit(B.rda,env[-1],permu=999)#是做每一個環(huán)境因子與群落結構差異的相關性(解釋量)
B.ef$vectors$r#R2值
B.ef$vectors$pvals#P值
#每一個環(huán)境因子對群落結構差異解釋量的柱形圖繪制的數(shù)據(jù)整理
cor_com=data.frame(tax=rownames(B.rda.env),B.r=B.ef$vectors$r,B.p=B.ef$vectors$pvals)
cor_com=arrange(cor_com,B.r)
head(cor_com,n=3)
cor_com[c(3)]=cor_com[c(3)]>0.05
head(cor_com,n=3)
#將p<0.05標記為FALSE,,p>0.05標記為TRUE,使用此數(shù)據(jù)繪制柱形圖,,將其可視化
#envfit檢驗可視化
cor_com$tax = factor(cor_com$tax,order = T,levels = row.names(cor_com))#按R2值排序
p2 <- ggplot(cor_com, aes(x =tax, y = B.r),size=2) +
geom_bar(stat = 'identity', width = 0.8,color="black",fill="red") +
scale_fill_manual(guide = FALSE)+
geom_text(aes(y = B.r+0.005, label = ifelse(B.p==TRUE,"","*")),
size = 5, fontface = "bold") +
xlab("Environmental factor")+
ylab(expression(r^"2"))+
scale_y_continuous(expand = c(0,0))+
ggprism::theme_prism()+
theme(axis.text.x = element_text(angle = 45))
p2

#mantel檢驗
data <- as.data.frame(t(data))
species.distance<-vegdist(data,method = 'bray')
soil <- NULL
for (i in 2:ncol(env)) {
dd <- mantel(species.distance, vegdist(env[,i], method = "euclidean"),
method = "pearson", permutations = 9999, na.rm = TRUE)
soil <- rbind(soil,c(colnames(env)[i],dd$statistic, dd$signif))
}
head(soil,n=3)
soil <- data.frame(aa=rownames(B.rda.env),M_r=soil[,2],M.p=soil[,3])
rownames(soil)=soil$aa
soil=arrange(soil,M_r)
soil[c(3)]=soil[c(3)]>0.05 # 將p<0.05標記為FALSE,,p>0.05標記為TRUE,同上
soil$aa = factor(soil$aa,order = T,levels = row.names(soil))
soil$M_r=round(as.numeric(soil$M_r),4)
head(soil,n=3)
#mantel檢驗可視化
p3 <- ggplot(soil, aes(x =aa, y = M_r),size=2) +
geom_bar(stat = 'identity', width = 0.8,color="black",fill="red") +
scale_fill_manual(guide = FALSE)+
geom_text(aes(y = M_r+0.005, label = ifelse(M.p==TRUE,"","*")),
size = 5, fontface = "bold") +
xlab("Environmental factor")+
ylab(expression(r))+
ggprism::theme_prism()+
theme(axis.text.x = element_text(angle = 45))
p3

##################群落結構差異的統(tǒng)計檢驗(三種方法及可視化)
####Adonis
otu <- data.frame(data)#mantel檢驗時已經轉置,,勿要轉置
head(otu)
#樣本分組文件
group <- read.delim('metadata.txt', sep = '\t', stringsAsFactors = FALSE)
head(group)
#使用 Bray-Curtis 距離測度 unifrac_binary
adonis_result <- adonis(otu~Group, group, distance = 'Bray-Curtis', permutations = 999)
adonis_result$aov.tab
group_name <- unique(group$Group)

adonis_result_two <- NULL
for (i in 1:(length(group_name) - 1)) {
for (j in (i + 1):length(group_name)) {
group_ij <- subset(group, Group %in% c(group_name[i], group_name[j]))
otu_ij <- otu[group_ij$SampleID, ]
adonis_result_otu_ij <- adonis(otu_ij~Group, group_ij, permutations = 999, distance = 'bray')
adonis_result_two <- rbind(adonis_result_two, c(paste(group_name[i], group_name[j], sep = '_'), 'Bray-Curtis', unlist(data.frame(adonis_result_otu_ij$aov.tab, check.names = FALSE)[1, ])))
}
}
adonis_result_two <- data.frame(adonis_result_two, stringsAsFactors = FALSE)
names(adonis_result_two) <- c('group', 'distance', 'Df', 'Sums of squares', 'Mean squares', 'F.Model', 'R2', 'P')
adonis_result_two$R2<- as.numeric(adonis_result_two$R2)
adonis_result_two$P <- as.numeric(adonis_result_two$P)
#p值Benjamini校正 作圖時自己選擇用哪一個P值(下同)
adonis_result_two$P_adj_BH <- p.adjust(adonis_result_two$'P', method = 'BH')
head(adonis_result_two)
adonis_result_two=arrange(adonis_result_two,R2)
adonis_result_two
adonis_result_two$P=adonis_result_two$P>0.05#將p<0.05標記為FALSE,,p>0.05標記為TRUE,使用此數(shù)據(jù)繪制柱形圖(下同)
adonis_result_two$tax = factor(adonis_result_two$group,order = T,levels = adonis_result_two$group)
adonis <- ggplot(adonis_result_two, aes(x =tax, y = R2),size=2) +
geom_bar(stat = 'identity', width = 0.8,color="black",fill="red")+
scale_fill_manual(guide = FALSE)+
geom_text(aes(y = R2-0.02, label = ifelse(P==TRUE,"","*")),#選擇作圖的P值(P_adj_BH)(下同)
size = 5, fontface = "bold") +
xlab("")+
ylab(expression(r^"2"))+
scale_y_continuous(expand = c(0,0))+
ggprism::theme_prism()+theme(axis.text.x = element_text(angle = 0))
adonis ##圖片大小在保存時自己調合適

####Anosim
anosim_result <- anosim(otu, group$Group, distance = 'bray', permutations = 999)
anosim_result$signif #p 值
anosim_result$statistic #R 值
group_name <- unique(group$Group)
anosim_result_two <- NULL
for (i in 1:(length(group_name) - 1)) {
for (j in (i + 1):length(group_name)) {
group_ij <- subset(group, Group %in% c(group_name[i], group_name[j]))
otu_ij <- otu[group_ij$SampleID,]
anosim_result_otu_ij <- anosim(otu_ij, group_ij$Group, permutations = 999, distance = 'bray')
anosim_result_two <- rbind(anosim_result_two, c(paste(group_name[i], group_name[j], sep = '_'), 'Bray-Curtis', anosim_result_otu_ij$statistic, anosim_result_otu_ij$signif))
}
}
anosim_result_two <- data.frame(anosim_result_two, stringsAsFactors = FALSE)
names(anosim_result_two) <- c('group', 'distance', 'R', 'P')
anosim_result_two$R<- as.numeric(anosim_result_two$R)
anosim_result_two$P <- as.numeric(anosim_result_two$P)
anosim_result_two$P_adj_BH <- p.adjust(anosim_result_two$P, method = 'BH')
head(anosim_result_two)

anosim_result_two=arrange(anosim_result_two,R)
anosim_result_two
anosim_result_two$P=anosim_result_two$P>0.05
anosim_result_two$tax = factor(anosim_result_two$group,order = T,levels = anosim_result_two$group)
anosim <- ggplot(anosim_result_two, aes(x =tax, y = R),size=2) +
geom_bar(stat = 'identity', width = 0.8,color="black",fill="red")+
scale_fill_manual(guide = FALSE)+
geom_text(aes(y =R-0.02, label = ifelse(P==TRUE,"","*")),
size = 5, fontface = "bold") +
xlab("")+
ylab(expression(r))+
scale_y_continuous(expand = c(0,0))+
ggprism::theme_prism()+theme(axis.text.x = element_text(angle = 0))
anosim

##MRPP
mrpp_result <- mrpp(otu, group$Group, distance = 'bray', permutations = 999)
mrpp_result$Pvalue # p 值
mrpp_result$A #相當于Anosim檢驗的R值
roup_name <- unique(group$Group)
mrpp_result_two <- NULL
for (i in 1:(length(group_name) - 1)) {
for (j in (i + 1):length(group_name)) {
group_ij <- subset(group, Group %in% c(group_name[i], group_name[j]))
otu_ij <- otu[group_ij$SampleID,]
mrpp_result_otu_ij <- mrpp(otu_ij, group_ij$Group, permutations = 999, distance = 'bray')
mrpp_result_two <- rbind(mrpp_result_two, c(paste(group_name[i], group_name[j], sep = '_'), 'Bray-Curtis', mrpp_result_otu_ij$A, mrpp_result_otu_ij$delta, mrpp_result_otu_ij$E.delta, mrpp_result_otu_ij$Pvalue))
}
}
mrpp_result_two <- data.frame(mrpp_result_two, stringsAsFactors = FALSE)
names(mrpp_result_two) <- c('group', 'distance', 'A', 'Observe_delta', 'Expect_delta', 'P')
mrpp_result_two$A<- as.numeric(mrpp_result_two$A)
mrpp_result_two$P <- as.numeric(mrpp_result_two$P)
mrpp_result_two$P_adj_BH <- p.adjust(mrpp_result_two$P, method = 'BH')
head(mrpp_result_two)
mrpp_result_two=arrange(mrpp_result_two,A)
mrpp_result_two
mrpp_result_two$P=mrpp_result_two$P>0.05
mrpp_result_two$tax = factor(mrpp_result_two$group,order = T,levels = mrpp_result_two$group)
MRPP <- ggplot(mrpp_result_two, aes(x =tax, y = A),size=2) +
geom_bar(stat = 'identity', width = 0.8,color="black",fill="red")+
scale_fill_manual(guide = FALSE)+
geom_text(aes(y =A-0.02, label = ifelse(P==TRUE,"","*")),
size = 5, fontface = "bold") +
xlab("")+
ylab(expression(r))+
scale_y_continuous(expand = c(0,0))+
ggprism::theme_prism()+theme(axis.text.x = element_text(angle = 0))
MRPP # 其余數(shù)據(jù)集重復繪制

#Output figure width and height
# Letter紙圖片尺寸為單欄89 mm,,雙欄183 mm,,頁面最寬為247 mm 推薦比例16:10,
# 即半版89 mm x 56 mm; 183 mm x 114 mm
#
##################保存
ggsave("./p1.pdf", p1, width = 183, height = 114, units = "mm")
ggsave("./p2.pdf", p2, width = 183, height = 114, units = "mm")
ggsave("./p3.pdf", p3, width = 183, height = 114, units = "mm")
ggsave("./p4.pdf", adonis, width = 183, height = 114, units = "mm")
ggsave("./p5.pdf", anosim, width = 183, height = 114, units = "mm")
ggsave("./p6.pdf", MRPP, width = 183, height = 114, units = "mm")

參考資料

R繪圖-RDA排序分析

R包vegan的置換多元方差分析(PERMANOVA)判斷群落結構差異

R包vegan的相似性分析(ANOSIM)判斷群落結構差異

R包vegan的MRPP分析判斷群落結構差異

作者:黃靜,、旭日陽光

    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多