OSCR

TET CpG sequence-context-specific DNA demethylation shapes progression of IDH-mutant gliomas.

Code ↔ Paper

29 matches between paragraphs of the paper and lines of its authors' code, computed by the harvester (lexical-v1). Click a colored paragraph or line to see its counterpart.

The 29 matches · 2 of them tie a paragraph to a whole file, not to given lines: weak matches, whose lines are not tinted
  1. [1] § STAR★Methods › Method details › Epigenetic clocks ↔ scripts/analysis_EPITOC2.R, lines 45–111 · score 1.00 · HannumG2013, LevineM2018, PCPhenoAge, CBL_common, CBL_specific, Cortex_common
  2. [2] § STAR★Methods › Method details › Epigenetic clocks ↔ scripts/vis_aging_clocks.R, lines 609–674 · score 1.00 · HannumG2013, LevineM2018, PCPhenoAge, CBL_common, CBL_specific, Cortex_common
  3. [3] § STAR★Methods › Method details › Sequence contexts ↔ scripts/export_sequence_context.R, lines 1–65 · score 0.90 · Forward_Sequence, AlleleA_ProbeSeq, reverse complement, b5 manifest, file.csv, sequence context
  4. [4] § STAR★Methods › Method details › Sequence contexts ↔ scripts/load_probe_annotations.R, lines 177–243 · score 0.84 · Forward_Sequence, AlleleA_ProbeSeq, b5 manifest, infinium methylationepic, file.csv, stranded
  5. [5] § STAR★Methods › Method details › RepliSeq ↔ scripts/download_wgEncodeUwRepliSeq.sh, the whole file · a weak match · score 0.81 · CrossMap, bigWig, wgEncodeUwRepliSeq, goldenpath, downloaded, hg38
  6. [6] § Results › Molecular mechanism of oligodendroglioma progression ↔ scripts/vis_differential_proteomics.R, lines 1414–1467 · score 0.76 · adaptive immune response, extracellular matrix, MAG, MBP, TMPO, collagen
  7. [7] § STAR★Methods › Method details › Differential methylated position analysis ↔ scripts/vis_aging_clocks.R, lines 517–581 · score 0.75 · eBayes, lmFit, topTable, model.matrix, zero, limma
  8. [8] § STAR★Methods › Method details › Differential methylated position analysis ↔ scripts/analysis_differential.R, lines 393–462 · score 0.74 · eBayes, lmFit, topTable, model.matrix, limma, error
  9. [9] § STAR★Methods › Method details › Gene enrichment ↔ scripts/load_probe_annotations.R, lines 177–243 · score 0.73 · b5 manifest, infinium methylationepic, file.csv, probes annotated, Illumina, gene
  10. [10] § STAR★Methods › Method details › DNA methylation processing and analysis ↔ scripts/analysis_snp_fingerprinting.R, lines 526–615 · score 0.71 · getSnpBeta, RGSet, fingerprinting, distance, minfi, GLASS OD
  11. [11] § STAR★Methods › Method details › DNA methylation processing and analysis ↔ scripts/analysis_dyeCorrection_rate.R, lines 388–451 · score 0.71 · Dye correction, dyeMethod, offset, correlated, probe
  12. [12] § STAR★Methods › Method details › DNA methylation processing and analysis ↔ scripts/analysis_mvalues_all_samples.R, lines 81–126 · score 0.70 · Dye correction, dyeMethod, offset, minfi, correlated, idat
  13. [13] § STAR★Methods › Method details › CGCψ ↔ scripts/analysis_A_IDH_HG__A_IDH_LG_lr__lasso_fit.R, lines 251–326 · score 0.70 · TCGA LGG, idh lg, idh hg, LASSO, glmnet, GLASS NL
  14. [14] § STAR★Methods › Method details › Proteomics ↔ scripts/vis_differential_proteomics.R, lines 925–1007 · score 0.69 · ExonBnd, UCSC_RefGene_Name, TSS200, UTR, TSS1500, proteomics
  15. [15] § STAR★Methods › Method details › CGCψ ↔ scripts/load_TCGA-LGG_OD.R, lines 187–269 · score 0.69 · TCGA LGG, dyeCorr, dyeMethod, offset, probes
  16. [16] § STAR★Methods › Method details › TCGA-LGG (1p/19q codel) ↔ scripts/load_TCGA-LGG_OD.R, lines 1–61 · score 0.67 · TCGA LGG, TCGAbiolinks, days, status, Survival
  17. [17] § STAR★Methods › Method details › RepliSeq ↔ scripts/vis_differential.R, lines 4864–4927 · score 0.64 · wgEncodeUwRepliSeq, outliers, correlation, grades
  18. [18] § Results › DNA demethylation and accelerated epigenetic aging contribute to the axis of progression ↔ scripts/vis_aging_clocks.R, lines 254–305 · score 0.61 · dnaMethyAge, PCHorvathS2018, aging, clocks, tissue, CGC
  19. [19] § Results › WHO grade-specific methylation changes are TET sequence context specific ↔ scripts/load_GLASS-OD_metadata.R, lines 1337–1383 · score 0.60 · cell division, solo WCGW, CpGs, mitotic, DNA
  20. [20] § STAR★Methods › Method details › Gene enrichment ↔ scripts/analysis_DMP_gene_level.R, lines 1028–1075 · score 0.58 · olfactory receptor, GencodeCompV12_NAME, 0–9, gene, probe
  21. [21] § STAR★Methods › Method details › TCGA-LGG (1p/19q codel) ↔ scripts/analysis_survival.R, lines 897–952 · score 0.55 · TCGA LGG, survival event
  22. [22] § Results › CGCψ: Molecular continuous grading of IDH-mutant oligodendrogliomas ↔ scripts/analysis_survival.R, lines 897–952 · score 0.55 · TCGA LGG, hazard ratio, CoxPH, survival, CGC, tumors
  23. [23] § Results › CGCψ: Molecular continuous grading of IDH-mutant oligodendrogliomas ↔ scripts/load_gene_annotations.R, lines 4–42 · score 0.54 · genes annotated, HOXC12, WNT1, HOXA3, HOXA6, HOXA7
  24. [24] § STAR★Methods › Method details › MNP CNS classifier ↔ scripts/vis_cohort_overview.R, lines 385–446 · score 0.54 · v12.8, classifier version, cohort, Quality, MNP, PredictBrain
  25. [25] § Results › WHO grade-specific methylation changes are TET sequence context specific ↔ RNAseq/MethyltransferaseExpression.R, the whole file · a weak match · score 0.51 · DNA methyltransferase, DNMT1, Enzymes, TET1
  26. [26] § STAR★Methods › Method details › Tumor purity ↔ scripts/analysis_chr4_del.R, lines 1–70 · score 0.51 · low purity, v5, arms, CNVP, segment, bins
  27. [27] § Results › CGCψ: Molecular continuous grading of IDH-mutant oligodendrogliomas ↔ scripts/vis_LGC_x_PCA.R, lines 1196–1260 · score 0.51 · NCI Methylscape, high grade classes, IDH, recurrent
  28. [28] § STAR★Methods › Method details › Tumor purity ↔ scripts/analysis_tumor_purities_EPIC.R, lines 241–290 · score 0.50 · Tumor purity, v5, CNVP, bins, PC1, MNP
  29. [29] § Results › Oligosarcomas are an aggressive subtype of oligodendroglioma with lower tumor cell fractions ↔ scripts/vis_oligosarcoma_and_purity.R, lines 1–67 · score 0.50 · tumor cell fraction, dilution, spiking, R3, R2, oligosarcoma

Paper

Loaded from Europe PMC by your browser, not stored by OSCR: doi.org · Europe PMC

The paper is loaded when this pane is shown.

The authors' code

