本小插图将涵盖典型路径分析中涉及的广泛的分析和可视化技术。的概述本节将详细讨论细节,但请注意,这个小插图是模块化设计的,经过仔细考虑。请不要简单地运行整个脚本并期望从最终输出中获得任何有意义的内容。这是一个教学设备,非常适合指导工作坊。

1安装

首先,确保你有rWikiPathways安装…

如果(!"rWikiPathways" %in% installed.packages()){if (!requireNamespace("BiocManager", quiet = TRUE)) install.packages("BiocManager") BiocManager::install(" rwikipaths ", update = FALSE)} library(rwikipaths)

在这个小插图中,我们将使用一组不同的R包。下一个块应该处理我们需要的所有R包的安装和加载。最后打印的行将说明是否成功。好运!

与大多数安装一样,可能会提示您进行响应。对于这个小插曲,你可以回复“一个'更新所有旧包(如果有提示)和'没有’来跳过从源代码编译(如果你的设置有这个选项的话)。在继续之前,请验证最后打印的“success”消息。

负载。lib <- c("DOSE", " goo .db", "GSEABase", "org.Hs.eg.db", "clusterProfiler", "dplyr", "tidyr", "ggplot2", "stringr", "RColorBrewer", "rWikiPathways", "RCy3")选项(install.packages.check. c)Source = "no") options(install.packages.compile.from. Source = "never") if (!require("pacman")) install.packages("pacman");图书馆(小精灵)p_load(负载。libs, update = TRUE,字符。only = TRUE) status <- sapply(load.libs,require,character. libs)only = TRUE) if(all(status)){print("SUCCESS:你已成功安装并加载了所有所需的库。")}else{cat("ERROR:一个或多个库未能正确安装。检查以下列表中的FALSE情况并重试…\n\n") status}

RCy3包用来连接Cytoscape.所以你还需要安装和启动Cytoscape:

cytoscapePing() #这将告诉您是否能够成功连接到Cytoscape

为了这个小插曲,你还需要一对夫妇应用程序Cytoscape。随着Cytoscape的运行,您可以从Cytoscape应用商店安装每一个,只需一次点击:

如果您正在运行Cytoscape 3.7.0或以上版本,您可以简单地运行以下命令:

installApp('WikiPathways') installApp('CyTargetLinker') installApp('stringApp') installApp('富贵地图')

2概述

在本章节中,我们将对差异基因表达数据集进行功能富集分析。该数据集比较了肺癌活组织和正常组织中转录本的表达。已经进行了差异表达分析,为每个基因生成log2foldchange和p值。富集分析将针对基因本体进行,作为对最常见的富集类型的介绍,通常被称为去分析.这将作为对路径数据库进行更高级富集分析的基础路径分析

使用路径可以提供独特的分析和可视化选项。我们将查询WikiPathways以获取相关内容,并将路径模型导入Cytoscape。在Cytoscape中,我们将执行数据叠加,添加药物相互作用并生成用于发表的高质量图像。

3.数据集

这个肺癌数据集的格式对于任何从事过差异基因表达结果工作的人来说都应该很熟悉。它包含基因标识符(ensemble id)、基因符号、log2foldchange值、p值和调整的p值的列。

肺。expr <- read.csv(system.file("extdata","data-肺癌.csv", package=" rwikipaths "),stringsAsFactors = FALSE) nrow(lung.expr) head(lung.expr)

现在让我们用一些传统标准来准备上调和下调的基因列表。

向上< - lung.expr基因(肺。expr$log2FC > 1 & lung.expr$adj.P。值< 0.05,1]dn。< - lung.expr基因(肺。expr$log2FC < -1 & lung.expr$adj.P。值< 0.05,1]bkgd。基因< - lung.expr [1]

4浓缩

有了我们的基因集,我们就可以进行富集分析了……嗯,差不多了。典型的生物信息学分析,我们需要意识到我们正在处理哪些基因标识符。我们有ensemble id,但我们将要使用的包需要Entrez id。幸运的是,这个包提供了自己的名为bitr.这是第一个函数clusterProfiler我们将使用的包:

