本節(jié)概覽:
1.STRING數(shù)據(jù)庫(kù)基本介紹
2.STRING R語(yǔ)言版——STRINGdb的使用:
①STRINGdb數(shù)據(jù)庫(kù)導(dǎo)入 ②獲取STRING_id ③PPI繪制
④clustering分簇 ⑤富集分析 ⑥獲取蛋白互作信息
3.STRING 網(wǎng)頁(yè)版的簡(jiǎn)單使用:
文件上傳、各選項(xiàng)設(shè)置、數(shù)據(jù)導(dǎo)出
當(dāng)我們獲得目標(biāo)基因集合后,除了利用GO等富集分析方法來(lái)探究它們參與了哪些關(guān)鍵的生物學(xué)通路之外,還可以進(jìn)一步構(gòu)建PPI蛋白質(zhì)相互作用網(wǎng)絡(luò)(PPI, Protein-Protein Interaction Networks),通過(guò)分析這些基因編碼蛋白之間的關(guān)聯(lián),從而篩選出核心的關(guān)鍵基因。
在構(gòu)建PPI網(wǎng)絡(luò)的過(guò)程中,STRING數(shù)據(jù)庫(kù)常被用于提取蛋白互作數(shù)據(jù)并進(jìn)行網(wǎng)絡(luò)的可視化展示。下面,我們就從網(wǎng)頁(yè)版和R語(yǔ)言版兩個(gè)角度,來(lái)了解STRING數(shù)據(jù)庫(kù)的使用方式。
其他數(shù)據(jù)庫(kù)的使用:
1. STRING 數(shù)據(jù)庫(kù)基本介紹
官網(wǎng): STRING: functional protein association networks (string-db.org)
R語(yǔ)言版本:Bioconductor - STRINGdb
-
STRING是一個(gè)已知和預(yù)測(cè)的蛋白質(zhì)-蛋白質(zhì)相互作用的數(shù)據(jù)庫(kù)。
蛋白之間的相互作用既包含直接的物理結(jié)合,也包含間接的功能關(guān)聯(lián);這些信息的來(lái)源包括計(jì)算預(yù)測(cè)、跨物種的知識(shí)遷移,以及從其他主要數(shù)據(jù)庫(kù)整合而來(lái)的互作數(shù)據(jù)。
STRING中的相互作用有五個(gè)主要來(lái)源:基因組預(yù)測(cè)、高通量實(shí)驗(yàn)、(保守的)共表達(dá)實(shí)驗(yàn)、自動(dòng)化文本挖掘、數(shù)據(jù)庫(kù)相關(guān)知識(shí)。
STRING數(shù)據(jù)庫(kù)目前涵蓋了來(lái)自5′090個(gè)物種的24′584′628個(gè)蛋白質(zhì)。
2. STRING的R語(yǔ)言版——STRINGdb的使用
STRINGdb說(shuō)明書(shū):STRINGdb.pdf (bioconductor.org)或使用命令vignette("STRINGdb")在本地查看說(shuō)明書(shū)。查看STRINGdb的函數(shù)幫助文檔比較特殊,要用STRINGdb$help("get_graph")的形式。
使用STRINGdb時(shí),參數(shù)species代表NCBI Taxonomy物種編碼,可在此查詢:https://cn.string-db.org/cgi/input.pl?input_page_active_form=organisms,其中人為9606,小鼠為10090 。
① STRINGdb數(shù)據(jù)庫(kù)導(dǎo)入
- 首先選擇載入的STRINGdb數(shù)據(jù)(數(shù)據(jù)庫(kù)版本、物種、蛋白互作得分)和之前基因差異分析得到的DEG。
STRINGdb$new設(shè)置使用最新的11.5版本數(shù)據(jù)庫(kù),物種選擇為小鼠(人9606,小鼠10090 ),蛋白互作得分閾值選擇700(默認(rèn)400, 低150,高700,極高900,越高可信度越強(qiáng))。
DEG結(jié)果中選取前100顯著差異基因用于后續(xù)分析,并將其基因名保存為gene_diff100.txt文件用于后續(xù)STRING網(wǎng)頁(yè)版的使用(特別注意write.table要設(shè)quote = F,讓字符不要帶引號(hào) ,否則后續(xù)上傳 STRING容易識(shí)別錯(cuò)誤)
# 清空當(dāng)前環(huán)境中的所有變量,避免歷史數(shù)據(jù)干擾
rm(list = ls())
# 設(shè)置全局選項(xiàng):字符向量不自動(dòng)轉(zhuǎn)換為因子,保持原樣
options(stringsAsFactors = F)
# 加載 tidyverse 系列包(包含數(shù)據(jù)處理和可視化工具)
library(tidyverse) # ggplot2 stringer dplyr tidyr readr purrr tibble forcats
# 加載 STRINGdb 包,用于蛋白互作網(wǎng)絡(luò)分析
library(STRINGdb) #BiocManager::install(c("STRINGdb","igraph"),ask = F,update = F)
# 加載 igraph 包,用于網(wǎng)絡(luò)圖的分析與繪圖
library(igraph)
# 設(shè)置工作目錄(請(qǐng)根據(jù)實(shí)際路徑修改)
#setwd("工作目錄")
# 加載之前分析得到的差異表達(dá)結(jié)果,其中應(yīng)包含數(shù)據(jù)框 'DEG_DESeq2'
load(file = './3.DEG/test_DEG_results.Rdata')
# 在當(dāng)前目錄下創(chuàng)建名為 "7.PPI" 的文件夾,用于存放PPI分析結(jié)果
dir.create("7.PPI")
# 將工作目錄切換至剛創(chuàng)建(或已存在)的 "7.PPI" 文件夾
setwd("7.PPI")
######################### 選擇STRINGdb類型 #########################
# 初始化 STRINGdb 對(duì)象,配置數(shù)據(jù)庫(kù)版本、物種和互作得分閾值
string_db <- STRINGdb$new( version="11.5", #數(shù)據(jù)庫(kù)版本。截止2022.5.24最新為11.5
species=10090, #人9606,小鼠10090
score_threshold=700, #蛋白互作的得分 默認(rèn)400, 低150,高700,極高900
input_directory="") #可自己導(dǎo)入數(shù)據(jù)
########################## 獲取DEG結(jié)果 ############################
## 篩選條件設(shè)置
log2FC_cutoff = log2(2) # log2(倍數(shù)變化) 閾值,對(duì)應(yīng)變化倍數(shù) ≥ 2
pvalue_cutoff = 0.05 # p值顯著性閾值
padj_cutoff = 0.05 # 校正后p值顯著性閾值
## 選擇DEG
# 從差異表達(dá)結(jié)果中提取第2、5、6列(通常對(duì)應(yīng) log2FC, pvalue, padj)
need_deg <- DEG_DEseq2[,c(2,5,6)] ; head(need_deg)
# 為提取的列重新命名,便于后續(xù)使用
colnames(need_deg) <- c('log2FC','pvalue','padj'); head(need_deg)
# 添加一列 'gene',內(nèi)容為原數(shù)據(jù)框的行名(基因名或ENTREZID)
need_deg$gene <- rownames(need_deg); head(need_deg) #gene symbol或ENTREZID都可
# 根據(jù)閾值分別篩選上調(diào)基因、下調(diào)基因和所有差異基因
if(T){
# 上調(diào):log2FC > 閾值,且 pvalue 和 padj 均小于 0.05
gene_up=need_deg[with(need_deg,log2FC>log2FC_cutoff & pvalue<pvalue_cutoff & padj<padj_cutoff),]
# 下調(diào):log2FC < -閾值,且 pvalue 和 padj 均小于 0.05
gene_down=need_deg[with(need_deg,log2FC < -log2FC_cutoff & pvalue<pvalue_cutoff & padj<padj_cutoff),]
# 所有差異基因:|log2FC| > 閾值,且 pvalue 和 padj 均小于 0.05
gene_diff=need_deg[with(need_deg,abs(log2FC)>log2FC_cutoff & pvalue<pvalue_cutoff & padj<padj_cutoff),]
}
# 輸出上調(diào)、下調(diào)、總差異基因的數(shù)量,便于檢查篩選結(jié)果
dim(gene_up);dim(gene_down);dim(gene_diff)
# 選取前100個(gè)顯著差異基因用于后續(xù)PPI分析
dat <- gene_diff[1:100,] ##這里選取前100顯著基因用于后續(xù)分析
# 將選中的基因名稱(行名)寫(xiě)入文本文件,每行一個(gè)基因,不加引號(hào)
write.table(rownames(dat),'gene_diff100.txt',row.names = F,col.names = F,quote = F) #字符不要帶引號(hào)
② 獲取STRING_id
- 使用
map獲取基因名對(duì)應(yīng)的STRING_id用于繪制string_PPI , 基因名為gene symbol或ENTREZID都可以直接對(duì)應(yīng)獲取STRING_id
# 將差異基因數(shù)據(jù)框映射到 STRING 數(shù)據(jù)庫(kù)的蛋白標(biāo)識(shí)符
dat_map <- string_db$map(my_data_frame=dat,
my_data_frame_id_col_names="gene", # 指定數(shù)據(jù)框中哪一列包含基因名(可以是 gene symbol 或 ENTREZID)
removeUnmappedRows = TRUE ) # 移除無(wú)法映射到 STRING 數(shù)據(jù)庫(kù)的基因行
# 從映射結(jié)果中提取 STRING 數(shù)據(jù)庫(kù)內(nèi)部的蛋白 ID 向量
hits <- dat_map$STRING_id
③ PPI蛋白互作網(wǎng)絡(luò)繪制
- 完成以上步驟后使用
plot_network即可繪制PPI圖,還可以給PPI添加上下調(diào)信息(上調(diào)標(biāo)記為紅色光環(huán),下調(diào)標(biāo)記為綠色光環(huán))
## PPI
# 開(kāi)始繪制基礎(chǔ)PPI網(wǎng)絡(luò)圖,輸出為PNG文件
png("string_PPI.png", units = "in", width = 10, height = 10, res = 400) # 打開(kāi)PNG圖形設(shè)備,指定文件名為string_PPI.png,尺寸10×10英寸,分辨率400 DPI
string_db$plot_network(hits) # 使用STRINGdb對(duì)象的內(nèi)置函數(shù),根據(jù)hits(STRING蛋白ID向量)繪制蛋白互作網(wǎng)絡(luò)
dev.off() # 關(guān)閉圖形設(shè)備,保存文件
## PPI_halo #給PPI添加上下調(diào)信息
# filter by p-value and add a color column(i.e.green for down and red for up genes)
# 根據(jù)p值過(guò)濾,并添加顏色列(例如:下調(diào)基因綠色,上調(diào)基因紅色)
dat_map_color <- string_db$add_diff_exp_color(subset(dat_map, pvalue < 0.01), # 對(duì)dat_map數(shù)據(jù)框按p值<0.01篩選,并根據(jù)log2FC列添加上下調(diào)顏色
logFcColStr = "log2FC") # 指定log2FC列名,用于判斷上調(diào)(正)或下調(diào)(負(fù))
payload_id <- string_db$post_payload(dat_map_color$STRING_id, # 將上一步得到的顏色信息上傳到STRING數(shù)據(jù)庫(kù)服務(wù)器,返回一個(gè)payload ID
colors = dat_map_color$color) # 顏色向量,與STRING_id一一對(duì)應(yīng)
png("string_PPI_halo.png", units = "in", width = 10, height = 10, res = 400) # 打開(kāi)新的圖形設(shè)備,輸出帶顏色映射的PPI網(wǎng)絡(luò)圖
string_db$plot_network(hits, payload_id = payload_id) # 繪制網(wǎng)絡(luò)時(shí)傳入payload_id,使節(jié)點(diǎn)按上下調(diào)信息著色
dev.off() # 保存并關(guān)閉圖形設(shè)備


