在得到我們感興趣的基因集后渴庆,除了對其進(jìn)行GO等富集分析查看與什么重要的生物學(xué)通路相關(guān)拉庶,還可以進(jìn)行PPI蛋白互作網(wǎng)絡(luò)(PPI, Protein-Protein Interaction Networks)的構(gòu)建,查看這些基因之間的聯(lián)系锻离,進(jìn)而鎖定關(guān)鍵基因鼎文。
構(gòu)建PPI網(wǎng)絡(luò)一般需要使用string數(shù)據(jù)庫獲取蛋白互作信息以及進(jìn)行互作網(wǎng)絡(luò)的可視化纱兑。下面探究一下STRING數(shù)據(jù)庫的網(wǎng)頁和R語言版的使用:
STRING數(shù)據(jù)庫
官網(wǎng): STRING V11.5
STRING是一個(gè)已知和預(yù)測的蛋白質(zhì)-蛋白質(zhì)相互作用的數(shù)據(jù)庫。 相互作用包括直接(物理)和間接(功能)聯(lián)系;它們源于計(jì)算預(yù)測精肃、文本關(guān)聯(lián)秤涩,以及其他(主要)數(shù)據(jù)庫總結(jié)的交互作用。STRING中的相互作用有五個(gè)主要來源:基因組預(yù)測司抱、高通量實(shí)驗(yàn)筐眷、(保守的)共表達(dá)實(shí)驗(yàn)、自動(dòng)化文本挖掘习柠、數(shù)據(jù)庫相關(guān)知識匀谣。STRING數(shù)據(jù)庫目前涵蓋了來自14'094個(gè)物種的67'592'464個(gè)蛋白質(zhì)。
STRING網(wǎng)頁版的簡單使用
登錄STRING網(wǎng)頁资溃。 在Mutiple proteins中將差異基因名(轉(zhuǎn)錄組數(shù)據(jù)分析—DEseq2差異分析 - 簡書 (jianshu.com)粘貼在第一個(gè)框中武翎,再選擇物種organism為Homo sapiens。
點(diǎn)擊SEARCH溶锭,會(huì)進(jìn)行匹配string中對應(yīng)的蛋白宝恶,大致預(yù)覽一下確認(rèn)正確后,點(diǎn)擊CONTINUE即可得PPI圖像
出現(xiàn)這種提示不要緊趴捅,是因?yàn)槲覀兩蟼鞯幕蛱嗔说姹校c(diǎn)擊CONTINUE即可
在分析界面的Vierws選項(xiàng)下可以選擇多種展現(xiàn)方式,Legend選項(xiàng)下展現(xiàn)圖像各標(biāo)記的含義拱绑;
Settings選項(xiàng)下有多項(xiàng)參數(shù)可以選擇露久,例如minimum required interaction score可以調(diào)節(jié)可信度(默認(rèn)為0.400),選擇完成后點(diǎn)擊UPDATE即可更新圖像欺栗。
Analysis選項(xiàng)下有PPI網(wǎng)絡(luò)的相關(guān)節(jié)點(diǎn)信息與GO毫痕、KEGG等富集分析結(jié)果
Cluster選項(xiàng)下還可以對PPI網(wǎng)絡(luò)進(jìn)行分簇征峦,選擇分簇方法(如:kmeans clustering)和分簇?cái)?shù)量(如:4)后點(diǎn)擊APPLY即可,不同分簇會(huì)用不同顏色標(biāo)注出來
在Export選項(xiàng)下進(jìn)行數(shù)據(jù)導(dǎo)出消请,一般選擇下載高分辨率的PNG圖片與蛋白互作關(guān)系TSV文件(下圖畫紅框)栏笆,TSV文件用于后續(xù)在Cytoscape中進(jìn)一步可視化PPI網(wǎng)絡(luò)
STRING的R語言版——STRINGdb的使用
STRINGdb說明書:STRINGdb.pdf (bioconductor.org)或使用命令vignette("STRINGdb")
在本地查看說明書。查看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需频,大鼠為10116 丁眼。
繪制PPI網(wǎng)絡(luò)
上代碼!
library(tidyverse)
library(STRINGdb)
library(igraph)
data <- read.table("diff_gene_deseq2_FDR.xls",header=T,sep = "\t")
test<-data[1:100,]
######################### 選擇STRINGdb類型 #########################
string_db <- STRINGdb$new( version="11.5", #數(shù)據(jù)庫版本昭殉。截止2022.5.24最新為11.5
species=9606, #人9606苞七,小鼠10090
score_threshold=700, #蛋白互作的得分 默認(rèn)400, 低150,高700挪丢,極高900
input_directory="") #可自己導(dǎo)入數(shù)據(jù)
######################### 獲取基因名對應(yīng)的STRING_id用于繪制string_PPI #########################
dat_map <- string_db$map(my_data_frame=test,
my_data_frame_id_col_names="gene_id", #使用gene symbol或ENTREZID都可
removeUnmappedRows = TRUE )
hits <- dat_map$STRING_id
######################### 繪制PPI網(wǎng)絡(luò) #########################
png("string_PPI.png",units="in",width = 10,height = 10, res=400)
string_db$plot_network(hits)
dev.off()
還可以注釋一下基因的上下調(diào)信息
dat_map_color <- string_db$add_diff_exp_color(subset(dat_map, pvalue<0.01),
logFcColStr="log2FoldChange" )
payload_id <- string_db$post_payload(dat_map_color$STRING_id,
colors=dat_map_color$color)
png("string_PPI_halo.png",units="in",width = 10,height = 10, res=400)
string_db$plot_network(hits, payload_id=payload_id )
dev.off()
STRINGdb還能調(diào)用iGraph進(jìn)行PPI的clustering分簇
clustersList <- string_db$get_clusters(string_ids = hits ,
algorithm = "fastgreedy" )
# plot first 6 clusters.
png("string_PPI_iGraph_cluster.png",units="in",width = 15,height = 10,res=400)
par(mfrow=c(2,3))
for(i in 1:6){
string_db$plot_network(clustersList[[i]])
}
dev.off()
###可供選擇的聚類算法"fastgreedy", "walktrap", "spinglass", "edge.betweenness"</pre>
除了以上功能蹂风,STRINGdb還能對基因集進(jìn)行富集分析,參數(shù)category指定要使用的數(shù)據(jù)庫(默認(rèn)為All)乾蓬,其中Process, Component, Function分別對應(yīng)GO的BP,CC,MF三個(gè)子集
enrichment <- string_db$get_enrichment(string_ids = hits,
category = "Process" )
write.csv(enrichment,"enrichment_GO_BP.csv")</pre>
最后惠啄,可使用get_interactions獲取蛋白互作信息,再轉(zhuǎn)換stringID為 gene symbol任内,去除重復(fù)(每個(gè)相互作用會(huì)出現(xiàn)兩次)撵渡,之后導(dǎo)出string_link.csv文件,可在Cytoscape中進(jìn)一步進(jìn)行多種可視化操作
dat_link <- string_db$get_interactions(hits)
# 轉(zhuǎn)換stringID為 gene symbol
dat_link$from <- dat_map[match(dat_link$from,dat_map$STRING_id),'gene_id']
dat_link$to <- dat_map[match(dat_link$to,dat_map$STRING_id),'gene_id']
colnames(dat_link) <- c('node1','node2','combined_score')
# 去除重復(fù)
dat_link <- dat_link %>% distinct(node1, node2, .keep_all = T)
write.csv(dat_link,'string_link.csv',row.names = F,quote = F)