fastspar微生物相关性推断

news2024/11/25 1:32:20

fastspar

简介

fastspar是基于Sparcc通过C编写的,速度更快,内存消耗更少。sparcc是基于OTU的原始count数,通过log转换和标准化去除传统相对丰度的天然负相关(因为所有OTU之和为1,某些OTU丰度高另外一些自然就少,导致最后出现正相关少负相关多的假象)。
FastSpar是SparCC算法的C++实现,比原来的Python2版本快几千倍,并且使用的内存少得多。FastSpar的实现提供了线程支持和一个P值估计器,该估计器考虑了重复数据排列的可能性(进一步的细节见本文)。

FastSpar目前正在开发中,可能缺乏完整程序中预期的某些功能。虽然FastSpar的工作一般没有问题,但必须特别注意确保提供正确格式的输入数据。

安装

Conda
To install through conda, use:

conda install -c bioconda -c conda-forge fastspar

使用

1.相关性推断

要运行FastSpar,你必须有BIOM tsv格式文件(没有元数据)中的绝对OTU计数。fake_data.tsv(来自最初的SparCC实现)将作为一个例子。

  • 输入文件:fake_data.tsv(fastspar/tests/data/fake_data.tsv,63k):制表符分隔,行为OTU,列为样本号
  • header(第一行第一列一定是#OTU ID,否则报错)
    在这里插入图片描述
    在这里插入图片描述
    计算相关性
(base) [yutao@myosin data]$ mkdir out; time fastspar --otu_table fake_data.tsv --correlation out/median_correlation.tsv --covariance out/median_covariance.tsv -t 30 &>1.log&
# 耗时2.4s
# -t <int>, --threads <int> Number of threads (default: 1)
-c <path>, --otu_table <path>
                OTU input OTU count table
  -r <path>, -correlation <path>
                Correlation output table
  -a <path>, --covariance <path>
                Covariance output table
    -i <int>, --iterations <int>
               Number of interations to perform (default: 50)
  • median_correlation.tsv
    在这里插入图片描述
    结果是一个相关系数对称矩阵,对角线是自身的相关系数为1,其他例如1行2列表示OTU0 vs OTU1相关系数为0.7265
  • median_covariance.tsv
    在这里插入图片描述
    迭代次数(SparCC相关性估计的轮次)和排除迭代次数(发现和排除高度相关的OTU对的次数)也可以进行调整。
fastspar --iterations 50 --exclude_iterations 20 --otu_table tests/data/fake_data.tsv --correlation median_correlation.tsv --covariance median_covariance.tsv

进一步,可以增加排除相关OTU对的最小阈值

fastspar --threshold 0.2 --otu_table tests/data/fake_data.tsv --correlation median_correlation.tsv --covariance median_covariance.tsv

2.精确P值的计算

有几种方法可以计算推断出的相关关系的p值。在这里,我们选择使用基于稳健互换的方法。这个过程包括从原始OTU计数数据的随机排列中推断出相关关系。每个p值的大小与随机排列的数据中观察到的更极端的相关性的频率有关。在下面的例子中,我们从1000个自举相关性中计算出p值。

1.首先我们生成1000个自举计数。

mkdir bootstrap_counts
(base) [yutao@myosin data]$ mkdir bootstrap_counts;  fastspar_bootstrap --otu_table tests/data/fake_data.tsv --number 1000 --prefix bootstrap_counts/fake_data
# 耗时1s
# --number 迭代次数
# -t 线程
  • 会在out下生成1000个重抽样列表
(base) [yutao@myosin data]$ ls out/
fake_data_0.tsv    fake_data_326.tsv  fake_data_552.tsv  fake_data_779.tsv
fake_data_100.tsv  fake_data_327.tsv  fake_data_553.tsv  fake_data_77.tsv
fake_data_101.tsv  fake_data_328.tsv  fake_data_554.tsv  fake_data_780.tsv
fake_data_102.tsv  fake_data_329.tsv  fake_data_555.tsv  fake_data_781.tsv

2.然后推断每个自举计数的相关性(在所有可用进程中并行运行)。
这里使用parallel进行并行计算

mkdir bootstrap_correlation
parallel fastspar --otu_table {} --correlation bootstrap_correlation/cor_{/} --covariance bootstrap_correlation/cov_{/} -i 5 ::: bootstrap_counts/*
# 1000次计算耗时14s
# bootstrap_correlation/cor_{/},bootstrap_correlation/cov_{/} 表示输出文件名是cor_,cov_加输入文件名
(base) [yutao@myosin data]$ ls bootstrap_correlation
cor_fake_data_0.tsv    cor_fake_data_701.tsv       cov_fake_data_400.tsv
cor_fake_data_100.tsv  cor_fake_data_702.tsv       cov_fake_data_401.tsv
cor_fake_data_101.tsv  cor_fake_data_703.tsv       cov_fake_data_402.tsv
cor_fake_data_102.tsv  cor_fake_data_704.tsv       cov_fake_data_403.tsv
cor_fake_data_103.tsv  cor_fake_data_705.tsv       cov_fake_data_404.tsv
cor_fake_data_104.tsv  cor_fake_data_706.tsv       cov_fake_data_405.tsv
cor_fake_data_105.tsv  cor_fake_data_707.tsv       cov_fake_data_406.tsv

  • 注意,此步骤需要有足够的存储,1278 * 85(大小400k)的矩阵产生了24G的中间结果

3.根据这些相关性,然后计算出p值

fastspar_pvalues --otu_table tests/data/fake_data.tsv --correlation median_correlation.tsv --prefix bootstrap_correlation/cor_fake_data_ --permutations 1000 --outfile pvalues.tsv
# 耗时2s
-c/--otu_table <path>
               OTU input table used to generated correlations
  -r/--correlation <path>
                   Correlation table generated by FastSpar
  -p/--prefix <str>
               Prefix output of bootstrap output files
  -n/--permutations <int>
               Number of permutations/ bootstraps
  -o/--outfile <path>
               Output p-value matrix filename

线程
如果FastSpar是用OpenMP编译的,线程可以通过在命令行中调用–threads <thread_number>来使用几个工具。

fastspar --otu_table tests/data/fake_data.txt --correlation median_correlation.tsv --covariance median_covariance.tsv --iterations 50 --threads 10

解析成长表

# ++++++++++++++++++++++++++++
# flattenCorrMatrix
# ++++++++++++++++++++++++++++
# cormat : matrix of the correlation coefficients
# pmat : matrix of the correlation p-values
library(Hmisc) # 生成相关性/P-value矩阵,测试使用
library(dplyr) # 合并数据
setwd("C:/北大真菌细菌互作/互作")
tax <- read.table('Taxonomy_info.txt', header = T)
# 解析两个对角线矩阵,cormat是fastspac的相关性矩阵,pmat是fastspac的p-value矩阵
flattenCorrMatrix <- function(cormat, pmat){
  ut <- upper.tri(cormat) 
  data.frame( row = rownames(cormat)[row(cormat)[ut]], 
                                      column = rownames(cormat)[col(cormat)[ut]], cor =(cormat)[ut], p = pmat[ut] )
}

r <- read.table('median_correlation.tsv', header = T, row.names = 1,
                check.names = F, comment.char = "", sep = "\t") #忽略注释字符
View(head(r))
pv <- read.table('pvalues.tsv', header = T, row.names = 1,
                check.names = F, comment.char = "", sep = "\t") #忽略注释字符
View(head(pv))

res <- flattenCorrMatrix(r, pv)

View(head(res))
write.table(res, 'Correlation_result.tsv', quote = F)

dim(res)
filter <- subset(res, res$p < 0.05)
dim(filter)

# 添加分组信息
View(head(tax))
r1 <- left_join(filter, tax, by = c('row' = 'ID'))
r1 <- left_join(r1, tax, by = c('column' = 'ID'))
# 添加互作类型
r1$Type <- 'null'

r1$Type[r1$Kingdom.x == "Fungi" & r1$Kingdom.y == "Fungi"] <- "FF"
r1$Type[r1$Kingdom.x == "Bacteria" & r1$Kingdom.y == "Bacteria"] <- "BB"
r1$Type[r1$Kingdom.x == "Fungi" & r1$Kingdom.y == "Bacteria"] <- "FB"
r1$Type[r1$Kingdom.x == "Bacteria" & r1$Kingdom.y == "Fungi"] <- "FB"

# 保留细菌vs真菌
write.table(r1, 'All_Correlation_result.tsv', quote = F, sep = "\t")


data <- read.table('Bacteria_and_fungi_for_sparcc.tsv', header = T, row.names = 1, 
                   comment.char = "", sep = '\t' )
cor.test(as.matrix(data[1,]), as.matrix(data[2760,]), method = 'spearman')
#举个栗子
# res3 <- rcorr(as.matrix(mtcars[,1:7]))
# res <- flattenCorrMatrix(res3$r, res3$P)

报错

  • error while loading shared libraries: libmkl_rt.so
(base) [yutao@myosin data]$ fastspar_bootstrap --help
fastspar_bootstrap: error while loading shared libraries: libmkl_rt.so: cannot open shared object file: No such file or directory

解决

(base) [yutao@myosin data]$ conda install -c intel mkl

  • libc++abi: terminating with uncaught exception of type std::invalid_argument: stof: no conversion;Abort trap: 6
    要求输入的OTU表格为数值数据,除首行和首列外,其他均为数值,不能出现NA,对输入的大表数据可以先通过数据筛选确认符合上述情况。

Citation

fastspac github
If you use this tool, please cite the FastSpar paper and original SparCC paper:

Watts, S. C., Ritchie, S. C., Inouye, M., & Holt, K. E. (2018). FastSpar: rapid and scalable correlation estimation for compositional data. Bioinformatics. doi: 10.1093/bioinformatics/bty734

Friedman, J. & Alm, E.J. (2017). Inferring correlation networks from genomic survey data. PLoS Comput. Biol. 8, e1002687.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1186865.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

nssm部署nginx

nssm install Nginx8098 --安装nginx nssm start Nginx8098 --启用nginx nginx 选择nginx路径&#xff0c;安装

Kyligence Copilot 亮相第六届进博会,增添数智新活力

11月5日&#xff0c;第六届中国国际进口博览会&#xff08;以下简称“进博会”&#xff09;在上海国家会展中心盛大启幕&#xff0c;众多新科技、新成果、新展品亮相本届进博会。作为阿斯利康&#xff08;AstraZeneca&#xff09;合作伙伴&#xff0c;跬智信息&#xff08;Kyli…

ApiFox添加全局参数

文章目录 Apifox右上角打开 管理环境Apifox右上角打开 管理环境 我们发现,从登录以后,在请求其他接口,每次都需要添加一个Header 头信息.这样很繁琐.那Apifox是否支持我们设置全局参数呢?方便我们每次调用需要添加Header参数的接口需要每次都重新编写.当然支持,下面带着大家配…

Hikyuu 1.3.0 发布,高性能量化交易研究框架

Hikyuu 是一款基于 C/Python 的高性能开源量化交易研究框架&#xff0c;用于快速策略分析及回测。与其他量化平台或回测软件相比&#xff0c;具备&#xff1a; 超快的回测速度&#xff1b;对完整的系统交易理念进行抽象&#xff0c;并分解为不同的组件&#xff0c;通过重用不同…

Redis被攻击纪实

一、前言 声明&#xff1a;本文仅供技术交流使用&#xff0c;严禁采用本文的方法进行任何非法活动。 上周新来的同事分享Redis的原理和机制&#xff0c;想起2017年的时候测试环境Redis被攻击&#xff0c;最后只能重新安装服务器&#xff0c;今天试验一把利用Redis漏洞进行攻击…

Hybrid综合应用

1、需求 实现不同vlan间PC不可互访&#xff0c;而不同vlan的PC均可访问服务器的特殊效果&#xff0c;具体要求如下。 1&#xff09;在交换机中创建相关vlan 2&#xff09;修改端口模式与pvid 3&#xff09;修改端口允许通过的数据帧 4&#xff09;结果验证&#xff0c;vlan5与…

docker搭建mysql环境

1. 基础环境 名称描述CentOS 7.6Linux操作系统版本docker 20.10.5docker版本mysql 8.0.29mysql镜像版本 2. 下载安装 使用docker命令下载mysql镜像 [rootzhouwei ~]# docker pull mysql:8.0.29查看docker仓库是否已经下载了mysql镜像 [rootzhouwei ~]# docker images将mys…

一体化HIS医疗信息管理系统源码:云HIS、云电子病历、云LIS

基于云计算技术的B/S架构的HIS系统&#xff0c;为医疗机构提供标准化的、信息化的、可共享的医疗信息管理系统&#xff0c;实现医患事务管理和临床诊疗管理等标准医疗管理信息系统的功能。系统利用云计算平台的技术优势&#xff0c;建立统一的云HIS、云病历、云LIS&#xff0c;…

Android:OkHttp同步请求和异步请求

一、前言 网络请求之前工作中用到的是post请求&#xff0c;然后了解之后发现请求的种类还有很多种。下面着重讲到是get和post的同步请求和异步请求。 二、具体内容 1.Okhttp的特点&#xff1a; 支持Http/2并允许对同一主机的所有请求共享一套接字&#xff1b;如果非HTTP/2&…

jenkins2

jenkins插件管理安装&#xff1a;docker-build jenkins安装了docker 配置docke builder 添加 unix:///var/run/docker.sock rootubuntu20:~# usermod -G docker jenkins 修改docker中service文件添加 -H tcp://0.0.0.0:2376 jenkins中系统管理中 tcp://localhost:2376

不同规模的企业如何借助宁盾LDAP统一用户认证实现安全和效率需求?

中小企业要解决安全和业务效率问题&#xff0c;须提前规划软件基础设施&#xff0c;其中最基础的部分是建立统一账号和统一用户身份认证体系。这个体系相当于在软件系统之间建立了一套统一的身份标准&#xff0c;基于这套标准创建的账号让员工方便、高效地访问公司内的大部分软…

项目文件下载器,基于Thread多线程

目录 1、Http 工具类 2、关于下载的关系类 2.1 展示下载信息 #下载信息展现线程类 #在主下载类中&#xff0c;进行调用上述线程类 2.2 文件的分块下载 #文件分块下载类 #文件按分块进行分别切分的方法 # 使用 LongAdder 类型&#xff0c;更改 DownLoadInfoThread 展现…

clang插件对llvm源码插桩,分析函数调用日志(1)

tick_plot__compile.ipynb 时长边界_时上链异数: 长短函数调用链列表 0. 用matplotlib找系统中字体文件大于1MB的 中文字体通常很大&#xff0c;这样过滤出的 通常有中文字体 结果中 看名字 ‘AR PL UMing CN’ 果然是中文字体 from matplotlib.font_manager import fontManag…

网页制作-引入icon

1.如何引入icon 1.1 进入https://www.iconfont.cn/ 1.2 登录或者注册一下 1.3 在搜索框输入你想搜索的内容 1.4 加入购物车 1.5 在购物车中点击下载代码 1.6 若是普通的html项目&#xff0c;则至需要将如下两个拷贝到你的项目中 1.7 在你需要的网页中引入iconfont.css就可以使…

教你解决msvcp140.dll丢失方法,全面分析msvcp140.dll丢失原因

msvcp140.dll是一个Microsoft Visual C库文件&#xff0c;主要用于支持C应用程序的运行。当找不到msvcp140.dll时&#xff0c;可能导致程序无法正常执行。下面是五个解决方法以及msvcp140.dll丢失的原因介绍&#xff1a; 一、msvcp140.dll丢失的原因&#xff1a; 系统故障&am…

Android T窗口动画添加移除流程(更新中)

APP侧窗口动画demo 如何创建一个窗口动画&#xff1f;我们通过先从APP创建一个窗口&#xff0c;以这个窗口的创建过程的窗口动画为例 这个demo就是点击BUTTON显示窗口&#xff0c;点击CLOSE WINDOW关闭窗口&#xff0c;下面简述关键代码 //定义WindowManager和LayoutParams…

第三阶段第一章——PySpark实战

学习了这么多python的知识&#xff0c;是时候来搞点真玩意儿了~~ 春风得意马蹄疾&#xff0c;一日看尽长安花 o(*&#xffe3;︶&#xffe3;*)o 1.前言介绍 &#xff08;1&#xff09;什么是spark Apache Spark是一个开源的分布式计算框架&#xff0c;用于处理大规模数据集的…

万界星空科技MES系统软件体系架构及应用

MES系统是数字化车间的核心。MES通过数字化生产过程控制&#xff0c;借助自动化和智能化技术手段&#xff0c;实现车间制造控制智能化、生产过程透明化、制造装备数控化和生产信息集成化。生产管理MES系统主要包括车间管理系统、质量管理系统、资源管理系统及数据采集和分析系统…

Power Apps-库组件样式调整

数据表控件参考文档&#xff1a;Power Apps 中的 数据表 控件 - Power Apps | Microsoft Learn 修改每个item的布局 选中组件&#xff0c;点击左上角的&#x1f58a;&#xff0c;可以进行调整 重新选择该组件的样式 点击布局中后面的选项可以重新选择 整合计数代表一行有几个…

高防CDN与高防服务器:为什么高防服务器不能完全代替高防CDN

在当今的数字化时代&#xff0c;网络安全已经成为企业不容忽视的关键问题。面对不断增长的网络威胁和攻击&#xff0c;许多企业采取了高防措施以保护其网络和在线资产。然而&#xff0c;高防服务器和高防CDN是两种不同的安全解决方案&#xff0c;各自有其优势和局限性。在本文中…