④ clustering分簇
- STRINGdb還能調(diào)用iGraph進(jìn)行PPI的clustering分簇,
get_clusters有這些算法可以選擇: fastgreedy(默認(rèn)), walktrap, edge.betweenness,以下代碼演示了用 fastgreedy方法對(duì)PPI進(jìn)行clustering,并展示前6個(gè)cluster
## iGraph clustering 互作網(wǎng)絡(luò)分簇
# 可選聚類算法:fastgreedy(快速貪婪,默認(rèn))、walktrap(隨機(jī)游走)、edge.betweenness(邊介數(shù))
# 使用 STRINGdb 自帶的聚類函數(shù),基于給定的蛋白 ID 向量進(jìn)行網(wǎng)絡(luò)分簇
clustersList <- string_db$get_clusters(string_ids = hits , # 輸入的 STRING 蛋白 ID 向量
algorithm = "fastgreedy" ) # 選用 fastgreedy 算法進(jìn)行社區(qū)發(fā)現(xiàn)
# 繪制前 6 個(gè)聚類的網(wǎng)絡(luò)圖(僅作示例展示)
png("string_PPI_iGraph_cluster.png", units = "in", width = 15, height = 10, res = 400) # 創(chuàng)建 PNG 圖形設(shè)備,寬15英寸,高10英寸,分辨率400 DPI
par(mfrow = c(2, 3)) # 將繪圖區(qū)域劃分為 2 行 3 列,后續(xù) 6 個(gè)圖將依次填入
for(i in 1:6){ # 循環(huán)從第1到第6個(gè)聚類
string_db$plot_network(clustersList[[i]]) # 繪制第 i 個(gè)聚類的蛋白質(zhì)互作網(wǎng)絡(luò)子圖
}
dev.off() # 關(guān)閉圖形設(shè)備,保存文件

