From ea5ffeb88fb1f941621b39d09fb76900ea60d310 Mon Sep 17 00:00:00 2001 From: jharenza Date: Tue, 12 Nov 2024 02:05:36 +0000 Subject: [PATCH] fix bug, rerun --- .../01-molecular-subtype-pineoblastoma.html | 6 +- .../02-pineoblastoma-umap.Rmd | 19 +- .../02-pineoblastoma-umap.html | 558 ++++++++++++++++++ .../plot/umap_pineo.pdf | Bin 0 -> 6378 bytes 4 files changed, 570 insertions(+), 13 deletions(-) create mode 100644 analyses/molecular-subtyping-PB/02-pineoblastoma-umap.html create mode 100644 analyses/molecular-subtyping-PB/plot/umap_pineo.pdf diff --git a/analyses/molecular-subtyping-PB/01-molecular-subtype-pineoblastoma.html b/analyses/molecular-subtyping-PB/01-molecular-subtype-pineoblastoma.html index 6495ad22bb..71c77b2d08 100644 --- a/analyses/molecular-subtyping-PB/01-molecular-subtype-pineoblastoma.html +++ b/analyses/molecular-subtyping-PB/01-molecular-subtype-pineoblastoma.html @@ -360,13 +360,13 @@

2023-12-06

load library

library(tidyverse)
-
## ── Attaching core tidyverse packages ─────────────────────────────────────────────── tidyverse 2.0.0 ──
+
## ── Attaching core tidyverse packages ───────────────────────────────────────── tidyverse 2.0.0 ──
 ## ✔ dplyr     1.1.4     ✔ readr     2.1.5
 ## ✔ forcats   1.0.0     ✔ stringr   1.5.1
 ## ✔ ggplot2   3.5.1     ✔ tibble    3.2.1
 ## ✔ lubridate 1.9.3     ✔ tidyr     1.3.1
 ## ✔ purrr     1.0.2     
-## ── Conflicts ───────────────────────────────────────────────────────────────── tidyverse_conflicts() ──
+## ── Conflicts ─────────────────────────────────────────────────────────── tidyverse_conflicts() ──
 ## ✖ dplyr::filter() masks stats::filter()
 ## ✖ dplyr::lag()    masks stats::lag()
 ## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
@@ -385,7 +385,7 @@

set directories

read files

histo <- readr::read_tsv(file.path(data_dir, "histologies-base.tsv"))
## Rows: 47895 Columns: 64
-## ── Column specification ───────────────────────────────────────────────────────────────────────────────
+## ── Column specification ─────────────────────────────────────────────────────────────────────────
 ## Delimiter: "\t"
 ## chr (41): Kids_First_Participant_ID, Kids_First_Biospecimen_ID, sample_id, a...
 ## dbl (21): cell_line_passage, OS_days, EFS_days, age_at_diagnosis_days, age_a...
diff --git a/analyses/molecular-subtyping-PB/02-pineoblastoma-umap.Rmd b/analyses/molecular-subtyping-PB/02-pineoblastoma-umap.Rmd
index acb65a5a37..2eaa7fd797 100644
--- a/analyses/molecular-subtyping-PB/02-pineoblastoma-umap.Rmd
+++ b/analyses/molecular-subtyping-PB/02-pineoblastoma-umap.Rmd
@@ -48,17 +48,17 @@ Filter hist for methyl samples, and append to subtype df
 ```{r}
 hist_methyl <- hist %>%
   dplyr::filter(pathology_diagnosis == "Pineoblastoma",
-                experimental_strategy == "Methylation") 
+                experimental_strategy == "Methylation",
+                grepl("PB_", dkfz_v12_methylation_subclass)) 
 
 subtypes <- read_tsv(subtype_file) %>%
-  right_join(hist_methyl) %>%
-  filter(!is.na(molecular_subtype_methyl)) %>%
-  dplyr::rename(Kids_First_Biospecimen_ID_methyl = Kids_First_Biospecimen_ID) %>%
+  filter(!is.na(molecular_subtype_methyl),
+         Kids_First_Biospecimen_ID %in% hist_methyl$Kids_First_Biospecimen_ID) %>%
   # remove anything not PB and also the to be classified sample
   # update one with germline pathogenic variant (GPV) reported in Fiorca, et al 2024
-  mutate(molecular_subtype = case_when(Kids_First_Biospecimen_ID_methyl == "BS_SG2X2XQB" ~ paste0(molecular_subtype, " + DROSHA GPV"),
+  mutate(molecular_subtype = case_when(Kids_First_Biospecimen_ID == "BS_SG2X2XQB" ~ paste0(molecular_subtype, " + DROSHA GPV"),
          TRUE ~ molecular_subtype),
-         molecular_subtype_methyl = case_when(Kids_First_Biospecimen_ID_methyl == "BS_SG2X2XQB" ~ paste0(molecular_subtype_methyl, " + DROSHA GPV"),
+         molecular_subtype_methyl = case_when(Kids_First_Biospecimen_ID == "BS_SG2X2XQB" ~ paste0(molecular_subtype_methyl, " + DROSHA GPV"),
          TRUE ~ molecular_subtype_methyl))
 
 ```
