Here, we are evaluating the expression of latent variables in NF tumors as they pertain to the type of the tumor. These data were generated as part of developing the braiNFood app.
First, import packages to process and plot the data.
library(dplyr)
library(purrr)
library(tidyr)
library(stringr)
library(ggbeeswarm)
library(synapser)
synLogin()
## Welcome, Robert Allaway!
## NULL
mp_res<-synTableQuery("SELECT * FROM syn21046991")$asDataFrame() %>%
filter(tumorType!="NA",
!grepl('xenograft', specimenID, ignore.case = T),
!specimenID %in% c("BI386-004","CW225-001","DW356-002",
"JK368-003", "SK436-005"))
##
Create CSV FileHandle [##########----------]50.28% 79321/157768
Create CSV FileHandle [####################]100.00% 157768/157768 Done...
Downloading [#-------------------]7.43% 2.0MB/26.9MB (2.8MB/s) Job-99655033760820924587338411.csv
Downloading [###-----------------]14.85% 4.0MB/26.9MB (4.2MB/s) Job-99655033760820924587338411.csv
Downloading [####----------------]22.28% 6.0MB/26.9MB (5.2MB/s) Job-99655033760820924587338411.csv
Downloading [######--------------]29.71% 8.0MB/26.9MB (6.0MB/s) Job-99655033760820924587338411.csv
Downloading [#######-------------]37.13% 10.0MB/26.9MB (6.5MB/s) Job-99655033760820924587338411.csv
Downloading [#########-----------]44.56% 12.0MB/26.9MB (7.0MB/s) Job-99655033760820924587338411.csv
Downloading [##########----------]51.99% 14.0MB/26.9MB (7.4MB/s) Job-99655033760820924587338411.csv
Downloading [############--------]59.41% 16.0MB/26.9MB (7.7MB/s) Job-99655033760820924587338411.csv
Downloading [#############-------]66.84% 18.0MB/26.9MB (8.0MB/s) Job-99655033760820924587338411.csv
Downloading [###############-----]74.27% 20.0MB/26.9MB (8.3MB/s) Job-99655033760820924587338411.csv
Downloading [################----]81.69% 22.0MB/26.9MB (8.6MB/s) Job-99655033760820924587338411.csv
Downloading [##################--]89.12% 24.0MB/26.9MB (8.3MB/s) Job-99655033760820924587338411.csv
Downloading [###################-]96.54% 26.0MB/26.9MB (8.4MB/s) Job-99655033760820924587338411.csv
Downloading [####################]100.00% 26.9MB/26.9MB (8.4MB/s) Job-99655033760820924587338411.csv Done...
#(getting rid of xenograft samples)
plier_model <- readr::read_rds(synGet("syn18689545")$path)
plier_loadings_df <- plier_model$Z %>% as.data.frame() %>% purrr::set_names(rownames(plier_model$B))
drug_targets <- feather::read_feather(synGet('syn20700199')$path)
drug_targets <- drug_targets %>%
filter(mean_pchembl > 7) %>%
mutate(gene= hugo_gene) %>%
select(gene, std_name)
We already have the expression of the latent variables in these tumors. Let’s filter out low variance samples.
Then, we perform a kruskall-wallis test and adjust the resulting p-value based on the expression of a latent variable as a function of the sex of the patient the sample was taken from.
Then we take the tidy data frame of latent variable data, group by the variable and tumor type, nest the dataframe based on those groups, and then calculate the p-value for each nested data frame. Finally, we plot a boxplot for any latent variable where the BH-adjusted p-value is <0.1 when comparing female to male tumors.
In addition, we’ll also do this analysis between the two sexes without regard for the tumor type to see if there are any consistent differences when the type of tumor is not a factor.
##filter out low variance samples, only look at top 10% most variant across cohort
mp_res_sd <- mp_res %>%
group_by(latent_var) %>%
summarize(sd = sd(value)) %>%
filter(sd > quantile(sd, 0.90))
res_model <- mp_res %>%
filter(latent_var %in% mp_res_sd$latent_var) %>%
group_by(latent_var) %>%
nest() %>%
mutate(pval= map(data,function(x){
kruskal.test(formula = value ~ tumorType, data = x)$p.value
}) %>%
as.numeric %>%
signif(., digits = 3)) %>%
mutate(p_adj = p.adjust(pval, n = nrow(.), method = "BH")) %>%
filter(p_adj < 0.05) %>%
arrange(-p_adj)
tidy <- plier_loadings_df %>%
tibble::rownames_to_column('gene') %>%
gather(lv, loading, -gene) %>%
filter(loading > 0)
res_plot <- res_model %>%
mutate(title = paste0(latent_var," BH p-value = ", p_adj) %>%
str_wrap(., width = 40)) %>%
mutate(plots = map2(title, data, function(.x,.y){
ggplot(data = .y %>% mutate(tumorType = str_wrap(tumorType, width = 15))) +
geom_boxplot(aes(x = tumorType, y = value, fill = tumorType)) +
geom_beeswarm(aes(x = tumorType, y = value)) +
ggtitle(.x) +
theme_bw() +
theme(axis.text.x = element_text(angle = 90, hjust = 0.5, vjust = 0.5))
})) %>%
mutate(plots_loading = map(latent_var, function(x){
ggplot(tidy %>% filter(lv == x) %>% top_n(30, loading)) +
geom_bar(aes(x=reorder(gene, -loading), y=loading, fill = gene %in% drug_targets$gene), stat = "identity") +
scale_fill_discrete(name="Druggable") +
theme_bw() +
theme(axis.text.x = element_text(angle = 90, hjust = 1, vjust = 0.5)) +
labs(x = "Gene", y = "LV Loading")
}))
DT::datatable(res_model %>% select(-data))
Here are the latent variables where BH p < 0.05 when grouping by tumor type. Again, we’re only considering lvs in the top 10% of variance across the cohort.
plots <- map2(res_plot$plots,res_plot$plots_loading,function(.x,.y){
combo_plot <- gridExtra::grid.arrange(.x,.y)
})
plots
## [[1]]
## TableGrob (2 x 1) "arrange": 2 grobs
## z cells name grob
## 1 1 (1-1,1-1) arrange gtable[layout]
## 2 2 (2-2,1-1) arrange gtable[layout]
##
## [[2]]
## TableGrob (2 x 1) "arrange": 2 grobs
## z cells name grob
## 1 1 (1-1,1-1) arrange gtable[layout]
## 2 2 (2-2,1-1) arrange gtable[layout]
##
## [[3]]
## TableGrob (2 x 1) "arrange": 2 grobs
## z cells name grob
## 1 1 (1-1,1-1) arrange gtable[layout]
## 2 2 (2-2,1-1) arrange gtable[layout]
##
## [[4]]
## TableGrob (2 x 1) "arrange": 2 grobs
## z cells name grob
## 1 1 (1-1,1-1) arrange gtable[layout]
## 2 2 (2-2,1-1) arrange gtable[layout]
##
## [[5]]
## TableGrob (2 x 1) "arrange": 2 grobs
## z cells name grob
## 1 1 (1-1,1-1) arrange gtable[layout]
## 2 2 (2-2,1-1) arrange gtable[layout]
##
## [[6]]
## TableGrob (2 x 1) "arrange": 2 grobs
## z cells name grob
## 1 1 (1-1,1-1) arrange gtable[layout]
## 2 2 (2-2,1-1) arrange gtable[layout]
##
## [[7]]
## TableGrob (2 x 1) "arrange": 2 grobs
## z cells name grob
## 1 1 (1-1,1-1) arrange gtable[layout]
## 2 2 (2-2,1-1) arrange gtable[layout]
##
## [[8]]
## TableGrob (2 x 1) "arrange": 2 grobs
## z cells name grob
## 1 1 (1-1,1-1) arrange gtable[layout]
## 2 2 (2-2,1-1) arrange gtable[layout]
##
## [[9]]
## TableGrob (2 x 1) "arrange": 2 grobs
## z cells name grob
## 1 1 (1-1,1-1) arrange gtable[layout]
## 2 2 (2-2,1-1) arrange gtable[layout]
##
## [[10]]
## TableGrob (2 x 1) "arrange": 2 grobs
## z cells name grob
## 1 1 (1-1,1-1) arrange gtable[layout]
## 2 2 (2-2,1-1) arrange gtable[layout]
##
## [[11]]
## TableGrob (2 x 1) "arrange": 2 grobs
## z cells name grob
## 1 1 (1-1,1-1) arrange gtable[layout]
## 2 2 (2-2,1-1) arrange gtable[layout]
##
## [[12]]
## TableGrob (2 x 1) "arrange": 2 grobs
## z cells name grob
## 1 1 (1-1,1-1) arrange gtable[layout]
## 2 2 (2-2,1-1) arrange gtable[layout]
##
## [[13]]
## TableGrob (2 x 1) "arrange": 2 grobs
## z cells name grob
## 1 1 (1-1,1-1) arrange gtable[layout]
## 2 2 (2-2,1-1) arrange gtable[layout]
##
## [[14]]
## TableGrob (2 x 1) "arrange": 2 grobs
## z cells name grob
## 1 1 (1-1,1-1) arrange gtable[layout]
## 2 2 (2-2,1-1) arrange gtable[layout]
##
## [[15]]
## TableGrob (2 x 1) "arrange": 2 grobs
## z cells name grob
## 1 1 (1-1,1-1) arrange gtable[layout]
## 2 2 (2-2,1-1) arrange gtable[layout]
##
## [[16]]
## TableGrob (2 x 1) "arrange": 2 grobs
## z cells name grob
## 1 1 (1-1,1-1) arrange gtable[layout]
## 2 2 (2-2,1-1) arrange gtable[layout]
##
## [[17]]
## TableGrob (2 x 1) "arrange": 2 grobs
## z cells name grob
## 1 1 (1-1,1-1) arrange gtable[layout]
## 2 2 (2-2,1-1) arrange gtable[layout]
##
## [[18]]
## TableGrob (2 x 1) "arrange": 2 grobs
## z cells name grob
## 1 1 (1-1,1-1) arrange gtable[layout]
## 2 2 (2-2,1-1) arrange gtable[layout]
##
## [[19]]
## TableGrob (2 x 1) "arrange": 2 grobs
## z cells name grob
## 1 1 (1-1,1-1) arrange gtable[layout]
## 2 2 (2-2,1-1) arrange gtable[layout]
##
## [[20]]
## TableGrob (2 x 1) "arrange": 2 grobs
## z cells name grob
## 1 1 (1-1,1-1) arrange gtable[layout]
## 2 2 (2-2,1-1) arrange gtable[layout]
##
## [[21]]
## TableGrob (2 x 1) "arrange": 2 grobs
## z cells name grob
## 1 1 (1-1,1-1) arrange gtable[layout]
## 2 2 (2-2,1-1) arrange gtable[layout]
##
## [[22]]
## TableGrob (2 x 1) "arrange": 2 grobs
## z cells name grob
## 1 1 (1-1,1-1) arrange gtable[layout]
## 2 2 (2-2,1-1) arrange gtable[layout]
##
## [[23]]
## TableGrob (2 x 1) "arrange": 2 grobs
## z cells name grob
## 1 1 (1-1,1-1) arrange gtable[layout]
## 2 2 (2-2,1-1) arrange gtable[layout]
##
## [[24]]
## TableGrob (2 x 1) "arrange": 2 grobs
## z cells name grob
## 1 1 (1-1,1-1) arrange gtable[layout]
## 2 2 (2-2,1-1) arrange gtable[layout]
##
## [[25]]
## TableGrob (2 x 1) "arrange": 2 grobs
## z cells name grob
## 1 1 (1-1,1-1) arrange gtable[layout]
## 2 2 (2-2,1-1) arrange gtable[layout]
##
## [[26]]
## TableGrob (2 x 1) "arrange": 2 grobs
## z cells name grob
## 1 1 (1-1,1-1) arrange gtable[layout]
## 2 2 (2-2,1-1) arrange gtable[layout]
##
## [[27]]
## TableGrob (2 x 1) "arrange": 2 grobs
## z cells name grob
## 1 1 (1-1,1-1) arrange gtable[layout]
## 2 2 (2-2,1-1) arrange gtable[layout]
##
## [[28]]
## TableGrob (2 x 1) "arrange": 2 grobs
## z cells name grob
## 1 1 (1-1,1-1) arrange gtable[layout]
## 2 2 (2-2,1-1) arrange gtable[layout]
##
## [[29]]
## TableGrob (2 x 1) "arrange": 2 grobs
## z cells name grob
## 1 1 (1-1,1-1) arrange gtable[layout]
## 2 2 (2-2,1-1) arrange gtable[layout]
##
## [[30]]
## TableGrob (2 x 1) "arrange": 2 grobs
## z cells name grob
## 1 1 (1-1,1-1) arrange gtable[layout]
## 2 2 (2-2,1-1) arrange gtable[layout]
##
## [[31]]
## TableGrob (2 x 1) "arrange": 2 grobs
## z cells name grob
## 1 1 (1-1,1-1) arrange gtable[layout]
## 2 2 (2-2,1-1) arrange gtable[layout]
##
## [[32]]
## TableGrob (2 x 1) "arrange": 2 grobs
## z cells name grob
## 1 1 (1-1,1-1) arrange gtable[layout]
## 2 2 (2-2,1-1) arrange gtable[layout]
##
## [[33]]
## TableGrob (2 x 1) "arrange": 2 grobs
## z cells name grob
## 1 1 (1-1,1-1) arrange gtable[layout]
## 2 2 (2-2,1-1) arrange gtable[layout]
##
## [[34]]
## TableGrob (2 x 1) "arrange": 2 grobs
## z cells name grob
## 1 1 (1-1,1-1) arrange gtable[layout]
## 2 2 (2-2,1-1) arrange gtable[layout]
##
## [[35]]
## TableGrob (2 x 1) "arrange": 2 grobs
## z cells name grob
## 1 1 (1-1,1-1) arrange gtable[layout]
## 2 2 (2-2,1-1) arrange gtable[layout]
##
## [[36]]
## TableGrob (2 x 1) "arrange": 2 grobs
## z cells name grob
## 1 1 (1-1,1-1) arrange gtable[layout]
## 2 2 (2-2,1-1) arrange gtable[layout]
##
## [[37]]
## TableGrob (2 x 1) "arrange": 2 grobs
## z cells name grob
## 1 1 (1-1,1-1) arrange gtable[layout]
## 2 2 (2-2,1-1) arrange gtable[layout]
##
## [[38]]
## TableGrob (2 x 1) "arrange": 2 grobs
## z cells name grob
## 1 1 (1-1,1-1) arrange gtable[layout]
## 2 2 (2-2,1-1) arrange gtable[layout]
##
## [[39]]
## TableGrob (2 x 1) "arrange": 2 grobs
## z cells name grob
## 1 1 (1-1,1-1) arrange gtable[layout]
## 2 2 (2-2,1-1) arrange gtable[layout]
##
## [[40]]
## TableGrob (2 x 1) "arrange": 2 grobs
## z cells name grob
## 1 1 (1-1,1-1) arrange gtable[layout]
## 2 2 (2-2,1-1) arrange gtable[layout]
##
## [[41]]
## TableGrob (2 x 1) "arrange": 2 grobs
## z cells name grob
## 1 1 (1-1,1-1) arrange gtable[layout]
## 2 2 (2-2,1-1) arrange gtable[layout]
##
## [[42]]
## TableGrob (2 x 1) "arrange": 2 grobs
## z cells name grob
## 1 1 (1-1,1-1) arrange gtable[layout]
## 2 2 (2-2,1-1) arrange gtable[layout]
##
## [[43]]
## TableGrob (2 x 1) "arrange": 2 grobs
## z cells name grob
## 1 1 (1-1,1-1) arrange gtable[layout]
## 2 2 (2-2,1-1) arrange gtable[layout]
##
## [[44]]
## TableGrob (2 x 1) "arrange": 2 grobs
## z cells name grob
## 1 1 (1-1,1-1) arrange gtable[layout]
## 2 2 (2-2,1-1) arrange gtable[layout]
##
## [[45]]
## TableGrob (2 x 1) "arrange": 2 grobs
## z cells name grob
## 1 1 (1-1,1-1) arrange gtable[layout]
## 2 2 (2-2,1-1) arrange gtable[layout]
##
## [[46]]
## TableGrob (2 x 1) "arrange": 2 grobs
## z cells name grob
## 1 1 (1-1,1-1) arrange gtable[layout]
## 2 2 (2-2,1-1) arrange gtable[layout]
##
## [[47]]
## TableGrob (2 x 1) "arrange": 2 grobs
## z cells name grob
## 1 1 (1-1,1-1) arrange gtable[layout]
## 2 2 (2-2,1-1) arrange gtable[layout]
##
## [[48]]
## TableGrob (2 x 1) "arrange": 2 grobs
## z cells name grob
## 1 1 (1-1,1-1) arrange gtable[layout]
## 2 2 (2-2,1-1) arrange gtable[layout]
##
## [[49]]
## TableGrob (2 x 1) "arrange": 2 grobs
## z cells name grob
## 1 1 (1-1,1-1) arrange gtable[layout]
## 2 2 (2-2,1-1) arrange gtable[layout]
##
## [[50]]
## TableGrob (2 x 1) "arrange": 2 grobs
## z cells name grob
## 1 1 (1-1,1-1) arrange gtable[layout]
## 2 2 (2-2,1-1) arrange gtable[layout]
##
## [[51]]
## TableGrob (2 x 1) "arrange": 2 grobs
## z cells name grob
## 1 1 (1-1,1-1) arrange gtable[layout]
## 2 2 (2-2,1-1) arrange gtable[layout]
##
## [[52]]
## TableGrob (2 x 1) "arrange": 2 grobs
## z cells name grob
## 1 1 (1-1,1-1) arrange gtable[layout]
## 2 2 (2-2,1-1) arrange gtable[layout]
##
## [[53]]
## TableGrob (2 x 1) "arrange": 2 grobs
## z cells name grob
## 1 1 (1-1,1-1) arrange gtable[layout]
## 2 2 (2-2,1-1) arrange gtable[layout]
##
## [[54]]
## TableGrob (2 x 1) "arrange": 2 grobs
## z cells name grob
## 1 1 (1-1,1-1) arrange gtable[layout]
## 2 2 (2-2,1-1) arrange gtable[layout]
##
## [[55]]
## TableGrob (2 x 1) "arrange": 2 grobs
## z cells name grob
## 1 1 (1-1,1-1) arrange gtable[layout]
## 2 2 (2-2,1-1) arrange gtable[layout]
##
## [[56]]
## TableGrob (2 x 1) "arrange": 2 grobs
## z cells name grob
## 1 1 (1-1,1-1) arrange gtable[layout]
## 2 2 (2-2,1-1) arrange gtable[layout]
##
## [[57]]
## TableGrob (2 x 1) "arrange": 2 grobs
## z cells name grob
## 1 1 (1-1,1-1) arrange gtable[layout]
## 2 2 (2-2,1-1) arrange gtable[layout]
##
## [[58]]
## TableGrob (2 x 1) "arrange": 2 grobs
## z cells name grob
## 1 1 (1-1,1-1) arrange gtable[layout]
## 2 2 (2-2,1-1) arrange gtable[layout]
##
## [[59]]
## TableGrob (2 x 1) "arrange": 2 grobs
## z cells name grob
## 1 1 (1-1,1-1) arrange gtable[layout]
## 2 2 (2-2,1-1) arrange gtable[layout]
##
## [[60]]
## TableGrob (2 x 1) "arrange": 2 grobs
## z cells name grob
## 1 1 (1-1,1-1) arrange gtable[layout]
## 2 2 (2-2,1-1) arrange gtable[layout]
##
## [[61]]
## TableGrob (2 x 1) "arrange": 2 grobs
## z cells name grob
## 1 1 (1-1,1-1) arrange gtable[layout]
## 2 2 (2-2,1-1) arrange gtable[layout]
##
## [[62]]
## TableGrob (2 x 1) "arrange": 2 grobs
## z cells name grob
## 1 1 (1-1,1-1) arrange gtable[layout]
## 2 2 (2-2,1-1) arrange gtable[layout]
##
## [[63]]
## TableGrob (2 x 1) "arrange": 2 grobs
## z cells name grob
## 1 1 (1-1,1-1) arrange gtable[layout]
## 2 2 (2-2,1-1) arrange gtable[layout]
##
## [[64]]
## TableGrob (2 x 1) "arrange": 2 grobs
## z cells name grob
## 1 1 (1-1,1-1) arrange gtable[layout]
## 2 2 (2-2,1-1) arrange gtable[layout]
##
## [[65]]
## TableGrob (2 x 1) "arrange": 2 grobs
## z cells name grob
## 1 1 (1-1,1-1) arrange gtable[layout]
## 2 2 (2-2,1-1) arrange gtable[layout]