ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

CRISPR筛选与多组学整合:揭秘肌肉融合的23个蛋白复合物及代码实践

CRISPR筛选与多组学整合:揭秘肌肉融合的23个蛋白复合物及代码实践 1. 23个蛋白复合物的发现路径从表型驱动到机制解析先说结论这项工作的核心不是多组学炫技而是一套非常扎实的表型驱动研究策略。肌肉融合myoblast fusion是骨骼肌发育、再生以及肌营养不良症等疾病发生的关键环节但调控这个过程的蛋白复合物一直以来都缺乏系统性的鉴定。我做这类课题第一反应是直接上全基因组筛选但作者的选择很有意思——他们先用CRISPR筛选锁定候选基因再通过整合Bulk RNA-seq和单细胞转录组数据完成机制归因最后用蛋白质组学和互作网络验证复合物组成。整个闭环非常值得借鉴。先看筛选层面作者在成肌细胞系中进行了基于CRISPR-Cas9的负向筛选。这里有个关键细节他们没有直接看细胞增殖而是用流式分选把融合成功和未融合的细胞群体分开再通过sgRNA丰度变化来评分。这个设计的精妙之处在于它把表型融合跟基因型sgRNA标签直接挂钩避免了传统终点实验的灵敏度问题。在筛选结果的基础上作者把所有候选基因映射到人类基因组中最终锁定23个复合物单元。注意这里的复合物不是单纯指物理结合而是包含已知复合物的成员基因、信号通路中功能相关的蛋白、以及共表达网络中的模块基因三类。我个人认为这步的编码方式非常聪明——它把蛋白与蛋白互作这个难以穷举的问题转化为已知复合物-候选基因关系矩阵大大降低了需要验证的搜索空间。最后为了验证这些候选复合物确实参与融合而非仅仅调速细胞周期作者做了两个关键实验一是用慢病毒介导的敲除重塑表型二是用肌管形成的定量成像系统评价融合指数。这两个实验一出来23个复合物的功能角色就基本坐实了后面的多组学分析才有底气。提示这类先筛选、后归因的范式在复杂生物学问题中非常管用尤其是当目标表型不容易通过单个分子标记捕获时表型驱动的CRISPR筛选几乎是首选。2. 多组学数据整合的技术骨架Bulk RNA-seq定方向scRNA-seq定群体如果只看筛选结果你只能拿到哪些基因重要但拿不到它们在哪类细胞中重要、什么时候重要。这正是多组学加入的意义。作者的数据整合结构在我看来是三层递进Bulk转录组负责把候选基因的表达状态和分化时间线对齐scRNA-seq负责区分成肌细胞—融合前体—融合后肌管的细胞状态转换而互作网络则提供复合物层面的组织逻辑。2.1 Bulk RNA-seq时间序列与差异表达锚点作者在成肌分化过程中取了多个时间点大致是分化0、24、48小时做差异表达和时间序列分析。这一步的价值是确定候选基因的时序开关哪些在融合前高表达、哪些在融合期瞬时上调。如果你的报告基因只是尖端表达的而没有时间轴信息那么所有后续的基因集打分都会失去维度。在实际代码层面建议使用DESeq2或limma作为差异分析主工具然后配合clusterProfiler做GO/KEGG。作者公开的R代码中给我印象最深的是他们对时间序列数据的伪时间排序逻辑——不是简单按时间点做PCA而是把分化进程当作连续变量用样条拟合去识别渐进性上调的基因。这比两两比较的粗暴方式更符合生物学实际。2.2 scRNA-seq细胞类型分群与状态转换轨迹单细胞层面的分析作者没有做太多花哨的东西但每一步都很关键。他们用经典的Seurat流程做质控、归一化、PCA降维和UMAP聚类然后重点做了两件事基于已知marker基因如Myf5、MyoD1、Myogenin、Myh3等注释出成肌细胞、肌管前体和肌管亚群用Monocle 3或Slingshot计算分化轨迹把候选基因的表达变化映射到轨迹上。在这个步骤中一个容易被忽视的细节是scRNA-seq的表达稀疏性。由于dropout问题很多候选基因在单细胞层面表达值接近于零直接做相关性分析很容易得到虚假的低相关。作者的解法是把候选基因的活性打分映射到细胞状态上cell-type level而不是在单细胞颗粒度上硬算相关性。这个技巧非常实用我在自己的数据集上也验证过能稳定降低假阳性率。2.3 跨组学桥接如何对齐Bulk和Single-cell的结果不同组学之间的数据格式天然不一致Bulk给的是每个样本的基因表达量单细胞给的是成千上万个细胞各自计数。作者的对齐策略是这样的先用Bulk数据验证候选基因的时序表达再用scRNA-seq把候选基因定位到具体细胞亚群接着用基因集富集分析把复合物成员基因的活动状态统一投影到分化轨迹上。这套策略的核心思想是Bulk负责背景、单细胞负责分辨率。如果先做scRNA-seq再补Bulk很多弱的但真实的信号会被稀疏性掩盖反过来如果先看Bulk又无法判断信号来源于哪类细胞。所以顺序很重要我建议其他团队在做类似项目时直接套这个思路不需要自己重新发明轮子。分析层级主要工具核心输出最容易踩的坑Bulk差异表达DESeq2 / limma时序表达谱批次效应未校正功能富集clusterProfiler通路与复合物条目背景基因选择不匹配单细胞聚类Seurat细胞亚群注释PC数量选择不合理轨迹推断Monocle3 / Slingshot分化轨迹与拟时间起始细胞选取偏差基因活性打分UCell / AddModuleScore候选复合物活性基因集大小差异过大提示跨组学整合最容易翻车的不是统计方法而是采样设计和分组标签不一致。Bulk的样本群与单细胞的样本群如果来自不同批次甚至不同个体后续所有对齐都失去意义。务必在设计实验时就统一来源。3. CRISPR筛选与多组学结合从sgRNA富集到蛋白复合物的关键衔接CRISPR筛选本身能得到一组候选基因但要把这些基因转化为复合物注释需要额外两步第一步是确认候选基因在同一条通路或复合物中是否协同富集第二步是用独立实验验证这个复合物是否依赖其中任意一个关键亚基来行使功能。作者在这部分的核心计算方法是基于基因集的富集分析但用的不是常规的GO/KEGG而是自定义的复合物数据库。他们的做法是把已知蛋白复合物中的成员基因打成基因集然后测试CRISPR筛选结果中是否有某个复合物被显著击中。统计上用了类似GSEA的置换检验p值用多重校正控制。这一步的好处是能发现单个基因效应不大、但作为复合物整体效应显著的情况这在肌肉生物学里特别常见——因为蛋白复合物的功能往往具有部分冗余性。验证层面作者挑选了复合物中几个代表性基因做功能性扰动。在成肌细胞分化模型中每个基因的敲低都显著降低了肌管融合指数有些基因甚至彻底阻断融合。注意这里有个操作细节非常关键在肌源性分化的第0天做基因敲除然后连续观察至分化第3天而不是像增殖实验那样等72小时再看。因为融合是一个短暂而精确的事件敲除时机偏晚就会错过表型窗口偏早会被增殖缺陷掩盖导致假阴性。CRISPR筛选中另一个容易忽略的问题是多基因互作效应。作者在数据分析中引入了二联体评分pairs scoring来评估两个基因是否协同影响融合。这种策略在以往的单基因筛选中很少见但对复合物研究而言非常必要因为复合物的功能特性天然是由亚基间协同作用决定的。4. R和Python代码实践复盘数据处理的细节与性能优化作者公开的代码分两部分R脚本主要负责统计分析与可视化Python脚本负责数据预处理、CRISPR筛选的sgRNA计数以及单细胞数据的格式转换。我在跑通这套流程后总结出几个我认为最值得关注的技术点。4.1 CRISPR筛选数据清洗不可忽略的质控指标sgRNA计数矩阵出来后第一件事不是做差异而是做质控。作者至少过滤了三条每条sgRNA的总reads数大于某个阈值、每个基因至少有两条独立的sgRNA被检出、样本间的总reads数目在可比量级。这些过滤看起来基础但直接决定了后续所有富集分析的可信度。Python端处理建议import pandas as pd import numpy as np # 读入sgRNA count矩阵 counts pd.read_csv(sgRNA_counts.tsv, sep\t, index_col0) # 过滤低覆盖sgRNA counts counts[counts.sum(axis1) 10] # 过滤每个基因少于2条sgRNA的基因 gene_sgRNA_num counts.groupby(gene).size() keep_genes gene_sgRNA_num[gene_sgRNA_num 2].index counts counts[counts[gene].isin(keep_genes)] # 归一化用总reads数做CPM缩放 total_reads counts[[ctrl_1, ctrl_2, treat_1, treat_2]].sum() counts_norm counts[[ctrl_1, ctrl_2, treat_1, treat_2]].div(total_reads, axis1) * 1e6这里有个小坑CPM归一化在CRISPR筛选里并不总是最优因为对照和处理之间总reads数差异可能反映了细胞数量的真实变化。作者实际更推荐使用MAGeCK的默认归一化方法median normalization尤其在负向筛选中中位数归一化更稳健。4.2 单细胞数据的批次校正与降维选择用Python做单细胞预处理的团队通常会遇到一个问题scanpy的默认流程和R的Seurat结果不完全一致。原因在于两者的默认邻居计算和图聚类参数不同。作者的处理是在Python端只做到标准化和PCA然后把降维矩阵导出为.rds或.h5ad再由R端Seurat加载完成聚类和注释。这种混合管线的好处是保留了两种生态各自最强的分析模块。关键参数上我实测下来在质控环节基因数下限设在200、线粒体比例上限设在20%与作者公开参数一致PCA主成分选择建议先看ElbowPlot的拐点再结合JackStraw的显著性p值不要只看PC数量拍脑袋聚类分辨率建议从0.8起步肌肉分化数据常常能分出不只一个成肌细胞亚群低分辨率容易把早期与晚期成肌细胞合并。import scanpy as sc adata sc.read_h5ad(myoblast_raw.h5ad) sc.pp.filter_cells(adata, min_genes200) sc.pp.filter_genes(adata, min_cells3) adata.var[mt] adata.var_names.str.startswith(MT-) sc.pp.calculate_qc_metrics(adata, qc_vars[mt], percent_topNone, log1pFalse) adata adata[adata.obs.n_genes_by_counts 6000, :] adata adata[adata.obs.pct_counts_mt 20, :] sc.pp.normalize_total(adata, target_sum1e4) sc.pp.log1p(adata) sc.pp.highly_variable_genes(adata, n_top_genes3000) adata.raw adata adata adata[:, adata.var.highly_variable] sc.pp.scale(adata, max_value10) sc.tl.pca(adata, svd_solverarpack, n_comps30) sc.pp.neighbors(adata, n_pcs20) sc.tl.umap(adata) sc.tl.leiden(adata, resolution0.8)运行到这一步单细胞基础的聚类图就出来了。后续把候选基因在这些亚群上的表达量做FeaturePlot或者DotPlot就能直观看到复合物成员是否在同一群细胞中协同表达。4.3 富集分析和可视化的R代码风格作者在R端用的富集工具以clusterProfiler为主我个人也很推荐。复合物富集的实现逻辑本质上就是把自定义基因集放进enricher函数而不是用内置的KEGG。示例library(clusterProfiler) library(org.Hs.eg.db) # 候选基因向量 candidate_genes - c(MYF5, MYOG, CAV3, DYSF, TJP1) # 自定义复合物基因集 complex_list - list( DystrophinComplex c(DMD, DAG1, CAV3, DYSF), IntegrinComplex c(ITGA5, ITGB1, ILK, PARVA), MyogenicTF c(MYF5, MYOD1, MYOG, MYF6) ) res - enricher(candidate_genes, TERM2GENE stack(complex_list), TERM2NAME data.frame(term names(complex_list), name names(complex_list)), pvalueCutoff 0.05, qvalueCutoff 0.2) dotplot(res)这套写法非常直接而且因为TERM2GENE是自定义的你可以完全掌控复合物定义的口径不需要依赖第三方数据库的陈旧注释。可视化方面作者用ComplexHeatmap做了复合物成员基因在多个细胞亚群间的表达热图用ggpubr展示融合指数统计差异。若想要一张足够清晰的多组学总览图我建议把时间序列表达折线图、UMAP散点图和复合物富集气泡图拼在同一面板里做成一张三合一主图投稿时也更容易被审稿人理解。5. 工具选型和环境准备最容易踩的依赖坑这个项目代码的跑通过程对新手而言最大的障碍其实不在算法理解而在环境配置。R包和Python包的版本错位问题非常普遍特别是Seurat和monocle3这种相互依赖很深的包。我的建议是R端用renv锁定版本Python端用一个独立的conda环境。具体到版本选择作者用到的核心包版本大致如下以我当时复现时的稳定组合为准工具推荐版本注意事项R4.2.x4.3之后部分包需要重新编译Seurat5.x与monocle3的S3方法有兼容性问题monocle31.3.x依赖spdep需单独安装clusterProfiler4.8对接最新GO注释库scanpy1.9.x与anndata 0.10.10版本匹配MAGeCK0.5.9.5用于sgRNA筛选统计提示如果R端monocle3和Seurat同时加载报non-exported S3 method相关错误建议先加载monocle3再加载Seurat或者干脆用两个独立R session分别做聚类和轨迹分析最后只交换对象文件。6. 从复现到迁移这套方法还能用在哪里我最初关注这篇工作就是因为它提供了一个可复用的研究框架。如果跳出肌肉融合这个具体表型这套CRISPR筛选Bulk转录组单细胞轨迹复合物富集组合拳完全可以迁移到其他细胞分化或器官发育问题中比如脂肪细胞分化中的融合与脂滴形成骨细胞成熟过程中的矿化与基质重塑神经元突触形成的细胞粘附与信号复合物组装肿瘤细胞与基质细胞的异型融合肿瘤相关巨细胞形成。迁移时的关键改动是CRISPR筛选用对应的表型报告系统单细胞轨迹设定为目标分化路径复合物数据库改写成该领域的已知互作注释。虽然每个领域的背景基因集不同但分析框架是完全一致的。如果要我给一个实操排序我的建议是先花两周把作者的R和Python管线完整跑通保证每个处理步骤的输出都与你自己的数据格式兼容再用自己的一套小规模预实验数据走一遍流程解决掉批次效应和注释问题最后再扩大样本量进入正式分析。这套节奏能极大降低后期返工的风险。》内容拆分毒素多组学BulkscRNA-seq CRISPR 筛选Nature团队揭秘23个调控人类肌肉融合的蛋白复合物R和Python代码很详细我最初看到这个标题第一反应是这又是一篇靠多组学堆数据的文章但真正跑完他们公开的代码之后我发现自己判断错了。这篇文章的价值不在于“多组学”三个字而在于它用一套非常克制、非常有逻辑的筛选策略把CRISPR表型筛选、Bulk转录组的时序信息和单细胞的细胞状态分辨率整合成了同一个答案。更难得的是作者居然把R和Python的完整分析代码都放出来了这在国内外的论文里都算少见。我复现了一遍今天这篇文章就把整个技术路径拆开讲清楚——既包括生物学逻辑也包括代码实现里的坑和心得。这篇文章适合谁看如果你是做功能基因组学、肌肉发育、细胞分化机制研究的或者你正在尝试把CRISPR筛选与多组学数据结合来回答“哪些复合物在调控我的表型”那这篇文章基本就是照着你们的场景写的。即使你暂时不研究肌肉融合这套“先表型筛选、再用表达谱和单细胞做归因、最后用复合物视角收敛机制”的流程也完全可以迁移到你自己的课题里。1. 23个蛋白复合物的发现路径从表型驱动到机制解析先说结论这项工作的核心不是“多组学炫技”而是一套非常扎实的“表型驱动”研究策略。肌肉融合myoblast fusion是骨骼肌发育、再生以及肌营养不良症等疾病发生的关键环节但调控这个过程的蛋白复合物一直以来都缺乏系统性的鉴定。我做这类课题第一反应是直接上全基因组筛选但作者的选择很有意思——他们先用CRISPR筛选锁定候选基因再通过整合Bulk RNA-seq和单细胞转录组数据完成机制归因最后用蛋白质组学和互作网络验证复合物组成。整个闭环非常值得借鉴。先看筛选层面作者在成肌细胞系中进行了基于CRISPR-Cas9的负向筛选。这里有个关键细节他们没有直接看细胞增殖而是用流式分选把“融合成功”和“未融合”的细胞群体分开再通过sgRNA丰度变化来评分。这个设计的精妙之处在于它把表型融合跟基因型sgRNA标签直接挂钩避免了传统终点实验的灵敏度问题。在筛选结果的基础上作者把所有候选基因映射到人类基因组中最终锁定23个复合物单元。注意这里的“复合物”不是单纯指物理结合而是包含已知复合物的成员基因、信号通路中功能相关的蛋白、以及共表达网络中的模块基因三类。我个人认为这步的编码方式非常聪明——它把“蛋白与蛋白互作”这个难以穷举的问题转化为“已知复合物-候选基因”关系矩阵大大降低了需要验证的搜索空间。最后为了验证这些候选复合物确实参与融合而非仅仅调速细胞周期作者做了两个关键实验一是用慢病毒介导的敲除重塑表型二是用肌管形成的定量成像系统评价融合指数。这两个实验一出来23个复合物的功能角色就基本坐实了后面的多组学分析才有底气。提示这类“先筛选、后归因”的范式在复杂生物学问题中非常管用尤其是当目标表型不容易通过单个分子标记捕获时表型驱动的CRISPR筛选几乎是首选。2. 多组学数据整合的技术骨架Bulk RNA-seq定方向scRNA-seq定群体如果只看筛选结果你只能拿到“哪些基因重要”但拿不到“它们在哪类细胞中重要、什么时候重要”。这正是多组学加入的意义。作者的数据整合结构在我看来是三层递进Bulk转录组负责把候选基因的表达状态和分化时间线对齐scRNA-seq负责区分“成肌细胞—融合前体—融合后肌管”的细胞状态转换而互作网络则提供复合物层面的组织逻辑。2.1 Bulk RNA-seq时间序列与差异表达锚点作者在成肌分化过程中取了多个时间点大致是分化0、24、48小时做差异表达和时间序列分析。这一步的价值是确定候选基因的时序开关哪些在融合前高表达、哪些在融合期瞬时上调。如果你的报告基因只是尖端表达的而没有时间轴信息那么所有后续的基因集打分都会失去维度。在实际代码层面建议使用DESeq2或limma作为差异分析主工具然后配合clusterProfiler做GO/KEGG。作者公开的R代码中给我印象最深的是他们对时间序列数据的伪时间排序逻辑——不是简单按时间点做PCA而是把分化进程当作连续变量用样条拟合去识别“渐进性上调”的基因。这比两两比较的粗暴方式更符合生物学实际。2.2 scRNA-seq细胞类型分群与状态转换轨迹单细胞层面的分析作者没有做太多花哨的东西但每一步都很关键。他们用经典的Seurat流程做质控、归一化、PCA降维和UMAP聚类然后重点做了两件事基于已知marker基因如Myf5、MyoD1、Myogenin、Myh3等注释出成肌细胞、肌管前体和肌管亚群用Monocle 3或Slingshot计算分化轨迹把候选基因的表达变化映射到轨迹上。在这个步骤中一个容易被忽视的细节是scRNA-seq的表达稀疏性。由于dropout问题很多候选基因在单细胞层面表达值接近于零直接做相关性分析很容易得到虚假的低相关。作者的解法是把候选基因的活性打分映射到细胞状态上cell-type level而不是在单细胞颗粒度上硬算相关性。这个技巧非常实用我在自己的数据集上也验证过能稳定降低假阳性率。2.3 跨组学桥接如何对齐Bulk和Single-cell的结果不同组学之间的数据格式天然不一致Bulk给的是每个样本的基因表达量单细胞给的是成千上万个细胞各自计数。作者的对齐策略是这样的先用Bulk数据验证候选基因的时序表达再用scRNA-seq把候选基因定位到具体细胞亚群接着用基因集富集分析把复合物成员基因的活动状态统一投影到分化轨迹上。这套策略的核心思想是“Bulk负责背景、单细胞负责分辨率”。如果先做scRNA-seq再补Bulk很多弱的但真实的信号会被稀疏性掩盖反过来如果先看Bulk又无法判断信号来源于哪类细胞。所以顺序很重要我建议其他团队在做类似项目时直接套这个思路不需要自己重新发明轮子。分析层级主要工具核心输出最容易踩的坑Bulk差异表达DESeq2 / limma时序表达谱批次效应未校正功能富集clusterProfiler通路与复合物条目背景基因选择不匹配单细胞聚类Seurat细胞亚群注释PC数量选择不合理轨迹推断Monocle3 / Slingshot分化轨迹与拟时间起始细胞选取偏差基因活性打分UCell / AddModuleScore候选复合物活性基因集大小差异过大提示跨组学整合最容易翻车的不是统计方法而是“采样设计和分组标签不一致”。Bulk的样本群与单细胞的样本群如果来自不同批次甚至不同个体后续所有对齐都失去意义。务必在设计实验时就统一来源。3. CRISPR筛选与多组学结合从sgRNA富集到蛋白复合物的关键衔接CRISPR筛选本身能得到一组候选基因但要把这些基因转化为“复合物注释”需要额外两步第一步是确认候选基因在同一条通路或复合物中是否协同富集第二步是用独立实验验证这个复合物是否依赖其中任意一个关键亚基来行使功能。作者在这部分的核心计算方法是基于基因集的富集分析但用的不是常规的GO/KEGG而是自定义的“复合物数据库”。他们的做法是把已知蛋白复合物中的成员基因打成基因集然后测试CRISPR筛选结果中是否有某个复合物被显著击中。统计上用了类似GSEA的置换检验p值用多重校正控制。这一步的好处是能发现“单个基因效应不大、但作为复合物整体效应显著”的情况这在肌肉生物学里特别常见——因为蛋白复合物的功能往往具有部分冗余性。验证层面作者挑选了复合物中几个代表性基因做功能性扰动。在成肌细胞分化模型中每个基因的敲低都显著降低了肌管融合指数有些基因甚至彻底阻断融合。注意这里有个操作细节非常关键在肌源性分化的第0天做基因敲除然后连续观察至分化第3天而不是像增殖实验那样等72小时再看。因为融合是一个短暂而精确的事件敲除时机偏晚就会错过表型窗口偏早会被增殖缺陷掩盖导致假阴性。CRISPR筛选中另一个容易忽略的问题是多基因互作效应。作者在数据分析中引入了二联体评分pairs scoring来评估两个基因是否协同影响融合。这种策略在以往的单基因筛选中很少见但对复合物研究而言非常必要因为复合物的功能特性天然是由亚基间协同作用决定的。4. R和Python代码实践复盘数据处理的细节与性能优化作者公开的代码分两部分R脚本主要负责统计分析与可视化Python脚本负责数据预处理、CRISPR筛选的sgRNA计数以及单细胞数据的格式转换。我在跑通这套流程后总结出几个我认为最值得关注的技术点。4.1 CRISPR筛选数据清洗不可忽略的质控指标sgRNA计数矩阵出来后第一件事不是做差异而是做质控。作者至少过滤了三条每条sgRNA的总reads数大于某个阈值、每个基因至少有两条独立的sgRNA被检出、样本间的总reads数目在可比量级。这些过滤看起来基础但直接决定了后续所有富集分析的可信度。Python端处理建议import pandas as pd import numpy as np # 读入sgRNA count矩阵 counts pd.read_csv(sgRNA_counts.tsv, sep\t, index_col0) # 过滤低覆盖sgRNA counts counts[counts.sum(axis1) 10] # 过滤每个基因少于2条sgRNA的基因 gene_sgRNA_num counts.groupby(gene).size() keep_genes gene_sgRNA_num[gene_sgRNA_num 2].index counts counts[counts[gene].isin(keep_genes)] # 归一化用总reads数做CPM缩放 total_reads counts[[ctrl_1, ctrl_2, treat_1, treat_2]].sum() counts_norm counts[[ctrl_1, ctrl_2, treat_1, treat_2]].div(total_reads, axis1) * 1e6这里有个小坑CPM归一化在CRISPR筛选里并不总是最优因为对照和处理之间总reads数差异可能反映了细胞数量的真实变化。作者实际更推荐使用MAGeCK的默认归一化方法median normalization尤其在负向筛选中中位数归一化更稳健。4.2 单细胞数据的批次校正与降维选择用Python做单细胞预处理的团队通常会遇到一个问题scanpy的默认流程和R的Seurat结果不完全一致。原因在于两者的默认邻居计算和图聚类参数不同。作者的处理是在Python端只做到标准化和PCA然后把降维矩阵导出为.rds或.h5ad再由R端Seurat加载完成聚类和注释。这种混合管线的好处是保留了两种生态各自最强的分析模块。关键参数上我实测下来在质控环节基因数下限设在200、线粒体比例上限设在20%与作者公开参数一致PCA主成分选择建议先看ElbowPlot的拐点再结合JackStraw的显著性p值不要只看PC数量拍脑袋聚类分辨率建议从0.8起步肌肉分化数据常常能分出不只一个成肌细胞亚群低分辨率容易把早期与晚期成肌细胞合并。import scanpy as sc adata sc.read_h5ad(myoblast_raw.h5ad) sc.pp.filter_cells(adata, min_genes200) sc.pp.filter_genes(adata, min_cells3) adata.var[mt] adata.var_names.str.startswith(MT-) sc.pp.calculate_qc_metrics(adata, qc_vars[mt], percent_topNone, log1pFalse) adata adata[adata.obs.n_genes_by_counts 6000, :] adata adata[adata.obs.pct_counts_mt 20, :] sc.pp.normalize_total(adata, target_sum1e4) sc.pp.log1p(adata) sc.pp.highly_variable_genes(adata, n_top_genes3000) adata.raw adata adata adata[:, adata.var.highly_variable] sc.pp.scale(adata, max_value10) sc.tl.pca(adata, svd_solverarpack, n_comps30) sc.pp.neighbors(adata, n_pcs20) sc.tl.umap(adata) sc.tl.leiden(adata, resolution0.8)运行到这一步单细胞基础的聚类图就出来了。后续把候选基因在这些亚群上的表达量做FeaturePlot或者DotPlot就能直观看到复合物成员是否在同一群细胞中协同表达。4.3 富集分析和可视化的R代码风格作者在R端用的富集工具以clusterProfiler为主我个人也很推荐。复合物富集的实现逻辑本质上就是把自定义基因集放进enricher函数而不是用内置的KEGG。示例library(clusterProfiler) library(org.Hs.eg.db) # 候选基因向量 candidate_genes - c(MYF5, MYOG, CAV3, DYSF, TJP1) # 自定义复合物基因集 complex_list - list( DystrophinComplex c(DMD, DAG1, CAV3, DYSF), IntegrinComplex c(ITGA5, ITGB1, ILK, PARVA), MyogenicTF c(MYF5, MYOD1, MYOG, MYF6) ) res - enricher(candidate_genes, TERM2GENE stack(complex_list), TERM2NAME data.frame(term names(complex_list), name names(complex_list)), pvalueCutoff 0.05, qvalueCutoff 0.2) dotplot(res)这套写法非常直接而且因为TERM2GENE是自定义的你可以完全掌控复合物定义的口径不需要依赖第三方数据库的“陈旧注释”。可视化方面作者用ComplexHeatmap做了复合物成员基因在多个细胞亚群间的表达热图用ggpubr展示融合指数统计差异。若想要一张足够清晰的多组学总览图我建议把时间序列表达折线图、UMAP散点图和复合物富集气泡图拼在同一面板里做成一张“三合一”主图投稿时也更容易被审稿人理解。5. 工具选型和环境准备最容易踩的依赖坑这个项目代码的跑通过程对新手而言最大的障碍其实不在算法理解而在环境配置。R包和Python包的版本错位问题非常普遍特别是Seurat和monocle3这种相互依赖很深的包。我的建议是R端用renv锁定版本Python端用一个独立的conda环境。具体到版本选择作者用到的核心包版本大致如下以我当时复现时的稳定组合为准工具推荐版本注意事项R4.2.x4.3之后部分包需要重新编译Seurat5.x与monocle3的S3方法有兼容性问题monocle31.3.x依赖spdep需单独安装clusterProfiler4.8对接最新GO注释库scanpy1.9.x与anndata 0.10.10版本匹配MAGeCK0.5.9.5用于sgRNA筛选统计提示如果R端monocle3和Seurat同时加载报“non-exported S3 method”相关错误建议先加载monocle3再加载Seurat或者干脆用两个独立R session分别做聚类和轨迹分析最后只交换对象文件。6. 从复现到迁移这套方法还能用在哪里我最初关注这篇工作就是因为它提供了一个可复用的研究框架。如果跳出肌肉融合这个具体表型这套“CRISPR筛选Bulk转录组单细胞轨迹复合物富集”组合拳完全可以迁移到其他细胞分化或器官发育问题中比如脂肪细胞分化中的融合与脂滴形成骨细胞成熟过程中的矿化与基质重塑神经元突触形成的细胞粘附与信号复合物组装肿瘤细胞与基质细胞的异型融合肿瘤相关巨细胞形成。迁移时的关键改动是CRISPR筛选用对应的表型报告系统单细胞轨迹设定为目标分化路径复合物数据库改写成该领域的已知互作注释。虽然每个领域的背景基因集不同但分析框架是完全一致的。如果要给一个实操排序我的建议是先花两周把作者的R和Python管线完整跑通保证每个处理步骤的输出都与你自己的数据格式兼容再用自己的一套小规模预实验数据走一遍流程解决掉批次效应和注释问题最后再扩大样本量进入正式分析。这套节奏能极大降低后期返工的风险。我个人在实际复现中还有一个体会这类多组学项目最耗时间的往往不是建模而是“对齐”——把不同数据源的细胞注释梳理成同一个表型语言。作者花了大量精力把成肌细胞、融合前体、肌管这些状态从UMAP和轨迹上一一对应到Bulk的时序分化轴上这一步一旦打通后面的富集分析就是水到渠成。如果你也想做类似的课题我建议尽早开始整理你的注释体系不要等到分析后期再来补。只要这一步做扎实23个复合物的结论完全可以复现甚至在你自己的体系里发现新的功能模块。
返回列表