蛋白互作网络分析STRING¶
一句话概述:STRING数据库收录了数千物种的蛋白-蛋白相互作用(PPI),结合Cytoscape可视化,是发现关键蛋白、构建调控网络的标准流程。
核心知识点速览¶
| 概念 | 白话解释 |
|---|---|
| PPI网络 | 蛋白质之间"谁和谁有关系"的关系图,像社交网络一样 |
| STRING数据库 | 最大的蛋白互作数据库,2025版新增调控方向性信息 |
| 置信分数 | 0-1之间的分数,越高说明两个蛋白互作的证据越充分 |
| Cytoscape | 网络可视化的"Photoshop",专门画生物网络图 |
| stringApp | Cytoscape里直接调用STRING数据库的插件 |
| Hub基因 | 网络里连接最多的"社交达人"蛋白,通常是关键调控因子 |
| Degree(度) | 一个节点连了多少条边,degree越高越"重要" |
| Betweenness | "中间人"指标,衡量一个蛋白在信息传递中的桥梁作用 |
| 模块/Cluster | 网络中紧密连接的小团体,往往对应一个生物学功能 |
| CytoHubba | Cytoscape插件,自动找hub基因的利器 |
一、STRING数据库使用(网页版)¶
1.1 访问STRING¶
1.2 三种查询方式¶
1. Protein by name — 输入单个蛋白名(如 TP53)
2. Multiple Proteins — 输入一批基因名(差异基因列表)
3. Protein by Sequence — 用蛋白序列查询(非模式生物常用)
1.3 网页操作流程¶
步骤1:打开 https://string-db.org/
步骤2:选择 "Multiple Proteins"
步骤3:粘贴差异基因列表(每行一个基因名)
步骤4:选择物种(Organism),如 Homo sapiens
步骤5:点击 "SEARCH"
步骤6:确认基因匹配结果,点击 "Continue"
步骤7:在结果页面调整参数:
- minimum required interaction score: 0.400(中等置信)
- 推荐用 0.700(高置信)或 0.900(最高置信)
步骤8:点击 "Exports" 下载 TSV 格式网络文件
1.4 置信分数选择标准¶
| 分数阈值 | 含义 | 适用场景 |
|---|---|---|
| 0.150 | 低置信 | 探索性分析,边很多但噪声大 |
| 0.400 | 中等置信 | 一般分析(默认值) |
| 0.700 | 高置信 | 发文章常用,边较少但可靠 |
| 0.900 | 最高置信 | 只保留实验验证的互作 |
二、Cytoscape安装与配置¶
2.1 安装Cytoscape¶
# 下载地址:https://cytoscape.org/download.html
# 支持 Windows / macOS / Linux
# 需要 Java 11+
# Linux安装示例
wget https://github.com/cytoscape/cytoscape/releases/download/3.10.3/Cytoscape_3_10_3_unix.sh # 下载安装脚本
chmod +x Cytoscape_3_10_3_unix.sh # 添加执行权限
./Cytoscape_3_10_3_unix.sh # 运行安装
2.2 安装必备插件¶
在Cytoscape中:
Apps → App Store → 搜索并安装以下插件:
1. stringApp(2.0+) — 直接在Cytoscape里查STRING
2. CytoHubba — 自动识别hub基因
3. clusterMaker2 — 网络聚类(找模块)
4. MCODE — 另一个聚类插件
5. BiNGO — 模块功能富集分析
三、Cytoscape + STRING实操流程¶
3.1 方法一:在Cytoscape中直接查询STRING¶
步骤1:File → Import → Network from Public Databases
步骤2:Data Source 选择 "STRING: protein query"
步骤3:输入基因列表,选择物种
步骤4:设置置信分数阈值(建议0.7)
步骤5:点击 "Import" 导入网络
3.2 方法二:导入STRING导出的TSV文件¶
步骤1:在STRING网页导出 TSV 文件
步骤2:File → Import → Network from File
步骤3:选择下载的TSV文件
步骤4:设置列映射:
- Source Node → node1
- Target Node → node2
- Edge Attribute → combined_score
步骤5:点击 OK 导入
3.3 网络美化¶
步骤1:Layout → 选择布局算法
- "Prefuse Force Directed" — 最常用,力导向布局
- "Organic" — yFiles插件提供,更美观
步骤2:Style面板 → 调整节点大小/颜色
- Node Size → 映射到 Degree(度越大节点越大)
- Node Color → 映射到表达量或模块
- Edge Width → 映射到 combined_score
步骤3:右键节点 → 显示标签(基因名)
四、网络拓扑分析¶
4.1 Network Analyzer¶
步骤1:Tools → Analyze Network
步骤2:选择 "Treat network as undirected"(无向网络)
步骤3:查看结果面板中的关键指标:
- Number of nodes(节点数)
- Number of edges(边数)
- Network density(网络密度)
- Clustering coefficient(聚类系数)
- Network heterogeneity(网络异质性)
4.2 CytoHubba找Hub基因¶
步骤1:Apps → CytoHubba → 选择排名方法
步骤2:常用排名方法:
- Degree — 连接数最多
- Betweenness — 桥梁作用最大
- Closeness — 到其他节点距离最短
- MCC — 最大团中心性(推荐)
- DMNC — 最大邻域组件密度
步骤3:选择 Top N(通常取 Top 10 或 Top 20)
步骤4:结果会用红→橙→黄渐变色显示排名
4.3 MCODE模块检测¶
步骤1:Apps → MCODE → 设置参数
- Degree Cutoff: 2(默认)
- Node Score Cutoff: 0.2(默认)
- K-Core: 2(默认)
- Max Depth: 100(默认)
步骤2:点击 "Find Clusters"
步骤3:每个cluster就是一个功能模块
步骤4:对每个模块做GO/KEGG富集分析
五、R语言自动化分析¶
5.1 使用STRINGdb R包¶
# 安装STRINGdb包
if (!require("BiocManager")) install.packages("BiocManager") # 安装BiocManager
BiocManager::install("STRINGdb") # 安装STRINGdb
library(STRINGdb) # 加载包
# 初始化STRING对象(人类,版本12.0,置信0.7)
string_db <- STRINGdb$new(
version = "12.0", # STRING版本号
species = 9606, # 物种NCBI Taxonomy ID(9606=人类)
score_threshold = 700, # 置信分数阈值(0-1000)
network_type = "full" # 网络类型:full=所有证据,physical=仅物理互作
)
# 准备差异基因数据
deg_data <- data.frame(
gene = c("TP53", "BRCA1", "EGFR", "MYC", "CDK2"), # 基因名列表
logFC = c(2.5, -1.8, 3.2, 1.5, -0.9), # log2倍数变化
pvalue = c(0.001, 0.005, 0.0001, 0.01, 0.03) # p值
)
# 基因名映射到STRING ID
mapped <- string_db$map(deg_data, "gene", removeUnmappedRows = TRUE) # 映射基因
# 获取PPI网络
string_db$plot_network(mapped$STRING_id) # 绘制网络图
# 获取互作数据
interactions <- string_db$get_interactions(mapped$STRING_id) # 下载互作关系
head(interactions) # 查看前几行
# 富集分析
enrichment <- string_db$get_enrichment(mapped$STRING_id) # 功能富集
head(enrichment) # 查看结果
5.2 使用igraph进行网络分析¶
library(igraph) # 加载igraph包
# 从互作数据构建网络
net <- graph_from_data_frame(
interactions[, c("from", "to")], # 选择源节点和目标节点列
directed = FALSE # 无向网络
)
# 计算网络拓扑指标
degree_values <- degree(net) # 计算每个节点的度
betweenness_values <- betweenness(net) # 计算介数中心性
closeness_values <- closeness(net) # 计算接近中心性
eigenvector_values <- eigen_centrality(net)$vector # 特征向量中心性
# 找Top10 hub基因(按度排名)
hub_genes <- sort(degree_values, decreasing = TRUE)[1:10] # 取度最高的10个
print(hub_genes) # 打印hub基因
# 社区检测(模块划分)
communities <- cluster_louvain(net) # Louvain算法聚类
modularity(communities) # 计算模块度
membership(communities) # 查看每个节点的模块归属
常见报错与解决¶
| 报错信息 | 原因 | 解决方案 |
|---|---|---|
No proteins found | 基因名格式不对或物种选错 | 确认用official gene symbol,检查物种 |
Java heap space | 网络太大,内存不够 | 启动Cytoscape时加 -Xmx4g 参数 |
stringApp connection failed | 网络问题 | 检查网络连接,或用代理 |
Error in map() | R包版本不匹配 | 更新STRINGdb和BiocManager |
Network too dense | 置信阈值太低 | 提高score_threshold到700或900 |
MCODE找不到模块 | 网络太稀疏 | 降低置信阈值或增加输入基因数 |
速查表¶
# STRING网页操作
输入基因 → 选物种 → 设阈值 → 导出TSV
# Cytoscape核心操作
导入网络 → Layout布局 → Style美化 → Analyze Network → CytoHubba找hub
# R语言自动化
STRINGdb$new() → map() → get_interactions() → igraph分析
# 常用物种Taxonomy ID
人类: 9606 | 小鼠: 10090 | 大鼠: 10116 | 果蝇: 7227 | 拟南芥: 3702
# 发文章推荐参数
置信阈值: 0.700 | Hub基因: Top10 by MCC | 聚类: MCODE默认参数
面试高频问题¶
Q1:STRING数据库的互作证据来源有哪些?¶
答:STRING整合了7种证据来源:①实验验证的物理互作(Experiments)②共表达数据(Coexpression)③文本挖掘(Text mining)④数据库注释(Databases/pathway)⑤基因组邻近(Neighborhood)⑥基因融合(Gene Fusions)⑦系统发生谱(Co-occurrence)。2025版新增了调控方向性信息,可以区分上调和下调关系。
Q2:如何选择PPI网络的置信分数阈值?¶
答:根据分析目的选择——探索性分析用0.4(中等),发文章通常用0.7(高置信),只看实验验证用0.9(最高)。阈值越高,网络越稀疏但越可靠;越低则网络越密但可能有假阳性。
Q3:什么是hub基因?如何鉴定?¶
答:Hub基因是网络中连接度(degree)最高的节点,类似社交网络中的"意见领袖"。可以用CytoHubba的多种算法鉴定:Degree(连接数)、MCC(最大团中心性,推荐)、Betweenness(桥梁作用)等。通常取排名前10的作为hub基因进行后续验证。
Q4:PPI网络分析有什么局限性?¶
答:①数据库偏向性——研究多的蛋白互作信息更丰富(研究偏差);②假阳性——文本挖掘和预测方法可能引入噪声;③物种局限——非模式生物数据较少;④静态网络——不能反映时空动态变化;⑤功能互作≠物理互作——STRING包含功能关联,不全是直接结合。
Q5:Cytoscape的MCODE和CytoHubba有什么区别?¶
答:MCODE是聚类算法,找的是网络中的"小团体"(功能模块),一个模块内的蛋白通常参与相同的生物过程。CytoHubba是排名算法,找的是整个网络中最"重要"的单个节点(hub基因)。两者互补:先用MCODE找模块,再在关键模块中用CytoHubba找hub基因。