⑤ 富集分析
- 除了以上功能,STRINGdb還能對(duì)基因集進(jìn)行富集分析,參數(shù)category指定要使用的數(shù)據(jù)庫(kù)(默認(rèn)為All),其中Process, Component, Function分別對(duì)應(yīng)GO的BP,CC,MF三個(gè)子集
# category可選參數(shù):All, Process, Component, Function, Keyword, KEGG, RCTM, Pfam, SMART, InterPro
# 此處選擇 "Process" 對(duì)應(yīng) GO 生物學(xué)過(guò)程(GO-BP)富集分析
enrichment <- string_db$get_enrichment(string_ids = hits, # 輸入的 STRING 蛋白 ID 向量
category = "Process" ) # 富集分析類別:生物學(xué)過(guò)程
# 將富集分析結(jié)果保存為 CSV 文件,文件名為 "enrichment_GO_BP.csv"
write.csv(enrichment, "enrichment_GO_BP.csv")

⑥ 獲取蛋白互作信息
- 最后,可使用
get_interactions獲取蛋白互作信息,再轉(zhuǎn)換stringID為 gene symbol,去除重復(fù)(每個(gè)相互作用會(huì)出現(xiàn)兩次),之后導(dǎo)出string_link.csv文件,可在Cytoscape中進(jìn)一步進(jìn)行多種可視化操作
############################## 獲取蛋白互作信息用于后續(xù)可視化 ###############3
# 從 STRING 數(shù)據(jù)庫(kù)獲取給定 hits(STRING蛋白ID)之間的所有互作關(guān)系,返回?cái)?shù)據(jù)框
dat_link <- string_db$get_interactions(hits)
# 轉(zhuǎn)換stringID為 gene symbol
# 將互作數(shù)據(jù)框中的 from 列(STRING蛋白ID)通過(guò)映射數(shù)據(jù)框 dat_map 轉(zhuǎn)換為基因名(gene symbol)
dat_link$from <- dat_map[match(dat_link$from, dat_map$STRING_id), 'gene']
# 同理,將 to 列轉(zhuǎn)換為基因名
dat_link$to <- dat_map[match(dat_link$to, dat_map$STRING_id), 'gene']
# 為互作數(shù)據(jù)框的列重命名:node1, node2, combined_score(combined_score 為 STRING 數(shù)據(jù)庫(kù)的互作置信度分?jǐn)?shù))
colnames(dat_link) <- c('node1','node2','combined_score')
# 去除重復(fù)的互作對(duì)(保留不同的 node1-node2 組合,根據(jù)這兩列去重,注意 .keep_all = T 保留其他列)
dat_link <- dat_link %>% distinct(node1, node2, .keep_all = T)
# 將整理好的蛋白互作邊列表保存為 CSV 文件,不保存行名,字符不帶引號(hào)
write.csv(dat_link, 'string_link.csv', row.names = F, quote = F)