R · 873 lines · 32 KB · no license · 3 matches

  1. #!/usr/bin/env R
  2. # load ----
  3. source('scripts/load_constants.R')
  4. source('scripts/load_functions.R')
  5. source('scripts/load_palette.R')
  6. source('scripts/load_themes.R')
  7. if(!exists('glass_od.metadata.array_samples')) {
  8. source('scripts/load_GLASS-OD_metadata.R')
  9. }
  10. # if(!exists('data.mvalues.probes')) {
  11. # source('scripts/load_mvalues_hq_samples.R')
  12. # }
  13. #
  14. library(ggplot2)
  15. # corr + forest mainly PCs ----
  16. ## load data ----
  17. plt <- glass_od.metadata.array_samples |>
  18. filter_GLASS_OD_idats(CONST_N_GLASS_OD_INCLUDED_SAMPLES) |>
  19. dplyr::mutate(`age_at_diagnosis_days` = as.Date(patient_diagnosis_date) - as.Date(patient_birth_date)) |>
  20. #dplyr::filter(!is.na(age_at_diagnosis_days)) |>
  21. #dplyr::mutate(age_at_diagnosis_days = age_at_diagnosis_days - min(na.omit(age_at_diagnosis_days))) |>
  22. #dplyr::mutate(age_at_diagnosis_days = as.numeric(age_at_diagnosis_days)) |>
  23. #dplyr::mutate(time_tissue_in_ffpe = ifelse(isolation_material == "ffpe", time_between_resection_and_array, 0)) |>
  24. dplyr::rename_with(~ gsub("array_","",.x)) |>
  25. dplyr::rename_with(~ gsub("dnaMethyAge__","dnaMethyAge: ",.x)) |>
  26. dplyr::select(resection_id,
  27. PC1,
  28. PC2,
  29. PC3,
  30. PC4,
  31. PC5,
  32. PC6,
  33. `dnaMethyAge: PCHorvathS2018`,
  34. `dnaMethyAge: PCHannumG2013`,
  35. percentage.detP.signi,
  36. `qc_SPECIFICITY_I_GT_Mismatch_6_(PM)_Red_smaller_NA_0.5`,
  37. GLASS_NL_g2_g3_sig, A_IDH_HG__A_IDH_LG_lr__lasso_fit,
  38. ) |>
  39. tibble::column_to_rownames('resection_id') |>
  40. dplyr::mutate(`percentage.detP.signi` = log(percentage.detP.signi)) |>
  41. dplyr::rename(`log(% det-P)` = percentage.detP.signi) |>
  42. dplyr::rename(`GLASS-NL p-r signature` = GLASS_NL_g2_g3_sig) |>
  43. dplyr::rename(`CGC[Ac]` = `A_IDH_HG__A_IDH_LG_lr__lasso_fit`) |>
  44. dplyr::rename(`QC: Spec I GT MM 6` = `qc_SPECIFICITY_I_GT_Mismatch_6_(PM)_Red_smaller_NA_0.5`)
  45. ## corrplot ----
  46. # <3
  47. ggcorrplot(plt, abs=T) +
  48. labs(caption=paste0("n=",nrow(plt)," samples"),
  49. subtitle=format_subtitle("correlation PCs"))
  50. ggsave("output/figures/vis_aging_clocks__PC_clustering.pdf", height = 1.9, width=4)
  51. ## stats grade ----
  52. data <- glass_od.metadata.array_samples |>
  53. filter_GLASS_OD_idats(CONST_N_GLASS_OD_INCLUDED_SAMPLES) |>
  54. filter_first_G2_and_last_G3(154) |>
  55. dplyr::group_by(patient_id) |>
  56. dplyr::mutate(is.paired = dplyr::n() == 2) |>
  57. dplyr::ungroup() |>
  58. dplyr::mutate(patient = as.factor(paste0("p",ifelse(is.paired,patient_id,"_remainder")))) |>
  59. assertr::verify(resection_tumor_grade %in% c(2,3)) |>
  60. dplyr::mutate(gr.status = factor(ifelse(resection_tumor_grade == 2, "Grade2", "Grade3"), levels=c("Grade2", "Grade3"))) |>
  61. (function(.) {
  62. print(dim(.))
  63. assertthat::assert_that(nrow(.) == 154)
  64. return(.)
  65. })() |>
  66. dplyr::select(resection_id, gr.status, patient) |>
  67. dplyr::left_join(
  68. plt |>
  69. tibble::rownames_to_column('resection_id'),
  70. by=c('resection_id'='resection_id')
  71. ) |>
  72. tibble::column_to_rownames('resection_id')
  73. n <- nrow(data)
  74. design <- model.matrix(~~patient + gr.status, data=data)
  75. fit <- limma::lmFit(data |> dplyr::mutate(patient = NULL) |> dplyr::mutate(gr.status = NULL) |> t() |> as.data.frame()
  76. , design)
  77. fit <- limma::eBayes(fit, trend=T)
  78. stats <- limma::topTable(fit,
  79. n=nrow(data),
  80. coef="gr.statusGrade3",
  81. sort.by = "none",
  82. confint=T,
  83. adjust.method="fdr") |>
  84. tibble::rownames_to_column('covar')
  85. order = data.frame(covar = c(
  86. "PC6",
  87. "PC4",
  88. "PC5",
  89. "log(% det-P)",
  90. "PC1",
  91. "QC: Spec I GT MM 6" ,
  92. "GLASS-NL p-r signature" ,
  93. "PC2" ,
  94. "CGC[Ac]" ,
  95. "dnaMethyAge: PCHannumG2013" ,
  96. "dnaMethyAge: PCHorvathS2018",
  97. "PC3"
  98. )) |>
  99. dplyr::mutate(rank = 1:dplyr::n())
  100. stats <- stats |>
  101. dplyr::left_join(order, by=c('covar'='covar'), suffix=c('',''))
  102. stats.all <- rbind(
  103. stats |>
  104. dplyr::mutate(logFC = 0) |>
  105. dplyr::mutate(t = 0) |>
  106. dplyr::mutate(type = "zero")
  107. ,
  108. stats |>
  109. dplyr::mutate(type = "datapoint")
  110. ,
  111. stats |>
  112. dplyr::mutate(logFC = CI.L) |>
  113. dplyr::mutate(type = "CI")
  114. ,
  115. stats |>
  116. dplyr::mutate(logFC = CI.R) |>
  117. dplyr::mutate(type = "CI")
  118. )
  119. ggplot(stats.all, aes(x = t, y=reorder(covar, -rank), label=paste0("q=",format.pval(adj.P.Val,nsmall=3, digits = 1)), group=covar)) +
  120. geom_line(data=subset(stats.all, type %in% c("datapoint", "zero")), lwd=theme_nature_lwd) +
  121. #geom_line(data=subset(stats.all, type %in% c("CI")),lwd=theme_nature_lwd*3) +
  122. geom_point(data=subset(stats.all, type == "datapoint"), size=theme_nature_size/3) +
  123. geom_text(data=subset(stats.all, type %in% c("datapoint")), size=theme_nature_size, family=theme_nature_font_family) +
  124. #ggrepel::geom_text_repel(
  125. # data=subset(stats.all, type %in% c("datapoint")), size=theme_nature_size, nudge_y = 0, family=theme_nature_font_family) +
  126. labs(x="t WHO grade 2 - 3",
  127. y = NULL,
  128. caption = paste0("First Grade 2 and last Grade 3: n=",n, " samples")) +
  129. theme_nature
  130. ggsave("output/figures/vis_aging_clocks__PC_clustering_limma.pdf", width=3.5, height=2.028)
  131. # corr + forest with QC & clocks ----
  132. ## corrplot ----
  133. plt <- glass_od.metadata.array_samples |>
  134. filter_GLASS_OD_idats(CONST_N_GLASS_OD_INCLUDED_SAMPLES) |>
  135. dplyr::mutate(`age_at_diagnosis_days` = as.Date(patient_diagnosis_date) - as.Date(patient_birth_date)) |>
  136. dplyr::filter(!is.na(age_at_diagnosis_days)) |>
  137. dplyr::mutate(age_at_diagnosis_days = age_at_diagnosis_days - min(na.omit(age_at_diagnosis_days))) |>
  138. dplyr::mutate(age_at_diagnosis_days = as.numeric(age_at_diagnosis_days)) |>
  139. dplyr::mutate(time_tissue_in_ffpe = ifelse(isolation_material == "ffpe", time_between_resection_and_array, 0)) |>
  140. dplyr::select(resection_id,
  141. array_epiTOC2_tnsc, array_epiTOC2_hypoSC, contains("array_dnaMethyAge"), array_RepliTali,
  142. array_percentage.detP.signi, array_PC1, `array_qc_SPECIFICITY_I_GT_Mismatch_6_(PM)_Red_smaller_NA_0.5`,
  143. time_tissue_in_ffpe,
  144. array_GLASS_NL_g2_g3_sig,array_PC2, array_A_IDH_HG__A_IDH_LG_lr__lasso_fit,
  145. array_PC3,
  146. age_at_diagnosis_days,
  147. array_PC4,
  148. array_PC5,
  149. array_PC6,
  150. array_median.overall.methylation
  151. ) |>
  152. tibble::column_to_rownames('resection_id') |>
  153. dplyr::filter(!is.na(time_tissue_in_ffpe)) |>
  154. dplyr::mutate(array_GLASS_OD_g2_g3_sig2 = NULL) |>
  155. dplyr::mutate(array_GLASS_OD_prim_rec_sig2 = NULL) |>
  156. dplyr::mutate(array_GLASS_OD_g2_g3_sig3 = NULL) |>
  157. dplyr::mutate(array_GLASS_OD_prim_rec_sig3 = NULL) |>
  158. dplyr::mutate(array_GLASS_OD_g2_g3_sig4 = NULL) |>
  159. dplyr::mutate(array_GLASS_OD_prim_rec_sig4 = NULL) |>
  160. dplyr::mutate(array_PC3 = -1 * array_PC3) |>
  161. dplyr::mutate(array_percentage.detP.signi = log(array_percentage.detP.signi)) |>
  162. dplyr::mutate(`CGC[Ac]` = -1 * array_A_IDH_HG__A_IDH_LG_lr__lasso_fit, array_A_IDH_HG__A_IDH_LG_lr__lasso_fit = NULL) |>
  163. dplyr::mutate(`-1 * array_dnaMethyAge__ZhangY2017` = -1 * array_dnaMethyAge__ZhangY2017 , array_dnaMethyAge__ZhangY2017 = NULL) |>
  164. dplyr::mutate(`-1 * array_epiTOC2_hypoSC` = -1 * array_epiTOC2_hypoSC, array_epiTOC2_hypoSC = NULL) |> # seems at inversed scale
  165. dplyr::mutate(`-1 * array_dnaMethyAge__LuA2019` = -1 * array_dnaMethyAge__LuA2019, array_dnaMethyAge__LuA2019 = NULL) |> # seems at inversed scale
  166. dplyr::mutate(`-1 * QC: SPECIFICITY I GT MM 6` = -1 * `array_qc_SPECIFICITY_I_GT_Mismatch_6_(PM)_Red_smaller_NA_0.5`, `array_qc_SPECIFICITY_I_GT_Mismatch_6_(PM)_Red_smaller_NA_0.5`=NULL) |>
  167. dplyr::select(-array_dnaMethyAge__YangZ2016) |> # epiTOC1, near identical to epiTOC2
  168. dplyr::select(-array_dnaMethyAge__PCHorvathS2013) |> # very similar to its 2018 equivalent
  169. dplyr::mutate(`array_qc_BISULFITE_CONVERSION_I_Beta_I-3_Beta_larger_0.12_0.18` = NULL) |> # contains N/A's
  170. dplyr::mutate(`array_qc_BISULFITE_CONVERSION_I_Beta_I-6_Beta_larger_0.2_0.3` = NULL) |> # contains N/A's
  171. dplyr::rename(`% detP significant probes (log)` = array_percentage.detP.signi) |>
  172. dplyr::mutate(`-1 * CGC[Ac]` = -1 * `CGC[Ac]`, `CGC[Ac]`= NULL) |>
  173. dplyr::mutate(`array_dnaMethyAge__ZhangY2017` = -1 * `-1 * array_dnaMethyAge__ZhangY2017`, `-1 * array_dnaMethyAge__ZhangY2017`=NULL) |>
  174. dplyr::mutate(`-1 * array_GLASS_NL_g2_g3_sig` = -1 * array_GLASS_NL_g2_g3_sig, array_GLASS_NL_g2_g3_sig = NULL) |>
  175. dplyr::mutate(`-1 * array_median.overall.methylation` = -1 * array_median.overall.methylation) |>
  176. dplyr::mutate(array_median.overall.methylation = NULL) |>
  177. dplyr::mutate(`-1 * array_PC2` = -1 * array_PC2, array_PC2 = NULL)
  178. colnames(plt) <- gsub("array_","",colnames(plt))
  179. p1 = ggcorrplot(plt)
  180. p1
  181. ggsave(plot = p1, "output/figures/vis_aging_clocks__ggcorrplot.pdf", width= 8.5 * 0.975 / 2 , height = 4)
  182. order <- c(
  183. "PC5",
  184. "PC4",
  185. "PC6",
  186. "-1 * PC2",
  187. "-1 * GLASS_NL_g2_g3_sig",
  188. "-1 * CGC[Ac]",
  189. "-1 * median.overall.methylation",
  190. "dnaMethyAge__ZhangY2017",
  191. "dnaMethyAge__LuA2023p3",
  192. "dnaMethyAge__LuA2023p2",
  193. "dnaMethyAge__PCPhenoAge",
  194. "dnaMethyAge__PCHorvathS2018",
  195. "dnaMethyAge__PCHannumG2013",
  196. "PC3",
  197. "dnaMethyAge__ShirebyG2020",
  198. "dnaMethyAge__McEwenL2019",
  199. "dnaMethyAge__LuA2023p1",
  200. "-1 * dnaMethyAge__LuA2019",
  201. "dnaMethyAge__Cortex_common",
  202. "dnaMethyAge__CBL_common",
  203. "RepliTali",
  204. "dnaMethyAge__CBL_specific",
  205. "dnaMethyAge__HorvathS2018",
  206. "dnaMethyAge__ZhangQ2019",
  207. "dnaMethyAge__HannumG2013",
  208. "epiTOC2_tnsc",
  209. "dnaMethyAge__LevineM2018",
  210. "age_at_diagnosis_days",
  211. "-1 * epiTOC2_hypoSC",
  212. "PC1",
  213. "% detP significant probes (log)",
  214. "-1 * QC: SPECIFICITY I GT MM 6",
  215. "time_tissue_in_ffpe"
  216. )
  217. ## forests ----
  218. ### grade ----
  219. tmp <- glass_od.metadata.array_samples |>
  220. filter_GLASS_OD_idats(CONST_N_GLASS_OD_INCLUDED_SAMPLES) |>
  221. filter_first_G2_and_last_G3(154) |>
  222. dplyr::mutate(`age_at_diagnosis_days` = as.Date(patient_diagnosis_date) - as.Date(patient_birth_date)) |>
  223. dplyr::filter(!is.na(age_at_diagnosis_days)) |>
  224. dplyr::mutate(age_at_diagnosis_days = age_at_diagnosis_days - min(na.omit(age_at_diagnosis_days))) |>
  225. dplyr::mutate(age_at_diagnosis_days = as.numeric(age_at_diagnosis_days)) |>
  226. dplyr::mutate(time_tissue_in_ffpe = ifelse(isolation_material == "ffpe", time_between_resection_and_array, 0)) |>
  227. dplyr::select(resection_id,
  228. resection_tumor_grade,
  229. array_median.overall.methylation,
  230. array_epiTOC2_tnsc, array_epiTOC2_hypoSC, contains("array_dnaMethyAge"), array_RepliTali,
  231. array_percentage.detP.signi, array_PC1, `array_qc_SPECIFICITY_I_GT_Mismatch_6_(PM)_Red_smaller_NA_0.5`,
  232. time_tissue_in_ffpe,
  233. array_GLASS_NL_g2_g3_sig, array_PC2, array_A_IDH_HG__A_IDH_LG_lr__lasso_fit,
  234. array_PC3,
  235. age_at_diagnosis_days,
  236. array_PC4,
  237. array_PC5,
  238. array_PC6
  239. ) |>
  240. tibble::column_to_rownames('resection_id') |>
  241. dplyr::filter(!is.na(time_tissue_in_ffpe)) |>
  242. dplyr::mutate(array_GLASS_OD_g2_g3_sig2 = NULL) |>
  243. dplyr::mutate(array_GLASS_OD_prim_rec_sig2 = NULL) |>
  244. dplyr::mutate(array_GLASS_OD_g2_g3_sig3 = NULL) |>
  245. dplyr::mutate(array_GLASS_OD_prim_rec_sig3 = NULL) |>
  246. dplyr::mutate(array_GLASS_OD_g2_g3_sig4 = NULL) |>
  247. dplyr::mutate(array_GLASS_OD_prim_rec_sig4 = NULL) |>
  248. dplyr::mutate(`-1 * array_median.overall.methylation` = -1 * array_median.overall.methylation) |>
  249. dplyr::mutate(array_median.overall.methylation = NULL) |>
  250. dplyr::mutate(array_PC3 = -1 * array_PC3) |>
  251. dplyr::mutate(array_percentage.detP.signi = log(array_percentage.detP.signi)) |>
  252. dplyr::mutate(`CGC[Ac]` = -1 * array_A_IDH_HG__A_IDH_LG_lr__lasso_fit, array_A_IDH_HG__A_IDH_LG_lr__lasso_fit = NULL) |>
  253. dplyr::mutate(`-1 * array_dnaMethyAge__ZhangY2017` = -1 * array_dnaMethyAge__ZhangY2017 , array_dnaMethyAge__ZhangY2017 = NULL) |>
  254. dplyr::mutate(`-1 * array_epiTOC2_hypoSC` = -1 * array_epiTOC2_hypoSC, array_epiTOC2_hypoSC = NULL) |> # seems at inversed scale
  255. dplyr::mutate(`-1 * array_dnaMethyAge__LuA2019` = -1 * array_dnaMethyAge__LuA2019, array_dnaMethyAge__LuA2019 = NULL) |> # seems at inversed scale
  256. dplyr::mutate(`-1 * QC: SPECIFICITY I GT MM 6` = -1 * `array_qc_SPECIFICITY_I_GT_Mismatch_6_(PM)_Red_smaller_NA_0.5`, `array_qc_SPECIFICITY_I_GT_Mismatch_6_(PM)_Red_smaller_NA_0.5`=NULL) |>
  257. dplyr::select(-array_dnaMethyAge__YangZ2016) |> # epiTOC1, near identical to epiTOC2
  258. dplyr::select(-array_dnaMethyAge__PCHorvathS2013) |> # very similar to its 2018 equivalent
  259. dplyr::mutate(`array_qc_BISULFITE_CONVERSION_I_Beta_I-3_Beta_larger_0.12_0.18` = NULL) |> # contains N/A's
  260. dplyr::mutate(`array_qc_BISULFITE_CONVERSION_I_Beta_I-6_Beta_larger_0.2_0.3` = NULL) |> # contains N/A's
  261. dplyr::rename(`% detP significant probes (log)` = array_percentage.detP.signi) |>
  262. dplyr::mutate(resection_tumor_grade = factor(paste0("Grade",resection_tumor_grade), levels=c("Grade2","Grade3"))) |>
  263. dplyr::mutate(`-1 * CGC[Ac]` = -1 * `CGC[Ac]`, `CGC[Ac]`= NULL) |>
  264. dplyr::mutate(`array_dnaMethyAge__ZhangY2017` = -1 * `-1 * array_dnaMethyAge__ZhangY2017`, `-1 * array_dnaMethyAge__ZhangY2017`=NULL) |>
  265. dplyr::mutate(`-1 * array_GLASS_NL_g2_g3_sig` = -1 * array_GLASS_NL_g2_g3_sig, array_GLASS_NL_g2_g3_sig = NULL) |>
  266. dplyr::mutate(`-1 * array_PC2` = -1 * array_PC2, array_PC2 = NULL)
  267. colnames(tmp) <- gsub("array_","",colnames(tmp))
  268. data <- tmp |>
  269. dplyr::mutate(`resection_tumor_grade` = NULL) |>
  270. dplyr::mutate(array_PC1 = NULL) |>
  271. dplyr::mutate(PC1 = NULL) |>
  272. as.data.frame() |>
  273. scale(center=T, scale=T) |>
  274. t() |>
  275. as.data.frame()
  276. design <- model.matrix(~factor(resection_tumor_grade), data=tmp) # no correcion, you can' time in ffpe for quality
  277. #design <- model.matrix(~age_at_diagnosis_days + factor(resection_tumor_grade), data=tmp)
  278. #design <- model.matrix(~factor(resection_tumor_grade), data=tmp)
  279. fit <- limma::lmFit(data, design)
  280. fit <- limma::eBayes(fit, trend=T)
  281. stats <- limma::topTable(fit,
  282. n=nrow(data),
  283. coef="factor(resection_tumor_grade)Grade3",
  284. sort.by = "none",
  285. confint=T,
  286. adjust.method="fdr") |>
  287. tibble::rownames_to_column('covar')
  288. stats = rbind(stats,
  289. data.frame(covar=c('array_PC1'), logFC=0, CI.L=0, CI.R=0, AveExpr=0,t=0,P.Value=NA, adj.P.Val=NA,B=NA)
  290. ) |>
  291. dplyr::mutate(covar = gsub("array_", "", covar))
  292. plt <- data.frame(covar = order) |>
  293. dplyr::mutate(y = dplyr::n():1) |>
  294. assertr::verify(covar %in% stats$covar) |>
  295. assertr::verify(stats$covar %in% covar) |>
  296. dplyr::left_join(stats, by=c('covar'='covar'))
  297. plt <- rbind(
  298. plt |>
  299. dplyr::mutate(logFC = 0) |>
  300. dplyr::mutate(t = 0) |>
  301. dplyr::mutate(type = "zero")
  302. ,
  303. plt |>
  304. dplyr::mutate(type = "datapoint")
  305. ,
  306. plt |>
  307. dplyr::mutate(logFC = CI.L) |>
  308. dplyr::mutate(type = "CI")
  309. ,
  310. plt |>
  311. dplyr::mutate(logFC = CI.R) |>
  312. dplyr::mutate(type = "CI")
  313. ) |>
  314. dplyr::mutate(stars = gtools::stars.pval(adj.P.Val))
  315. #order
  316. ggplot(plt, aes(x = t, y=reorder(covar, y), label=stars, group=covar)) +
  317. geom_line(data=subset(plt, type %in% c("datapoint", "zero")),lwd=theme_nature_lwd) +
  318. #geom_line(data=subset(plt, type %in% c("CI")),lwd=theme_nature_lwd*3) +
  319. geom_point(data=subset(plt, type == "datapoint"), size=theme_nature_size/3) +
  320. geom_text(data=subset(plt, type %in% c("datapoint")), x = 7.5, size=theme_nature_size, family=theme_nature_font_family) +
  321. xlim(-5,7.7) +
  322. labs(y = NULL, x="t statistic WHO Grade 2 vs. Grade 3") +
  323. theme_nature
  324. ggsave("output/figures/vis_aging_clocks__forest__grade.pdf", width=2.75,height = 2.665)
  325. # https://support.bioconductor.org/p/37524/
  326. # https://bookdown.org/MathiasHarrer/Doing_Meta_Analysis_in_R/forest.html
  327. # https://bookdown.org/MathiasHarrer/Doing_Meta_Analysis_in_R/metareg.html
  328. ### prim-rec ----
  329. tmp <- glass_od.metadata.array_samples |>
  330. filter_GLASS_OD_idats(CONST_N_GLASS_OD_INCLUDED_SAMPLES) |>
  331. filter_primaries_and_last_recurrences(179) |>
  332. dplyr::mutate(`age_at_diagnosis_days` = as.Date(patient_diagnosis_date) - as.Date(patient_birth_date)) |>
  333. dplyr::filter(!is.na(age_at_diagnosis_days)) |>
  334. dplyr::mutate(age_at_diagnosis_days = age_at_diagnosis_days - min(na.omit(age_at_diagnosis_days))) |>
  335. dplyr::mutate(age_at_diagnosis_days = as.numeric(age_at_diagnosis_days)) |>
  336. dplyr::mutate(time_tissue_in_ffpe = ifelse(isolation_material == "ffpe", time_between_resection_and_array, 0)) |>
  337. dplyr::select(resection_id,
  338. resection_number,
  339. array_median.overall.methylation,
  340. array_epiTOC2_tnsc, array_epiTOC2_hypoSC, contains("array_dnaMethyAge"), array_RepliTali,
  341. array_percentage.detP.signi, array_PC1, `array_qc_SPECIFICITY_I_GT_Mismatch_6_(PM)_Red_smaller_NA_0.5`,
  342. time_tissue_in_ffpe,
  343. array_GLASS_NL_g2_g3_sig, array_PC2, array_A_IDH_HG__A_IDH_LG_lr__lasso_fit,
  344. array_PC3,
  345. age_at_diagnosis_days,
  346. array_PC4,
  347. array_PC5,
  348. array_PC6
  349. ) |>
  350. tibble::column_to_rownames('resection_id') |>
  351. dplyr::filter(!is.na(time_tissue_in_ffpe)) |>
  352. dplyr::mutate(array_GLASS_OD_g2_g3_sig2 = NULL) |>
  353. dplyr::mutate(array_GLASS_OD_prim_rec_sig2 = NULL) |>
  354. dplyr::mutate(array_GLASS_OD_g2_g3_sig3 = NULL) |>
  355. dplyr::mutate(array_GLASS_OD_prim_rec_sig3 = NULL) |>
  356. dplyr::mutate(array_GLASS_OD_g2_g3_sig4 = NULL) |>
  357. dplyr::mutate(array_GLASS_OD_prim_rec_sig4 = NULL) |>
  358. dplyr::mutate(`-1 * array_median.overall.methylation` = -1 * array_median.overall.methylation) |>
  359. dplyr::mutate(array_median.overall.methylation = NULL) |>
  360. dplyr::mutate(array_PC3 = -1 * array_PC3) |>
  361. dplyr::mutate(array_percentage.detP.signi = log(array_percentage.detP.signi)) |>
  362. dplyr::mutate(`CGC[Ac]` = -1 * array_A_IDH_HG__A_IDH_LG_lr__lasso_fit, array_A_IDH_HG__A_IDH_LG_lr__lasso_fit = NULL) |>
  363. dplyr::mutate(`-1 * array_dnaMethyAge__ZhangY2017` = -1 * array_dnaMethyAge__ZhangY2017 , array_dnaMethyAge__ZhangY2017 = NULL) |>
  364. dplyr::mutate(`-1 * array_epiTOC2_hypoSC` = -1 * array_epiTOC2_hypoSC, array_epiTOC2_hypoSC = NULL) |> # seems at inversed scale
  365. dplyr::mutate(`-1 * array_dnaMethyAge__LuA2019` = -1 * array_dnaMethyAge__LuA2019, array_dnaMethyAge__LuA2019 = NULL) |> # seems at inversed scale
  366. dplyr::mutate(`-1 * QC: SPECIFICITY I GT MM 6` = -1 * `array_qc_SPECIFICITY_I_GT_Mismatch_6_(PM)_Red_smaller_NA_0.5`, `array_qc_SPECIFICITY_I_GT_Mismatch_6_(PM)_Red_smaller_NA_0.5`=NULL) |>
  367. dplyr::select(-array_dnaMethyAge__YangZ2016) |> # epiTOC1, near identical to epiTOC2
  368. dplyr::select(-array_dnaMethyAge__PCHorvathS2013) |> # very similar to its 2018 equivalent
  369. dplyr::mutate(`array_qc_BISULFITE_CONVERSION_I_Beta_I-3_Beta_larger_0.12_0.18` = NULL) |> # contains N/A's
  370. dplyr::mutate(`array_qc_BISULFITE_CONVERSION_I_Beta_I-6_Beta_larger_0.2_0.3` = NULL) |> # contains N/A's
  371. dplyr::rename(`% detP significant probes (log)` = array_percentage.detP.signi) |>
  372. dplyr::mutate(resection_prim_rec = factor(ifelse(resection_number == 1,"primary", "recurrent"), levels=c("primary","recurrent"))) |>
  373. dplyr::mutate(resection_number = NULL) |>
  374. dplyr::mutate(`-1 * CGC[Ac]` = -1 * `CGC[Ac]`, `CGC[Ac]`= NULL) |>
  375. dplyr::mutate(`array_dnaMethyAge__ZhangY2017` = -1 * `-1 * array_dnaMethyAge__ZhangY2017`, `-1 * array_dnaMethyAge__ZhangY2017`=NULL) |>
  376. dplyr::mutate(`-1 * array_GLASS_NL_g2_g3_sig` = -1 * array_GLASS_NL_g2_g3_sig, array_GLASS_NL_g2_g3_sig = NULL) |>
  377. dplyr::mutate(`-1 * array_PC2` = -1 * array_PC2, array_PC2 = NULL)
  378. colnames(tmp) <- gsub("array_","",colnames(tmp))
  379. data <- tmp |>
  380. dplyr::mutate(`resection_prim_rec` = NULL) |>
  381. dplyr::mutate(array_PC1 = NULL) |>
  382. dplyr::mutate(PC1 = NULL) |>
  383. as.data.frame() |>
  384. scale(center=T, scale=T) |>
  385. t() |>
  386. as.data.frame()
  387. design <- model.matrix(~ factor(resection_prim_rec), data=tmp)
  388. #design <- model.matrix(~age_at_diagnosis_days + factor(resection_tumor_grade), data=tmp)
  389. #design <- model.matrix(~factor(resection_tumor_grade), data=tmp)
  390. fit <- limma::lmFit(data, design)
  391. fit <- limma::eBayes(fit, trend=T)
  392. stats <- limma::topTable(fit,
  393. n=nrow(data),
  394. coef="factor(resection_prim_rec)recurrent",
  395. sort.by = "none",
  396. confint=T,
  397. adjust.method="fdr") |>
  398. tibble::rownames_to_column('covar')
  399. stats = rbind(stats,
  400. data.frame(covar=c('array_PC1'), logFC=0, CI.L=0, CI.R=0, AveExpr=0,t=0,P.Value=NA, adj.P.Val=NA,B=NA)
  401. ) |>
  402. dplyr::mutate(covar = gsub("array_", "", covar))
  403. plt <- data.frame(covar = order) |>
  404. dplyr::mutate(y = dplyr::n():1) |>
  405. assertr::verify(covar %in% stats$covar) |>
  406. assertr::verify(stats$covar %in% covar) |>
  407. dplyr::left_join(stats, by=c('covar'='covar'))
  408. plt <- rbind(
  409. plt |>
  410. dplyr::mutate(logFC = 0) |>
  411. dplyr::mutate(t = 0) |>
  412. dplyr::mutate(type = "zero")
  413. ,
  414. plt |>
  415. dplyr::mutate(type = "datapoint")
  416. ,
  417. plt |>
  418. dplyr::mutate(logFC = CI.L) |>
  419. dplyr::mutate(type = "CI")
  420. ,
  421. plt |>
  422. dplyr::mutate(logFC = CI.R) |>
  423. dplyr::mutate(type = "CI")
  424. ) |>
  425. dplyr::mutate(stars = gtools::stars.pval(adj.P.Val))
  426. #order
  427. ggplot(plt, aes(x = t, y=reorder(covar, y), label=stars, group=covar)) +
  428. geom_line(data=subset(plt, type %in% c("datapoint", "zero")),lwd=theme_nature_lwd) +
  429. #geom_line(data=subset(plt, type %in% c("CI")),lwd=theme_nature_lwd*3) +
  430. geom_point(data=subset(plt, type == "datapoint"), size=theme_nature_size/3) +
  431. geom_text(data=subset(plt, type %in% c("datapoint")), x = 7.5, size=theme_nature_size, family=theme_nature_font_family) +
  432. xlim(-5, 7.7) +
  433. labs(y = NULL, x="t statistic primary vs. recurrent") +
  434. theme_nature
  435. ggsave("output/figures/vis_aging_clocks__forest__prim_rec.pdf", width=2.75,height = 2.665)
  436. # https://support.bioconductor.org/p/37524/
  437. # https://bookdown.org/MathiasHarrer/Doing_Meta_Analysis_in_R/forest.html
  438. # https://bookdown.org/MathiasHarrer/Doing_Meta_Analysis_in_R/metareg.html
  439. # DMP time_in_tissue_ffpe
  440. # plot order:
  441. plt.order <- data.frame(name = c(
  442. "dnaMethyAge__ZhangY2017",
  443. "CGC[Ac]",
  444. "GLASS_NL_g2_g3_sig",
  445. "PC2",
  446. "time_tissue_in_ffpe",
  447. "QC: SPECIFICITY I GT MM 6",
  448. "detP significant probes (log)",
  449. "PC1",
  450. "epiTOC2_hypoSC",
  451. "dnaMethyAge__LuA2023p2",
  452. "dnaMethyAge__LuA2023p3",
  453. "dnaMethyAge__LuA2019",
  454. "dnaMethyAge__CBL_specific",
  455. "RepliTali",
  456. "epiTOC2_tnsc",
  457. "dnaMethyAge__HannumG2013",
  458. "dnaMethyAge__CBL_common",
  459. "dnaMethyAge__Cortex_common",
  460. "dnaMethyAge__McEwenL2019",
  461. "dnaMethyAge__ZhangQ2019",
  462. "dnaMethyAge__HorvathS2018",
  463. "dnaMethyAge__LevineM2018",
  464. "dnaMethyAge__LuA2023p1",
  465. "PC3",
  466. "dnaMethyAge__ShirebyG2020",
  467. "dnaMethyAge__PCHorvathS2018",
  468. "dnaMethyAge__PCHannumG2013",
  469. "dnaMethyAge__PCPhenoAge"
  470. )) |>
  471. dplyr::mutate(order = 1:dplyr::n()) |>
  472. dplyr::mutate(colname = dplyr::recode(name,
  473. `PC1` = "DMP__PCs__pp_nc__PC1_adj.P.Val",
  474. `PC2` = "DMP__PCs__pp_nc__PC2_adj.P.Val",
  475. `PC3` = "DMP__PCs__pp_nc__PC3_adj.P.Val",
  476. `detP significant probes (log)` = "DMP__pct_detP_signi__pp_nc__adj.P.Val",
  477. `CGC[Ac]` = "DMP__AcCGAP__pp_nc__adj.P.Val",
  478. `GLASS_NL_g2_g3_sig` = "DMP__GLASS_NL_signature__pp_nc__adj.P.Val",
  479. `RepliTali` = "DMP__RepliTali__up_nc__adj.P.Val",
  480. `QC: SPECIFICITY I GT MM 6` = "DMP__mnp_qc_SPECIFICITY_I_GT_Mismatch_6_PM_Red_smaller_NA_0_5__pp_nc__adj.P.Val",
  481. `epiTOC2_hypoSC` = "DMP__epiTOC2_hypoSC__up_nc__adj.P.Val",
  482. `epiTOC2_tnsc` = "DMP__epiTOC2_tnsc__up_nc__adj.P.Val",
  483. `dnaMethyAge__CBL_common` = "DMP__dnaMethyAge__CBL_common__up_nc__adj.P.Val",
  484. `dnaMethyAge__CBL_specific` = "DMP__dnaMethyAge__CBL_specific__up_nc__adj.P.Val",
  485. `dnaMethyAge__Cortex_common` = "DMP__dnaMethyAge__Cortex_common__up_nc__adj.P.Val",
  486. `dnaMethyAge__HannumG2013` = "DMP__dnaMethyAge__HannumG2013__up_nc__adj.P.Val",
  487. `dnaMethyAge__HorvathS2018` = "DMP__dnaMethyAge__HorvathS2018__up_nc__adj.P.Val",
  488. `dnaMethyAge__LevineM2018` = "DMP__dnaMethyAge__LevineM2018__up_nc__adj.P.Val",
  489. `dnaMethyAge__LuA2019` = "DMP__dnaMethyAge__LuA2019__up_nc__adj.P.Val",
  490. `dnaMethyAge__LuA2023p1` = "DMP__dnaMethyAge__LuA2023p1__up_nc__adj.P.Val",
  491. `dnaMethyAge__LuA2023p2` = "DMP__dnaMethyAge__LuA2023p2__up_nc__adj.P.Val",
  492. `dnaMethyAge__LuA2023p3` = "DMP__dnaMethyAge__LuA2023p3__up_nc__adj.P.Val",
  493. `dnaMethyAge__McEwenL2019` = "DMP__dnaMethyAge__McEwenL2019__up_nc__adj.P.Val",
  494. `dnaMethyAge__PCHannumG2013` = "DMP__dnaMethyAge__PCHannumG2013__up_nc__adj.P.Val",
  495. `dnaMethyAge__PCHorvathS2013` = "DMP__dnaMethyAge__PCHorvathS2013__up_nc__adj.P.Val",
  496. `dnaMethyAge__PCHorvathS2018` = "DMP__dnaMethyAge__PCHorvathS2018__up_nc__adj.P.Val",
  497. `dnaMethyAge__PCPhenoAge` = "DMP__dnaMethyAge__PCPhenoAge__up_nc__adj.P.Val",
  498. `dnaMethyAge__ShirebyG2020` = "DMP__dnaMethyAge__ShirebyG2020__up_nc__adj.P.Val",
  499. `dnaMethyAge__YangZ2016` = "DMP__dnaMethyAge__YangZ2016__up_nc__adj.P.Val",
  500. `dnaMethyAge__ZhangQ2019` = "DMP__dnaMethyAge__ZhangQ2019__up_nc__adj.P.Val",
  501. `dnaMethyAge__ZhangY2017` = "DMP__dnaMethyAge__ZhangY2017__up_nc__adj.P.Val",
  502. `time_tissue_in_ffpe` = "DMP__FFPE_decay_time__pp_nc__adj.P.Val"
  503. ))
  504. plt <- data.mvalues.probes |>
  505. (function(.) {
  506. print(dim(.))
  507. assertthat::assert_that(nrow(.) == CONST_N_PROBES_UNMASKED)
  508. return(.)
  509. })() |>
  510. dplyr::filter(detP_good_probe & grepl("^cg", probe_id)) |>
  511. (function(.) {
  512. print(dim(.))
  513. assertthat::assert_that(nrow(.) == CONST_N_PROBES_UNMASKED_AND_DETP)
  514. return(.)
  515. })() |>
  516. tibble::tibble() |>
  517. dplyr::select(
  518. `DMP__PCs__pp_nc__PC1_adj.P.Val`,
  519. `DMP__PCs__pp_nc__PC2_adj.P.Val`,
  520. `DMP__PCs__pp_nc__PC3_adj.P.Val`,
  521. `DMP__pct_detP_signi__pp_nc__adj.P.Val`,
  522. `DMP__AcCGAP__pp_nc__adj.P.Val`,
  523. `DMP__GLASS_NL_signature__pp_nc__adj.P.Val`,
  524. `DMP__RepliTali__up_nc__adj.P.Val`,
  525. `DMP__mnp_qc_SPECIFICITY_I_GT_Mismatch_6_PM_Red_smaller_NA_0_5__pp_nc__adj.P.Val`,
  526. `DMP__epiTOC2_hypoSC__up_nc__adj.P.Val`,
  527. `DMP__epiTOC2_tnsc__up_nc__adj.P.Val`,
  528. `DMP__dnaMethyAge__CBL_common__up_nc__adj.P.Val`,
  529. `DMP__dnaMethyAge__CBL_specific__up_nc__adj.P.Val`,
  530. `DMP__dnaMethyAge__Cortex_common__up_nc__adj.P.Val`,
  531. `DMP__dnaMethyAge__HannumG2013__up_nc__adj.P.Val`,
  532. `DMP__dnaMethyAge__HorvathS2018__up_nc__adj.P.Val`,
  533. `DMP__dnaMethyAge__LevineM2018__up_nc__adj.P.Val`,
  534. `DMP__dnaMethyAge__LuA2019__up_nc__adj.P.Val`,
  535. `DMP__dnaMethyAge__LuA2023p1__up_nc__adj.P.Val`,
  536. `DMP__dnaMethyAge__LuA2023p2__up_nc__adj.P.Val`,
  537. `DMP__dnaMethyAge__LuA2023p3__up_nc__adj.P.Val`,
  538. `DMP__dnaMethyAge__McEwenL2019__up_nc__adj.P.Val`,
  539. `DMP__dnaMethyAge__PCHannumG2013__up_nc__adj.P.Val`,
  540. `DMP__dnaMethyAge__PCHorvathS2018__up_nc__adj.P.Val`,
  541. `DMP__dnaMethyAge__PCPhenoAge__up_nc__adj.P.Val`,
  542. `DMP__dnaMethyAge__ShirebyG2020__up_nc__adj.P.Val`,
  543. `DMP__dnaMethyAge__ZhangQ2019__up_nc__adj.P.Val`,
  544. `DMP__dnaMethyAge__ZhangY2017__up_nc__adj.P.Val`,
  545. `DMP__FFPE_decay_time__pp_nc__adj.P.Val`
  546. ) |>
  547. tidyr::pivot_longer(cols = dplyr::everything(), values_to = "adj.P.Val", names_to = "colname") |>
  548. dplyr::mutate(one.min.adj.P.val = 1 - adj.P.Val) |>
  549. dplyr::left_join(plt.order, by=c('colname'='colname')) |>
  550. dplyr::rename(order_y = order) |>
  551. dplyr::group_by(colname) |>
  552. dplyr::mutate(order_x = rank(adj.P.Val)) |>
  553. dplyr::ungroup() |>
  554. dplyr::arrange(order_y, -order_x) |>
  555. dplyr::mutate(facet = factor(name, levels = plt.order |> dplyr::arrange(order) |> dplyr::pull(name))) |>
  556. dplyr::filter(1:dplyr::n() %% 450 == 1)
  557. plt2 <- rbind(plt |>
  558. dplyr::mutate(group = paste0(order_x,colname)),
  559. plt |>
  560. dplyr::mutate(group = paste0(order_x,colname)) |>
  561. dplyr::mutate(adj.P.Val=0,
  562. one.min.adj.P.val=0))
  563. ggplot(plt2, aes(x=order_x, y=one.min.adj.P.val, group=group, col = adj.P.Val < 0.01)) +
  564. facet_grid(rows = vars(facet)) + # , levels=plt.order |> dplyr::arrange(order) |> dplyr::pull(name)
  565. geom_line(lwd=theme_nature_lwd) +
  566. theme_nature +
  567. theme(axis.title.x=element_blank(),
  568. axis.text.x=element_blank(),
  569. axis.ticks.x=element_blank()) +
  570. theme(strip.text.y.right = element_text(angle = 0)) +
  571. coord_cartesian(ylim = c(0,1))
  572. # generic statistics ----
  573. ## prim - rec ----
  574. tmp <- glass_od.metadata.array_samples |>
  575. filter_GLASS_OD_idats(CONST_N_GLASS_OD_INCLUDED_SAMPLES) |>
  576. filter_primaries_and_last_recurrences(179) |>
  577. dplyr::group_by(patient_id) |>
  578. dplyr::mutate(is.paired = dplyr::n() == 2) |>
  579. dplyr::ungroup() |>
  580. dplyr::mutate(patient = as.factor(paste0("p",ifelse(is.paired,patient_id,"remainder")))) |>
  581. dplyr::mutate(pr.status = factor(ifelse(resection_number == 1,"primary","recurrence"),levels=c("primary","recurrence"))) |>
  582. dplyr::mutate(`age_at_diagnosis_days` = as.Date(patient_diagnosis_date) - as.Date(patient_birth_date)) |>
  583. dplyr::filter(!is.na(age_at_diagnosis_days)) |>
  584. dplyr::mutate(age_at_diagnosis_days = age_at_diagnosis_days - min(na.omit(age_at_diagnosis_days))) |>
  585. dplyr::mutate(age_at_diagnosis_days = as.numeric(age_at_diagnosis_days)) |>
  586. dplyr::mutate(time_tissue_in_ffpe = ifelse(isolation_material == "ffpe", time_between_resection_and_array, 0)) |>
  587. dplyr::select(resection_id,
  588. resection_tumor_grade,
  589. patient,
  590. pr.status,
  591. array_PC1,
  592. array_dnaMethyAge__PCHorvathS2018
  593. ) |>
  594. tibble::column_to_rownames('resection_id') |>
  595. dplyr::rename(PCHorvathS2018 = array_dnaMethyAge__PCHorvathS2018)
  596. data <- tmp |>
  597. dplyr::select(PCHorvathS2018) |>
  598. t() |>
  599. as.data.frame()
  600. stopifnot(rownames(tmp) == colnames(data))
  601. design <- model.matrix(~array_PC1 +# factor(patient) +
  602. factor(patient) +
  603. factor(pr.status), data=tmp)
  604. fit <- limma::lmFit(data, design)
  605. fit <- limma::eBayes(fit, trend=T)
  606. stats <- limma::topTable(fit,
  607. n=nrow(data),
  608. coef="factor(pr.status)recurrence",
  609. sort.by = "none",
  610. confint=T,
  611. adjust.method="fdr") |>
  612. tibble::rownames_to_column('covar')
  613. stats
  614. ## WHO grade ----
  615. tmp <- glass_od.metadata.array_samples |>
  616. filter_GLASS_OD_idats(CONST_N_GLASS_OD_INCLUDED_SAMPLES) |>
  617. filter_primaries_and_last_recurrences(180) |>
  618. dplyr::group_by(patient_id) |>
  619. dplyr::mutate(is.paired = dplyr::n() == 2) |>
  620. dplyr::ungroup() |>
  621. dplyr::mutate(patient = as.factor(paste0("p",ifelse(is.paired,patient_id,"remainder")))) |>
  622. dplyr::mutate(gr.status = ifelse(resection_tumor_grade == 2, "Grade2", "Grade3")) |>
  623. dplyr::mutate(`age_at_diagnosis_days` = as.Date(patient_diagnosis_date) - as.Date(patient_birth_date)) |>
  624. dplyr::filter(!is.na(age_at_diagnosis_days)) |>
  625. dplyr::mutate(age_at_diagnosis_days = age_at_diagnosis_days - min(na.omit(age_at_diagnosis_days))) |>
  626. dplyr::mutate(age_at_diagnosis_days = as.numeric(age_at_diagnosis_days)) |>
  627. dplyr::mutate(time_tissue_in_ffpe = ifelse(isolation_material == "ffpe", time_between_resection_and_array, 0)) |>
  628. dplyr::select(resection_id,
  629. resection_tumor_grade,
  630. patient,
  631. gr.status,
  632. array_PC1,
  633. array_PC2,
  634. array_PC3,
  635. array_dnaMethyAge__PCHorvathS2018,
  636. array_A_IDH_HG__A_IDH_LG_lr__lasso_fit
  637. ) |>
  638. tibble::column_to_rownames('resection_id') |>
  639. dplyr::rename(PCHorvathS2018 = array_dnaMethyAge__PCHorvathS2018)
  640. data <- tmp |>
  641. dplyr::select(PCHorvathS2018) |>
  642. #dplyr::select(array_A_IDH_HG__A_IDH_LG_lr__lasso_fit) |>
  643. #dplyr::select(array_PC3) |>
  644. t() |>
  645. as.data.frame()
  646. stopifnot(rownames(tmp) == colnames(data))
  647. design <- model.matrix(~array_PC1 + factor(patient) + factor(gr.status), data=tmp)
  648. fit <- limma::lmFit(data, design)
  649. fit <- limma::eBayes(fit, trend=T)
  650. stats <- limma::topTable(fit,
  651. n=nrow(data),
  652. coef="factor(gr.status)Grade3",
  653. sort.by = "none",
  654. confint=T,
  655. adjust.method="fdr") |>
  656. tibble::rownames_to_column('covar')
  657. stats

