Actually understanding the pathway context of molecular changes is important. But it's difficult. For toxicology, pharmacology and biochemistry, it is important to be able to see how chemicals and the environment change molecular signaling. Perhaps we have a mixture of transcriptomic, metabolomic, proteomic, and high throughput screening assay results, and we want to make sense of all of this information at the same time.
Or maybe our challenge is that we want to figure out how to develop a high throughput screening battery that can predict some disease or adverse outcome. This may be important because we are trying to decrease the number of animal assays required, or we want to use information from adverse outcome pathways (AOPs), but we just don't have the tools to work with those.
This is where the AOPXplorer comes in.
The AOPXplorer was designed to facilitate analyses of molecular information at the pathway scale. The key motivator is to help people visualize their data and make better informed decisions using biological data. It's that simple.
Here are some user stories that AOPXplorer was designed to tackle:
Jim wants to design a screening assay battery for hepatic steatosis, and knows that several different pathways can get him there. Jim can use the AOPXplorer to use network theory to identify just those pathway key events that need to be monitored to infer whether or not a chemical is likely to cause hepatic steatosis.
Larry wants to see the changes in gene expression as well as the changes in metabolite levels and how they may interplay within a biological pathway of interest.
Bob overlays gene expression data onto the AOP for lung tumorigenesis to predict whether or not his chemical of interest may cause lung cancer.
John uses the AOPXplorer to visualize all of the AOPs for fish fecundity as a network.
Before running any of the examples, and really, before running AOPXplorer, make sure you have the following 2 applications running:
1) Cytoscape (v3.4.0 or above)
2) Fuseki
To start Fuseki in Windows: double click the start_fuseki.bat file in the AOXPlorer download file
To start Fuseki
The AOPXplorer uses the AOP Ontology (AOPO) as its primary data source for AOPs. The AOPO is a community resource that is updated frequently to bring in the latest AOP knowledge from the community.
In this example, we will build an AOPN for Steatosis. There are several AOPs for steatosis in the AOPO. What we're going to do is bring all of these together into a single network. The good news is that the AOPO does most of the work for us -- it makes sure that the individual parts that are the same across the AOPs are brought together seamlessly. So, here goes:
First, we're going to load up the AOPXplorer library. Then we're going to use the get_aopn function to get only the "Steatosis" AOPN. Finally, we're going to print it out.
library(aopxplorer) x <- get_aopn("Steatosis") plot(x)
The AOPO contains many different adverse outcomes (AOs). If you'd like to see the list of the AOs, you can easily query for them.
list_adverse_outcomes()
Let's say you have assay data that you want to overlay onto the network in Cytoscape. No problem. Just make sure you've got it as a list, and you're off to the races (Example 4 will cover a slightly more complicated situation to overlay data). For this example, you need to have data in your list for each node. When you run the V(x)$name you'll get the listing of the node names in order. Make sure that your data list matches this order. So that your_data[[1]] contains the data for PPARalpha. Keep in mind, if you had your data in a data.frame or something like that this would've been considerably easier. You could just slice and dice it, re-arrange, and put it into the proper order.
x <- get_aopn("Steatosis") V(x)$name your_data <- list() your_data[[1]] <- c(1,1,1,1) your_data[[2]] <- c(11, 12, 13, 14) your_data[[3]] <- c(15.4, 1.1, 17.2, 4.1) your_data[[4]] <- c(NA, NA, NA, NA) your_data[[5]] <- c(NA, NA, NA, NA) your_data[[6]] <- c(NA, NA, NA, NA) your_data[[7]] <- c(NA, NA, NA, NA) your_data[[8]] <- c(NA, NA, NA, NA) your_data[[9]] <- c(NA, NA, NA, NA) your_data[[10]] <- c(NA, NA, NA, NA) your_data[[11]] <- c(NA, NA, NA, NA) data_steatosis_net <- associate_data_aopn(your_data, x) cytoscape_aopn <- toCytoscape(data_steatosis_net) send_aopn(cytoscape_aopn)
Okay, so you've done Example 3 and you said, "well that's too much work!" Yeah, we agree. So let's try for something that's a little less work, a little more code-y, and hopefully not as manual. Let's imagine you have your data in a data.frame. Let's also imagine that you have data for more nodes than you have in the network. The first part of this example is going to build out the data so that we have something kinda realistic. The next part will do the fun part.
So let's first build the data (ordinarily, you'll already have this readily available to you) and we'll call it mat_dat. For these purposes, it's a matrix, but it could just as easily be a data.frame. All the steps after that are going to be things that you may need to do on a routine basis:
mat_dat <- matrix(runif(60), nrow=15, ncol=4, byrow=TRUE, dimnames = list(c("PPARalpha", "HSD17B4", "blahx", "FXR", "steatosis", "blahy", "SREBP1", "Rheb1", "mTORC1", "IRS1", "Tsc1", "GSK3", "blahq", "blahs", "Akt2"), c("C1", "C2", "C3", "C4"))) x <- get_aopn("Steatosis") V(x)$name mat_names_match <- rownames(mat_dat)[which(rownames(mat_dat) %in% V(x)$name)] mat_dat_pared <- mat_dat[mat_names_match, ] mat_dat_pared_rearranged <- mat_dat_pared[match(V(x)$name, mat_names_match),] mat_dat_pared_list <- setNames(split(mat_dat_pared_rearranged, seq(nrow(mat_dat_pared_rearranged))), rownames(mat_dat_pared_rearranged)) data_steatosis_net <- associate_data_aopn(mat_dat_pared_list, x) cytoscape_aopn <- toCytoscape(data_steatosis_net) send_aopn(cytoscape_aopn)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.