数据分析:基于sparcc的co-occurrence网络

news/2024/5/21 1:52:02

介绍

Sparcc是基于16s或metagenomics数据等计算组成数据之间关联关系的算法。通常使用count matrix数据。

安装Sparcc软件

git clone git@github.com:JCSzamosi/SparCC3.git
export PATH=/path/SparCC3:$PATHwhich SparCC.py

导入数据

注:使用rarefy抽平的count matrix数据

library(dplyr)
library(tibble)dat <- read.table("dat_rarefy10000_v2.tsv", header = T)

过滤数据

filter_fun <- function(prof=dat , tag="dat ", cutoff=0.005){# prof=dat # tag="dat " # cutoff=0.005dat <- cbind(prof[, 1, drop=F], prof[, -1] %>% summarise(across(everything(), function(x){x/sum(x)}))) %>%column_to_rownames("OTUID")#dat.cln <- dat[rowSums(dat) > cutoff, ]remain <- apply(dat, 1, function(x){length(x[x>cutoff])}) %>% data.frame() %>%setNames("Counts") %>%rownames_to_column("OTUID") %>%mutate(State=ifelse(Counts>1, "Remain", "Discard")) %>%filter(State == "Remain")# countcount <- prof %>% filter(OTUID%in%remain$OTUID)filename <- paste0("../dataset/Sparcc/", tag, "_rarefy10000_v2_", cutoff, ".tsv")write.table(count, file = filename, quote = F, sep = "\t", row.names = F)# relative abundancerelative <- dat %>% rownames_to_column("OTUID") %>%filter(OTUID%in%remain$OTUID)filename <- paste0("../dataset/Sparcc/", tag, "_rarefy10000_v2_", cutoff, "_rb.tsv")write.table(relative, file = filename, quote = F, sep = "\t", row.names = F)
}filter_fun(prof=dat, tag="dat", cutoff=0.005)
filter_fun(prof=dat, tag="dat", cutoff=0.001)

Result: 保留过滤后的count matrix和relative abundance matrix两类型矩阵

sparcc analysis

该过程分成两步:1.计算相关系数;2.permutation test计算p值.

  • iteration 参数使用default -i 20

  • permutation 参数: 1000次

# Step 1 - Compute correlations
python /data/share/toolkits/SparCC3/SparCC.py sxtr_rarefy10000_v2_0.001.tsv -i 20 --cor_file=sxtr_sparcc.tsv > sxtr_sparcc.log
echo "Step 1 - Compute correlations Ended successfully!"# Step 2 - Compute bootstraps
python /data/share/toolkits/SparCC3/MakeBootstraps.py sxtr_rarefy10000_v2_0.001.tsv -n 1000 -t bootstrap_#.txt -p pvals/ >> sxtr_sparcc.log
echo "Step 2 - Compute bootstraps Ended successfully!"# Step 3 - Compute p-values
for n in {0..999}; do /data/share/toolkits/SparCC3/SparCC.py pvals/bootstrap_${n}.txt -i 20 --cor_file=pvals/bootstrap_cor_${n}.txt >> sxtr_sparcc.log; done
python /data/share/toolkits/SparCC3/PseudoPvals.py sxtr_sparcc.tsv pvals/bootstrap_cor_#.txt 1000 -o pvals/pvals.two_sided.txt -t two_sided >> sxtr_sparcc.log
echo "Step 3 - Compute p-values Ended successfully!"# step 4 - Rename file
mv pvals/pvals.two_sided.txt sxtr_pvals.two_sided.tsv
mv cov_mat_SparCC.out sxtr_cov_mat_SparCC.tsv
echo "step 4 - Rename file Ended successfully!"

co-occurrence network

网络图要符合以下要求:

  1. 保留相互之间显著差异(p < 0.05)OTU;

  2. genus分类学水平表示OTU来源;

  3. OTU间相关性用颜色区分,且线条粗细代表相关系数大小;

  4. OTU点大小表示其丰度大小;

  5. 统计网络中正负相关数目;

导入画图数据

library(igraph)
library(psych)dat_cor <- read.table("dat_cov_mat_SparCC.tsv", header = T, row.names = 1)
dat_pval <- read.table("dat_pvals.two_sided.tsv", header = T, row.names = 1)
dat_rb5 <- read.table("dat_rarefy10000_v2_0.005_rb.tsv", header = T, row.names = 1)
dat_tax <- read.csv("dat_taxonomy.csv")

画图

  • 数据处理

  • 数据可视化

  • 数据存储