vis_aging_clocks.R at commit 8d13094, no license · at the source

Overview

Authors: Youri Hoogstrate1, Santoesha A. Ghisai1, Levi van Hijfte2, Rania Head1, Iris de Heer1, Marta Padovan3, Maurice de Wit1, Wies R. Vallentgoed1, Angelo Dipasquale4, Maarten M.J. Wijnenga1, Bas Weenink1, Rosa Luning1, Sybren L.N. Maas5,6, Adela Brzobohata7, Michael Weller7, Tobias Weiss7, Maximilian J. Mair8, Anna S. Berghoff8, Adelheid Wöhrer9,10, Albert Jeltsch11
and 14 other authorsJohan A.F. Koekkoek12, Hans M. Hazelbag13, Mathilde C.M. Kouwenhoven14, Yongsoo Kim15, Bart A. Westerman16, Bauke Ylstra15, Anneke M. Niers14, Kevin C. Johnson17, Frederick S. Varn18,19,20, Roel G.W. Verhaak17, Mustafa Khasraw21, Martin J. van den Bent1, Pieter Wesseling15,22, Pim J. French1
22 affiliations
  1. Department of Neurology, Erasmus MC Cancer Institute, Erasmus MC, Rotterdam, the Netherlands
  2. Department of Neurosurgery, University Clinic Erlangen, Erlangen, Germany
  3. Department of Oncology, Oncology 1, Veneto Institute of Oncology IOV-IRCCS, 35128 Padua, Italy
  4. RCCS Humanitas Research Hospital, Via Alessandro Manzoni 56, Rozzano, Milan, Italy
  5. Department of Pathology, Erasmus MC Cancer Institute Erasmus MC, Rotterdam, the Netherlands
  6. Department of Pathology, Leiden University Medical Center, Leiden, the Netherlands
  7. Department of Neurology, Clinical Neuroscience Center, University Hospital Zurich and University of Zurich, Zurich, Switzerland
  8. Division of Oncology, Department of Medicine I, Medical University of Vienna, Vienna, Austria
  9. Department of Pathology, Neuropathology and Molecular Pathology, Medical University of Innsbruck, Innsbruck, Tyrol, Austria
  10. Division of Neuropathology and Neurochemistry, Department of Neurology, Medical University of Vienna, Vienna, Austria
  11. Institute of Biochemistry and Technical Biochemistry, Department of Biochemistry, University of Stuttgart, Stuttgart, Germany
  12. Department of Neurology, Leiden University Medical Center, Leiden, the Netherlands
  13. Department of Pathology, Haaglanden MC, The Hague, the Netherlands
  14. Department of Neurology, Amsterdam UMC, Amsterdam, the Netherlands
  15. Department of Pathology, Amsterdam UMC, Cancer Center Amsterdam, Amsterdam, the Netherlands
  16. Department of Human Genetics, Amsterdam UMC, Amsterdam, the Netherlands
  17. Department of Neurosurgery, Yale University, New Haven, CT, USA
  18. The Jackson Laboratory for Genomic Medicine, Farmington, CT, USA
  19. Department of Genetics and Genome Sciences, University of Connecticut Health Center, Farmington, CT, USA
  20. Institute for Systems Genomics, University of Connecticut, Storrs, CT, USA
  21. Department of Neurosurgery, Duke University, Durham, NC, USA
  22. Princess Máxima Center for Pediatric Oncology, Utrecht, the Netherlands