up.genes.entrez < - clusterProfiler:: bitr(。基因,fromType = " integrl ",toType = "ENTREZID",OrgDb = org.Hs.eg.db) cat("哪一列包含我的新Entrez id ? ")

注意转换很少是100%完成的(例如,由于一对多的映射),因此该工具报告它转换失败的内容。现在我们有了一个数据框架,其中有一个新的Entrez id列,与原始的ensemble id列表相匹配。

下面是这个特定工具可以转换的标识符的完整列表。你必须准确地拼写这些字母并且用大写字母bitr函数来工作:

keytypes (org.Hs.eg.db)

让我们将其他列表转换为Entrez id:

dn.genes.entrez < bitr (dn。bkgd.genes,fromType = " noisl ",toType = "ENTREZID",OrgDb = org.Hs.eg.db)基因,fromType = " integrl ",toType = "ENTREZID",OrgDb = org.Hs.eg.db)

4.1基因本体论

好的。现在我们准备进行浓缩分析。让我们从基因本体论开始。注意:这可能需要一分钟的时间来运行…因为有太多的GO术语!

egobp <- clusterProfiler:: enrichment(基因= up.基因。Entrez [[2]], universe = bkgd.genes。entrez[[2]], OrgDb = org. hs . example .db, ont = "BP", pAdjustMethod = "fdr", pvalueCutoff = 0.05, #p. gt;一个djust cutoff (https://github.com/GuangchuangYu/clusterProfiler/issues/104) readable = TRUE) head(egobp,10)

当它运行时,您可以检查参数及其含义…

这是完成了!格式和结果有意义吗?你明白这两者吗列?排名靠前的结果的生物学意义有意义吗?

表格是可以的,但我们在R里看图表。方便,clusterProfiler提供了各种默认设置的绘图:

barplot(egobp, showCategory = 20) dotplot(egobp, showCategory = 20)

检查clusterProfiler装饰图案用于其他支持的函数和图。

为了获得更多的控制和定制,这里有一个使用ggplot和相同的enrichGO对象输出clusterProfiler...

ggplot(egobp[1:20], aes(x=reorder(Description, -pvalue), y=Count, fill=-p.adjust)) + geom_bar(stat =" identity") + coord_flip() + scale_fill_continuous(low="blue", high="red") + labs(x =" ", y= "", fill= "p.adjust") + theme(axis.text=element_text(size=11))

使用str (egobp)更详细地研究数据结构,以了解在绘图中可以使用什么。

以下4.4.1EnrichmentMap

我们可以使用Cytoscape中的richmentmap应用程序,使用返回的clusterProfiler结果创建一个富集映射。富集图是一种不同的网络。节点不是代表基因,而是代表路径或功能。这些通路或功能之间的边缘代表共享基因或通路串扰。浓缩图是一种可视化浓缩结果的方法,有助于减少冗余和揭示主题。

来自clusterProfiler的数据需要格式化,以便与richmentmap一起使用。注意,这将在您的工作目录中生成一个richmentmap输入文件,该文件默认位于您运行Rmd的相同目录。

##从类型为76result egobp.results.df <- egobp@result ##从BgRatio egobp.results.df$term中提取一个包含结果的数据框架。size <- gsub("/(\\d+)", "", egobp.results.df$BgRatio) ##筛选术语大小只保留术语。Size => 3,基因计数>= 5,子集egob. results.df <- egob. results.df[which(egob. results.df[,'term。>= 3 & egobp.results. Size ']df[,'Count'] >= 5),] egob. results.df <- egob. results.df。df[c("ID", "Description", "pvalue", "qvalue", "geneID")]df$geneID <- gsub("/", ",", egob. results.df$geneID) ##添加表现型列egob. results.df <- cbind(egob. results.df)Df,表型=1)egobp.results. Df <- egobp.results. Df。df[, c(1,2,3,4,6,5)] ##更改列标题colnames(egobp.results.df) <- c("Name","Description", "pvalue","qvalue","表现型","基因")egobp.results.filename <-file.path(getwd(),paste("clusterprofiler_cluster_enr_results.txt",sep="_")) write.table(egobp.results.df,egobp.results.filename,col.name=TRUE,sep="\t",row.names=FALSE,quote=FALSE)
em_command = paste(' richmentmap build analysisType="generic" ', 'pvalue=',"0.05", 'qvalue=',"0.05", 'similaritycutoff=',"0.25", ' coeffecents =',"JACCARD", ' richmentsdataset1 =',egobp.results. ')Filename, sep=" ") #enrichment map命令将返回新创建网络的suid。em_network_suid <- commandsRun(em_command) renameNetwork(" cluster1_richmentmap_cp ", network=as.numeric(em_network_suid))

控件中的控件打开富集映射网络后,您可以对其进行过滤并更改样式EnrichmentMap面板的控制面板

4.2WikiPathways

这些都很好,但我们来是为了通路分析!到目前为止,一切都是基本的GO分析。在这个基础上,让我们看看WikiPathways能增加什么clusterProfiler包包含对WikiPathways的内置支持,enrichWP而且gseWP.更多细节请参阅他们的手册:https://yulab-smu.top/biomedical-knowledge-mining-book/wikipathways-analysis.html

这些函数将从WikiPathways检索最新的GMT文件。每个月的10号会有新版本。他们需要一个生物参数,该参数应来自受支持生物的列表get_wp_organisms ()

让我们使用enrichWP ()函数首先……

ewp。up <- clusterProfiler:: enrichment wp (up.genes. up)Entrez [[2]], universe = bkgd.genes。entrez[[2]], organism = "Homo sapiens", pAdjustMethod = "fdr", pvalueCutoff = 0.1, #p。调整截止;为了演示目的而放松(头部)

出于某种原因,浓缩器不会自动将基因符号添加到结果对象中,但有一个方便的函数剂量做……

ewp。< -剂量:setReadable (ewp。up, org.Hs.eg.db, keyType = "ENTREZID")

而且,我们可以像以前一样访问所有相同的绘图功能…

barplot (ewp。up, showCategory = 20)up, showCategory = 20)

在我们忘记之前,我们也可以对下调的基因做同样的分析…

ewp。dn <- enrichment wp (dn.genes.)Entrez [[2]], #universe = bkgd。基因[[2]],#提示:comment out to get any results for demo organism = "Homo sapiens", pAdjustMethod = "fdr", pvalueCutoff = 0.1, #p。调整截止;为了演示目的而放松)ewp。dn < - setReadable (ewp。, org.Hs.eg.db, keyType = "ENTREZID") head(ewp.dn) dotplot(ewp. dn)dn, showCategory = 20)

有趣的是,几乎是两倍的下调基因(641对383),但更少的重要通路命中。路径分析是一种比GO分析更集中的方法。它需要一系列的基因功能与已知通路机制相关。所以,基因集的大小并不总是与结果的大小相关。

奖金:我们刚刚所做的也被称为过度表现分析(ORA)。另一种方法是基因集富集分析(GSEA)。GSEA的一个优点是你不需要选择一个任意的log2FC截止点来定义基因集。相反,您需要提供一个已命名的排序值列表(例如,-log10(pvalue)*sign(FC)),然后让GSEA完成工作。下面是步骤,看看你是否能做到:

肺。expr$fcsign <- sign(lung.expr$log2FC)肺。expr$logfdr <- -log10(lung.expr$P.Value)expr团体< - lung.expr logfdr美元/肺。美元expr fcsign sig.lung.expr.entrez <合并(肺。bkgd.genes expr。entrez,。x = "GeneID", by。gsea.sig.lung.expr <- sig.lung.expr. y = " ensemble ")Entrez [,8] names(gsea.sig.lung.expr) <- as.character(sig.lung.expr.entrez[,9]) gsea.sig.lung.expr <- sort(gsea.sig.lung. expr。gwp.sig.lung.expr <- clusterProfiler::gseWP(gsea.sig.lung. expr)expr, pAdjustMethod = "fdr", pvalueCutoff = 0.05, #p。一个djust cutoff organism = "Homo sapiens" ) gwp.sig.lung.expr.df = as.data.frame(gwp.sig.lung.expr) gwp.sig.lung.expr.df[which(gwp.sig.lung.expr.df$NES > 1),] #pathways enriched for upregulated lung cancer genes gwp.sig.lung.expr.df[which(gwp.sig.lung.expr.df$NES < -1),] #pathways enriched for downregulated lung cancer genes

途径分析的一个优点是路径模型已经构建并准备好进行数据覆盖。我们很快就会讲到可视化部分,但首先,让我们看看我们还能从WikiPathways了解到什么。

5探索

再次转向rWikiPathways包,让我们探索一下内容和目前为止的一些路径。既然我们在这里研究肺癌,让我们从寻找相关途径开始…

findPathwayNamesByText(“肺癌”)

哇,好多啊,还有一堆重复!?这种搜索包括所有匹配到“肺”和/或“癌症”的搜索,并根据匹配到这两个词的最佳匹配进行排序。它还包括所有物种的匹配,例如,除了人类,老鼠和大鼠。让我们更具体地说……

信用证。paths <- findPathwaysByText('"lung cancer"') #引号在查询中需要两个术语human.lc. paths <- lc. #路径%>% dplyr::filter(species == "Homo sapiens") #只是人类肺癌途径human.lc。显示路径标题

好吧,只有一些人类路径在标题或描述中明确提到了“肺癌”。这些都不是我们最热门的丰富内容,但我们可能想在我们的探索性数据可视化过程中看看它们,对吗?所以,让我们暂时保留他们的wpid吧……

信用证。wpids < - human.lc。通路$ id lc.wpids

您还可以通过基因标识符、公开引用和本体术语搜索路径。但是基于我们的途径富集分析,我们已经知道了我们想要看到的主要途径。让我们识别他们的wpid…

ewp.up.wpids < - ewp。ID ewp.up.wpids美元

让我们来看看这些。我们可以在浏览器中打开它们,例如…

url <- getPathwayInfo("WP179")$url

你可以使用以下方法访问维基路径网站的所有信息rWikiPathways.您甚至可以查询特定路径的历史或整个站点的最近变化。毕竟这是一个维基!

但我们接下来真正想做的是查看这些路径上的数据。关于这个,我们将转向CytoscapeRCy3包中。

6可视化

Cytoscape是一个流行的网络可视化和分析工具,对开发和脚本具有强大的社区支持。由于路径只是一种特殊类型的网络,它非常适合为路径分析结果提供高质量的可视化。

我们有RCy3包已经装好了,但我们还得Cytoscape已启动(参见步骤1)。安装(如果您还没有安装)。一次Cytoscape是跑步,努力吗它用下面的命令:

cytoscapePing ()

如果您已经加载并运行了所有内容,那么您所需要做的就是运行这个命令从WikiPathways导入一个路径到Cytoscape:

RCy3: commandsRun(“wikipathways import-as-pathway id = WP179 ')

在这里!该途径的最新批准版本,现在在Cytoscape中作为一个带有注释的基因、蛋白质和代谢物的网络模型。出于性能原因,Cytoscape设置了一个视图阈值,以便在缩小时隐藏细节(如节点标签)。如果你想要覆盖这个,使用…

toggleGraphicsDetails ()

让我们加载在富集分析中使用的数据,这些数据一开始就指向了这个路径。我们只需要告诉Cytoscape数据中的哪一列包含标识符(在本例中是ensemble bl IDs),而Cytoscape节点表中的这一列包含相应的标识符。

loadTableData(肺。expr, data.key.column = "GeneID", table.key.column = " ensemble ")

注意:如果您得到一个错误,则可能没有自动添加“ensemble”列。对于这个演示,你可以简单地引用“XrefId”列,像这样:loadTableData(肺。expr, data.key.column = " GeneID ", table.key.column = " XrefId ")的所有情况都可以使用此修复loadTableData在下面。

现在我们可以定义视觉样式来在这个路径上可视化我们的数据。首先,让我们设置节点填充颜色来显示log2折叠变化数据。

setNodeColorMapping("log2FC", colors=paletteColorBrewerRdBu, style.name = " wikipaths ")

你也可以将p值映射到边框颜色等。节点和边缘上有许多可视化属性可用于数据可视化!

脚本的力量在于将某件事做多次……所以,现在让我们将同样的数据和视觉风格应用到所有我们感兴趣的路径上。仅仅两行代码…

拉普兰人(ewp.up。wpid,函数(x) {commandsRun(paste0('wikipathways import-as-pathway id=',x))expr, data.key.column = "GeneID", table.key.column = " integrl ") toggleGraphicsDetails()})

附加说明:我们发现的那些肺癌途径呢?让我们来看看这些数据的覆盖层。

拉普兰人(lc。wpid,函数(x){commandsRun(paste0('wikipathways import-as-pathway id=',x))expr, data.key.column = "GeneID", table.key.column = " integrl ") toggleGraphicsDetails()})

7扩展

现在我们的路径已经加载到Cytoscape中,这就打开了大量潜在的分析和可视化选项!检查Cytoscape手册而且应用程序商店,首先。您也可以浏览Cytoscape教程而且RCy3小插曲如果你想要实际的例子。

在这个小插图中,我们将使用CyTargetLinker为Cytoscape应用程序扩展药物-靶点相互作用通路的网络表示。

首先,让我们重新导入路径作为一个网络使用这个稍微修改过的命令:

commandrun ('wikipathways import-as-network id=WP179')expr, data.key.column = "GeneID", table.key.column = " ensemble ")setNodeColorMapping("log2FC", data.values, node.colors, default.color = "#FFFFFF", style.name = "WikiPathways-As-Network")

