三维基因组:multiHiCcompare 差异分析

简介: 三维基因组:multiHiCcompare 差异分析

引言

multiHiCcompare是 R 包 HiCcompare 的升级版,它能够一次性对多个 Hi-C 数据集进行联合标准化和比较。其标准化方法是基于原始 HiCcompare 策略的改进版本,并且利用了“ cyclic loess procedur”。虽然该程序计算量较大,但可以通过并行化处理来提高效率,既可以按染色体(cyclic_loess)进行并行化,也可以按染色体 - 块在基于距离的基础上(fastlo)进行并行化。简单来说,标准化是通过将数据表示为 MD(均值 - 差异)图来实现的,然后通过拟合一条 LOESS 回归曲线来消除偏差。MD 图是 MA 图的一种变体,其中 M 表示两个数据集之间相互作用频率的对数比,D 表示两个相互作用区域之间的距离。差异分析是通过将负二项分布模型拟合到 Hi-C 数据中来完成的,使用的工具是 edgeR 包,其方法与 diffHic 类似。与 diffHic 不同的是,multiHiCcompare 会先将数据按距离依赖的块分割(类似于标准化步骤),然后分别对每个块进行建模。当只有两种实验条件时,可以使用 hic_exactTest 进行差异分析;而当涉及多种实验条件时,则更推荐使用 hic_glm 函数。

输入

multiHiCcompare 接受以稀疏上三角格式输入的 Hi-C 矩阵(原始值),这些矩阵可以从 .hic、.cool 和 HiC-Pro 文件中轻松获取。使用 straw 从 .hic 文件中提取矩阵,并指定不进行标准化(NONE),从而获得原始的相互作用频率。

declare -a chrs=("chr1" "chr2" "chr3" "chr4" "chr5" "chr6" "chr7" "chr8" "chr9" "chr10" "chr11" "chr12" "chr13" "chr14" "chr15" "chr16" "chr17" "chr18" "chr19" "chr20" "chr21" "chr22" "chrX")
for chr in "${chrs[@]}"
do
    echo $chr
    straw NONE /home/HiC_Matrices/GSM3262956_D00_HiC_Rep1.hic "$chr" "$chr" BP 5000 > /home/HiC_Matrices/GSM3262956_D00_HiC_Rep1_"$chr"_NONE_5kb.txt
    straw NONE /home/HiC_Matrices/GSM3262957_D00_HiC_Rep2.hic "$chr" "$chr" BP 5000 > /home/HiC_Matrices/GSM3262957_D00_HiC_Rep2_"$chr"_NONE_5kb.txt
    straw NONE Matrices/GSM3262964_D15_HiC_Rep1.hic "$chr" "$chr" BP 5000 > /home/HiC_Matrices/GSM3262964_D15_HiC_Rep1_"$chr"_NONE_5kb.txt
    straw NONE Matrices/GSM3262965_D15_HiC_Rep2.hic "$chr" "$chr" BP 5000 > /home/HiC_Matrices/GSM3262965_D15_HiC_Rep2_"$chr"_NONE_5kb.txt
done
AI 代码解读

输出

输出文件包含三列:第一个相互作用 bin 的起始坐标、第二个相互作用 bin 的起始坐标以及它们的原始相互作用频率。

实战

接下来,可以进入 R 环境,加载所需的包以及染色体 2 的输入数据:

# R # version 3.6.2
options(scipen=999)
library(multiHiCcompare)

# Set up analysis parallelization
library(BiocParallel)
numCores <- 20
register(MulticoreParam(workers = numCores))

data("hg19_cyto")

hESC_rep1<-read.table('/home/Hi-C_Matrices/GSM3262956_D00_HiC_Rep1_chr2_NONE_5kb.txt', header=FALSE)
hESC_rep2<-read.table('/home/Hi-C_Matrices/GSM3262957_D00_HiC_Rep2_chr2_NONE_5kb.txt', header=FALSE)
cardio_rep1<-read.table('/home/Hi-C_Matrices/GSM3262964_D15_HiC_Rep1_chr2_NONE_5kb.txt', header=FALSE)
cardio_rep2<-read.table('/home/Hi-C_Matrices/GSM3262965_D15_HiC_Rep2_chr2_NONE_5kb.txt', header=FALSE)
AI 代码解读

需要注意的是,通过 BiocParallel 包中的 MulticoreParam 函数利用并行处理来加速分析,指定要使用的 numCores 核心数。此外,还加载了 hg19_cyto,其中包含了人类基因组 hg19 版本中需要排除的区域,例如着丝粒和端粒。

然后,需要在数据框中添加一个包含染色体信息的列,重新排列列的顺序,将染色体名称移到第一列,并使用 colnames 为数据框设置列名:

hESC_rep1$chr <- rep("2",nrow(hESC_rep1))
hESC_rep2$chr <- rep("2",nrow(hESC_rep2))
cardio_rep1$chr <- rep("2",nrow(cardio_rep1))
cardio_rep2$chr <- rep("2",nrow(cardio_rep2))

hESC_rep1 <- HESC_rep1[,c(4,1:3)]
hESC_rep2 <- HESC_rep2[,c(4,1:3)]
cardio_rep1 <- cardio_rep1[,c(4,1:3)]
cardio_rep2 <- cardio_rep2[,c(4,1:3)]

colnames(hESC_rep1) <- c(’chr’, ’region1’, ’region2’, ’IF’)
colnames(hESC_rep2) <- c(’chr’, ’region1’, ’region2’, ’IF’)
colnames(cardio_rep1) <- c(’chr’, ’region1’, ’region2’, ’IF’)
colnames(cardio_rep2) <- c(’chr’, ’region1’, ’region2’, ’IF’)
AI 代码解读

现在数据框已经准备好转换为一个 hicexp 对象。这是一个 S4 对象,multiHiCcompare 在整个分析过程中存储数据,并包含实验设计。同时,可以使用参数 zero.p 过滤掉几乎全为零的矩阵行(即接触频率几乎处处为零的行),通过指定参数 A.min 过滤掉代表性不足的相互作用(默认情况下,multiHiCcompare 会过滤掉原始相互作用频率小于 5 的相互作用),或者通过 remove.regions 过滤掉不感兴趣的相互作用(例如涉及着丝粒和端粒的相互作用):

hicexp <- make_hicexp(hESC_rep1, hESC_rep2, cardio_rep1, cardio_rep2, groups = c(0, 0, 1, 1), zero.p = 0.8, A.min = 5, filter = TRUE, remove.regions = hg19_cyto)
AI 代码解读

标准化

接下来是标准化步骤,这里使用 fastlo 函数进行标准化,因为 cyclic_loess 更加耗时。

可以使用 MD_hicexp 可视化标准化后的 MD 图,这与 diffHic 展示的 MA 图非常相似:

hicexp <- fastlo(hicexp, verbose = TRUE, parallel = TRUE)

pdf("hicexp_chr2_D00vsD15_MDplot_postNormalization.pdf")
MD_hicexp(hicexp)
dev.off()
AI 代码解读

如果不想在标准化步骤中使用并行化,可以将 parallel 设置为 FALSE。

差异分析

数据标准化后,可以使用 exactTest 进行差异相互作用分析。可以使用 MD_composite 制作另一个 MD 图,以可视化两组之间的差异,并使用 pdf 函数将其保存到文件中。其中,D.range 参数可以根据距离对图进行子集划分,这对于较大的染色体非常有用:

hicexp <- hic_exactTest(hicexp, p.method = ’fdr’, parallel = TRUE)

pdf("hicexp_chr2_D00vsD15_MDplot_postDiffAnalysis.pdf")
MD_composite(hicexp, D.range =0.1)
dev.off()
AI 代码解读

结果保存

最后,可以使用 topDirs 函数提取并保存结果,指定对数变化倍数的阈值(logfc_cutoff 参数)、对数每百万计数(logcpm_cutoff 参数)、校正后的 p 值(p.adj_cutoff 参数),以及结果的格式(bed 或 pairedbed 格式;后者适用于在 JuiceBox 中进行可视化)。

FDR_threshold <- 0.2
logFC_threshold <- 0.5
logCPM_threshold <- 0.5
td <- topDirs(hicexp1, logfc_cutoff = logFC_threshold, logcpm_cutoff = logCPM_threshold, p.adj_cutoff = FDR_threshold, return_df = ’pairedbed’)
Nrow <- nrow(td)
td_bedpe <- data.frame(td[, 1:6], "name"=rep(".",  Nrow), "score"=rep(".",  Nrow), "strand1"=rep(".",  Nrow), "strand2"=rep(".",  Nrow), "color"=rep(".",  Nrow), td[, 7:11], stringsAsFactors=F)
td_bedpe[td_bedpe$logFC<0, 11] <- "0, 0, 139" # RGB color code for dark blue
td_bedpe[td_bedpe$logFC>0, 11] <- "255, 140, 0" # RGB color code for orange
write.table(td_bedpe, "multiHiCcompare_chr2_D00vsD15_5kb.bedpe", sep="\t", col.names=F, row.names=F, quote=F)
AI 代码解读

通过这些阈值,multiHiCcompare 在染色体 2 上发现了 17,237 个差异相互作用。

multiHiCcompare 还提供了许多有用的函数来可视化结果。例如,manhattan_hicexp 函数可以用来可视化 p 值(比如通过将方法参数设置为 addCLT),或者以曼哈顿图的形式展示差异相互作用的数量,从而识别沿染色体的差异相互作用区域的热点。