cornet_plot <- function(mcor=dat_cor, mpval=dat_pval, mrb=dat_rb5, tax=dat_tax, type="dat_5"){# mcor <- dat_cor# mpval <- dat_pval# mrb <- dat_rb5# tax <- dat_tax# type="dat_05"# trim all NA in pvalue < 0.05mpval[mpval > 0.05] <- NAremain <- apply(mpval, 1, function(x){length(x[!is.na(x)])}) %>% data.frame() %>%setNames("counts") %>%rownames_to_column("OTUID") %>%filter(counts > 0)remain_pval <- mpval[as.character(remain$OTUID), as.character(remain$OTUID)]# remove non significant edges remain_cor <- mcor[as.character(remain$OTUID), as.character(remain$OTUID)]for(i in 1:nrow(remain_pval)){for(j in 1:ncol(remain_pval)){if(is.na(remain_pval[i, j])){remain_cor[i, j] <- 0}}}# OTU relative abundance and taxonomy rb_tax <- mrb %>% rownames_to_column("OTUID") %>%filter(OTUID%in%as.character(remain$OTUID)) %>%group_by(OTUID) %>%rowwise() %>%mutate(SumAbundance=mean(c_across(everything()))) %>%ungroup() %>%inner_join(tax, by="OTUID") %>%dplyr::select("OTUID", "SumAbundance", "Genus") %>%mutate(Genus=gsub("g__Candidatus", "Ca.", Genus),Genus=gsub("_", " ", Genus)) %>%mutate(Genus=factor(as.character(Genus)))# 构建igraph对象igraph <- graph.adjacency(as.matrix(remain_cor), mode="undirected", weighted=TRUE, diag=FALSE)# 去掉孤立点bad.vs <- V(igraph)[degree(igraph) == 0]igraph <- delete.vertices(igraph, bad.vs)# 将igraph weight属性赋值到igraph.weightigraph.weight <- E(igraph)$weight# 做图前去掉igraph的weight权重,因为做图时某些layout会受到其影响E(igraph)$weight <- NAnumber_cor <- paste0("postive correlation=", sum(igraph.weight > 0), "\n","negative correlation=",  sum(igraph.weight < 0))# set edge color,postive correlation 设定为red, negative correlation设定为blueE.color <- igraph.weightE.color <- ifelse(E.color > 0, "red", ifelse(E.color < 0, "blue", "grey"))E(igraph)$color <- as.character(E.color)# 可以设定edge的宽 度set edge width,例如将相关系数与edge width关联E(igraph)$width <- abs(igraph.weight)# set vertices sizeigraph.size <- rb_tax %>% filter(OTUID%in%V(igraph)$name) igraph.size.new <- log((igraph.size$SumAbundance) * 1000000)V(igraph)$size <- igraph.size.new# set vertices colorigraph.col <- rb_tax %>% filter(OTUID%in%V(igraph)$name)pointcolor <- c("green","deeppink","deepskyblue","yellow","brown","pink","gray","cyan","peachpuff")pr <- levels(igraph.col$Genus)pr_color <- pointcolor[1:length(pr)]levels(igraph.col$Genus) <- pr_colorV(igraph)$color <- as.character(igraph.col$Genus)# 按模块着色# fc <- cluster_fast_greedy(igraph, weights=NULL)# modularity <- modularity(igraph, membership(fc))# comps <- membership(fc)# colbar <- rainbow(max(comps))# V(igraph)$color <- colbar[comps]filename <- paste0("../figure/03.Network/", type, "_Sparcc.pdf")pdf(file = filename, width = 10, height = 10)plot(igraph,main="Co-occurrence network",layout=layout_in_circle,edge.lty=1,edge.curved=TRUE,margin=c(0,0,0,0))legend(x=.8, y=-1, bty = "n",legend=pr,fill=pr_color, border=NA)text(x=.3, y=-1.2, labels=number_cor, cex = 1.5)dev.off()# calculate OTU remain_cor_sum <- apply(remain_cor, 1, function(x){res1 <- as.numeric(length(x[x>0]))res2 <- as.numeric(length(x[x<0]))res <- c(res1, res2)}) %>% t() %>% data.frame() %>%setNames(c("Negative", "Positive")) %>%rownames_to_column("OTUID")file_cor <- paste0("../figure/03.Network/", type, "_Sparcc_negpos.csv")write.csv(remain_cor_sum, file = file_cor, row.names = F)
}

运行画图函数

cornet_plot(mcor=dat_cor, mpval=dat_pval, mrb=dat_rb5, tax=dat_tax, type="dat_5")

在这里插入图片描述

R information