Journal: Cell reports. Medicine, volume 7, issue 3, article 102682
Dates: received 9 September 2025; accepted 12 February 2026; published online 17 March 2026; in print March 2026
Type: Research article · Language: English
License: CC BY
Identifiers: DOI 10.1016/j.xcrm.2026.102682 · PMID 41850239 · PMCID PMC13006442 · OpenAlex W7138330789
Open access: gold, a free copy (OpenAlex)
Status: code verified
Categories: genetics / omics (modality), human (organism), other condition (population)
Methods: Statistics, Smoothing, state filtering, decompositions, Connectivity
Keywords: IDH-mutant glioma, oligodendroglioma, tumor evolution, TET, DNA-methylation, sequence context, continuous grading coefficient
MeSH: Brain Neoplasms*, CpG Islands*, DNA Demethylation*, DNA Methylation*, Glioma*, Isocitrate Dehydrogenase*, Mutation*, Oligodendroglioma*, Disease Progression, Epigenesis, Genetic, Female, Humans (* major topic)
Topic: Glioma Diagnosis and Treatment (Genetics, Medicine), according to OpenAlex
Funding: KWF (2022-4 EXPL/14788); Brain Tumour Charity (GN-000765); Stichting Hanarth Fonds
Citations: cited by 2 papers (Europe PMC); 84 references in the paper
Research resources: MIB1/Ki-67 (Rabbit anti-human) RRID:AB_2631262

