首页 > 其他分享 >R : PCoA(第二版)

R : PCoA(第二版)

时间:2023-11-10 15:26:05浏览次数:34  
标签:rename dplyr PCoA ggforce 第二 library ggpubr

# 1. 导入所需的库。
library(vegan)
library(tidyverse)
library(ggalt)
library(car)
library(ggforce)
library(ggpubr)
library(patchwork)

# 2. 定义所需的函数。
pairwise.adonis1 <- function(x, factors, p.adjust.m) {
  # 将输入转换为矩阵
  x = as.matrix(x)
  co = as.matrix(combn(unique(factors), 2))
  
  # 初始化输出变量
  pairs <- F.Model <- R2 <- p.value <- c()
  
  # 对factors中的每一对执行adonis分析
  for (elem in 1:ncol(co)) {
    ad = adonis(x[factors %in% c(as.character(co[1, elem]), as.character(co[2, elem])),
                  factors %in% c(as.character(co[1, elem]), as.character(co[2, elem]))] ~
                  factors[factors %in% c(as.character(co[1, elem]), as.character(co[2, elem]))], permutations = 999)
    pairs <- c(pairs, paste(co[1, elem], 'vs', co[2, elem]))
    F.Model <- c(F.Model, ad$aov.tab[1, 4])
    R2 <- c(R2, ad$aov.tab[1, 5])
    p.value <- c(p.value, ad$aov.tab[1, 6])
  }
  
  # p值调整
  p.adjusted = p.adjust(p.value, method = p.adjust.m)
  pairw.res = data.frame(pairs, F.Model, R2, p.value, p.adjusted)
  return(pairw.res)
}

# 3. 读取和处理数据。
setwd("C:\\Users\\Administrator\\Desktop")

otu <- read.table("./otu_table.txt", row.names = 1, sep = "\t", header = TRUE) %>% as.data.frame()
map <- read.table("./metadata3-1.txt", sep = "\t", header = TRUE)
colnames(map)[1] <- "ID"
row.names(map) <- map$ID

idx <- rownames(map) %in% colnames(otu)
map1 <- map[idx,]
otu <- otu[, rownames(map1)]

# 4. 进行adonis分析并计算统计值。
bray_curtis <- vegan::vegdist(t(otu), method = "bray", na.rm = TRUE)
ado <- adonis(bray_curtis ~ map1$Group, permutations = 999, method = "bray")

R2_value <- round(as.data.frame(ado$aov.tab[5])[1, 1], 3)
p_v_value <- as.data.frame(ado$aov.tab[6])[1, 1]
title <- paste("adonis:R ", R2_value, " p: ", p_v_value, sep = "")

# 5. 绘制PCoA图。
pcoa <- cmdscale(bray_curtis, k = 2, eig = TRUE)
points <- as.data.frame(pcoa$points) %>% dplyr::rename(x = "V1", y = "V2")
eig <- pcoa$eig

points <- cbind(points, map1[match(rownames(points), map1$ID),])

n <- 0.85
colors <- c("B73_Week4"="#00BFFF","B73_Week6"="#00BFFF","B73_Week8"="#00BFFF","B73_Week10"="#00BFFF","Mo17_Week4"="#FF4500","Mo17_Week6"="#FF4500","Mo17_Week8"="#FF4500","Mo17_Week10"="#FF4500")
# 定义形状
shapes <- c("B73_Week4"=24, "B73_Week6"=22, "B73_Week8"=21, "B73_Week10"=23, 
            "Mo17_Week4"=24, "Mo17_Week6"=22, "Mo17_Week8"=21, "Mo17_Week10"=23)

# 在ggplot中使用这些形状
p1 <- ggplot(points, aes(x = x, y = y, fill = Group, shape = Group)) + 
  geom_point(alpha = .7, size = 5) +
  scale_shape_manual(values = shapes) +  # 使用自定义形状
  scale_fill_manual(values = colors) +
  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 = title) +
  geom_mark_ellipse(aes(fill = Group, label = Group), alpha = 0.1, color = "grey", linetype = 3) +
  theme_bw() +
  theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(), axis.text = element_text(color = "black", size = 9))

# 显示绘制的图
p1