sessionInfo()
R version 4.0.2 (2020-06-22)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 10 x64 (build 19042)Matrix products: defaultlocale:
[1] LC_COLLATE=English_United States.1252  LC_CTYPE=English_United States.1252    LC_MONETARY=English_United States.1252
[4] LC_NUMERIC=C                           LC_TIME=English_United States.1252    
system code page: 936attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     other attached packages:
[1] psych_2.0.9  igraph_1.2.5 tibble_3.0.3 dplyr_1.0.2 loaded via a namespace (and not attached):[1] lattice_0.20-41  crayon_1.3.4     grid_4.0.2       R6_2.5.0         nlme_3.1-150     lifecycle_0.2.0  magrittr_1.5    [8] pillar_1.4.6     rlang_0.4.7      rstudioapi_0.11  vctrs_0.3.4      generics_0.1.0   ellipsis_0.3.1   tools_4.0.2     
[15] glue_1.4.2       purrr_0.3.4      parallel_4.0.2   xfun_0.19        yaml_2.2.1       compiler_4.0.2   pkgconfig_2.0.3 
[22] mnormt_2.0.2     tmvnsim_1.0-2    knitr_1.30       tidyselect_1.1.0

参考

  1. SparCC3

  2. sparcc.pdf

  3. sparcc tutorial

  4. Co-occurrence网络图在R中的实现


http://www.mrgr.cn/p/81661866

相关文章

『先进技术助力』Kompas AI:智能AI代理在工作中的应用与效率提升

『智能化未来』Kompas AI如何改变我们的工作方式&#xff1f; 在这个信息时代&#xff0c;利用AI聊天机器人来处理机械性的工作已经成为一种趋势。ChatGPT作为一种智能助手&#xff0c;不仅能够提高工作效率&#xff0c;还可以帮助我们更明智地做出决策&#xff0c;从而释放出更…

【视频】多元线性回归模型原理讲解与R语言实例

原文链接:https://tecdat.cn/?p=36149 原文出处:拓端数据部落公众号 分析师:Xue Yang 近年来,随着计量经济学和统计学的快速发展,回归模型作为一种有效的数据分析工具,被广泛应用于金融市场的分析中。回归模型能够通过建立变量之间的数学关系,揭示变量之间的相互作用机…

Python随机波动性SV模型:贝叶斯推断马尔可夫链蒙特卡洛MCMC分析英镑/美元汇率时间序列数据

全文链接:https://tecdat.cn/?p=33885 原文出处:拓端数据部落公众号 本文描述了帮助客户使用马尔可夫链蒙特卡洛(MCMC)方法通过贝叶斯方法估计基本的单变量随机波动模型,就像Kim等人(1998年)所做的那样。 定义模型以及从条件后验中抽取样本的函数的代码也在Python脚本中…

Hbase 常用shell操作

目录 1、创建表 1.1、启动HBase Shell 1.2、创建表 1.3、查看表 1.4、删除表 2、插入数据 2.1、put命令 3、查看数据 3.1、get命令 3.2、查询数据中文显示 4、更新数据 4.1、使用put来更新数据 5、删除数据 5.1、delete命令 5.2、删除指定列的数据 5.3、delete…

vs2019 里 C++ 20规范的 string 类的源码注释

&#xff08;1&#xff09;读源码&#xff0c;可以让我们更好的使用这个类&#xff0c;掌握这个类&#xff0c;知道咱们使用了库代码以后&#xff0c;程序大致具体是怎么执行的。而不用担心程序出不知名的意外的问题。也便于随后的代码调试。 string 类实际是 库中 basic_strin…

c语言题库之序列合并

文章目录 前言C语言题目&#xff1a;分析1. 合并逻辑2.图解合并逻辑 代码实现注意事项总结思考 前言 在编程中&#xff0c;我们经常遇到需要将两个有序序列合并为一个有序序列的问题。下面&#xff0c;我们就来详细探讨一下如何解决这个问题&#xff0c;包括输入处理、合并逻辑…

团队作业4--项目冲刺 第4篇 Scrum 冲刺博客

这个作业属于哪个课程 软件工程这个作业要求在哪里 团队作业4——项目冲刺这个作业的目标 团队完成任务的分配,明确团队每个人在接下来七天敏捷冲刺的目标其他参考文献这个作业所属团队 SuperNewCode团队成员 张楠 曾琳备 黄铭涛 张小宇 周广1.每日举行站立时会议2.燃尽图3.每…

详细介绍ARM-ORACLE Database 19c数据库下载

目录 1. 前言 2. 获取方式 2.1 ORACLE专栏 2.2 ORACLE下载站点 1. 前言 现有网络上已有非常多关于ORACLE数据库机下载的介绍&#xff0c;但对于ARM平台的介绍不多&#xff0c;借此机会我将该版的下载步骤做如下说明&#xff0c;希望能够一些不明之人提供帮助和参考 2. 获…

网络管理实验四、SNMP协议分析

1 实验概括 实验目的 捕获SNMP报文&#xff0c;通过报文分析进一步理解SNMP的报文结构、MIB-2树的结构、理解管理信息结构SMI及其规定的ASN.1。 实验内容 1、自行挑选两个网管对象&#xff0c;分别使用get&#xff0c;get-next取其值。 2、使用抓包软件抓取数据包。 3、分析并…