Abstract

Treatment decisions in IDH-mutant oligodendrogliomas are shaped by tumor aggressiveness, underscoring the need for objective grading of these malignant brain tumors. We collect 302 primary and recurrent resections from oligodendrogliomas and perform Ki-67 staining, proteomics, and DNA methylation profiling. During tumor progression, DNA methylation of oligodendrogliomas changes along a continuum. This continuum is linked to increased epigenetic aging, methylation of transcription factors and Ki-67+ cell density, and large-scale DNA demethylation. Demethylation correlates with CpG flanking sequences preferred by TET enzymes. We confirm these findings in previously profiled astrocytomas, indicating IDH-mutant gliomas progress along a shared epigenetic axis. We develop an objective DNA methylation-based prognostic continuous grading coefficient (CGCψ) that captures these changes and outperforms the World Health Organization (WHO) grading for oligodendrogliomas. Our findings underscore the potential of DNA methylation-based grading to more accurately reflect tumor biology and inform clinical decision-making in IDH-mutant gliomas.

Reproduced under the paper's license (CC BY), from the paper cited above.

Repositories

Its files are read in the Code ↔ Paper reader above, with 29 matches between paragraphs and lines of code.

yhoogstrate/idat-tools

License: GPL-3.0
State: the link answers, verified on 30 September 2026
Evidence: files inventoried
Commit: 668c67c907144d8d2ba6b62a2a06280b8547e4b0, 22 June 2026
Languages: Python (5), Shell (3)
Size: 16 files, 8 scripts
Software Heritage: not archived
Found in: “Data and code availability”
Holds: README, license file, CITATION.cff, environment (pyproject.toml), tests
Not found: continuous integration, documentation
Tools: NumPy (2 files), pandas (2 files)
Availability: 1 check, the latest on 30 September 2026: the link answers
  • 30 September 2026: the link answers