png("hicexp_chr2_ManhattanPlot_p-value.png")
Differential Analysis of Hi-C data 81
manhattan_hicexp(hicexp, method = "addCLT")
dev.off()

png("hicexp_chr2_ManhattanPlot_count.png")
manhattan_hicexp(hicexp, method = "count")
dev.off()
AI 代码解读
目录
打赏
0
12
13
7
340
分享
相关文章
200行python代码实现从Bigram模型到LLM
本文从零基础出发,逐步实现了一个类似GPT的Transformer模型。首先通过Bigram模型生成诗词,接着加入Positional Encoding实现位置信息编码,再引入Single Head Self-Attention机制计算token间的关系,并扩展到Multi-Head Self-Attention以增强表现力。随后添加FeedForward、Block结构、残差连接(Residual Connection)、投影(Projection)、层归一化(Layer Normalization)及Dropout等组件,最终调整超参数完成一个6层、6头、384维度的“0.0155B”模型
126 11
200行python代码实现从Bigram模型到LLM
《深入探秘:从底层搭建Python微服务之FastAPI与Docker部署》
FastAPI是一款基于Python 3.6+的现代、高性能Web框架,结合Starlette和Pydantic优势,支持异步编程,性能媲美Go与Node.js。它内置输入验证、依赖注入功能,自动生成交互式API文档,大幅提升开发效率与代码质量。Docker容器技术通过封装应用及其依赖,实现“一次构建,到处运行”,解决环境差异问题,提供轻量级、高效的部署方案。两者结合助力快速搭建稳定、高效的Python微服务架构,满足高并发与弹性伸缩需求,推动现代化应用开发。
104 9
《深入探秘:从底层搭建Python微服务之FastAPI与Docker部署》
ACK AI Profiling:从黑箱到透明的问题剖析
本文从一个通用的客户问题出发,描述了一个问题如何从前置排查到使用AI Profiling进行详细的排查,最后到问题定位与解决、业务执行过程的分析,从而展现一个从黑箱到透明的精细化的剖析过程。
除了MCP我们还有什么?
本文详细描述 agents.json ,涵盖了其背景、工作原理、与 OpenAPI 的关系等内容。
411 94
除了MCP我们还有什么?
【MCP教程系列】如何自己打包MCP服务并部署到阿里云百炼上
本文章以阿里云百炼的工作流为例,介绍如何将其封装为MCP服务并部署到平台。主要步骤包括:1)使用Node.js和TypeScript搭建MCP服务;2)将项目打包并发布至npm官方平台;3)在阿里云百炼平台创建自定义MCP服务;4)将服务添加到智能体中进行测试。通过这些步骤,您可以轻松实现工作流的MCP化,并在智能体中调用自定义服务。
2147 106
【MCP教程系列】如何自己打包MCP服务并部署到阿里云百炼上
日志采集效能跃迁:iLogtail 到 LoongCollector 的全面升级
LoongCollector 在日志场景中实现了全面的重磅升级,从功能、性能、稳定性等各个方面均进行了深度优化和提升,本文我们将对 LoongCollector 的升级进行详细介绍。
328 86
阿里巴巴 MCP 分布式落地实践:快速转换 HSF 到 MCP server
本文分享了阿里巴巴内部将大规模HSF服务快速转换为MCP Server的实践经验,通过Higress网关实现MCP协议卸载,无需修改代码即可接入MCP生态。文章分析了MCP生态面临的挑战,如协议快速迭代和SDK不稳定性,并详细介绍了操作步骤及组件功能。强调MCP虽非终极解决方案,但作为AI业务工程化的起点具有重要意义。最后总结指出,MCP只是AI原生应用发展的第一步,未来还有更多可能性值得探索。
847 50
阿里云 SLS 多云日志接入最佳实践:链路、成本与高可用性优化
本文探讨了如何高效、经济且可靠地将海外应用与基础设施日志统一采集至阿里云日志服务(SLS),解决全球化业务扩展中的关键挑战。重点介绍了高性能日志采集Agent(iLogtail/LoongCollector)在海外场景的应用,推荐使用LoongCollector以获得更优的稳定性和网络容错能力。同时分析了多种网络接入方案,包括公网直连、全球加速优化、阿里云内网及专线/CEN/VPN接入等,并提供了成本优化策略和多目标发送配置指导,帮助企业构建稳定、低成本、高可用的全球日志系统。
459 55
不到100行代码,实现一个简易通用智能LLM Agent
本文将分享如何使用不到 100 行的 Python 代码,实现一个具备通用智能潜力的简易 LLM Agent。你将看到整个实现过程——从核心原理、提示(Prompt)调优、工具接口设计到主循环交互,并获得完整复现代码的详细讲解。
620 101
不到100行代码,实现一个简易通用智能LLM Agent
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等