# 6. 输出pairwise adonis结果。
pair_bray_adonis <- pairwise.adonis1(bray_curtis, map1$Group, p.adjust.m = "bonferroni")

# 存储为文本文件
write.table(as.data.frame(pair_bray_adonis), "table.txt", sep = "\t", quote = FALSE, row.names = FALSE)

tab2 <- ggtexttable(pair_bray_adonis, rows = NULL)
p2 <- tab2
p2

# 使用ggsave保存PCoA图为PNG格式
ggsave(filename = "PCoA_plot.png", plot = p1, width = 12, height = 10, units = "in", dpi = 300)

 

标签:rename,dplyr,PCoA,ggforce,第二,library,ggpubr
From: https://www.cnblogs.com/wzbzk/p/17824158.html

相关文章

  • elementui 自定义上传接口上传完图片之后无法再进行第二次上传,踩坑解决
    1,上传功能<el-upload action="" ref='upload' :http-request="handleFileUpload" :limit="1" :show-file-list="false"> <iclass="el-icon-upload2"></i></el-upload>2,在上传后......
  • 博士挑战--第二步达成
    目录现状改进未来现状这个世界最神奇的,莫过于永远都有意外,第二步以和平的地方式提前达成了。1.意外一:迫于各种压力(我的态度、项目进度、其他学者进展、外界评价),导师已于上周开始给师姐改论文并尽快投出去。这结局是最好的,只是有点过早。2.意外二:没想到师妹论文写得太不勤快了,......
  • Java登陆第二天——SQL之DML
    SQL语句SQL概括起来可以分为以下四组。(都是SQL,因为功能的不同,为了更好学习划分了类别)DDL——数据定义语言。用于定义数据的结构。指的是增,删,改数据库DML——数据操作语言。用于检索或修改数据。指的是增,删,改数据DQL——数据查询语言。用于查询各种形式的数据。指的是查询......
  • 第二十四次打靶
    靶机介绍1)靶机地址:https://download.vulnhub.com/tomato/Tomato.ova2)靶机难度:低3)打靶目标:取得root权限+Flag4)涉及攻击方法:主机发现、端口扫描、信息收集、路径爬取、源码分析、文件包含、写入日志、内核漏洞枚举、本地提权5)靶机简介:本次的靶机是一个低难度的靶机,靶机......
  • R :试验设计示意图(第二版)
    #加载ggplot2包library(ggplot2)#自定义文字大小axis_title_size<-18axis_text_size<-12label_text_size<-3.8title_size<-18facet_label_size<-14legend_text_size<-14#调整图例文本大小legend_key_size<-unit(1,"cm")#调整图例键大......
  • 第二节:队列详解 和 面试题剖析
    一.        二.        三.         !作       者:Yaopengfei(姚鹏飞)博客地址:http://www.cnblogs.com/yaopengfei/声     明1:如有错误,欢迎讨论,请勿谩骂^_^。声     明2:原创博客请在转载......
  • kafka第二天学习笔记
    第二天学习Kafka,我们继续深入了解这个分布式流处理平台的核心概念和功能。以下是一些重要的知识点和概念:Kafka的消费者组:消费者组是多个消费者实例的组合,可以共同消费一个topic中的消息。消费者组中的每个消费者会均匀分配topic中的消息,实现负载均衡和高可用性。Kafka的分区策略:当......
  • C语言程序设计 第二章 数据类型
    本节是学习C语言数据类型。1、掌握C的数据类型2、掌握整型、实型、字符型数据的常量及变量  下载Powerpoint课件 下载图片格式的课件(PPT课件转换为JPG图片)......
  • C语言程序设计 练习题参考答案 第二章
    2.4C,2.5B,2.6A,2.7B,2.8C,2.9C,2.10B,2.11A,2.12D,2.13A,2.14 3,14,32,41,22.15 (1)1(2)30 (3)5.0(4)0.0(5)1......
  • 第二十三次打靶
    靶机介绍1)靶机地址:https://download.vulnhub.com/cereal/Cereal.ova2)靶机难度:高(最接近真实场景)3)打靶目标:取得root权限+2Flag4)涉及攻击方法:主机发现、端口扫描、信息收集、路径枚举、密码爆破、域名解析、匿名FTP、子域名爆破、源码审计、反序列化漏洞、编写漏洞利用代......