10 files

yhoogstrate/glass-od

License: none: the authors keep all their rights
State: the link answers, verified on 30 September 2026
Evidence: files inventoried
Commit: 8d130941ab868349272dc7cc3a6377a7af95d980, 8 June 2026
Languages: R (123), Python (6), Shell (3)
Size: 145 files, 132 scripts
Software Heritage: not archived
Found in: “Data and code availability”
Holds: README
Not found: license file, CITATION.cff, environment file, tests, continuous integration, documentation
Tools: tidyverse (104 files), ggplot2 (41 files), ggpubr (18 files), patchwork (18 files), limma (9 files), data.table (6 files), reshape2 (3 files), survival (3 files), DESeq2 (2 files), glmnet (2 files), broom (1 file), circlize (1 file), ComplexHeatmap (1 file), Nextflow (1 file), NumPy (1 file), pandas (1 file), pROC (1 file), Seurat (1 file), UMAP (1 file)
Availability: 1 check, the latest on 30 September 2026: the link answers
  • 30 September 2026: the link answers
133 files

ErasmusMC-Neuro-Oncology/Continuous_Grading_Classifier

License: none: the authors keep all their rights
State: the link answers, verified on 30 September 2026
Evidence: files inventoried
Commit: ec666713db917d35fb1b01ecd626e038cb9b32d1, 13 April 2026
Languages: R (2)
Size: 8 files, 2 scripts
Software Heritage: not archived
Found in: “Data and code availability”
Holds: README
Not found: license file, CITATION.cff, environment file, tests, continuous integration, documentation
Tools: data.table (1 file), glmnet (1 file), tidyverse (1 file)
Availability: 1 check, the latest on 30 September 2026: the link answers
  • 30 September 2026: the link answers