看出不同了吗?相同的数据,相同的路径源,但不同的表示。当你想要添加更多节点、遍历路径、执行自动布局等时,路径的网络视图非常有用。

接下来,我们需要加载最新的药物目标数据库。支持的数据库CyTargetLinker被称为linksets并可从CyTargetLinker网站.我们已经提供了一个例子drugbank链接集,所以你不需要下载任何东西。

unzip(system.file("extdata","drugbank-5.1.0.xgmml.zip", package="rWikiPathways"), exdir = getwd()) drugbank <- file.path(getwd(), "drugbank-5.1.0.xgmml")

现在我们有了drugbank链接集加载后,我们可以运行CyTargetLinker作为命令:

commandsRun('cytargetlinker extend idAttribute=" suitbl " linkSetFiles="', drugbank, '"'))

这将返回关于所添加内容的信息。在《Cytoscape》中,您现在拥有原始网络的副本,但现在有了额外的节点和边。检查一下……

嗯,它们有点普通,很难看到。让我们使用Cytoscape可视化样式来解决这个问题!

我的。药物<- selectNodes("药物",by。坳= " CTL。$nodes #通过列值收集节点suid的简单方法clearSelection() setNodeColorBypass(my。药物,“# DD99FF”)setNodeShapeBypass(我。药物,药物“六角”)。标签<- getTableColumns(columns=c("SUID","CTL.label"))药物。label <- na. ignore (drug.labels) mapply(function(x,y) setNodeLabelBypass(x,y),药物。标签SUID美元,drug.labels CTL.label美元)

现在我们有了标记为紫色六边形的药物,与我们从肺癌数据集的功能富集分析中获得的WikiPathways的网络视图相互作用。太酷了!希望你现在可以想象,以其他方式扩展这个(或其他途径),例如,TF和miRNA相互作用。或者应用大量其他的Cytoscape应用程序来分析和可视化这个结果。

8保存

最后,但并非最不重要的是,确保在此过程中保存您的工作。下面是你如何从肺癌数据集中保存你的向上和向下调节的子集,作为R对象,很容易读取和分享:

保存(ewp。up, file = "lung_cancer_ewp_up.Rdata")dn, file = "lung_cancer_ewp_down.Rdata")

会话文件保存Cytoscape中的所有内容,包括路径、网络、数据和样式。和大多数项目软件一样,我们建议经常保存!

# .cys saveSession(“tutorial_session”)

注意:如果您没有指定完整的路径,文件将相对于您的Cytoscape安装目录保存,例如,/Applications/Cytoscape_v3.6.1/…或您可能没有写权限的地方。

您可以导出极高分辨率的图像,包括矢量图形格式。

export timage ('tutorial_image2', type='PDF') #.png;使用缩放或宽度参数来增加尺寸/分辨率

由于涉及到这么多库,在执行实际分析时跟踪版本信息是一个好主意,这样您(和其他人)可以可靠地再现结果:

sessionInfo ()