@@ -66,15 +66,14 @@ subtypes <- read_tsv(subtype_file) %>%
 Get number of samples by MB SHH subtype
 
 ```{r}
-table(hist_methyl$molecular_subtype)
+table(subtypes$molecular_subtype)
 ```
 
 Load methylation data and filter for ids in `mb_shh_subtypes`
 
 ```{r load methyl}
 methyl <- readRDS(methyl_file)
-
-pineo_methyl <- methyl[,colnames(methyl) %in% c("Probe_ID", subtypes$Kids_First_Biospecimen_ID_methyl)]
+pineo_methyl <- methyl[,colnames(methyl) %in% c("Probe_ID", subtypes$Kids_First_Biospecimen_ID)]
 
 pineo_methyl <- pineo_methyl %>%
   distinct(Probe_ID, .keep_all = TRUE) %>%
@@ -96,7 +95,7 @@ set.seed(2024)
 umap_results <- umap::umap(t(pineo_methyl[var_probes, ]), n_neighbors = 5)
 
 umap_plot_df <- data.frame(umap_results$layout) %>%
-  tibble::rownames_to_column("Kids_First_Biospecimen_ID_methyl") %>%
+  tibble::rownames_to_column("Kids_First_Biospecimen_ID") %>%
   left_join(subtypes)
 ```
 
diff --git a/analyses/molecular-subtyping-PB/02-pineoblastoma-umap.html b/analyses/molecular-subtyping-PB/02-pineoblastoma-umap.html
new file mode 100644
index 0000000000..4711fd106a
--- /dev/null
+++ b/analyses/molecular-subtyping-PB/02-pineoblastoma-umap.html
@@ -0,0 +1,558 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Pineoblastoma UMAP
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + +

Load libraries and set directory paths

+
suppressPackageStartupMessages({
+  library(tidyverse)
+  library(umap)
+  library(ggplot2)
+  library(devtools)
+  library(gdata)
+  library(ggpubr)
+  library(patchwork)
+})
+
+root_dir <- rprojroot::find_root(rprojroot::has_dir(".git"))
+
+data_dir <- file.path(root_dir, "data")
+analysis_dir <- file.path(root_dir, "analyses", "molecular-subtyping-PB")
+results_dir <- file.path(analysis_dir, "results")
+plots_dir <- file.path(analysis_dir, "plot")
+
+source(file.path(root_dir, "figures", "manuscript_OPC", "utils", "theme_for_plot.R"))
+

Set file paths

+
hist_file <- file.path(data_dir, "histologies-base.tsv")
+subtype_file <- file.path(results_dir, "pineo-molecular-subtypes.tsv")
+methyl_file <- file.path(data_dir, "methyl-beta-values.rds")
+

Wrangle data.

+
hist <- read_tsv(hist_file)
+
## Rows: 47895 Columns: 64
+## ── Column specification ─────────────────────────────────────────────────────────────────────────
+## Delimiter: "\t"
+## chr (41): Kids_First_Participant_ID, Kids_First_Biospecimen_ID, sample_id, a...
+## dbl (21): cell_line_passage, OS_days, EFS_days, age_at_diagnosis_days, age_a...
+## lgl  (2): molecular_subtype, integrated_diagnosis
+## 
+## ℹ Use `spec()` to retrieve the full column specification for this data.
+## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
+