3. STRING網(wǎng)頁(yè)版的簡(jiǎn)單使用
- 登錄STRING網(wǎng)頁(yè)STRING: functional protein association networks。
在Mutiple proteins中上傳我們前面得到的gene_diff100.txt,或者直接將基因名粘貼在第一個(gè)框中,再選擇物種organism為Mus musculus。
- 點(diǎn)擊SEARCH,會(huì)進(jìn)行匹配string中對(duì)應(yīng)的蛋白,大致預(yù)覽一下確認(rèn)正確后,點(diǎn)擊CONTINUE即可得PPI圖像


- 在分析界面的Vierws選項(xiàng)下可以選擇多種展現(xiàn)方式,Legend選項(xiàng)下展現(xiàn)圖像各標(biāo)記的含義;
Vierws選項(xiàng)
Legend選項(xiàng)
- Settings選項(xiàng)下有多項(xiàng)參數(shù)可以選擇,例如minimum required interaction score可以選擇高可信度0.700(默認(rèn)為0.400),選擇完成后點(diǎn)擊UPDATE即可更新圖像。


-
Analysis選項(xiàng)下有PPI網(wǎng)絡(luò)的相關(guān)節(jié)點(diǎn)信息與GO、KEGG等富集分析結(jié)果
Analysis選項(xiàng) -
Cluster選項(xiàng)下還可以對(duì)PPI網(wǎng)絡(luò)進(jìn)行分簇,選擇分簇方法(如:kmeans clustering)和分簇?cái)?shù)量(如:4)后點(diǎn)擊APPLY即可,不同分簇會(huì)用不同顏色標(biāo)注出來(lái)
Cluster選項(xiàng)
Cluster圖像 -
在Export選項(xiàng)下進(jìn)行數(shù)據(jù)導(dǎo)出,一般選擇下載高分辨率的PNG圖片與蛋白互作關(guān)系TSV文件(下圖黃色標(biāo)記處),TSV文件用于后續(xù)在Cytoscape中進(jìn)一步可視化PPI網(wǎng)絡(luò)
Export選項(xiàng)
參考資料
STRINGdb.pdf (bioconductor.org)
用R的bioconductor里面的stringDB包來(lái)做PPI分析 | 生信菜鳥(niǎo)團(tuán) (bio-info-trainee.com)







