走进转录组RNANGS数据分析-20210421

RNA-seq入门实战(九):PPI蛋白互作网络构建(上)——S

2022-05-25  本文已影响0人  嘿嘿嘿嘿哈

本节概览:
1.STRING数据库基本介绍
2.STRING R语言版——STRINGdb的使用:
①STRINGdb数据库导入 ②获取STRING_id ③PPI绘制
④clustering分簇 ⑤富集分析 ⑥获取蛋白互作信息
3.STRING 网页版的简单使用:
文件上传、各选项设置、数据导出


在得到我们感兴趣的基因集后,除了对其进行GO等富集分析查看与什么重要的生物学通路相关,还可以进行PPI蛋白互作网络(PPI, Protein-Protein Interaction Networks)的构建,查看这些基因之间的联系,进而锁定关键基因。
关于关键基因、hub基因,这篇文章说得很详细:关键基因和hub基因(生物网络角度)
构建PPI网络一般需要使用string数据库获取蛋白互作信息以及进行互作网络的可视化。下面探究一下STRING数据库的网页和R语言版的使用:
其他数据库的使用:
跟着Cell学作图|9.PPI分析(GeNets数据库)


1. STRING 数据库基本介绍

官网: STRING: functional protein association networks (string-db.org)
R语言版本:Bioconductor - STRINGdb


2. STRING的R语言版——STRINGdb的使用

STRINGdb说明书:STRINGdb.pdf (bioconductor.org)或使用命令vignette("STRINGdb")在本地查看说明书。查看STRINGdb的函数帮助文档比较特殊,要用STRINGdb$help("get_graph")的形式。
使用STRINGdb时,参数species代表NCBI Taxonomy物种编码,可在此查询:https://cn.string-db.org/cgi/input.pl?input_page_active_form=organisms,其中人为9606,小鼠为10090 。

① STRINGdb数据库导入

rm(list = ls()) 
options(stringsAsFactors = F)
library(tidyverse)  # ggplot2 stringer dplyr tidyr readr purrr  tibble forcats
library(STRINGdb) #BiocManager::install(c("STRINGdb","igraph"),ask = F,update = F)
library(igraph)

setwd("C:/Users/Lenovo/Desktop/test")
load(file = './3.DEG/test_DEG_results.Rdata')
dir.create("7.PPI")
setwd("7.PPI")
######################### 选择STRINGdb类型 #########################
string_db <- STRINGdb$new( version="11.5", #数据库版本。截止2022.5.24最新为11.5
                           species=10090,   #人9606,小鼠10090 
                           score_threshold=700, #蛋白互作的得分 默认400, 低150,高700,极高900
                           input_directory="") #可自己导入数据
########################## 获取DEG结果 ############################
##  筛选条件设置 
log2FC_cutoff = log2(2)
pvalue_cutoff = 0.05
padj_cutoff = 0.05
## 选择DEG
need_deg <- DEG_DESeq2[,c(2,5,6)] ; head(need_deg) 
colnames(need_deg) <- c('log2FC','pvalue','padj'); head(need_deg)
need_deg$gene <- rownames(need_deg); head(need_deg)      #gene symbol或ENTREZID都可
if(T){  
  gene_up=need_deg[with(need_deg,log2FC>log2FC_cutoff & pvalue<pvalue_cutoff & padj<padj_cutoff),]
  gene_down=need_deg[with(need_deg,log2FC < -log2FC_cutoff & pvalue<pvalue_cutoff & padj<padj_cutoff),]
  gene_diff=need_deg[with(need_deg,abs(log2FC)>log2FC_cutoff & pvalue<pvalue_cutoff & padj<padj_cutoff),]
}
dim(gene_up);dim(gene_down);dim(gene_diff)
dat <- gene_diff[1:100] ##这里选取前100显著基因用于后续分析
write.table(rownames(dat),'gene_diff100.txt',row.names = F,col.names = F,quote = F) #字符不要带引号 

② 获取STRING_id

dat_map <- string_db$map(my_data_frame=dat, 
                         my_data_frame_id_col_names="gene", #使用gene symbol或ENTREZID都可
                         removeUnmappedRows = TRUE )
hits <- dat_map$STRING_id 

③ PPI蛋白互作网络绘制

## PPI
png("string_PPI.png",units="in",width = 10,height = 10, res=400)
string_db$plot_network(hits)
dev.off()
## PPI_halo  #给PPI添加上下调信息
# filter by p-value and add a color column(i.e.green for down and red for up genes)
dat_map_color <- string_db$add_diff_exp_color(subset(dat_map, pvalue<0.01),
                                                  logFcColStr="log2FC" )
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()
string_PPI.png
string_PPI_halo.png

④ clustering分簇

## iGraph clustering 互作网络分簇
#algorithm: fastgreedy(默认), walktrap, edge.betweenness
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()
string_PPI_iGraph_cluster.png

⑤ 富集分析

#category: All, Process, Component, Function, Keyword, KEGG, RCTM, Pfam, SMART, InterPro
enrichment <- string_db$get_enrichment(string_ids = hits,
                                       category   = "Process" ) 
write.csv(enrichment,"enrichment_GO_BP.csv")
enrichment部分结果

⑥ 获取蛋白互作信息

############################## 获取蛋白互作信息用于后续可视化 ###############3
dat_link <- string_db$get_interactions(hits)
# 转换stringID为 gene symbol
dat_link$from <- dat_map[match(dat_link$from,dat_map$STRING_id),'gene']
dat_link$to <- dat_map[match(dat_link$to,dat_map$STRING_id),'gene']  
colnames(dat_link) <- c('node1','node2','combined_score')
# 去除重复
dat_link <- dat_link %>% distinct(node1, node2, .keep_all = T)

write.csv(dat_link,'string_link.csv',row.names = F,quote = F)

3. STRING网页版的简单使用

SEARCH后界面
分析界面 Settings选项
调整参数后所得图像

参考资料
STRINGdb.pdf (bioconductor.org)
用R的bioconductor里面的stringDB包来做PPI分析 | 生信菜鸟团 (bio-info-trainee.com)


RNA-seq实战系列文章:
RNA-seq入门实战(零):RNA-seq流程前的准备——Linux与R的环境创建
RNA-seq入门实战(一):上游数据下载、格式转化和质控清洗
RNA-seq入门实战(二):上游数据的比对计数——Hisat2+ featureCounts 与 Salmon
RNA-seq入门实战(三):从featureCounts与Salmon输出文件获取counts矩阵
RNA-seq入门实战(四):差异分析前的准备——数据检查
RNA-seq入门实战(五):差异分析——DESeq2 edgeR limma的使用与比较
RNA-seq入门实战(六):GO、KEGG富集分析与enrichplot超全可视化攻略
RNA-seq入门实战(七):GSEA——基因集富集分析
RNA-seq入门实战(八):GSVA——基因集变异分析
RNA-seq入门实战(九):PPI蛋白互作网络构建(上)——STRING数据库的使用
RNA-seq入门实战(十):PPI蛋白互作网络构建(下)——Cytoscape软件的使用
RNA-seq入门实战(十一):WGCNA加权基因共表达网络分析——关联基因模块与表型

上一篇下一篇

猜你喜欢

热点阅读