3 files

yiluyucheng/dnaMethyAge

License: none: the authors keep all their rights
State: the link answers, verified on 30 September 2026
Evidence: files inventoried
Commit: 0d40c9bb02c7d9a4d91ce01d150a9c0b12edf1f4, 9 April 2026
Languages: R (11)
Size: 49 files, 11 scripts
Software Heritage: not archived
Found in: the text, “Key resources table”
Holds: README, environment (DESCRIPTION), documentation
Not found: license file, CITATION.cff, tests, continuous integration
Availability: 1 check, the latest on 30 September 2026: the link answers
  • 30 September 2026: the link answers
12 files

Zenodo 2632938

License: CC-BY-4.0
State: the link answers, verified on 30 September 2026
Evidence: files inventoried
Languages: R (1)
Size: 2 files, 1 script
Software Heritage: not checked
Found in: the text, “Key resources table”
Holds: documentation
Not found: README, license file, CITATION.cff, environment file, tests, continuous integration
Availability: 1 check, the latest on 30 September 2026: the link answers (HTTP 200)
  • 30 September 2026: the link answers (HTTP 200)
1 file

Zenodo 7108429

License: other-open
State: the link answers, verified on 30 September 2026
Evidence: files inventoried
Size: 1 file
Software Heritage: not checked
Found in: the text, “Key resources table”
Not found: README, license file, CITATION.cff, environment file, tests, continuous integration, documentation
Tools: tidyverse (14 files), ggplot2 (12 files), reshape2 (4 files), edgeR (2 files), pheatmap (2 files), clusterProfiler (1 file), cowplot (1 file), data.table (1 file), DESeq2 (1 file), glmnet (1 file), lme4 (1 file), multcomp (1 file), patchwork (1 file)
Availability: 1 check, the latest on 30 September 2026: the link answers (HTTP 200)
  • 30 September 2026: the link answers (HTTP 200)
20 files

jamieendicott/nature_comm_2022

License: none: the authors keep all their rights
State: the link answers, verified on 30 September 2026
Evidence: files inventoried
Commit: e9e80847ff0a7fb4a20b03330d36b0d3da4c56aa, 25 May 2023
Languages: R (19)
Size: 23 files, 19 scripts
Software Heritage: not archived
Found in: the Zenodo archive record
Holds: README
Not found: license file, CITATION.cff, environment file, tests, continuous integration, documentation
Tools: tidyverse (14 files), ggplot2 (12 files), reshape2 (4 files), edgeR (2 files), pheatmap (2 files), clusterProfiler (1 file), cowplot (1 file), data.table (1 file), DESeq2 (1 file), glmnet (1 file), lme4 (1 file), multcomp (1 file), patchwork (1 file)
Availability: 1 check, the latest on 30 September 2026: the link answers
  • 30 September 2026: the link answers
20 files

The paper's code and data availability statement is in the Data section.

Tracing map

Proposed by the machine: these links were found in the paper and verified at the source, without human review. The map will receive a Zenodo DOI once one of the paper's authors has validated it with their ORCID.

What the map holds:

  • 7 repositories of the authors' code, each at its verified commit, with its license and how the link was found in the paper;
  • 192 scripts, each with its path and the digest of its content;
  • 29 matches between paragraphs of the paper and lines of the code (method lexical-v1);
  • neither the text of the paper nor the code itself.

Its JSON (tracing-map.json) is deposited on Zenodo with its DOI once the map is validated.

Data

Datasets cited

Data and code availability