04-23 周二 shell环境下读取使用jq 读取json文件

04-23 周二 shell环境下读取使用jq 读取json文件 时间版本修改人描述04-23V0.1宋全恒新建文档 简介 工具列表 Shell脚本处理JSON数据工具jq jshon是另外一个读取json数据的工具 而且其支持XML和YAML格式文件 linux shell环境下处理yml文件 #!/bin/bash# 加载shyaml库 . /…

NewStarCTF 2023 week1 writeup

NewStarCTF 2023 week1 writeup Web 1.泄漏的秘密 url/robots.txt查看robots协议,找到第一部分的flag PART ONE: flag{r0bots_1s_s0_us3ful url/www.zip查看网站备份,找到第二部分的flag $PART_TWO = "_4nd_www.zip_1s_s0_d4ng3rous}"; flag:flag{r0bots_1s_s0_us3…

敏捷冲刺-5月9日

敏捷冲刺-Day-04所属课程 软件工程2024作业要求 团队作业4—项目冲刺作业目标 完成第 3 篇 Scrum 冲刺博客冲刺日志集合贴 https://www.cnblogs.com/YXCS-cya/p/181788031.项目燃尽图 1.1 第四日-5月9日进度 当前进度逐渐加快2.会议记录 2.1 会议主题 第 4 天 Scrum 冲刺-项目中…

解决mybatis的配置文件没代码提示的问题

1.将org.apache.ibatis.builder.xml包里的两个dtd文件复制出来&#xff0c;jar包里复制 2.复制dtd的url地址&#xff1a; http://mybatis.org/dtd/mybatis-3-mapper.dtd 一样的做法&#xff01; 3.关闭两个配置文件&#xff0c;重新打开&#xff0c;就可以有代码提示了&…

基于Springboot+Vue的Java项目-毕业就业信息管理系统开发实战(附演示视频+源码+LW)

大家好&#xff01;我是程序员一帆&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f49e;当前专栏&#xff1a;Java毕业设计 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f380; Python毕业设计 &am…

鸿蒙开发接口Ability框架:【@ohos.application.Want (Want)】

Want Want模块提供系统的基本通信组件的能力。 说明&#xff1a; 本模块首批接口从API version 8 开始支持。后续版本的新增接口&#xff0c;采用上角标单独标记接口的起始版本。 导入模块 import Want from ohos.application.Want; 开发前请熟悉鸿蒙开发指导文档&#xff1…

Python | Leetcode Python题解之第75题颜色分类

题目&#xff1a; 题解&#xff1a; class Solution:def sortColors(self, nums: List[int]) -> None:n len(nums)p0, p2 0, n - 1i 0while i < p2:while i < p2 and nums[i] 2:nums[i], nums[p2] nums[p2], nums[i]p2 - 1if nums[i] 0:nums[i], nums[p0] num…

绘画作品3d数字云展厅提升大众的艺术鉴赏和欣赏能力

3D虚拟展厅作为未来艺术的展示途径&#xff0c;正逐渐成为文化创意产业蓬勃发展的重要引擎。这一创新形式不仅打破了传统艺术展览的局限性&#xff0c;更以其独特的魅力吸引着全球观众的目光。 3D虚拟艺术品展厅以其独特的魅力&#xff0c;助力提升大众的艺术鉴赏和欣赏能力。观…

HTTP 1.1 与 HTTP 1.0

什么是HTTP HTTP 就是一个 超文本传输协议 协议 : 双方 约定 发送的 域名 数据长度 连接(长连接还是短连接) 格式(UTF-8那些) 传输 :数据虽然是在 A 和 B 之间传输&#xff0c;但允许中间有中转或接力。 超文本:图片、视频、压缩包,在HTTP里都是文本 HTTP 常见状态码 比如 20…

[附源码]石器时代_恐龙宝贝内购版_三网H5手游_附GM

石器时代之恐龙宝贝内购版_三网H5经典怀旧Q萌全网通手游_Linux服务端源码_视频架设教程_GM多功能授权后台_CDK授权后台 本教程仅限学习使用,禁止商用,一切后果与本人无关,此声明具有法律效应!!!! 教程是本人亲自搭建成功的,绝对是完整可运行的,踩过的坑都给你们填上了…

苹果电脑内存清理神器CleanMyMac2024中文版下载

很多朋友在使用mac电脑一段时间后&#xff0c;可能都会发现&#xff0c;自己的电脑不知道什么原因开始有些卡顿。其实这主要因为内存被占用过多&#xff0c;及时地清理不必要的内存占用&#xff0c;可以为mac减负&#xff0c;也能让电脑的运行变得更加流畅。那么问题来了&#…