Filter hist for methyl samples, and append to subtype df

+
hist_methyl <- hist %>%
+  dplyr::filter(pathology_diagnosis == "Pineoblastoma",
+                experimental_strategy == "Methylation",
+                grepl("PB_", dkfz_v12_methylation_subclass)) 
+
+subtypes <- read_tsv(subtype_file) %>%
+  filter(!is.na(molecular_subtype_methyl),
+         Kids_First_Biospecimen_ID %in% hist_methyl$Kids_First_Biospecimen_ID) %>%
+  # remove anything not PB and also the to be classified sample
+  # update one with germline pathogenic variant (GPV) reported in Fiorca, et al 2024
+  mutate(molecular_subtype = case_when(Kids_First_Biospecimen_ID == "BS_SG2X2XQB" ~ paste0(molecular_subtype, " + DROSHA GPV"),
+         TRUE ~ molecular_subtype),
+         molecular_subtype_methyl = case_when(Kids_First_Biospecimen_ID == "BS_SG2X2XQB" ~ paste0(molecular_subtype_methyl, " + DROSHA GPV"),
+         TRUE ~ molecular_subtype_methyl))
+
## Rows: 70 Columns: 6
+## ── Column specification ─────────────────────────────────────────────────────────────────────────
+## Delimiter: "\t"
+## chr (6): Kids_First_Biospecimen_ID, Kids_First_Participant_ID, match_id, sam...
+## 
+## ℹ Use `spec()` to retrieve the full column specification for this data.
+## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
+

Get number of samples by MB SHH subtype

+
table(subtypes$molecular_subtype)
+
## 
+##              PB, Group 1 PB, Group 1 + DROSHA GPV              PB, Group 2 
+##                        5                        1                        3 
+##            PB, MYC/FOXR2 
+##                        4
+

Load methylation data and filter for ids in +mb_shh_subtypes

+
methyl <- readRDS(methyl_file)
+pineo_methyl <- methyl[,colnames(methyl) %in% c("Probe_ID", subtypes$Kids_First_Biospecimen_ID)]
+
+pineo_methyl <- pineo_methyl %>%
+  distinct(Probe_ID, .keep_all = TRUE) %>%
+  column_to_rownames("Probe_ID")
+

Identify 20k most variable probes among MB samples

+
methyl_var <- apply(pineo_methyl, 1, var, na.rm = TRUE)
+var_probes <- names(sort(methyl_var, decreasing = TRUE)[1:20000])
+

Generate UMAP results

+
set.seed(2024)
+# neighbors needs to be low because the sample size is very low right now
+umap_results <- umap::umap(t(pineo_methyl[var_probes, ]), n_neighbors = 5)
+
+umap_plot_df <- data.frame(umap_results$layout) %>%
+  tibble::rownames_to_column("Kids_First_Biospecimen_ID") %>%
+  left_join(subtypes)
+
## Joining with `by = join_by(Kids_First_Biospecimen_ID)`
+

Plot UMAP with molecular subtype and age range

+
umap_pineo <-  ggplot(umap_plot_df, aes(x = X1, 
+             y = X2,
+             fill = molecular_subtype_methyl)) +
+  geom_point(alpha = 0.8, size = 3.5, shape = 21, stroke = 0.8, color = "black") +
+  labs(fill = "Molecular subtype") +
+  theme_bw() +
+  xlab("UMAP1") +
+  ylab("UMAP2") +
+  theme_Publication() 
+
+ggsave(file.path(plots_dir, "umap_pineo.pdf"),
+       umap_pineo,
+       width = 7, height = 3.5)
+

Save session info

