跳到主要内容

07 蛋白互作网络与 STRING

差异蛋白列表常常是几十到几百个,单独看每个蛋白意义不大。互作网络能把它们组织成"模块"——同一个复合物或通路的蛋白会聚在一起,让生物学故事浮出来。STRING 是目前最常用的免费蛋白互作数据库。

STRING 的关键概念

概念含义
Combined score7 种证据综合的互作可信度(0-1000)
Experimental实验直接验证的互作(亲和纯化、Y2H 等)
DatabaseKEGG/Reactome 等通路库的共注释
Coexpression共表达证据
Textmining文献共出现

实际筛选时建议 combined score ≥ 700(high confidence),如果蛋白少可以放到 ≥ 400(medium)。

R 端调用 STRINGdb

library(STRINGdb)

# 物种 ID:9606=人,10090=小鼠
string_db <- STRINGdb$new(version = "12.0",
species = 9606,
score_threshold = 700,
input_directory = "")

# 把基因符号映射到 STRING ID
mapped <- string_db$map(diff_genes, "gene", removeUnmappedRows = TRUE)

# 取互作子图
hits <- mapped$STRING_id
links <- string_db$get_interactions(hits)

# 富集分析(在差异蛋白集合内做)
enrichment <- string_db$get_enrichment(hits)

get_enrichment 返回 GO / KEGG / Reactome / 域 / 蛋白家族等多种富集,比单独跑 clusterProfiler 更全。

网络可视化:igraph + ggraph

STRING 网页图好看但不便复用。R 里用 igraph 构图,ggraph 出版级可视化:

library(igraph)
library(ggraph)
library(dplyr)

# 构建无向图
g <- graph_from_data_frame(
d = links %>% select(from, to, weight = combined_score),
vertices = mapped %>% select(STRING_id, gene, logFC, padj),
directed = FALSE
)

# 度中心性
V(g)$degree <- degree(g)

# 模块检测(Louvain)
clusters <- cluster_louvain(g)
V(g)$module <- membership(clusters)

ggraph(g, layout = "fr") +
geom_edge_link(aes(alpha = weight / 1000), color = "grey50") +
geom_node_point(aes(size = degree, fill = logFC),
shape = 21, color = "white", stroke = 0.5) +
geom_node_text(aes(label = ifelse(degree > 5, gene, "")),
repel = TRUE, size = 3) +
scale_fill_gradient2(low = "#2563eb", mid = "white", high = "#dc2626") +
scale_size_continuous(range = c(2, 8)) +
theme_void()

度中心性 degree 反映"枢纽"程度——网络里 hub 蛋白往往是关键调控因子。

模块解释:每个模块跑富集

Louvain 把网络切成几个相对独立的模块,每个模块单独做富集能看出"这个模块是干嘛的":

library(clusterProfiler)
library(org.Hs.eg.db)

module_enrich <- lapply(unique(V(g)$module), function(m) {
genes <- V(g)$gene[V(g)$module == m]
enrichGO(genes, OrgDb = org.Hs.eg.db, keyType = "SYMBOL",
ont = "BP", pAdjustMethod = "BH",
pvalueCutoff = 0.05)
})

# 每个模块的 top 3 GO term
lapply(seq_along(module_enrich), function(i) {
e <- module_enrich[[i]]
if (!is.null(e) && nrow(e@result) > 0) {
data.frame(module = i, term = head(e@result$Description, 3))
}
})

进阶:Cytoscape 联动

复杂网络在 Cytoscape 里编辑更顺手。RCy3 可以把 R 里的图直接送到 Cytoscape:

library(RCy3)

# Cytoscape 需要先打开
createNetworkFromIgraph(g, "DEP-network")
setNodeColorMapping("logFC", c(-2, 0, 2),
c("#2563eb", "white", "#dc2626"),
style.name = "default")

然后在 Cytoscape 里手动调整布局、加注释、导出 PDF。

报告中的关键参数

  • STRING 版本(12.0 / 11.5)
  • combined score 阈值
  • 网络节点和边数
  • 模块检测算法(Louvain / Leiden)
  • 富集所用的物种数据库版本

参考资源

  • STRING 数据库
  • STRINGdb R 包文档
  • igraph 用户手册
  • Cytoscape:可视化网络分析工具
静态文件

离线资料下载

手册 HTML / PDF 已在后台预生成,点击后直接下载网站静态资源。