# Make sure you run at least step 1 + step 2 before this
# the input for this optional step is a list of pathway names
# that you find in res.wp.df table
# the idea is that you find all genes that are associated
# with the pathways, make one PPI network, visualize the data
# and find drug targets
# so instead of finding the module from the large network,
# you define the module based on the pathways of interest
# #############################################
# GET GO TERM
# #############################################
library(tidyr)
##
## Attaching package: 'tidyr'
## The following object is masked from 'package:S4Vectors':
##
## expand
# Check if Cytoscape is running
cytoscapePing()
## You are connected to Cytoscape!
# look up pathway names in the enrichment result tables - you can add more
# in the vector if you need to
# these pathways are from the lung cancer practical - replace with pathways
# from your breast cancer analysis!
pathways <- pathways.stepeight
geneSets <- res.wp@geneSets
genes <- geneSets[names(geneSets) %in% pathways]
# long format first: Gene - Pathway
gene_pathway_df <- do.call(rbind, lapply(names(genes), function(pw) {
data.frame(Pathway = pw, Gene = genes[[pw]], stringsAsFactors = FALSE)
}))
pathway.genes <- gene_pathway_df %>%
dplyr::mutate(Present = 1) %>%
tidyr::pivot_wider(names_from = Pathway, values_from = Present, values_fill = 0)
# add NumPathways column: count how many pathways each gene appears in
pathway.genes <- pathway.genes %>%
mutate(NumPathways = rowSums(across(all_of(pathways))))
# reorder columns: Gene, N_Pathways, then pathways
pathway.genes <- pathway.genes %>%
select(Gene, NumPathways, all_of(pathways))
# view result
head(pathway.genes)
## # A tibble: 6 × 7
## Gene NumPathways WP_CELL_CYCLE WP_G1_TO_S_CELL_CYCL…¹ WP_CHEMOKINE_SIGNALING WP_RAS_SIGNALING
## <chr> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 ENSG00000… 2 1 0 0 1
## 2 ENSG00000… 1 1 0 0 0
## 3 ENSG00000… 1 1 0 0 0
## 4 ENSG00000… 1 1 0 0 0
## 5 ENSG00000… 1 1 0 0 0
## 6 ENSG00000… 1 1 0 0 0
## # ℹ abbreviated name: ¹WP_G1_TO_S_CELL_CYCLE_CONTROL
## # ℹ 1 more variable: WP_INSULIN_SIGNALING <dbl>
query <- format_csv(as.data.frame(pathway.genes$Gene), col_names=F, escape = "double", eol =",")
commandsPOST(paste0('string protein query cutoff=0.9 newNetName="PPI network" query="',query,'" limit=0 species="Homo sapiens"'))
## SUID
## 13499
analyzeNetwork()
## networkTitle nodeCount
## "STRING network - PPI network - 1 (undirected)" "546"
## edgeCount avNeighbors
## "4477" "17.41634241245136"
## diameter radius
## "11" "6"
## avSpl cc
## "3.2834171464112076" "0.49373196547372655"
## density heterogeneity
## "0.03394998520945684" "0.8333075774613777"
## centralization ncc
## "0.11660118177387914" "32"
## time
## "0.102"
RCy3::loadTableData(data=data, data.key.column = "GeneID", table = "node", table.key.column = "query term")
## [1] "Success: Data loaded in defaultnode table"
RCy3::loadTableData(data=pathway.genes, data.key.column = "Gene", table = "node", table.key.column = "query term")
## [1] "Success: Data loaded in defaultnode table"
# VISUALIZATION 1
# fill color = log2FC gradient
# green border = significance
RCy3::createVisualStyle("log2FC vis")
RCy3::setNodeLabelMapping("display name", style.name = "log2FC vis")
## NULL
control.points <- c (-3.0, 0.0, 3.0)
colors <- c ('#5588DD', '#FFFFFF', '#DD8855')
setNodeColorMapping("log2FC", control.points, colors, style.name = "log2FC vis", default.color = "#C0C0C0")
## NULL
RCy3::setEdgeColorDefault("#CCCCCC", style.name = "log2FC vis")
RCy3::setVisualStyle("log2FC vis")
## message
## "Visual Style applied."
RCy3::lockNodeDimensions("TRUE", "log2FC vis")
# Select significant genes and change border color
x <- RCy3::createColumnFilter('adj.P.Value', 'adj.P.Value', 0.05, "LESS_THAN")
## No edges selected.
RCy3::setNodeBorderColorBypass(x$nodes, new.colors = "#009900")
RCy3::setNodeBorderWidthBypass(x$nodes, new.sizes = 7)
RCy3::clearSelection
## function (type = "both", network = NULL, base.url = .defaultBaseUrl)
## {
## net.SUID <- getNetworkSuid(network, base.url)
## if (type %in% c("nodes", "both")) {
## resource.uri <- res <- cyrestPUT(paste("networks", net.SUID,
## "tables/defaultnode/columns/selected", sep = "/"),
## parameters = list(default = "false"), base.url = base.url)
## }
## if (type %in% c("edges", "both")) {
## res <- cyrestPUT(paste("networks", net.SUID, "tables/defaultedge/columns/selected",
## sep = "/"), parameters = list(default = "false"),
## base.url = base.url)
## }
## invisible(res)
## }
## <bytecode: 0x559ad3c1c5b8>
## <environment: namespace:RCy3>
exportImage(paste0(out.folder,'selected-pathways-PPI.png'), type='PNG', zoom=500) #.png; use zoom or width args to increase size/resolution
## file
## "/home/peipr/gits/BBS2061-breast-cancer/scripts/../output/selected-pathways-PPI.png"
# ==================================================================
# Extend the process PPI with known drug-target interactions from DrugBank
# ==================================================================
unzip(system.file("extdata","drugbank-5.1.0.xgmml.zip", package="rWikiPathways"), exdir = getwd())
drugbank <- file.path(getwd(), "drugbank-5.1.0.xgmml")
commandsRun(paste0('cytargetlinker extend idAttribute="GeneID" linkSetFiles="', drugbank, '"') )
## [1] "Extension step: 1" "Linkset: DrugBank_v5.1.0 (approved)"
## [3] "Added edges: 378" "Added nodes: 196"
commandsRun('cytargetlinker applyLayout network="current"')
my.drugs <- selectNodes("drug", by.col = "CTL.Type", preserve = FALSE)$nodes #easy way to collect node SUIDs by column value
clearSelection()
setNodeColorBypass(my.drugs, "#DD99FF")
setNodeShapeBypass(my.drugs, "hexagon")
drug.labels <- getTableColumns(columns=c("SUID","CTL.label"))
drug.labels <- na.omit(drug.labels)
mapply(function(x,y) setNodeLabelBypass(x,y), drug.labels$SUID, drug.labels$CTL.label)
## [[1]]
## NULL
##
## [[2]]
## NULL
##
## [[3]]
## NULL
##
## [[4]]
## NULL
##
## [[5]]
## NULL
##
## [[6]]
## NULL
##
## [[7]]
## NULL
##
## [[8]]
## NULL
##
## [[9]]
## NULL
##
## [[10]]
## NULL
##
## [[11]]
## NULL
##
## [[12]]
## NULL
##
## [[13]]
## NULL
##
## [[14]]
## NULL
##
## [[15]]
## NULL
##
## [[16]]
## NULL
##
## [[17]]
## NULL
##
## [[18]]
## NULL
##
## [[19]]
## NULL
##
## [[20]]
## NULL
##
## [[21]]
## NULL
##
## [[22]]
## NULL
##
## [[23]]
## NULL
##
## [[24]]
## NULL
##
## [[25]]
## NULL
##
## [[26]]
## NULL
##
## [[27]]
## NULL
##
## [[28]]
## NULL
##
## [[29]]
## NULL
##
## [[30]]
## NULL
##
## [[31]]
## NULL
##
## [[32]]
## NULL
##
## [[33]]
## NULL
##
## [[34]]
## NULL
##
## [[35]]
## NULL
##
## [[36]]
## NULL
##
## [[37]]
## NULL
##
## [[38]]
## NULL
##
## [[39]]
## NULL
##
## [[40]]
## NULL
##
## [[41]]
## NULL
##
## [[42]]
## NULL
##
## [[43]]
## NULL
##
## [[44]]
## NULL
##
## [[45]]
## NULL
##
## [[46]]
## NULL
##
## [[47]]
## NULL
##
## [[48]]
## NULL
##
## [[49]]
## NULL
##
## [[50]]
## NULL
##
## [[51]]
## NULL
##
## [[52]]
## NULL
##
## [[53]]
## NULL
##
## [[54]]
## NULL
##
## [[55]]
## NULL
##
## [[56]]
## NULL
##
## [[57]]
## NULL
##
## [[58]]
## NULL
##
## [[59]]
## NULL
##
## [[60]]
## NULL
##
## [[61]]
## NULL
##
## [[62]]
## NULL
##
## [[63]]
## NULL
##
## [[64]]
## NULL
##
## [[65]]
## NULL
##
## [[66]]
## NULL
##
## [[67]]
## NULL
##
## [[68]]
## NULL
##
## [[69]]
## NULL
##
## [[70]]
## NULL
##
## [[71]]
## NULL
##
## [[72]]
## NULL
##
## [[73]]
## NULL
##
## [[74]]
## NULL
##
## [[75]]
## NULL
##
## [[76]]
## NULL
##
## [[77]]
## NULL
##
## [[78]]
## NULL
##
## [[79]]
## NULL
##
## [[80]]
## NULL
##
## [[81]]
## NULL
##
## [[82]]
## NULL
##
## [[83]]
## NULL
##
## [[84]]
## NULL
##
## [[85]]
## NULL
##
## [[86]]
## NULL
##
## [[87]]
## NULL
##
## [[88]]
## NULL
##
## [[89]]
## NULL
##
## [[90]]
## NULL
##
## [[91]]
## NULL
##
## [[92]]
## NULL
##
## [[93]]
## NULL
##
## [[94]]
## NULL
##
## [[95]]
## NULL
##
## [[96]]
## NULL
##
## [[97]]
## NULL
##
## [[98]]
## NULL
##
## [[99]]
## NULL
##
## [[100]]
## NULL
##
## [[101]]
## NULL
##
## [[102]]
## NULL
##
## [[103]]
## NULL
##
## [[104]]
## NULL
##
## [[105]]
## NULL
##
## [[106]]
## NULL
##
## [[107]]
## NULL
##
## [[108]]
## NULL
##
## [[109]]
## NULL
##
## [[110]]
## NULL
##
## [[111]]
## NULL
##
## [[112]]
## NULL
##
## [[113]]
## NULL
##
## [[114]]
## NULL
##
## [[115]]
## NULL
##
## [[116]]
## NULL
##
## [[117]]
## NULL
##
## [[118]]
## NULL
##
## [[119]]
## NULL
##
## [[120]]
## NULL
##
## [[121]]
## NULL
##
## [[122]]
## NULL
##
## [[123]]
## NULL
##
## [[124]]
## NULL
##
## [[125]]
## NULL
##
## [[126]]
## NULL
##
## [[127]]
## NULL
##
## [[128]]
## NULL
##
## [[129]]
## NULL
##
## [[130]]
## NULL
##
## [[131]]
## NULL
##
## [[132]]
## NULL
##
## [[133]]
## NULL
##
## [[134]]
## NULL
##
## [[135]]
## NULL
##
## [[136]]
## NULL
##
## [[137]]
## NULL
##
## [[138]]
## NULL
##
## [[139]]
## NULL
##
## [[140]]
## NULL
##
## [[141]]
## NULL
##
## [[142]]
## NULL
##
## [[143]]
## NULL
##
## [[144]]
## NULL
##
## [[145]]
## NULL
##
## [[146]]
## NULL
##
## [[147]]
## NULL
##
## [[148]]
## NULL
##
## [[149]]
## NULL
##
## [[150]]
## NULL
##
## [[151]]
## NULL
##
## [[152]]
## NULL
##
## [[153]]
## NULL
##
## [[154]]
## NULL
##
## [[155]]
## NULL
##
## [[156]]
## NULL
##
## [[157]]
## NULL
##
## [[158]]
## NULL
##
## [[159]]
## NULL
##
## [[160]]
## NULL
##
## [[161]]
## NULL
##
## [[162]]
## NULL
##
## [[163]]
## NULL
##
## [[164]]
## NULL
##
## [[165]]
## NULL
##
## [[166]]
## NULL
##
## [[167]]
## NULL
##
## [[168]]
## NULL
##
## [[169]]
## NULL
##
## [[170]]
## NULL
##
## [[171]]
## NULL
##
## [[172]]
## NULL
##
## [[173]]
## NULL
##
## [[174]]
## NULL
##
## [[175]]
## NULL
##
## [[176]]
## NULL
##
## [[177]]
## NULL
##
## [[178]]
## NULL
##
## [[179]]
## NULL
##
## [[180]]
## NULL
##
## [[181]]
## NULL
##
## [[182]]
## NULL
##
## [[183]]
## NULL
##
## [[184]]
## NULL
##
## [[185]]
## NULL
##
## [[186]]
## NULL
##
## [[187]]
## NULL
##
## [[188]]
## NULL
##
## [[189]]
## NULL
##
## [[190]]
## NULL
##
## [[191]]
## NULL
##
## [[192]]
## NULL
##
## [[193]]
## NULL
##
## [[194]]
## NULL
##
## [[195]]
## NULL
##
## [[196]]
## NULL
# Try different layouts (e.g. yFiles organic layout) if nodes are overlapping too much
# Cytoscape > Layout menu!
exportImage(paste0(out.folder,'selected-pathways-PPI-with-drugs.png'), type='PNG', zoom=500) #.png; use zoom or width args to increase size/resolution
## file
## "/home/peipr/gits/BBS2061-breast-cancer/scripts/../output/selected-pathways-PPI-with-drugs.png"
# ==================================================================
# SAVING CYTOSCAPE SESSION
# ==================================================================
saveSession(paste0(out.folder,'selected-pathways-PPI.cys'))
## OPTIONAL - FILTER network to only include drugs + targets
selectNodes(my.drugs)
## $nodes
## [1] 75250 76273 74740 75766 75256 74746 75772 74752 75778 75265 74758 75784 75271 74764 76303 75793
## [17] 74773 75799 75289 74779 76318 75805 75298 74785 75814 75304 74791 75310 76333 74797 75826 76339
## [33] 74803 75832 75319 74809 76348 75838 75325 74815 76354 74821 75337 74827 75853 75343 74833 75352
## [49] 76375 74842 75358 76384 74848 75871 75364 74854 76390 74860 75886 75373 75379 74869 75895 75385
## [65] 74875 75904 75391 74881 75910 74887 75916 75406 74893 75922 74902 75928 75415 74908 75424 74914
## [81] 75937 75430 74920 75436 75952 75442 74929 75448 74938 75964 75454 74944 75970 75460 74950 74956
## [97] 75979 74962 75475 74968 76000 75490 74980 76006 74986 76012 74992 76018 74998 76024 75004 75517
## [113] 76036 75523 75016 75532 75022 76045 75028 76051 75541 76060 75547 75037 76066 75553 75043 75565
## [129] 76081 75061 76090 75577 75067 75076 76099 75082 76108 75598 75088 75604 75094 76120 75610 75106
## [145] 76129 75622 75112 75628 76144 75121 76153 75643 75133 75652 75139 75145 76174 75151 76180 74644
## [161] 75157 76192 75679 75169 76198 75691 75181 76210 75700 75706 75712 75199 76225 75718 75205 74698
## [177] 76234 75724 75214 74704 76240 75730 75220 74710 74716 75739 75232 76255 74722 75745 75238 76261
## [193] 74728 76267 74734 75757
##
## $edges
## list()
selectFirstNeighbors()
## $nodes
## [1] 39920 75250 40945 76273 74740 41460 75766 39925 75256 74746 41465 75772 41470 74752 75778 75265
## [17] 41475 74758 40965 75784 75271 41480 39945 74764 41485 76303 75793 74773 75799 39960 75289 39450
## [33] 42010 74779 76318 75805 75298 74785 42020 75814 75304 74791 41000 75310 41005 76333 74797 40495
## [49] 75826 41010 74803 76339 75832 75319 74809 76348 75838 75325 74815 76354 41025 40515 74821 41030
## [65] 40520 75337 74827 40525 75853 41550 75343 41040 74833 75352 76375 74842 75358 74848 76384 75871
## [81] 75364 76390 74854 74860 75886 75373 75379 74869 75895 39545 75385 74875 41085 75904 40575 75391
## [97] 74881 40580 75910 40070 74887 75916 75406 74893 40590 75922 74902 41110 75928 75415 74908 39580
## [113] 75424 74914 75937 41635 75430 74920 40105 41130 75436 75952 75442 74929 75448 40120 74938 41145
## [129] 39610 75964 75454 74944 75970 75460 74950 40135 41160 74956 75979 41680 74962 75475 40660 74968
## [145] 40665 41180 76000 75490 74980 40675 41700 76006 74986 76012 39660 40685 74992 40175 41200 76018
## [161] 74998 76024 40695 40185 75004 40700 75517 41215 76036 75523 39685 40710 75016 40200 39690 75532
## [177] 41740 75022 76045 41230 75028 41235 76051 75541 41750 40730 76060 41755 75547 75037 39710 76066
## [193] 75553 75043 41765 41770 39725 75565 41775 76081 75061 76090 41785 75577 41275 75067 75076 76099
## [209] 41800 75082 76108 39755 40780 75598 75088 39760 75604 41300 75094 40790 76120 41815 75610 40795
## [225] 40285 75106 41825 76129 41315 39780 75622 40805 75112 40810 75628 41325 76144 40815 75121 39795
## [241] 41845 39800 76153 75643 39805 75133 75652 75139 75145 41355 39820 76174 40845 41870 75151 76180
## [257] 74644 41875 75157 41370 39835 41885 40350 76192 75679 39840 75169 76198 41385 39850 75691 75181
## [273] 76210 41905 75700 75706 40380 39870 75712 75199 76225 75718 75205 76234 74698 75724 75214 74704
## [289] 76240 75730 75220 39380 74710 74716 41435 75739 75232 76255 74722 75745 40930 75238 76261 74728
## [305] 40935 76267 40940 74734 75757 40430
##
## $edges
## list()
selected <- getSelectedNodes()
createSubnetwork("selected", "all")
## network
## 77563
RCy3::layoutNetwork()