+
sessionInfo()
+
## R version 4.4.0 (2024-04-24)
+## Platform: x86_64-pc-linux-gnu
+## Running under: Ubuntu 22.04.4 LTS
+## 
+## Matrix products: default
+## BLAS:   /usr/lib/x86_64-linux-gnu/openblas-pthread/libblas.so.3 
+## LAPACK: /usr/lib/x86_64-linux-gnu/openblas-pthread/libopenblasp-r0.3.20.so;  LAPACK version 3.10.0
+## 
+## locale:
+##  [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C              
+##  [3] LC_TIME=en_US.UTF-8        LC_COLLATE=en_US.UTF-8    
+##  [5] LC_MONETARY=en_US.UTF-8    LC_MESSAGES=en_US.UTF-8   
+##  [7] LC_PAPER=en_US.UTF-8       LC_NAME=C                 
+##  [9] LC_ADDRESS=C               LC_TELEPHONE=C            
+## [11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C       
+## 
+## time zone: Etc/UTC
+## tzcode source: system (glibc)
+## 
+## attached base packages:
+## [1] grid      stats     graphics  grDevices utils     datasets  methods  
+## [8] base     
+## 
+## other attached packages:
+##  [1] ggthemes_5.1.0  patchwork_1.2.0 ggpubr_0.6.0    gdata_3.0.0    
+##  [5] devtools_2.4.5  usethis_2.2.3   umap_0.2.10.0   lubridate_1.9.3
+##  [9] forcats_1.0.0   stringr_1.5.1   dplyr_1.1.4     purrr_1.0.2    
+## [13] readr_2.1.5     tidyr_1.3.1     tibble_3.2.1    ggplot2_3.5.1  
+## [17] tidyverse_2.0.0
+## 
+## loaded via a namespace (and not attached):
+##  [1] tidyselect_1.2.1  farver_2.1.2      fastmap_1.2.0     promises_1.3.0   
+##  [5] digest_0.6.35     timechange_0.3.0  mime_0.12         lifecycle_1.0.4  
+##  [9] ellipsis_0.3.2    magrittr_2.0.3    compiler_4.4.0    rlang_1.1.3      
+## [13] sass_0.4.9        tools_4.4.0       utf8_1.2.4        yaml_2.3.8       
+## [17] knitr_1.46        ggsignif_0.6.4    labeling_0.4.3    askpass_1.2.0    
+## [21] htmlwidgets_1.6.4 bit_4.0.5         pkgbuild_1.4.4    reticulate_1.37.0
+## [25] pkgload_1.3.4     abind_1.4-5       miniUI_0.1.1.1    withr_3.0.0      
+## [29] fansi_1.0.6       urlchecker_1.0.1  profvis_0.3.8     xtable_1.8-4     
+## [33] colorspace_2.1-0  scales_1.3.0      gtools_3.9.5      cli_3.6.2        
+## [37] crayon_1.5.2      rmarkdown_2.27    ragg_1.3.2        generics_0.1.3   
+## [41] remotes_2.5.0     RSpectra_0.16-1   tzdb_0.4.0        sessioninfo_1.2.2
+## [45] cachem_1.1.0      parallel_4.4.0    vctrs_0.6.5       Matrix_1.7-0     
+## [49] jsonlite_1.8.8    carData_3.0-5     car_3.1-2         hms_1.1.3        
+## [53] bit64_4.0.5       rstatix_0.7.2     systemfonts_1.1.0 jquerylib_0.1.4  
+## [57] glue_1.7.0        stringi_1.8.4     gtable_0.3.5      later_1.3.2      
+## [61] munsell_0.5.1     pillar_1.9.0      htmltools_0.5.8.1 openssl_2.2.0    
+## [65] R6_2.5.1          textshaping_0.3.7 rprojroot_2.0.4   vroom_1.6.5      
+## [69] evaluate_0.23     shiny_1.8.1.1     lattice_0.22-6    png_0.1-8        
+## [73] backports_1.4.1   memoise_2.0.1     broom_1.0.6       httpuv_1.6.15    
+## [77] bslib_0.7.0       Rcpp_1.0.12       xfun_0.44         fs_1.6.4         
+## [81] pkgconfig_2.0.3
+ + + + +
+ + + + + + + + + + + + + + + diff --git a/analyses/molecular-subtyping-PB/plot/umap_pineo.pdf b/analyses/molecular-subtyping-PB/plot/umap_pineo.pdf new file mode 100644 index 0000000000000000000000000000000000000000..d9e4a00cda3d81a22b5d9e735f44d9f91b8e2687 GIT binary patch literal 6378 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 T;`h~;BO4xokdT(4HsF5%_O8?m literal 0 HcmV?d00001