美文网首页走进转录组RNANGS数据分析-20210421
RNA-seq入门实战(九):PPI蛋白互作网络构建(上)——S

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

作者: 嘿嘿嘿嘿哈 | 来源:发表于2022-05-25 16:10 被阅读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

    • STRING是一个已知和预测的蛋白质-蛋白质相互作用的数据库。
      相互作用包括直接(物理)和间接(功能)联系;它们源于计算预测、生物之间的知识转移,以及其他(主要)数据库聚合的交互作用。
      STRING中的相互作用有五个主要来源:基因组预测、高通量实验、(保守的)共表达实验、自动化文本挖掘、数据库相关知识。
      STRING数据库目前涵盖了来自5′090个物种的24′584′628个蛋白质。
      image.png

    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数据库导入

    • 首先选择载入的STRINGdb数据(数据库版本、物种、蛋白互作得分)和之前基因差异分析得到的DEG。
      STRINGdb$new设置使用最新的11.5版本数据库,物种选择为小鼠(人9606,小鼠10090 ),蛋白互作得分阈值选择700(默认400, 低150,高700,极高900,越高可信度越强)。
      DEG结果中选取前100显著差异基因用于后续分析,并将其基因名保存为gene_diff100.txt文件用于后续STRING网页版的使用(特别注意write.table要设quote = F,让字符不要带引号 ,否则后续上传 STRING容易识别错误)
    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

    • 使用map获取基因名对应的STRING_id用于绘制string_PPI , 基因名为gene symbol或ENTREZID都可以直接对应获取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蛋白互作网络绘制

    • 完成以上步骤后使用plot_network即可绘制PPI图,还可以给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分簇

    • STRINGdb还能调用iGraph进行PPI的clustering分簇,get_clusters有这些算法可以选择: fastgreedy(默认), walktrap, edge.betweenness,以下代码演示了用 fastgreedy方法对PPI进行clustering,并展示前6个cluster
    ## 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

    ⑤ 富集分析

    • 除了以上功能,STRINGdb还能对基因集进行富集分析,参数category指定要使用的数据库(默认为All),其中Process, Component, Function分别对应GO的BP,CC,MF三个子集
    #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部分结果

    ⑥ 获取蛋白互作信息

    • 最后,可使用get_interactions获取蛋白互作信息,再转换stringID为 gene symbol,去除重复(每个相互作用会出现两次),之后导出string_link.csv文件,可在Cytoscape中进一步进行多种可视化操作
    ############################## 获取蛋白互作信息用于后续可视化 ###############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网页版的简单使用

    • 登录STRING网页STRING: functional protein association networks
      Mutiple proteins中上传我们前面得到的gene_diff200.txt,或者直接将基因名粘贴在第一个框中,再选择物种organism为Mus musculus。

    • 点击SEARCH,会进行匹配string中对应的蛋白,大致预览一下确认正确后,点击CONTINUE即可得PPI图像

    SEARCH后界面
    分析界面
    • 在分析界面的Vierws选项下可以选择多种展现方式,Legend选项下展现图像各标记的含义;
      Vierws选项
      Legend选项
    • Settings选项下有多项参数可以选择,例如minimum required interaction score可以选择高可信度0.700(默认为0.400),选择完成后点击UPDATE即可更新图像。
      可以看到调整可信度为0.700后与之前在R中所得图像是一致的
    Settings选项
    调整参数后所得图像
    • Analysis选项下有PPI网络的相关节点信息与GO、KEGG等富集分析结果

      Analysis选项
    • Cluster选项下还可以对PPI网络进行分簇,选择分簇方法(如:kmeans clustering)和分簇数量(如:4)后点击APPLY即可,不同分簇会用不同颜色标注出来

      Cluster选项
      Cluster图像
    • Export选项下进行数据导出,一般选择下载高分辨率的PNG图片与蛋白互作关系TSV文件(下图黄色标记处),TSV文件用于后续在Cytoscape中进一步可视化PPI网络

      Export选项

    参考资料
    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加权基因共表达网络分析——关联基因模块与表型

    相关文章

      网友评论

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

        本文链接:https://www.haomeiwen.com/subject/coneprtx.html