做生信的同学对STRING数据库应该不陌生。搞完差异表达分析,拿到一串基因列表,下一步要做的事情里,十有八九会有一个叫“PPI网络分析”的环节。我第一次用STRING的时候,其实挺懵的——页面全是英文,点进去一堆网络图,节点和连线密密麻麻,根本不知道该怎么下手。后来做得多了,发现这东西其实套路很固定:输入基因列表、选物种、设阈值、出图、导出、再丢进Cytoscape里二次加工。整个过程核心就一句话:把散乱的基因列表变成一张有结构的信息网络,从中挖掘关键基因和生物学模块。
这篇文章我想把STRING数据库做PPI网络分析这条完整链路拆开讲清楚,从数据库里存了什么,到具体操作时每一步点哪里、参数怎么选,再到结果图怎么解读、如何和Cytoscape联动做发表级图。适合刚接触生信、手头有一批差异基因但不知道怎么往下分析的人,也适合想系统梳理PPI分析流程的老手查漏补缺。
1. STRING数据库:它到底存了什么,为什么这么能打
1.1 一个干了二十年的蛋白质关系“户口本”
STRING的全称是Search Tool for the Retrieval of Interacting Genes/Proteins,直译过来就是“检索相互作用基因/蛋白质的搜索工具”。它本质是一个预计算好的、规模巨大的蛋白质相互作用数据库。你不需要自己跑实验来证明某个蛋白和某个蛋白有没有关系,直接上去查就行。
这个数据库最大的特点就是“攒家底”。目前最新版本已经收录了几千个物种的蛋白质信息,覆盖的蛋白数量以亿计。就算你做的是一个比较冷门的物种,只要这个物种的基因组被测过、蛋白序列被注释过,大概率能在里面找到对应条目。
关键在于它收集的相互作用证据不是单一来源,而是把好几种不同类型的证据综合在一起打分。这些证据包括:实验验证的相互作用数据、从PubMed文献里用文本挖掘抽出来的共现关系、已知数据库里的通路注释、基因共表达数据、蛋白共定位信息,甚至还能通过同源蛋白跨物种转移注释。简单说,它把“实验室里真正做出来过”“文献里被人提到过”“两个基因在表达量上总是同涨同跌”这些不同维度的信息汇总起来,形成一个综合评分。
提示:我在实际使用中体会最深的一点是,文本挖掘这条证据线很容易产生“虚假共现”。比如两篇不同领域的文章各自研究了同一个基因,但研究的是完全不同的功能方向,文本挖掘可能会因为句子结构误判出相互作用。所以只看综合分数还不够,关键节点建议点进去看看具体支撑证据是什么类型的。
1.2 为什么PPI网络分析成了生信分析的标准动作
拿到一批差异基因之后,如果只是逐个基因去查功能,工作量巨大且看不到全局。PPI网络分析的核心价值在于换了一个视角:把基因列表当成一个系统,看这些基因编码的蛋白之间是怎么“勾连”的。
从网络角度去看,一个蛋白不是孤立存在的,而是通过物理结合、参与同一复合物、处于同一条信号通路等方式和其他蛋白发生关系。把这些关系全部画出来,就是一张网络图。网络里每个节点是一个蛋白,每条边是一条相互作用关系。顺着这张图,你能发现一批连接度特别高的“枢纽蛋白”(hub gene),这些往往在疾病发生或生物过程中起关键调控作用;你还能看出哪些蛋白抱团聚集在一起,形成一个功能模块,这种模块通常对应一个稳定的生物学复合物或信号通路。
在和审稿人沟通时,PPI网络分析也成了一个成熟的加分项。我见过很多文章的应用模式:先做差异表达筛选,再对差异基因做PPI分析找到hub基因,接着用hub基因做生存分析或实验验证。这套逻辑走下来,能很好地把“数据处理”和“生物学意义”串联起来。
2. PPI网络分析的完整实操流程:从基因列表到网络图
2.1 输入数据准备:这一步决定后面能不能顺利出图
在打开STRING网站之前,得先把输入数据准备好。输入格式非常简单,就是一个基因列表,每行一个基因名。但这里的坑比想象中多。
最常见的问题是基因命名不统一。有人用官方symbol(如TP53),有人用Ensembl ID,还有人用NCBI的Gene ID。STRING支持多种标识符输入,但最省事的还是官方基因symbol。如果你手里的是探针ID或旧版别名,建议先做一次ID转换,下载对应物种的注释文件,或使用DAVID这类在线工具把别名映射到标准symbol。千万别图省事直接把混合格式扔进去,解析出错率高到怀疑人生。
另外要注意,基因列表里请只保留编码蛋白的基因。microRNA、lncRNA这类非编码RNA,STRING虽然能搜到部分,但注释信息远不如蛋白编码基因完整,在网络分析中很可能因为信息太少被剔除或形成孤岛节点。
注意:我踩过一次很深的坑——从一个RNA-seq流程里直接导出基因名,里面有大量以“ENSG”开头的Ensembl ID,还有一些“LOC”开头的预测基因。直接导入STRING后,有接近30%的基因没有匹配到任何蛋白。后来我做了两件事:一是用Ensembl BioMart批量转换ID,二是把LOC打头的假基因过滤掉,匹配率立刻提升到95%以上。
2.2 STRING界面逐项操作:手把手走一遍标准流程
打开STRING数据库官网,默认是“Search”页面。操作流程如下:
第一步,在左侧“Protein by name”栏里输入你的基因列表,每行一个。如果物种是人,页面一般会自动识别为Homo sapiens,但如果你的数据来源是其他物种,一定要记得手动改。
第二步,在右边“Organism”栏里选择正确的物种。这里有个隐藏技巧:你可以在输入基因列表的同时输入物种名,STRING会自动筛掉那些在其他物种里同名的基因,减少误匹配。
第三步,点“Search”后,系统会跳转到一个基因匹配确认页面。这里会把输入基因的匹配情况列出来:哪些精确匹配、哪些有多个同源匹配、哪些没有匹配到。建议认真花一分钟检查这一步,而不是直接点Continue。如果发现很多基因没有匹配,大概率是命名问题或物种选错了。
第四步,点击“Continue”进入网络生成页面。此时页面会显示一个默认参数下的PPI网络。
2.3 关键参数怎么选:综合评分的原理与阈值设定逻辑
STRING里的每条边都有一个“combined score”,取值0到1,用来表示两个蛋白之间存在相互作用的置信度。但这个分数不是单一实验测出来的,而是多种证据加权合并的结果。合并逻辑大致是对不同证据来源的分数做贝叶斯整合,分数越高,表明支持相互作用的证据越充分。
页面默认设置的置信度阈值是0.4(medium confidence),这个默认值在大多数场景下是合理的。如果设置得太低(比如0.15),网络会变得极其稠密,所有节点都被一堆弱证据连接起来,根本看不出模块结构;设置得太高(比如0.9),网络又会变得非常稀疏,很多真实存在的弱相互作用被丢弃,最终网络可能只剩几个孤零零的子网络。
我建议呈现结果时优先展示中等置信度的网络,并在补充材料里提供高置信度版本作为稳健性验证。以我的经验,0.4的默认值适合做初步探索,0.7(high confidence)适合筛选核心hub基因。比如在肿瘤数据里,用0.4跑出来的网络往往有上千条边,信息冗余,而调到0.7后,网络会精简到恰到好处,能一眼看出哪些是真正的核心节点。
提示:如果发现0.7阈值下网络节点太少,不用急着调低阈值,先检查输入基因列表是不是太短。一般来说,低于50个差异基因时,建议直接用默认0.4,因为节点少的时候需要更大容错空间来保留足够的边。
3. 结果解读:从一张网络图里看出生物学故事
3.1 三种视图,各看各的侧重
STRING生成结果页后,默认展示的是“Network”视图(网络视图),整体是一张力导向布局的节点连线图。节点用不同颜色的“馅饼图”区分证据来源,哪些区域是实验验证的、哪些区域是文本挖掘的、哪些是数据库注释出来的,一目了然。边的粗细代表综合评分高低,边越粗,相互作用可信度越高。
界面左上角有几个视图切换选项:“Confidence”(置信度视图)把边按分数做了粗细和透明度分层;“Evidence”(证据视图)用不同颜色区分相互作用类型,比如紫色代表实验验证、蓝色代表数据库注释、黄色代表文本挖掘、绿色代表共表达等;“Actions”(功能视图)则强调的是“关系类型”,比如是激活、抑制、催化还是结合。
实际分析的时候,我建议三种视图配合着看。第一遍看Network视图,了解整体规模;第二遍看Evidence视图,重点关注那些颜色丰富的节点——如果一个关键hub基因的边里有多种颜色,说明它的相互作用有多个独立证据支持,可信度高;最后切换到Actions视图,能区分出激活和抑制关系,对后续机制推断很有帮助。
3.2 核心统计指标:度、介数中心性与聚类系数
判断一个节点在网络里的重要程度,不能只靠肉眼观察。STRING的“Analysis”页面会给出每个节点的拓扑属性,其中最重要的是三组指标:
- 节点度(Degree):连接到该节点的边的数目。度越高,说明这个蛋白“交际面”越广,越可能是hub基因。
- 介数中心性(Betweenness Centrality):经过该节点的最短路径数量。介数高的节点不一定连接多,但它卡在多个模块之间的连接要道上,相当于“交通枢纽”。
- 聚类系数(Clustering Coefficient):描述节点邻居之间的连接紧密程度,取值0到1。聚类系数越高,说明节点所在的局部区域聚集性越强,常常对应结构紧密的复合物。
实践中的套路是:把“度”和“介数”两个指标结合起来选hub基因。只凭度选出来的节点,可能是一些泛表达基因,生物学特异性不强;加上介数筛选后,留下来的通常是真正处于信息流核心、连接多个功能模块的关键调控者。String的下载功能可以导出“节点属性表”和“网络边表”,拿到这些数据后在Excel里排序筛选就行,非常方便。
3.3 富集分析:给网络里的蛋白打上功能标签
STRING的另一个高价值功能是内嵌的GO和KEGG通路富集分析。它会自动把网络中的基因集合和背景基因集比对,计算每个功能条目是否显著富集,并给出FDR校正后的p值。
富集结果里最值得关注的是那些FDR极小、但同时富集基因数量适中的条目。如果FDR显示显著但富集的基因数量很少(比如只有2到3个基因),这样的条目往往意义有限,可能是由一个高度连接的hub基因带来的“伪富集”。而如果富集到的通路名称能和你研究的疾病机制对得上,那就是非常好的下游验证线索。
注意:GO分析的条目非常多,同一个基因可能被注释到多个功能分类。别看到显著富集就直接下结论,一定要结合富集基因列表人工核查一遍。比如我在一个胃癌数据集里跑出“细胞黏附”类别高度富集,看起来合理,但点进去发现富集到的基因主要是角蛋白家族成员,属于典型的上皮细胞特征表达,和肿瘤侵袭转移的关联需要更细致的分析才能确认,不能仅靠一条富集记录就开头。
4. 和Cytoscape配合:从在线图到发表级图
4.1 数据导出:别截图,用TSV格式导边表
STRING网页上的网络图可以做初步展示,但要达到发表级别,或者说要自由调整布局和节点样式,必须导入Cytoscape本地处理。
在STRING页面底部找到“Exports”区域,有多个导出选项。关键要选“as simple tabular text file”,这个选项会导出一个包含node1、node2、combined score等字段的TSV文件。别去截图或打印PDF,那只是位图,后续没法编辑。
导出时建议把节点属性表也一并下载下来。这张表里带gene symbol、description、degree等数据,后面在Cytoscape里做节点大小或颜色映射时直接关联就行。
4.2 Cytoscape里的标准操作流:布局→映射→找模块
Cytoscape打开TSV文件的方式是直接拖入,导入后默认会把列映射为source node和target node,建立网络。随后我会按固定顺序做四步操作:
第一步,改布局。点击工具栏的“Layout”菜单,选择“yFiles Organic Layout”或“Prefuse Force Directed Layout”,通常比默认网格布局好看很多。力导向布局会根据边的权重和拓扑结构自动排布节点,模块结构会自然聚拢成团。
第二步,映射节点样式。进入“Style”面板,把节点填充颜色映射到“degree”属性,用连续渐变色;节点大小也映射到degree。这样做完,hub基因立刻变成又大又醒目的颜色块,整个网络的核心结构一眼就能抓出来。
第三步,用MCODE插件做模块识别。MCODE(Molecular Complex Detection)是Cytoscape App Store里最常用的聚类插件,它能自动把网络划分成多个密集连接的子团,每一个子团通常对应一个蛋白复合物或功能模块。运行后得到一个列表,里面有Cluster ID、Score(越接近1说明子团内部连接越紧密)、节点数和边数,把这些cluster和通路富集结果对应起来,就能解释每个模块的生物学含义。
第四步,美化调整。隐藏孤岛节点(没有边的节点),调整边透明度,加上图例,最后就能导出一张既能说明问题又美观的图。
提示:Cytoscape版本迭代很快,插件安装路径基本都在“Apps”菜单里。我遇到过一个比较恼人的兼容性问题:MCODE在较新版本里偶尔会出现菜单变灰不可点的情况,解决方法是降低版本,或者直接用Cytoscape自带的“ClusterMaker2”插件替代。另外,第一次导入网络时,如果节点数超过几千个,建议先做一步过滤,把degree小于2的节点删掉,否则布局运算会非常卡。
5. 常见问题与排查技巧实录
5.1 基因匹配率低:命名和版本问题排查
这是初学者最常遇到的问题,输入100个基因,只有60个匹配上。按优先级排查以下三项:
第一,检查物种有没有选对。人和小鼠的很多基因有相同的symbol,但大小写习惯不同(人TP53,小鼠Trp53),如果输入人中常见的写法却选了小鼠物种,匹配率必然低。
第二,检查基因列表里有没有非蛋白编码基因或假基因。这类条目在STRING里匹配不到蛋白信息,需要过滤。
第三,检查ID格式是否统一。如果你从不同数据库下载了多个数据源合并的基因表,很可能同时存在旧symbol和新symbol,建议统一用NCBI Gene Symbols转换工具做批量标准化。
5.2 网络节点太多或太少:阈值与列表长度的平衡术
网络节点数直接受输入基因数量和置信度阈值双重影响。如果网络太大(超过200个节点),视觉上非常拥挤,模块识别困难,建议提高阈值到0.7,并且可以考虑只保留表达差异倍数排名前100的基因重新分析。如果网络太小(少于10个节点),甚至出现多个互不相连的孤岛,说明阈值太高或输入基因本身参与同一通路的富集度不高,此时应该降低阈值到0.15到0.2试一次,如果仍然稀疏,可能这批基因确实功能分散,可以通过富集分析而不是PPI网络来发掘核心通路,不必强求网络分析。
5.3 富集分析全空或FDR不显著:别慌,先查这几点
STRING自带富集分析偶尔会返回“no enrichment”的结果,原因通常有三个:
一是输入背景太小。富集分析本质上是做比例检验,如果输入的基因只有15个,即使15个都注释在同一条通路上,统计显著性也可能达不到阈值,这是样本量不足导致的,不是数据本身有问题。此时可以考虑用DAVID或clusterProfiler在本地重新做一遍。
二是物种的注释库不完善。一些模式物种以外的生物,GO/通路注释覆盖率很低,这种情况下富集结果本身参考价值有限,建议换用同源映射到模式物种后再做分析。
三是基因列表里包含了过多的非核心基因,把富集信号稀释了。解决方法是先用网络的拓扑指标筛选出hub基因或模块基因,再拿这批子集去做富集分析,往往显著性会大幅提升。
5.4 常见问题速查表
| 现象 | 可能原因 | 快速解决方案 |
|---|---|---|
| 基因匹配率低 | 命名格式不统一、物种选错 | 统一转为官方symbol,双检查组物种信息 |
| 网络图没有边 | 阈值设置太高或基因无已知互作 | 下调至0.15试试,仍无边则检查输入基因是否有误 |
| 富集结果全空 | 背景基因太少或注释库不全 | 改用本地clusterProfiler重跑 |
| 导出TSV后节点属性缺失 | 未下载节点属性表 | 在Exports区域同时下载“tabular text file”和“node attributes” |
| Cytoscape导入后全是重复边 | TSV里同一互作出现多行 | 导入时选择“ignore duplicate edges” |
| 网络卡顿严重 | 节点数过多 | 过滤低度节点,或改用STRING网络视图中自带简化功能 |
写在最后的一点心得
这套流程我从研究生用到现在,最大的感受是PPI网络分析真正的瓶颈不在软件操作,而在于生物学解读。STRING把交互界面做得越来越友好,Cytoscape的教程也到处都是,但把一张网络图和具体的疾病机制、实验假设联系起来,还是需要回到文献和自己的数据本身。如果你最近刚跑完一批差异基因,不妨把列表丢进STRING里,用0.4阈值看看整体面貌,再用0.7阈值筛出核心枢纽,最后结合富集结果画个故事框架——这套组合拳下来,你会发现从一堆gene name到一篇论文figure的距离,其实没有想象中那么远。