• DNA methylation data are available in GEO: GSE297733, proteomics data in PRIDE: PXD070222 (https://www.ebi.ac.uk/pride/PXD070222). Supplementary tables have been deposited at https://zenodo.org/records/17711746. • Computer code to analyze all data are available at https://github.com/yhoogstrate/glass-od, for estimating CGCψ at https://github.com/ErasmusMC-Neuro-Oncology/Continuous_Grading_Classifier/, and mixing ∗.idat files at https://github.com/yhoogstrate/idat-tools/. • Any additional information required to reanalyze the data reported in this work is available from the lead contact upon request.

Reproduced under the paper's license (CC BY), from the paper cited above.

Versions

The history of this record: each version stored by the harvester or made by a correction of its authors or of the maintainers of its code, and what changed in its facts. The texts of the paper (its abstract, its availability statements) are not part of it; versions that changed only those are not listed.

Version 1, 30 September 2026: the first record

Recorded: type, language, journal, volume, issue, pages, dates, 34 authors, 7 keywords, 12 MeSH terms, 3 funders, 83 references, 1 RRID.

Cite

This paper

Hoogstrate, Y., Ghisai, S. A., van Hijfte, L., Head, R., de Heer, I., Padovan, M., de Wit, M., Vallentgoed, W. R., Dipasquale, A., Wijnenga, M. M., Weenink, B., Luning, R., Maas, S. L., Brzobohata, A., Weller, M., Weiss, T., Mair, M. J., Berghoff, A. S., Wöhrer, A., . . . French, P. J. (2026). TET CpG sequence-context-specific DNA demethylation shapes progression of IDH-mutant gliomas. Cell reports. Medicine, 7(3), 102682. https://doi.org/10.1016/j.xcrm.2026.102682

BibTeX

@article{hoogstrate2026tet,
author = {Hoogstrate, Youri and Ghisai, Santoesha A. and van Hijfte, Levi and Head, Rania and de Heer, Iris and Padovan, Marta and de Wit, Maurice and Vallentgoed, Wies R. and Dipasquale, Angelo and Wijnenga, Maarten M.J. and Weenink, Bas and Luning, Rosa and Maas, Sybren L.N. and Brzobohata, Adela and Weller, Michael and Weiss, Tobias and Mair, Maximilian J. and Berghoff, Anna S. and Wöhrer, Adelheid and Jeltsch, Albert and Koekkoek, Johan A.F. and Hazelbag, Hans M. and Kouwenhoven, Mathilde C.M. and Kim, Yongsoo and Westerman, Bart A. and Ylstra, Bauke and Niers, Anneke M. and Johnson, Kevin C. and Varn, Frederick S. and Verhaak, Roel G.W. and Khasraw, Mustafa and van den Bent, Martin J. and Wesseling, Pieter and French, Pim J.},
title = {{TET CpG sequence-context-specific DNA demethylation shapes progression of IDH-mutant gliomas}},
journal = {Cell reports. Medicine},
year = {2026},
month = mar,
volume = {7},
number = {3},
pages = {102682},
publisher = {Elsevier},
issn = {2666-3791},
doi = {10.1016/j.xcrm.2026.102682},
url = {https://doi.org/10.1016/j.xcrm.2026.102682},
pmid = {41850239},
pmcid = {PMC13006442}
}

RIS

TY - JOUR
AU - Hoogstrate, Youri
AU - Ghisai, Santoesha A.
AU - van Hijfte, Levi
AU - Head, Rania
AU - de Heer, Iris
AU - Padovan, Marta
AU - de Wit, Maurice
AU - Vallentgoed, Wies R.
AU - Dipasquale, Angelo
AU - Wijnenga, Maarten M.J.
AU - Weenink, Bas
AU - Luning, Rosa
AU - Maas, Sybren L.N.
AU - Brzobohata, Adela
AU - Weller, Michael
AU - Weiss, Tobias
AU - Mair, Maximilian J.
AU - Berghoff, Anna S.
AU - Wöhrer, Adelheid
AU - Jeltsch, Albert
AU - Koekkoek, Johan A.F.
AU - Hazelbag, Hans M.
AU - Kouwenhoven, Mathilde C.M.
AU - Kim, Yongsoo
AU - Westerman, Bart A.
AU - Ylstra, Bauke
AU - Niers, Anneke M.
AU - Johnson, Kevin C.
AU - Varn, Frederick S.
AU - Verhaak, Roel G.W.
AU - Khasraw, Mustafa
AU - van den Bent, Martin J.
AU - Wesseling, Pieter
AU - French, Pim J.
TI - TET CpG sequence-context-specific DNA demethylation shapes progression of IDH-mutant gliomas
T2 - Cell reports. Medicine
J2 - Cell Rep Med
PY - 2026
DA - 2026/03/01
VL - 7
IS - 3
SP - 102682
SN - 2666-3791
PB - Elsevier
DO - 10.1016/j.xcrm.2026.102682
UR - https://doi.org/10.1016/j.xcrm.2026.102682
LA - en
ER -

CSL-JSON

{
"id": "10.1016/j.xcrm.2026.102682",
"type": "article-journal",
"title": "TET CpG sequence-context-specific DNA demethylation shapes progression of IDH-mutant gliomas",
"container-title": "Cell reports. Medicine",
"author": [
{
"family": "Hoogstrate",
"given": "Youri"
},
{
"family": "Ghisai",
"given": "Santoesha A."
},
{
"family": "van Hijfte",
"given": "Levi"
},
{
"family": "Head",
"given": "Rania"
},
{
"family": "de Heer",
"given": "Iris"
},
{
"family": "Padovan",
"given": "Marta"
},
{
"family": "de Wit",
"given": "Maurice"
},
{
"family": "Vallentgoed",
"given": "Wies R."
},
{
"family": "Dipasquale",
"given": "Angelo"
},
{
"family": "Wijnenga",
"given": "Maarten M.J."
},
{
"family": "Weenink",
"given": "Bas"
},
{
"family": "Luning",
"given": "Rosa"
},
{
"family": "Maas",
"given": "Sybren L.N."
},
{
"family": "Brzobohata",
"given": "Adela"
},
{
"family": "Weller",
"given": "Michael"
},
{
"family": "Weiss",
"given": "Tobias"
},
{
"family": "Mair",
"given": "Maximilian J."
},
{
"family": "Berghoff",
"given": "Anna S."
},
{
"family": "Wöhrer",
"given": "Adelheid"
},
{
"family": "Jeltsch",
"given": "Albert"
},
{
"family": "Koekkoek",
"given": "Johan A.F."
},
{
"family": "Hazelbag",
"given": "Hans M."
},
{
"family": "Kouwenhoven",
"given": "Mathilde C.M."
},
{
"family": "Kim",
"given": "Yongsoo"
},
{
"family": "Westerman",
"given": "Bart A."
},
{
"family": "Ylstra",
"given": "Bauke"
},
{
"family": "Niers",
"given": "Anneke M."
},
{
"family": "Johnson",
"given": "Kevin C."
},
{
"family": "Varn",
"given": "Frederick S."
},
{
"family": "Verhaak",
"given": "Roel G.W."
},
{
"family": "Khasraw",
"given": "Mustafa"
},
{
"family": "van den Bent",
"given": "Martin J."
},
{
"family": "Wesseling",
"given": "Pieter"
},
{
"family": "French",
"given": "Pim J."
}
],
"container-title-short": "Cell Rep Med",
"volume": "7",
"issue": "3",
"page": "102682",
"DOI": "10.1016/j.xcrm.2026.102682",
"PMID": "41850239",
"PMCID": "PMC13006442",
"ISSN": "2666-3791",
"publisher": "Elsevier",
"URL": "https://doi.org/10.1016/j.xcrm.2026.102682",
"language": "en",
"issued": {
"date-parts": [
[
2026,
3,
1
]
]
}
}

The tracing map gets a citation of its own once an author has validated it and it has a DOI.

Similar papers

The papers with a page that share the most with this one: the tools found in their code, their categories, datasets, cited references and authors, the rarest counting most.

[1] doi:10.1016/j.xcrm.2026.102766 [code]
A longitudinal single-cell and spatial multiomic atlas of pediatric high-grade glioma.
Journal: Cell reports. Medicine
In common: pROC, edgeR, limma, 17 other tools, genetics / omics, other condition, 5 references
[2] doi:10.1038/s41586-026-10612-6 [code]
Acquired genetic and cell-state changes in IDH-mutant glioma progression.
Journal: Nature
In common: survival, edgeR, broom, 12 other tools, other condition, 10 references
[3] doi:10.1093/bioinformatics/btag592 [code]
Network-based stratification of allele-specific expression reveals patient subgroups in Huntington's disease.
Journal: Bioinformatics (Oxford, England)
In common: multcomp, pROC, survival, 19 other tools, genetics / omics, other condition
[4] doi:10.1016/j.isci.2026.115657 [code]
Integration of machine learning to develop a disulfidptosis model for predicting glioma prognosis, immunotherapy response, and drug.
Journal: iScience
In common: glmnet, pROC, survival, 17 other tools, other condition
[5] doi:10.1038/s42003-026-10957-8 [code]
Brain defence by the extracellular matrix protein Cochlin.
Journal: Communications biology
In common: glmnet, survival, edgeR, 18 other tools
[6] doi:10.1038/s41467-026-77170-3 [code]
DNA methylation profiling identifies long-range epigenetic silencing of clustered protocadherins as a key determinant of meningioma progression.
Journal: Nature communications
In common: pROC, survival, limma, 10 other tools, genetics / omics, other condition, 5 references
[7] doi:10.3390/ijms27104466 [code]
Uncovering the Key Circuit FOSL2/FOS/EGR3/EGR1, Contributing to the Hyperexcitability of Excitatory Neurons in the Epileptic Temporal Cortex and Hippocampus.
Journal: International journal of molecular sciences
In common: glmnet, pROC, limma, 15 other tools, genetics / omics, 1 reference
[8] doi:10.1038/s41593-026-02367-0 [code]
A reproducible three-dimensional model of human brain tissue to investigate physiological and disease-associated microglia phenotypes.
Journal: Nature neuroscience
In common: multcomp, edgeR, limma, 13 other tools, 2 references
[9] doi:10.1093/neuonc/noag128 [code]
Spatially-resolved single-cell imaging of melanoma brain metastases identifies localized immune patterns predictive of immune checkpoint blockade response.
Journal: Neuro-oncology
In common: glmnet, pROC, survival, 13 other tools, genetics / omics, other condition
[10] doi:10.1186/s12967-026-08266-z [code]
Single-cell multi-omic integration analysis prioritizes druggable genes and reveals cell-type-specific causal effects in glioblastomagenesis.
Journal: Journal of translational medicine
In common: edgeR, limma, circlize, 10 other tools, genetics / omics, other condition, 3 references

Contribute

The authors of this paper can claim it, correct its record and validate its tracing map, and the maintainers of its code (its owner, or a public member of its organization) correct what it says of their repository; anyone signed in can ask for its removal. Every request goes to OSCR's own machine, which answers it; your account page follows them.

Sign in with ORCID to claim this paper as one of its authors, correct its record or validate its tracing map: when the paper's metadata lists your ORCID iD, you are recognized at once. Maintainers of its code: sign in with GitHub, then claim the repository on your account page.

Request its removal

To ask OSCR to remove this record, the copies of its authors' scripts or its tracing map, use the removal request page: signed in, you say who you are, what to remove and why, then review and confirm the request. Published rules decide every request (how).

Discussion, reproductions, activity

Discussion: questions and error reports about this paper and its code, from signed-in readers and its authors. It opens with sign-in.

Reproductions: reports from readers who ran the authors' code: what they reproduced, with which environment, commit and data. It opens with sign-in.

Activity: what happens around this paper: new versions of its record, its map's validation, discussions and reproductions. It opens with sign-in.