1. 空间组学联合分析中的多层级映射原理
在空间组学研究中,Level1(L1)通常代表最高分辨率的空间数据层级。当我们完成了L1层级的空间ATAC-seq(染色质可及性)与空间转录组数据的spot映射后,如何将这种映射关系传递到其他分辨率层级(如L2-L18)就成为一个关键技术问题。
这个映射过程的本质是建立不同分辨率下空间单元(spot)之间的对应关系。其核心原理可以概括为:
- 每个高层级spot都是由多个低层级spot聚合而成
- 这种聚合关系在ATAC和RNA数据中是独立建立的
- 通过L1层级的映射关系作为桥梁,可以推导出其他层级的对应关系
关键点:所有层级的映射关系都依赖于L1层级的准确性,因此L1层级的质量控制至关重要。
2. 数据准备与文件结构解析
2.1 必需输入文件
进行多层级映射需要准备三类核心文件:
-
RNA层级矩阵:
- 路径示例:
/path/to/05.AllheStat/BSTViewer_project/level_matrix - 包含从L1到L18各层级的
barcodes_cluster.tsv.gz文件 - 文件结构:
code复制level_1/ └── barcodes_cluster.tsv.gz level_2/ └── barcodes_cluster.tsv.gz ... level_18/ └── barcodes_cluster.tsv.gz
- 路径示例:
-
ATAC层级矩阵:
- 路径示例:
/path/to/03.AllheStat/level_matrix - 结构与RNA层级矩阵类似,但来自ATAC数据分析流程
- 路径示例:
-
L1层级的RNA-ATAC映射关系:
- 文件格式:CSV
- 包含两列:
L1_ATAC和L1_RNA - 示例内容:
code复制L1_ATAC,L1_RNA L1_0,L1_10 L1_1,L1_15 ...
2.2 文件内容解析
以barcodes_cluster.tsv.gz为例,其实际内容结构为:
code复制AAACCCAAGGGGTTTT-1 0
AAACCCAAGGGGTTTT-2 1
...
第一列为barcode序列,第二列为该barcode所属的cluster编号(从0开始)
3. 映射脚本详解与实操指南
3.1 脚本参数说明
百创智造提供的R脚本L1_L-all_trasform_relation.r接受以下参数:
| 参数 | 说明 | 示例值 |
|---|---|---|
--rna_level_matrix |
RNA层级矩阵目录 | /path/to/05.AllheStat/BSTViewer_project/level_matrix |
--atac_level_matrix |
ATAC层级矩阵目录 | /path/to/03.AllheStat/level_matrix |
--L1_RNA_ATAC_path |
L1映射关系文件 | /path/to/L1_ATAC-RNA_barcode_relations_ALL.csv |
--outdir |
输出目录 | /path/to/outdir |
3.2 脚本执行示例
完整执行命令:
bash复制Rscript L1_L-all_trasform_relation.r \
--rna_level_matrix /path/to/05.AllheStat/BSTViewer_project/level_matrix \
--atac_level_matrix /path/to/03.AllheStat/level_matrix \
--L1_RNA_ATAC_path /path/to/L1_ATAC-RNA_barcode_relations_ALL.csv \
--outdir /path/to/outdir
3.3 核心算法流程
脚本执行的主要逻辑流程:
-
读取L1层级的barcode-cluster映射:
r复制L1_RNA_df = read.delim(paste0(rna_level_matrix, '/level_1','/barcodes_cluster.tsv.gz'), ...) L1_ATAC_df = read.delim(paste0(atac_level_matrix,'/level_1','/barcodes_cluster.tsv.gz'), ...) -
遍历各目标层级(L2-L18):
r复制keys = c('L5','L7','L9','L18','L2','L3','L4','L6') for (key in keys){ level = substring(key, 2) ... } -
建立L1到目标层级的映射:
- 对于RNA数据:
r复制LX_RNA_df <- read.delim(paste0(rna_level_matrix, '/level_',level,'/barcodes_cluster.tsv.gz'), ...) L1_LX_RNA =left_join(L1_RNA_df,LX_RNA_df) - 对于ATAC数据同理
- 对于RNA数据:
-
整合RNA和ATAC的映射关系:
r复制df = left_join(L1_LX_RNA,RNA_ATAC) df = left_join(df,L1_LX_ATAC) -
输出最终映射结果:
r复制write.csv(df, paste0(outdir, '/',key,'_ATAC-RNA_barcode_relations_ALL.csv'), ...)
4. 关键技术细节与注意事项
4.1 索引编号调整
脚本中有一个关键细节需要注意:
r复制LX_RNA_df[,2] = LX_RNA_df[,2] -1 # 集群编号从0开始
L1_RNA_df[,2]= L1_RNA_df[,2] -1
这是因为在R中默认从1开始计数,而实际聚类编号通常从0开始,需要进行调整。
4.2 数据一致性检查
脚本中包含了数据一致性检查:
r复制intersect_RNA = intersect(L1_LX_RNA$L1_RNA,RNA_ATAC$L1_RNA)
intersect_ATAC = intersect(L1_LX_ATAC$L1_ATAC,RNA_ATAC$L1_ATAC)
这一步确保只保留在两个数据集中都存在的barcode,避免映射错误。
4.3 去重处理
最终输出前进行了去重处理:
r复制df = df %>% distinct(!!sym(col_rna), .keep_all = TRUE)
这是为了防止一个RNA spot映射到多个ATAC spot的情况。
5. 常见问题与解决方案
5.1 文件路径错误
问题表现:
code复制Error in file(file, "rt") : cannot open the connection
解决方案:
- 检查所有输入路径是否存在
- 确保有读取权限
- 特别注意路径中的特殊字符和空格
5.2 内存不足
问题表现:
code复制Error: cannot allocate vector of size...
优化建议:
- 对于大数据集,可以分批次处理不同层级
- 增加服务器内存
- 使用
data.table替代data.frame提高效率
5.3 映射结果不完整
排查步骤:
- 检查L1映射文件的完整性
- 验证各层级矩阵是否包含所有barcode
- 检查脚本中的
intersect操作是否过滤过多数据
6. 结果解读与应用
6.1 输出文件格式
每个层级会生成一个CSV文件,例如L5_ATAC-RNA_barcode_relations_ALL.csv,包含两列:
atac_barcode: ATAC数据的spot标识rna_barcode: RNA数据的对应spot标识
6.2 下游分析建议
获得多层级映射关系后,可以进行:
- 跨层级差异分析
- 分辨率缩放效应研究
- 多尺度空间共定位分析
在实际分析中,我通常会先验证L5和L7层级的结果,因为这两个层级通常能平衡分辨率和信噪比。对于特别关注细微结构的研究,可以重点考察L2-L4层级;而对于组织整体模式分析,L9-L18可能更为合适。
这个脚本的一个实用技巧是在处理前先检查各层级的spot数量分布,如果发现某个层级的spot数量异常(比如远多于或少于相邻层级),可能需要检查上游聚类参数是否合理。另外,在内存有限的情况下,可以修改脚本分批处理层级,而不是一次性处理所有层级。