ARTICLE DETAIL

资讯详情

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

差异基因PPI网络构建与Cytoscape可视化分析实操指南

差异基因PPI网络构建与Cytoscape可视化分析实操指南 1. 拿到表达差异基因后为什么要自己动手搭PPI网络1.1 PPI网络能帮你回答什么问题我刚做生信分析那阵子最常见的场景是这样的上游跑完转录组差异表达筛出一两百个显著性基因然后呢如果只是把这串基因符号往String数据库里一贴点一下Search下载一张密密麻麻的网络图截到PPT里这个分析基本就算“完成”了。但坦白讲这样做出来的结果既没法继续深入挖机制也经不起审稿人追问。PPI网络也就是蛋白质-蛋白质相互作用网络本质上是在回答一个问题你手上这组基因对应的蛋白在细胞里是不是倾向于“抱团工作”。如果它们之间存在显著的互作富集说明这些基因很可能参与同一个生物学过程而不是一堆互不相干的零散分子。通过PPI网络你可以进一步定位哪些蛋白处在网络中心、哪些蛋白是连接多个功能模块的桥梁再结合功能富集分析把“基因列表”变成一个可解释的“调控模型”。1.2 为什么不全靠String在线出图String是很优秀的数据库它整合了实验数据、数据库注释、共表达、文本挖掘等多个证据来源给每一对蛋白之间的互作打一个综合分数。但它在网络分析层面是偏“检索”的不是偏“分析”的。它可以在线展示网络可一旦基因数量超过几百个网页端的布局、筛选、样式调整能力就很受限更不用说计算NetworkAnalyzer这类拓扑指标了。而Cytoscape的价值在于它把网络从“一张图”变成了“一张可以操作的表”。你把互作数据导入Cytoscape之后每个节点和每条边都对应着属性表可以按度值排序、按分数筛选、用不同算法挖模块、把关键节点单独提取出来做成子网络。这些操作在String网页端基本做不到或者操作起来非常别扭。1.3 这篇内容适合谁如果你正在做转录组、蛋白组、单细胞或任何会产生基因列表的实验并且接下来想把这份基因列表讲到“功能机制”层面那么这篇文章就是给你准备的。我会按真实操作顺序把String检索、数据导出、Cytoscape导入、拓扑分析、hub基因筛选和模块挖掘整条链路走一遍每一步都讲清楚“为什么要这么做”以及“我踩过的坑是什么”。就算你是第一次接触网络分析跟着操作也能在半小时内得到一张能直接用、能继续深挖的PPI网络图。2. String端检索实操参数、导出和那一串关键按钮2.1 查询前先把基因列表洗一遍很多人的String查询失败不是String的问题是输入的基因列表本身不干净。我在实际分析中拿到差异基因列表后第一件事永远是做三件事去重、统一symbol、检查物种来源。去重很好理解同一个基因在差异表中可能出现两次。但容易被忽略的是别名问题。同一个基因在不同数据库里的symbol可能不一样直接拿原始别名去查询String会有一部分基因匹配不上最后网络节点数和你的输入基因数对不上就容易怀疑人生。建议先做一遍ID转换把基因统一到官方symbol。比如人的基因尽量用NCBI Gene或Ensembl的标准写法测序公司给注释表里通常带着Entrez ID、Ensembl ID和Gene Symbol三列拿Gene Symbol去String查询之前最好人工扫一眼有没有奇怪写法。还有一个很低级但确实会犯的错把人和小鼠的基因混在同一个列表里。String的物种识别是按整个列表判定的如果你混入了一个其他物种的基因要么显著降低匹配率要么直接报错。不同来源的样本、不同参考基因组注释出的基因合并之前一定要确认版本一致。2.2 物种、置信度和多余节点怎么选进入String主页之后选择“Search”页面类型选“Multiple proteins”把基因列表粘贴进去。物种选择是第一个关键点。下拉框里选Homo sapiens之后String会自动用这个物种的基因命名空间去解析列表。如果你在人的列表里混了一个只有小鼠才有的基因那个基因会被静默丢弃不会弹出红色警告这是很多人做完之后发现节点少了几十个却找不到原因的地方。第二个关键点是置信度阈值。String的combined_score范围是0到1代表数据库对这对蛋白存在互作关系的综合信心。网页端Settings里默认是medium confidence也就是0.400。这个数值是我个人最推荐的起点阈值对应档位适用场景0.150low探索性分析想看弱证据互作但噪声很大0.400medium常规项目首选平衡互作数量与可信度0.700high只关注高可信互作网络更精简适合严格验证如果你的差异基因数量很少比如只有二三十个0.400阈值下可能只有几条边那可以适当降到0.150看看弱证据如果基因超过500个0.400会生成一张几千条边的巨型网络这时候建议直接上0.700。请注意threshold只是过滤掉低于阈值的边并不会改变边分数本身。第三个选项是“include interim proteins”也就是要不要引入中间蛋白。这个选项默认是关闭的保持默认就行。开启后String会在你的输入基因之间的互作路径上补充一些“中间人蛋白”这些中间蛋白并不是你输入的基因却会被加进网络。做机制探索时可以尝试但做差异基因网络分析时不建议开因为它是把数据库的先验知识强塞进了你的结果汇报时容易被质疑。2.3 导出哪种格式给Cytoscape用网络生成后页面上方会出现一列导出选项我的建议是分用途选择。如果只是想快速看一眼网络长什么样直接下载PNG就行如果要投稿SVG比PNG好得多矢量图放进AI或Inkscape里可以无限放大不失真。但如果要进Cytoscape做正式分析我的第一选择是导出TSV制表符分隔的文件。这个文件包含每一对互作的节点名称、STRING内部ID、基因名和combined_score。在String的导出列表里找到类似“as simple tabular text output”的选项下载后就是一个纯文本文件每一行是一条边非常适合后续处理。新手也可以直接下载GML或XGMML格式导入Cytoscape这两种格式的好处是可以保留String网页端的大部分样式导入之后网络图就已经“成型”了。但代价是你的样式被String默认方案绑死了后续想自定义节点颜色和布局反而更麻烦。所以我自己几乎只用TSV导入所有样式从头开始设这样每张图最后长什么样完全由自己控制。另外无论导出哪种格式我都建议顺手把搜索结果页的PPI enrichment p-value记下来。这个p值代表你的输入基因列表在STRING已知的PPI数据库中是否显著富集互作关系p0.05说明这些基因的互作强度显著高于随机抽取同数量基因的结果。这个数值在文章方法部分非常常用很多人做完网络却想不起来回Page里去抄这个数字回头还得重新跑一遍。3. Cytoscape导入这一步最容易翻车也最值得抠细节3.1 打开TSV前先处理注释行Cytoscape安装好之后我用的版本是3.10实际3.9到3.10操作完全一致第一件事不是急着拖文件而是先用文本编辑器打开刚才导出的TSV文件瞄一眼。这一步能避免后面一个极其常见的翻车事故。String导出的TSV文件往往带有几行注释信息比如下载时间、数据库版本、查询参数等。这些行以说明文字开头不包含正常的互作记录。直接拖进Cytoscape的话Cytoscape会把注释行当作节点数据结果网络上凭空冒出一个名字很奇怪的孤立节点你还需要手动去查去删。正确做法是打开文件把开头的注释行删掉只保留表头和数据行。正常情况下文件前面的几列是node1、node2、node1_string_id、node2_string_id这类信息。保留下面的数据即可。做这一步的同时顺便数一下文件行数确认有几条互作记录一会儿导入后和Cytoscape里的边数对一下能及时发现是否有导入问题。3.2 导入时的列映射决定成败打开Cytoscape选择File → Import → Network from File选中你清理好的TSV文件。这个步骤里Cytoscape会弹出一个导入预览面板里面有列映射选项很多人在这里直接点了OK然后发现导出来的网络节点总数和基因数完全对不上。核心逻辑是这样的Cytoscape需要你告诉它“哪一列是起点节点哪一列是终点节点”。在导入预览中找到Source Node和Target Node对应的下拉框分别选node1和node2。然后看“Interaction”这一列如果文件里有这一列就映射到对应字段没有的话Cytoscape会生成默认交互类型。还有一个容易被忽略的地方把combined_score这一列导入成“Edge Attribute”而不是“Node Attribute”。很多人把这一列漏映射导入之后发现边上面没有权重数据NetworkAnalyzer分析时会有边属性缺失。操作上在导入界面找到列属性分配区域把combined_score的类型设为“Edge Attribute”即可。如果发现导入之后节点数比预期多先别急回来看导入预览面板最下方有没有勾选“First line as column names”。如果第一行被当成数据而不是表头节点数量基本都会翻倍。这个选项看似基础但换了新版本Cytoscape之后默认行为可能会变每次导入前还是亲自确认一下最稳妥。3.3 布局从乱到可读的小套路TSV导入成功后屏幕上的网络大概率是一坨乱麻这是正常的因为Cytoscape不会自动帮你做美观的布局。接下来要用Layout菜单。我的习惯是第一步先选Layout → Degree Sorted Circle Layout让所有节点按度值排成一个圆形。这一步不是为了直接出图而是为了看度值的分布层级中心位置的那些节点通常就是高度值节点。看完之后再切到Layout → Prefuse Force Directed Layout让网络按力导向自动布局。力导向布局会模拟物理排斥力和弹簧拉力结果是互作紧密的区域靠近、互作稀疏的节点散落在外围最能直观反映网络结构。如果节点数超过300力导向布局可能很慢可以先点一下工具栏上的“Lock network”或者等它跑完期间不要重复点击布局按钮不然会让计算反复重置。Cytoscape的布局计算是染色事件点击两次会出现卡死错觉实际上只是排队。还有一个快速的缩放技巧CtrlShiftF可以让网络图适配到当前窗口大小每次切换布局之后都会用到。3.4 按度值映射节点样式布局调整好后网络虽然不乱了但所有节点都一样大、一个颜色根本看不出哪些蛋白重要。这时候需要用到Cytoscape的Style标签页。点左下角Style面板选择Node标签找到Fill Color选项。在Map.那一栏选择Continuous Mapping然后选择映射的列也就是NetworkAnalyzer算出的Degree还没算的话可以先去Tools菜单选NetworkAnalyzer这个后面细说。把颜色梯度设成从浅蓝到橙红这样度值小的节点是冷色、度值大的节点是暖色一眼就能看出网络中心在哪里。同样地Node Size也映射到Degree设置最小值30、最大值100左右。这里的映射是连续的Cytoscape会根据度值自动插值不需要手动逐个节点调大小。标签也要映射。在Label栏目下把映射列选成基因名的那个字段Font Size可以固定设成10~12避免标签太大把网络盖住。设置完之后整张网络图基本就有“可以放进文章”的样子了。最后记得在工具栏里把边的宽度也映射到combined_score互作分数越高的边越粗这张图的信息密度就上来了。4. 把网络图变成结论拓扑参数、hub基因与功能模块4.1 NetworkAnalyzer算出的三个参数怎么看有了网络后第一件事是让Cytoscape帮我们算拓扑参数。Tools → NetworkAnalyzer → Network Analysis → Analyze Network弹出对话框后选择Undirected因为STRING的PPI网络是无向网络两条蛋白之间的关系是对称的然后开始分析。NetworkAnalyzer会返回一张详细的统计表里面最常用的三个参数是Degree、Betweenness Centrality和Closeness Centrality。Degree是节点的直接邻居数量反映这个蛋白在网络中有多少直接互作伙伴是筛选hub基因的第一指标。Betweenness Centrality衡量的是一个节点处在多少条最短路径上通俗讲就是“信息传递的桥梁程度”度值不高的节点也可能有很高的中介中心性它在网络里扮演跨模块连接角色。Closeness Centrality则表达到其他所有节点的平均距离反映这个节点到网络其他部分有多“近”。实际操作时我会把节点表格按Degree降序排列把前20~50个节点复制出来然后再按Betweenness排序一次两份结果交叉对比。一个节点如果既在度值排名靠前又有很高的中介中心性那基本可以确定是网络的关键蛋白。4.2 hub基因筛选从degree到CytoHubba的MCC简单做一个度值排序当然没问题但如果你想让筛选结果更严格一些我建议安装Cytoscape的CytoHubba插件。在Apps菜单里选择App Manager搜索CytoHubba并安装。安装后重启Cytoscape在Apps菜单下就能看到CytoHubba的入口。它会计算12种中心性指标其中最常用的是MCC也就是最大团中心性。这个算法的优点是它不只考虑节点的直接邻居数量还考虑了节点参与的团结构的完整性简单说就是“看这个蛋白是不是处在多个紧密互作团块的核心”。我一般会同时跑MCC、Degree和Betweenness三套算法分别查看Top 10列表。三份列表的交集就是最可信的hub基因候选。用上一篇文章中的例子如果你的基因列表里有TP53、EGFR、AKT1、STAT3这类明星分子它们通常会稳定出现在所有算法前列完全不在交集里的基因除非有明确的生物学依据否则我不会优先作为核心结论来汇报。CytoHubba分析完成后它会自动把Top节点高亮显示在网络图上这时候可以直接导出图片或者新建一个只包含这些关键节点的子网络进行后续处理。4.3 MCODE模块挖掘怎么和富集分析接上hub基因是网络的“中心”但网络的“功能模块”还需要另一套分析来挖。MCODE插件是用来识别网络中的高连通区域也就是“团簇”的。安装MCODE之后运行它参数可以按默认设定也可以手动设置Degree Cutoff为2、K-Core为2、Max Depth为100。这些参数的含义是只保留度数在2以上的节点每个模块核心区域的连接密度不低于2探索深度不超过100层。这套参数是我实践下来最平衡的模块数量适中不会切得太碎。MCODE会输出若干cluster每个cluster代表一组紧密互作的蛋白。把这些cluster的成员基因提取出来导入DAVID或Metascape做GO和KEGG富集分析就能看出每个模块对应什么生物学功能。比如模块A富集到细胞周期、模块B富集到炎症应答这种结果比单纯的hub基因列表要有说服力得多因为它把“网络结构”和“功能注释”缝在了一起。4.4 汇报结果的表格和配图怎么做到这一步你已经有了拓扑参数、hub基因列表和功能模块接下来要解决的是“怎么汇报”的问题。我个人习惯做三张表和一张图。第一张表是hub基因汇总列包含基因symbol、Degree、Betweenness、所属MCODE模块和已知功能注释。第二张表是模块功能富集表包含模块编号、成员数、最显著富集的GO/KEGG条目和p值。第三张表是整体网络参数描述比如节点数、边数、平均度值、PPI enrichment p值。这张图就是Cytoscape里精心排好版的核心网络图。投稿级别的网络图我建议直接用Cytoscape的Export功能导出SVG格式再放到Inkscape或AI里微调。注意把背景设置为白色字体统一用无衬线体Arial或Helvetica节点标签不要重叠图的右下角放一个模块或度值的图例。Cytoscape自带图例功能在工具栏的Legend选项里可以自动生成。讨论部分要记得一个核心逻辑hub基因的高degree只是拓扑意义上的重要不等于它在疾病或生物学过程中的功能重要。真正要说它重要需要和你的实验表型关联起来——比如hub基因的表达量在疾病组显著变化、敲低后表型改变等。否则审稿人一句“so what”就能把你顶回来。5. 高频踩坑实录与排查思路5.1 “#node1”节点几乎每个人都遇到过导入TSV之后网络上多了一个名字叫“#node1”或“node1”的节点。这不是网络生成错误是导入时把表头行当成了数据。String导出的TSV第一行一般是列名如果你没有勾选Cytoscape导入面板里的“First line as column names”就会产生这个问题。排查思路很简单打开Node Table按名字排序找到那些名称里带#号或看起来不像基因名的节点手动删除。删除方法是在表格里选中这些节点然后按Delete键或者右键选择Remove Selected Nodes。根治方法是回到导入预览面板确认表头选项勾选正确。5.2 网络太密或太疏如何调整网络太密的场景多半出现在差异基因数量较大但置信度阈值偏低的时候。比如你筛出了800个差异基因置信度设为0.150跑出来的网络可能会有上万条边Cytoscape直接卡成幻灯片。这时候不要硬等回到String重新生成数据会更高效要么把置信度提高到0.700要么在String里就勾选不显示孤立节点先把网络瘦身。如果网络太疏边的数量只有个位数先检查物种有没有选对。还有一个经常被忽略的原因是基因名太冷门或者太新String数据库里还没有注释信息。这种情况下做PPI网络本身意义就不大我建议诚实呈现“未检测到显著互作富集”不要强行降低阈值到0.050去凑边数那样做出来的网络别人一验证就露馅。5.3 同源别名基因导致节点不合并导入后还有一个经典问题两个节点明明是同一种蛋白却分开显示。这通常是因为String导出文件里保留了不同的外部ID或者你的基因列表里同时出现了新旧symbol。比如“IL6”和“IFNB2”本质上是同一个基因的旧称String虽然认识它但导出时如果字段混用Cytoscape就会把它们当作两个节点。解决办法有两个。第一个是在导入Cytoscape之前在String网页端的查询设置里就选择“only querying proteins”确保导出的是标准symbol。第二个是在Cytoscape里用Merge操作把重复节点合并手动选中两个节点后用Tools菜单里的Merge Nodes合并后重新计算网络参数。更省事的思路其实在源头基因列表前期清洗时就一次性统一好命名规范后面所有分析都基于同一个ID体系不要在Cytoscape里临时去改。5.4 插件装不上、导出卡死这类环境问题最后说几个环境相关的坑。Cytoscape 3.9以上版本依赖Java 11如果你的电脑装了Java 8安装后会一直卡在启动界面。建议直接用官网绑定了Java版本的Cytoscape安装包省去配置JAVA_HOME的烦恼。安装CytoHubba或MCODE时如果提示失败八成是Cytoscape版本太旧去App Manager里看插件要求的版本范围升级Cytoscape后再装。导出图片卡死也很常见尤其是网络节点数超过500时。遇到这种情况先切到Preview视图看一下渲染是否正常或者直接把整个网络缩小到只保留关键模块再导出。一个小技巧是在导出之前先在右侧工具栏关闭所有节点标签导出完再调回来可以明显减轻渲染压力。另外一定要养成保存工程文件的习惯。Cytoscape的.cys文件会保存整个分析状态包括布局、样式映射和所有分析结果。我通常会在导入数据后先Save As一次每隔几分钟再保存一次。分析完成后把.cys文件和String查询参数一起归档后面补材料做复现的时候能节省一整天的返工时间。最后分享一个很实用的小习惯每次从String下载TSV后先记下文件里的边数和节点数的预期值导入Cytoscape后再对一遍。两边的数字对不上说明处理过程有问题早发现早解决。这个习惯帮我省掉了无数次“图做完了才发现少了几个基因”的返工折腾。
返回列表