TET CpG sequence-context-specific DNA demethylation shapes progression of IDH-mutant gliomas.
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] § 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] § 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] § 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] § 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] § 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] § 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] § 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] § 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] § 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] § 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] § 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] § 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] § 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] § 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] § STAR★Methods › Method details › CGCψ ↔ scripts/load_TCGA-LGG_OD.R, lines 187–269 · score 0.69 · TCGA LGG, dyeCorr, dyeMethod, offset, probes
- [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] § STAR★Methods › Method details › RepliSeq ↔ scripts/vis_differential.R, lines 4864–4927 · score 0.64 · wgEncodeUwRepliSeq, outliers, correlation, grades
- [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] § 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] § 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] § STAR★Methods › Method details › TCGA-LGG (1p/19q codel) ↔ scripts/analysis_survival.R, lines 897–952 · score 0.55 · TCGA LGG, survival event
- [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] § 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] § 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] § 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] § 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] § 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] § 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] § 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
- #!/usr/bin/env R
- # load ----
- source('scripts/load_constants.R')
- source('scripts/load_functions.R')
- source('scripts/load_palette.R')
- source('scripts/load_themes.R')
- if(!exists('glass_od.metadata.array_samples')) {
- source('scripts/load_GLASS-OD_metadata.R')
- }
- # if(!exists('data.mvalues.probes')) {
- # source('scripts/load_mvalues_hq_samples.R')
- # }
- #
- library(ggplot2)
- # corr + forest mainly PCs ----
- ## load data ----
- plt <- glass_od.metadata.array_samples |>
- filter_GLASS_OD_idats(CONST_N_GLASS_OD_INCLUDED_SAMPLES) |>
- dplyr::mutate(`age_at_diagnosis_days` = as.Date(patient_diagnosis_date) - as.Date(patient_birth_date)) |>
- #dplyr::filter(!is.na(age_at_diagnosis_days)) |>
- #dplyr::mutate(age_at_diagnosis_days = age_at_diagnosis_days - min(na.omit(age_at_diagnosis_days))) |>
- #dplyr::mutate(age_at_diagnosis_days = as.numeric(age_at_diagnosis_days)) |>
- #dplyr::mutate(time_tissue_in_ffpe = ifelse(isolation_material == "ffpe", time_between_resection_and_array, 0)) |>
- dplyr::rename_with(~ gsub("array_","",.x)) |>
- dplyr::rename_with(~ gsub("dnaMethyAge__","dnaMethyAge: ",.x)) |>
- dplyr::select(resection_id,
- PC1,
- PC2,
- PC3,
- PC4,
- PC5,
- PC6,
- `dnaMethyAge: PCHorvathS2018`,
- `dnaMethyAge: PCHannumG2013`,
- percentage.detP.signi,
- `qc_SPECIFICITY_I_GT_Mismatch_6_(PM)_Red_smaller_NA_0.5`,
- GLASS_NL_g2_g3_sig, A_IDH_HG__A_IDH_LG_lr__lasso_fit,
- ) |>
- tibble::column_to_rownames('resection_id') |>
- dplyr::mutate(`percentage.detP.signi` = log(percentage.detP.signi)) |>
- dplyr::rename(`log(% det-P)` = percentage.detP.signi) |>
- dplyr::rename(`GLASS-NL p-r signature` = GLASS_NL_g2_g3_sig) |>
- dplyr::rename(`CGC[Ac]` = `A_IDH_HG__A_IDH_LG_lr__lasso_fit`) |>
- dplyr::rename(`QC: Spec I GT MM 6` = `qc_SPECIFICITY_I_GT_Mismatch_6_(PM)_Red_smaller_NA_0.5`)
- ## corrplot ----
- # <3
- ggcorrplot(plt, abs=T) +
- labs(caption=paste0("n=",nrow(plt)," samples"),
- subtitle=format_subtitle("correlation PCs"))
- ggsave("output/figures/vis_aging_clocks__PC_clustering.pdf", height = 1.9, width=4)
- ## stats grade ----
- data <- glass_od.metadata.array_samples |>
- filter_GLASS_OD_idats(CONST_N_GLASS_OD_INCLUDED_SAMPLES) |>
- filter_first_G2_and_last_G3(154) |>
- dplyr::group_by(patient_id) |>
- dplyr::mutate(is.paired = dplyr::n() == 2) |>
- dplyr::ungroup() |>
- dplyr::mutate(patient = as.factor(paste0("p",ifelse(is.paired,patient_id,"_remainder")))) |>
- assertr::verify(resection_tumor_grade %in% c(2,3)) |>
- dplyr::mutate(gr.status = factor(ifelse(resection_tumor_grade == 2, "Grade2", "Grade3"), levels=c("Grade2", "Grade3"))) |>
- (function(.) {
- print(dim(.))
- assertthat::assert_that(nrow(.) == 154)
- return(.)
- })() |>
- dplyr::select(resection_id, gr.status, patient) |>
- dplyr::left_join(
- plt |>
- tibble::rownames_to_column('resection_id'),
- by=c('resection_id'='resection_id')
- ) |>
- tibble::column_to_rownames('resection_id')
- n <- nrow(data)
- design <- model.matrix(~~patient + gr.status, data=data)
- fit <- limma::lmFit(data |> dplyr::mutate(patient = NULL) |> dplyr::mutate(gr.status = NULL) |> t() |> as.data.frame()
- , design)
- fit <- limma::eBayes(fit, trend=T)
- stats <- limma::topTable(fit,
- n=nrow(data),
- coef="gr.statusGrade3",
- sort.by = "none",
- confint=T,
- adjust.method="fdr") |>
- tibble::rownames_to_column('covar')
- order = data.frame(covar = c(
- "PC6",
- "PC4",
- "PC5",
- "log(% det-P)",
- "PC1",
- "QC: Spec I GT MM 6" ,
- "GLASS-NL p-r signature" ,
- "PC2" ,
- "CGC[Ac]" ,
- "dnaMethyAge: PCHannumG2013" ,
- "dnaMethyAge: PCHorvathS2018",
- "PC3"
- )) |>
- dplyr::mutate(rank = 1:dplyr::n())
- stats <- stats |>
- dplyr::left_join(order, by=c('covar'='covar'), suffix=c('',''))
- stats.all <- rbind(
- stats |>
- dplyr::mutate(logFC = 0) |>
- dplyr::mutate(t = 0) |>
- dplyr::mutate(type = "zero")
- ,
- stats |>
- dplyr::mutate(type = "datapoint")
- ,
- stats |>
- dplyr::mutate(logFC = CI.L) |>
- dplyr::mutate(type = "CI")
- ,
- stats |>
- dplyr::mutate(logFC = CI.R) |>
- dplyr::mutate(type = "CI")
- )
- ggplot(stats.all, aes(x = t, y=reorder(covar, -rank), label=paste0("q=",format.pval(adj.P.Val,nsmall=3, digits = 1)), group=covar)) +
- geom_line(data=subset(stats.all, type %in% c("datapoint", "zero")), lwd=theme_nature_lwd) +
- #geom_line(data=subset(stats.all, type %in% c("CI")),lwd=theme_nature_lwd*3) +
- geom_point(data=subset(stats.all, type == "datapoint"), size=theme_nature_size/3) +
- geom_text(data=subset(stats.all, type %in% c("datapoint")), size=theme_nature_size, family=theme_nature_font_family) +
- #ggrepel::geom_text_repel(
- # data=subset(stats.all, type %in% c("datapoint")), size=theme_nature_size, nudge_y = 0, family=theme_nature_font_family) +
- labs(x="t WHO grade 2 - 3",
- y = NULL,
- caption = paste0("First Grade 2 and last Grade 3: n=",n, " samples")) +
- theme_nature
- ggsave("output/figures/vis_aging_clocks__PC_clustering_limma.pdf", width=3.5, height=2.028)
- # corr + forest with QC & clocks ----
- ## corrplot ----
- plt <- glass_od.metadata.array_samples |>
- filter_GLASS_OD_idats(CONST_N_GLASS_OD_INCLUDED_SAMPLES) |>
- dplyr::mutate(`age_at_diagnosis_days` = as.Date(patient_diagnosis_date) - as.Date(patient_birth_date)) |>
- dplyr::filter(!is.na(age_at_diagnosis_days)) |>
- dplyr::mutate(age_at_diagnosis_days = age_at_diagnosis_days - min(na.omit(age_at_diagnosis_days))) |>
- dplyr::mutate(age_at_diagnosis_days = as.numeric(age_at_diagnosis_days)) |>
- dplyr::mutate(time_tissue_in_ffpe = ifelse(isolation_material == "ffpe", time_between_resection_and_array, 0)) |>
- dplyr::select(resection_id,
- array_epiTOC2_tnsc, array_epiTOC2_hypoSC, contains("array_dnaMethyAge"), array_RepliTali,
- array_percentage.detP.signi, array_PC1, `array_qc_SPECIFICITY_I_GT_Mismatch_6_(PM)_Red_smaller_NA_0.5`,
- time_tissue_in_ffpe,
- array_GLASS_NL_g2_g3_sig,array_PC2, array_A_IDH_HG__A_IDH_LG_lr__lasso_fit,
- array_PC3,
- age_at_diagnosis_days,
- array_PC4,
- array_PC5,
- array_PC6,
- array_median.overall.methylation
- ) |>
- tibble::column_to_rownames('resection_id') |>
- dplyr::filter(!is.na(time_tissue_in_ffpe)) |>
- dplyr::mutate(array_GLASS_OD_g2_g3_sig2 = NULL) |>
- dplyr::mutate(array_GLASS_OD_prim_rec_sig2 = NULL) |>
- dplyr::mutate(array_GLASS_OD_g2_g3_sig3 = NULL) |>
- dplyr::mutate(array_GLASS_OD_prim_rec_sig3 = NULL) |>
- dplyr::mutate(array_GLASS_OD_g2_g3_sig4 = NULL) |>
- dplyr::mutate(array_GLASS_OD_prim_rec_sig4 = NULL) |>
- dplyr::mutate(array_PC3 = -1 * array_PC3) |>
- dplyr::mutate(array_percentage.detP.signi = log(array_percentage.detP.signi)) |>
- 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) |>
- dplyr::mutate(`-1 * array_dnaMethyAge__ZhangY2017` = -1 * array_dnaMethyAge__ZhangY2017 , array_dnaMethyAge__ZhangY2017 = NULL) |>
- dplyr::mutate(`-1 * array_epiTOC2_hypoSC` = -1 * array_epiTOC2_hypoSC, array_epiTOC2_hypoSC = NULL) |> # seems at inversed scale
- dplyr::mutate(`-1 * array_dnaMethyAge__LuA2019` = -1 * array_dnaMethyAge__LuA2019, array_dnaMethyAge__LuA2019 = NULL) |> # seems at inversed scale
- 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) |>
- dplyr::select(-array_dnaMethyAge__YangZ2016) |> # epiTOC1, near identical to epiTOC2
- dplyr::select(-array_dnaMethyAge__PCHorvathS2013) |> # very similar to its 2018 equivalent
- dplyr::mutate(`array_qc_BISULFITE_CONVERSION_I_Beta_I-3_Beta_larger_0.12_0.18` = NULL) |> # contains N/A's
- dplyr::mutate(`array_qc_BISULFITE_CONVERSION_I_Beta_I-6_Beta_larger_0.2_0.3` = NULL) |> # contains N/A's
- dplyr::rename(`% detP significant probes (log)` = array_percentage.detP.signi) |>
- dplyr::mutate(`-1 * CGC[Ac]` = -1 * `CGC[Ac]`, `CGC[Ac]`= NULL) |>
- dplyr::mutate(`array_dnaMethyAge__ZhangY2017` = -1 * `-1 * array_dnaMethyAge__ZhangY2017`, `-1 * array_dnaMethyAge__ZhangY2017`=NULL) |>
- dplyr::mutate(`-1 * array_GLASS_NL_g2_g3_sig` = -1 * array_GLASS_NL_g2_g3_sig, array_GLASS_NL_g2_g3_sig = NULL) |>
- dplyr::mutate(`-1 * array_median.overall.methylation` = -1 * array_median.overall.methylation) |>
- dplyr::mutate(array_median.overall.methylation = NULL) |>
- dplyr::mutate(`-1 * array_PC2` = -1 * array_PC2, array_PC2 = NULL)
- colnames(plt) <- gsub("array_","",colnames(plt))
- p1 = ggcorrplot(plt)
- p1
- ggsave(plot = p1, "output/figures/vis_aging_clocks__ggcorrplot.pdf", width= 8.5 * 0.975 / 2 , height = 4)
- order <- c(
- "PC5",
- "PC4",
- "PC6",
- "-1 * PC2",
- "-1 * GLASS_NL_g2_g3_sig",
- "-1 * CGC[Ac]",
- "-1 * median.overall.methylation",
- "dnaMethyAge__ZhangY2017",
- "dnaMethyAge__LuA2023p3",
- "dnaMethyAge__LuA2023p2",
- "dnaMethyAge__PCPhenoAge",
- "dnaMethyAge__PCHorvathS2018",
- "dnaMethyAge__PCHannumG2013",
- "PC3",
- "dnaMethyAge__ShirebyG2020",
- "dnaMethyAge__McEwenL2019",
- "dnaMethyAge__LuA2023p1",
- "-1 * dnaMethyAge__LuA2019",
- "dnaMethyAge__Cortex_common",
- "dnaMethyAge__CBL_common",
- "RepliTali",
- "dnaMethyAge__CBL_specific",
- "dnaMethyAge__HorvathS2018",
- "dnaMethyAge__ZhangQ2019",
- "dnaMethyAge__HannumG2013",
- "epiTOC2_tnsc",
- "dnaMethyAge__LevineM2018",
- "age_at_diagnosis_days",
- "-1 * epiTOC2_hypoSC",
- "PC1",
- "% detP significant probes (log)",
- "-1 * QC: SPECIFICITY I GT MM 6",
- "time_tissue_in_ffpe"
- )
- ## forests ----
- ### grade ----
- tmp <- glass_od.metadata.array_samples |>
- filter_GLASS_OD_idats(CONST_N_GLASS_OD_INCLUDED_SAMPLES) |>
- filter_first_G2_and_last_G3(154) |>
- dplyr::mutate(`age_at_diagnosis_days` = as.Date(patient_diagnosis_date) - as.Date(patient_birth_date)) |>
- dplyr::filter(!is.na(age_at_diagnosis_days)) |>
- dplyr::mutate(age_at_diagnosis_days = age_at_diagnosis_days - min(na.omit(age_at_diagnosis_days))) |>
- dplyr::mutate(age_at_diagnosis_days = as.numeric(age_at_diagnosis_days)) |>
- dplyr::mutate(time_tissue_in_ffpe = ifelse(isolation_material == "ffpe", time_between_resection_and_array, 0)) |>
- dplyr::select(resection_id,
- resection_tumor_grade,
- array_median.overall.methylation,
- array_epiTOC2_tnsc, array_epiTOC2_hypoSC, contains("array_dnaMethyAge"), array_RepliTali,
- array_percentage.detP.signi, array_PC1, `array_qc_SPECIFICITY_I_GT_Mismatch_6_(PM)_Red_smaller_NA_0.5`,
- time_tissue_in_ffpe,
- array_GLASS_NL_g2_g3_sig, array_PC2, array_A_IDH_HG__A_IDH_LG_lr__lasso_fit,
- array_PC3,
- age_at_diagnosis_days,
- array_PC4,
- array_PC5,
- array_PC6
- ) |>
- tibble::column_to_rownames('resection_id') |>
- dplyr::filter(!is.na(time_tissue_in_ffpe)) |>
- dplyr::mutate(array_GLASS_OD_g2_g3_sig2 = NULL) |>
- dplyr::mutate(array_GLASS_OD_prim_rec_sig2 = NULL) |>
- dplyr::mutate(array_GLASS_OD_g2_g3_sig3 = NULL) |>
- dplyr::mutate(array_GLASS_OD_prim_rec_sig3 = NULL) |>
- dplyr::mutate(array_GLASS_OD_g2_g3_sig4 = NULL) |>
- dplyr::mutate(array_GLASS_OD_prim_rec_sig4 = NULL) |>
- dplyr::mutate(`-1 * array_median.overall.methylation` = -1 * array_median.overall.methylation) |>
- dplyr::mutate(array_median.overall.methylation = NULL) |>
- dplyr::mutate(array_PC3 = -1 * array_PC3) |>
- dplyr::mutate(array_percentage.detP.signi = log(array_percentage.detP.signi)) |>
- 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) |>
- dplyr::mutate(`-1 * array_dnaMethyAge__ZhangY2017` = -1 * array_dnaMethyAge__ZhangY2017 , array_dnaMethyAge__ZhangY2017 = NULL) |>
- dplyr::mutate(`-1 * array_epiTOC2_hypoSC` = -1 * array_epiTOC2_hypoSC, array_epiTOC2_hypoSC = NULL) |> # seems at inversed scale
- dplyr::mutate(`-1 * array_dnaMethyAge__LuA2019` = -1 * array_dnaMethyAge__LuA2019, array_dnaMethyAge__LuA2019 = NULL) |> # seems at inversed scale
- 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) |>
- dplyr::select(-array_dnaMethyAge__YangZ2016) |> # epiTOC1, near identical to epiTOC2
- dplyr::select(-array_dnaMethyAge__PCHorvathS2013) |> # very similar to its 2018 equivalent
- dplyr::mutate(`array_qc_BISULFITE_CONVERSION_I_Beta_I-3_Beta_larger_0.12_0.18` = NULL) |> # contains N/A's
- dplyr::mutate(`array_qc_BISULFITE_CONVERSION_I_Beta_I-6_Beta_larger_0.2_0.3` = NULL) |> # contains N/A's
- dplyr::rename(`% detP significant probes (log)` = array_percentage.detP.signi) |>
- dplyr::mutate(resection_tumor_grade = factor(paste0("Grade",resection_tumor_grade), levels=c("Grade2","Grade3"))) |>
- dplyr::mutate(`-1 * CGC[Ac]` = -1 * `CGC[Ac]`, `CGC[Ac]`= NULL) |>
- dplyr::mutate(`array_dnaMethyAge__ZhangY2017` = -1 * `-1 * array_dnaMethyAge__ZhangY2017`, `-1 * array_dnaMethyAge__ZhangY2017`=NULL) |>
- dplyr::mutate(`-1 * array_GLASS_NL_g2_g3_sig` = -1 * array_GLASS_NL_g2_g3_sig, array_GLASS_NL_g2_g3_sig = NULL) |>
- dplyr::mutate(`-1 * array_PC2` = -1 * array_PC2, array_PC2 = NULL)
- colnames(tmp) <- gsub("array_","",colnames(tmp))
- data <- tmp |>
- dplyr::mutate(`resection_tumor_grade` = NULL) |>
- dplyr::mutate(array_PC1 = NULL) |>
- dplyr::mutate(PC1 = NULL) |>
- as.data.frame() |>
- scale(center=T, scale=T) |>
- t() |>
- as.data.frame()
- design <- model.matrix(~factor(resection_tumor_grade), data=tmp) # no correcion, you can' time in ffpe for quality
- #design <- model.matrix(~age_at_diagnosis_days + factor(resection_tumor_grade), data=tmp)
- #design <- model.matrix(~factor(resection_tumor_grade), data=tmp)
- fit <- limma::lmFit(data, design)
- fit <- limma::eBayes(fit, trend=T)
- stats <- limma::topTable(fit,
- n=nrow(data),
- coef="factor(resection_tumor_grade)Grade3",
- sort.by = "none",
- confint=T,
- adjust.method="fdr") |>
- tibble::rownames_to_column('covar')
- stats = rbind(stats,
- 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)
- ) |>
- dplyr::mutate(covar = gsub("array_", "", covar))
- plt <- data.frame(covar = order) |>
- dplyr::mutate(y = dplyr::n():1) |>
- assertr::verify(covar %in% stats$covar) |>
- assertr::verify(stats$covar %in% covar) |>
- dplyr::left_join(stats, by=c('covar'='covar'))
- plt <- rbind(
- plt |>
- dplyr::mutate(logFC = 0) |>
- dplyr::mutate(t = 0) |>
- dplyr::mutate(type = "zero")
- ,
- plt |>
- dplyr::mutate(type = "datapoint")
- ,
- plt |>
- dplyr::mutate(logFC = CI.L) |>
- dplyr::mutate(type = "CI")
- ,
- plt |>
- dplyr::mutate(logFC = CI.R) |>
- dplyr::mutate(type = "CI")
- ) |>
- dplyr::mutate(stars = gtools::stars.pval(adj.P.Val))
- #order
- ggplot(plt, aes(x = t, y=reorder(covar, y), label=stars, group=covar)) +
- geom_line(data=subset(plt, type %in% c("datapoint", "zero")),lwd=theme_nature_lwd) +
- #geom_line(data=subset(plt, type %in% c("CI")),lwd=theme_nature_lwd*3) +
- geom_point(data=subset(plt, type == "datapoint"), size=theme_nature_size/3) +
- geom_text(data=subset(plt, type %in% c("datapoint")), x = 7.5, size=theme_nature_size, family=theme_nature_font_family) +
- xlim(-5,7.7) +
- labs(y = NULL, x="t statistic WHO Grade 2 vs. Grade 3") +
- theme_nature
- ggsave("output/figures/vis_aging_clocks__forest__grade.pdf", width=2.75,height = 2.665)
- # https://support.bioconductor.org/p/37524/
- # https://bookdown.org/MathiasHarrer/Doing_Meta_Analysis_in_R/forest.html
- # https://bookdown.org/MathiasHarrer/Doing_Meta_Analysis_in_R/metareg.html
- ### prim-rec ----
- tmp <- glass_od.metadata.array_samples |>
- filter_GLASS_OD_idats(CONST_N_GLASS_OD_INCLUDED_SAMPLES) |>
- filter_primaries_and_last_recurrences(179) |>
- dplyr::mutate(`age_at_diagnosis_days` = as.Date(patient_diagnosis_date) - as.Date(patient_birth_date)) |>
- dplyr::filter(!is.na(age_at_diagnosis_days)) |>
- dplyr::mutate(age_at_diagnosis_days = age_at_diagnosis_days - min(na.omit(age_at_diagnosis_days))) |>
- dplyr::mutate(age_at_diagnosis_days = as.numeric(age_at_diagnosis_days)) |>
- dplyr::mutate(time_tissue_in_ffpe = ifelse(isolation_material == "ffpe", time_between_resection_and_array, 0)) |>
- dplyr::select(resection_id,
- resection_number,
- array_median.overall.methylation,
- array_epiTOC2_tnsc, array_epiTOC2_hypoSC, contains("array_dnaMethyAge"), array_RepliTali,
- array_percentage.detP.signi, array_PC1, `array_qc_SPECIFICITY_I_GT_Mismatch_6_(PM)_Red_smaller_NA_0.5`,
- time_tissue_in_ffpe,
- array_GLASS_NL_g2_g3_sig, array_PC2, array_A_IDH_HG__A_IDH_LG_lr__lasso_fit,
- array_PC3,
- age_at_diagnosis_days,
- array_PC4,
- array_PC5,
- array_PC6
- ) |>
- tibble::column_to_rownames('resection_id') |>
- dplyr::filter(!is.na(time_tissue_in_ffpe)) |>
- dplyr::mutate(array_GLASS_OD_g2_g3_sig2 = NULL) |>
- dplyr::mutate(array_GLASS_OD_prim_rec_sig2 = NULL) |>
- dplyr::mutate(array_GLASS_OD_g2_g3_sig3 = NULL) |>
- dplyr::mutate(array_GLASS_OD_prim_rec_sig3 = NULL) |>
- dplyr::mutate(array_GLASS_OD_g2_g3_sig4 = NULL) |>
- dplyr::mutate(array_GLASS_OD_prim_rec_sig4 = NULL) |>
- dplyr::mutate(`-1 * array_median.overall.methylation` = -1 * array_median.overall.methylation) |>
- dplyr::mutate(array_median.overall.methylation = NULL) |>
- dplyr::mutate(array_PC3 = -1 * array_PC3) |>
- dplyr::mutate(array_percentage.detP.signi = log(array_percentage.detP.signi)) |>
- 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) |>
- dplyr::mutate(`-1 * array_dnaMethyAge__ZhangY2017` = -1 * array_dnaMethyAge__ZhangY2017 , array_dnaMethyAge__ZhangY2017 = NULL) |>
- dplyr::mutate(`-1 * array_epiTOC2_hypoSC` = -1 * array_epiTOC2_hypoSC, array_epiTOC2_hypoSC = NULL) |> # seems at inversed scale
- dplyr::mutate(`-1 * array_dnaMethyAge__LuA2019` = -1 * array_dnaMethyAge__LuA2019, array_dnaMethyAge__LuA2019 = NULL) |> # seems at inversed scale
- 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) |>
- dplyr::select(-array_dnaMethyAge__YangZ2016) |> # epiTOC1, near identical to epiTOC2
- dplyr::select(-array_dnaMethyAge__PCHorvathS2013) |> # very similar to its 2018 equivalent
- dplyr::mutate(`array_qc_BISULFITE_CONVERSION_I_Beta_I-3_Beta_larger_0.12_0.18` = NULL) |> # contains N/A's
- dplyr::mutate(`array_qc_BISULFITE_CONVERSION_I_Beta_I-6_Beta_larger_0.2_0.3` = NULL) |> # contains N/A's
- dplyr::rename(`% detP significant probes (log)` = array_percentage.detP.signi) |>
- dplyr::mutate(resection_prim_rec = factor(ifelse(resection_number == 1,"primary", "recurrent"), levels=c("primary","recurrent"))) |>
- dplyr::mutate(resection_number = NULL) |>
- dplyr::mutate(`-1 * CGC[Ac]` = -1 * `CGC[Ac]`, `CGC[Ac]`= NULL) |>
- dplyr::mutate(`array_dnaMethyAge__ZhangY2017` = -1 * `-1 * array_dnaMethyAge__ZhangY2017`, `-1 * array_dnaMethyAge__ZhangY2017`=NULL) |>
- dplyr::mutate(`-1 * array_GLASS_NL_g2_g3_sig` = -1 * array_GLASS_NL_g2_g3_sig, array_GLASS_NL_g2_g3_sig = NULL) |>
- dplyr::mutate(`-1 * array_PC2` = -1 * array_PC2, array_PC2 = NULL)
- colnames(tmp) <- gsub("array_","",colnames(tmp))
- data <- tmp |>
- dplyr::mutate(`resection_prim_rec` = NULL) |>
- dplyr::mutate(array_PC1 = NULL) |>
- dplyr::mutate(PC1 = NULL) |>
- as.data.frame() |>
- scale(center=T, scale=T) |>
- t() |>
- as.data.frame()
- design <- model.matrix(~ factor(resection_prim_rec), data=tmp)
- #design <- model.matrix(~age_at_diagnosis_days + factor(resection_tumor_grade), data=tmp)
- #design <- model.matrix(~factor(resection_tumor_grade), data=tmp)
- fit <- limma::lmFit(data, design)
- fit <- limma::eBayes(fit, trend=T)
- stats <- limma::topTable(fit,
- n=nrow(data),
- coef="factor(resection_prim_rec)recurrent",
- sort.by = "none",
- confint=T,
- adjust.method="fdr") |>
- tibble::rownames_to_column('covar')
- stats = rbind(stats,
- 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)
- ) |>
- dplyr::mutate(covar = gsub("array_", "", covar))
- plt <- data.frame(covar = order) |>
- dplyr::mutate(y = dplyr::n():1) |>
- assertr::verify(covar %in% stats$covar) |>
- assertr::verify(stats$covar %in% covar) |>
- dplyr::left_join(stats, by=c('covar'='covar'))
- plt <- rbind(
- plt |>
- dplyr::mutate(logFC = 0) |>
- dplyr::mutate(t = 0) |>
- dplyr::mutate(type = "zero")
- ,
- plt |>
- dplyr::mutate(type = "datapoint")
- ,
- plt |>
- dplyr::mutate(logFC = CI.L) |>
- dplyr::mutate(type = "CI")
- ,
- plt |>
- dplyr::mutate(logFC = CI.R) |>
- dplyr::mutate(type = "CI")
- ) |>
- dplyr::mutate(stars = gtools::stars.pval(adj.P.Val))
- #order
- ggplot(plt, aes(x = t, y=reorder(covar, y), label=stars, group=covar)) +
- geom_line(data=subset(plt, type %in% c("datapoint", "zero")),lwd=theme_nature_lwd) +
- #geom_line(data=subset(plt, type %in% c("CI")),lwd=theme_nature_lwd*3) +
- geom_point(data=subset(plt, type == "datapoint"), size=theme_nature_size/3) +
- geom_text(data=subset(plt, type %in% c("datapoint")), x = 7.5, size=theme_nature_size, family=theme_nature_font_family) +
- xlim(-5, 7.7) +
- labs(y = NULL, x="t statistic primary vs. recurrent") +
- theme_nature
- ggsave("output/figures/vis_aging_clocks__forest__prim_rec.pdf", width=2.75,height = 2.665)
- # https://support.bioconductor.org/p/37524/
- # https://bookdown.org/MathiasHarrer/Doing_Meta_Analysis_in_R/forest.html
- # https://bookdown.org/MathiasHarrer/Doing_Meta_Analysis_in_R/metareg.html
- # DMP time_in_tissue_ffpe
- # plot order:
- plt.order <- data.frame(name = c(
- "dnaMethyAge__ZhangY2017",
- "CGC[Ac]",
- "GLASS_NL_g2_g3_sig",
- "PC2",
- "time_tissue_in_ffpe",
- "QC: SPECIFICITY I GT MM 6",
- "detP significant probes (log)",
- "PC1",
- "epiTOC2_hypoSC",
- "dnaMethyAge__LuA2023p2",
- "dnaMethyAge__LuA2023p3",
- "dnaMethyAge__LuA2019",
- "dnaMethyAge__CBL_specific",
- "RepliTali",
- "epiTOC2_tnsc",
- "dnaMethyAge__HannumG2013",
- "dnaMethyAge__CBL_common",
- "dnaMethyAge__Cortex_common",
- "dnaMethyAge__McEwenL2019",
- "dnaMethyAge__ZhangQ2019",
- "dnaMethyAge__HorvathS2018",
- "dnaMethyAge__LevineM2018",
- "dnaMethyAge__LuA2023p1",
- "PC3",
- "dnaMethyAge__ShirebyG2020",
- "dnaMethyAge__PCHorvathS2018",
- "dnaMethyAge__PCHannumG2013",
- "dnaMethyAge__PCPhenoAge"
- )) |>
- dplyr::mutate(order = 1:dplyr::n()) |>
- dplyr::mutate(colname = dplyr::recode(name,
- `PC1` = "DMP__PCs__pp_nc__PC1_adj.P.Val",
- `PC2` = "DMP__PCs__pp_nc__PC2_adj.P.Val",
- `PC3` = "DMP__PCs__pp_nc__PC3_adj.P.Val",
- `detP significant probes (log)` = "DMP__pct_detP_signi__pp_nc__adj.P.Val",
- `CGC[Ac]` = "DMP__AcCGAP__pp_nc__adj.P.Val",
- `GLASS_NL_g2_g3_sig` = "DMP__GLASS_NL_signature__pp_nc__adj.P.Val",
- `RepliTali` = "DMP__RepliTali__up_nc__adj.P.Val",
- `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",
- `epiTOC2_hypoSC` = "DMP__epiTOC2_hypoSC__up_nc__adj.P.Val",
- `epiTOC2_tnsc` = "DMP__epiTOC2_tnsc__up_nc__adj.P.Val",
- `dnaMethyAge__CBL_common` = "DMP__dnaMethyAge__CBL_common__up_nc__adj.P.Val",
- `dnaMethyAge__CBL_specific` = "DMP__dnaMethyAge__CBL_specific__up_nc__adj.P.Val",
- `dnaMethyAge__Cortex_common` = "DMP__dnaMethyAge__Cortex_common__up_nc__adj.P.Val",
- `dnaMethyAge__HannumG2013` = "DMP__dnaMethyAge__HannumG2013__up_nc__adj.P.Val",
- `dnaMethyAge__HorvathS2018` = "DMP__dnaMethyAge__HorvathS2018__up_nc__adj.P.Val",
- `dnaMethyAge__LevineM2018` = "DMP__dnaMethyAge__LevineM2018__up_nc__adj.P.Val",
- `dnaMethyAge__LuA2019` = "DMP__dnaMethyAge__LuA2019__up_nc__adj.P.Val",
- `dnaMethyAge__LuA2023p1` = "DMP__dnaMethyAge__LuA2023p1__up_nc__adj.P.Val",
- `dnaMethyAge__LuA2023p2` = "DMP__dnaMethyAge__LuA2023p2__up_nc__adj.P.Val",
- `dnaMethyAge__LuA2023p3` = "DMP__dnaMethyAge__LuA2023p3__up_nc__adj.P.Val",
- `dnaMethyAge__McEwenL2019` = "DMP__dnaMethyAge__McEwenL2019__up_nc__adj.P.Val",
- `dnaMethyAge__PCHannumG2013` = "DMP__dnaMethyAge__PCHannumG2013__up_nc__adj.P.Val",
- `dnaMethyAge__PCHorvathS2013` = "DMP__dnaMethyAge__PCHorvathS2013__up_nc__adj.P.Val",
- `dnaMethyAge__PCHorvathS2018` = "DMP__dnaMethyAge__PCHorvathS2018__up_nc__adj.P.Val",
- `dnaMethyAge__PCPhenoAge` = "DMP__dnaMethyAge__PCPhenoAge__up_nc__adj.P.Val",
- `dnaMethyAge__ShirebyG2020` = "DMP__dnaMethyAge__ShirebyG2020__up_nc__adj.P.Val",
- `dnaMethyAge__YangZ2016` = "DMP__dnaMethyAge__YangZ2016__up_nc__adj.P.Val",
- `dnaMethyAge__ZhangQ2019` = "DMP__dnaMethyAge__ZhangQ2019__up_nc__adj.P.Val",
- `dnaMethyAge__ZhangY2017` = "DMP__dnaMethyAge__ZhangY2017__up_nc__adj.P.Val",
- `time_tissue_in_ffpe` = "DMP__FFPE_decay_time__pp_nc__adj.P.Val"
- ))
- plt <- data.mvalues.probes |>
- (function(.) {
- print(dim(.))
- assertthat::assert_that(nrow(.) == CONST_N_PROBES_UNMASKED)
- return(.)
- })() |>
- dplyr::filter(detP_good_probe & grepl("^cg", probe_id)) |>
- (function(.) {
- print(dim(.))
- assertthat::assert_that(nrow(.) == CONST_N_PROBES_UNMASKED_AND_DETP)
- return(.)
- })() |>
- tibble::tibble() |>
- dplyr::select(
- `DMP__PCs__pp_nc__PC1_adj.P.Val`,
- `DMP__PCs__pp_nc__PC2_adj.P.Val`,
- `DMP__PCs__pp_nc__PC3_adj.P.Val`,
- `DMP__pct_detP_signi__pp_nc__adj.P.Val`,
- `DMP__AcCGAP__pp_nc__adj.P.Val`,
- `DMP__GLASS_NL_signature__pp_nc__adj.P.Val`,
- `DMP__RepliTali__up_nc__adj.P.Val`,
- `DMP__mnp_qc_SPECIFICITY_I_GT_Mismatch_6_PM_Red_smaller_NA_0_5__pp_nc__adj.P.Val`,
- `DMP__epiTOC2_hypoSC__up_nc__adj.P.Val`,
- `DMP__epiTOC2_tnsc__up_nc__adj.P.Val`,
- `DMP__dnaMethyAge__CBL_common__up_nc__adj.P.Val`,
- `DMP__dnaMethyAge__CBL_specific__up_nc__adj.P.Val`,
- `DMP__dnaMethyAge__Cortex_common__up_nc__adj.P.Val`,
- `DMP__dnaMethyAge__HannumG2013__up_nc__adj.P.Val`,
- `DMP__dnaMethyAge__HorvathS2018__up_nc__adj.P.Val`,
- `DMP__dnaMethyAge__LevineM2018__up_nc__adj.P.Val`,
- `DMP__dnaMethyAge__LuA2019__up_nc__adj.P.Val`,
- `DMP__dnaMethyAge__LuA2023p1__up_nc__adj.P.Val`,
- `DMP__dnaMethyAge__LuA2023p2__up_nc__adj.P.Val`,
- `DMP__dnaMethyAge__LuA2023p3__up_nc__adj.P.Val`,
- `DMP__dnaMethyAge__McEwenL2019__up_nc__adj.P.Val`,
- `DMP__dnaMethyAge__PCHannumG2013__up_nc__adj.P.Val`,
- `DMP__dnaMethyAge__PCHorvathS2018__up_nc__adj.P.Val`,
- `DMP__dnaMethyAge__PCPhenoAge__up_nc__adj.P.Val`,
- `DMP__dnaMethyAge__ShirebyG2020__up_nc__adj.P.Val`,
- `DMP__dnaMethyAge__ZhangQ2019__up_nc__adj.P.Val`,
- `DMP__dnaMethyAge__ZhangY2017__up_nc__adj.P.Val`,
- `DMP__FFPE_decay_time__pp_nc__adj.P.Val`
- ) |>
- tidyr::pivot_longer(cols = dplyr::everything(), values_to = "adj.P.Val", names_to = "colname") |>
- dplyr::mutate(one.min.adj.P.val = 1 - adj.P.Val) |>
- dplyr::left_join(plt.order, by=c('colname'='colname')) |>
- dplyr::rename(order_y = order) |>
- dplyr::group_by(colname) |>
- dplyr::mutate(order_x = rank(adj.P.Val)) |>
- dplyr::ungroup() |>
- dplyr::arrange(order_y, -order_x) |>
- dplyr::mutate(facet = factor(name, levels = plt.order |> dplyr::arrange(order) |> dplyr::pull(name))) |>
- dplyr::filter(1:dplyr::n() %% 450 == 1)
- plt2 <- rbind(plt |>
- dplyr::mutate(group = paste0(order_x,colname)),
- plt |>
- dplyr::mutate(group = paste0(order_x,colname)) |>
- dplyr::mutate(adj.P.Val=0,
- one.min.adj.P.val=0))
- ggplot(plt2, aes(x=order_x, y=one.min.adj.P.val, group=group, col = adj.P.Val < 0.01)) +
- facet_grid(rows = vars(facet)) + # , levels=plt.order |> dplyr::arrange(order) |> dplyr::pull(name)
- geom_line(lwd=theme_nature_lwd) +
- theme_nature +
- theme(axis.title.x=element_blank(),
- axis.text.x=element_blank(),
- axis.ticks.x=element_blank()) +
- theme(strip.text.y.right = element_text(angle = 0)) +
- coord_cartesian(ylim = c(0,1))
- # generic statistics ----
- ## prim - rec ----
- tmp <- glass_od.metadata.array_samples |>
- filter_GLASS_OD_idats(CONST_N_GLASS_OD_INCLUDED_SAMPLES) |>
- filter_primaries_and_last_recurrences(179) |>
- dplyr::group_by(patient_id) |>
- dplyr::mutate(is.paired = dplyr::n() == 2) |>
- dplyr::ungroup() |>
- dplyr::mutate(patient = as.factor(paste0("p",ifelse(is.paired,patient_id,"remainder")))) |>
- dplyr::mutate(pr.status = factor(ifelse(resection_number == 1,"primary","recurrence"),levels=c("primary","recurrence"))) |>
- dplyr::mutate(`age_at_diagnosis_days` = as.Date(patient_diagnosis_date) - as.Date(patient_birth_date)) |>
- dplyr::filter(!is.na(age_at_diagnosis_days)) |>
- dplyr::mutate(age_at_diagnosis_days = age_at_diagnosis_days - min(na.omit(age_at_diagnosis_days))) |>
- dplyr::mutate(age_at_diagnosis_days = as.numeric(age_at_diagnosis_days)) |>
- dplyr::mutate(time_tissue_in_ffpe = ifelse(isolation_material == "ffpe", time_between_resection_and_array, 0)) |>
- dplyr::select(resection_id,
- resection_tumor_grade,
- patient,
- pr.status,
- array_PC1,
- array_dnaMethyAge__PCHorvathS2018
- ) |>
- tibble::column_to_rownames('resection_id') |>
- dplyr::rename(PCHorvathS2018 = array_dnaMethyAge__PCHorvathS2018)
- data <- tmp |>
- dplyr::select(PCHorvathS2018) |>
- t() |>
- as.data.frame()
- stopifnot(rownames(tmp) == colnames(data))
- design <- model.matrix(~array_PC1 +# factor(patient) +
- factor(patient) +
- factor(pr.status), data=tmp)
- fit <- limma::lmFit(data, design)
- fit <- limma::eBayes(fit, trend=T)
- stats <- limma::topTable(fit,
- n=nrow(data),
- coef="factor(pr.status)recurrence",
- sort.by = "none",
- confint=T,
- adjust.method="fdr") |>
- tibble::rownames_to_column('covar')
- stats
- ## WHO grade ----
- tmp <- glass_od.metadata.array_samples |>
- filter_GLASS_OD_idats(CONST_N_GLASS_OD_INCLUDED_SAMPLES) |>
- filter_primaries_and_last_recurrences(180) |>
- dplyr::group_by(patient_id) |>
- dplyr::mutate(is.paired = dplyr::n() == 2) |>
- dplyr::ungroup() |>
- dplyr::mutate(patient = as.factor(paste0("p",ifelse(is.paired,patient_id,"remainder")))) |>
- dplyr::mutate(gr.status = ifelse(resection_tumor_grade == 2, "Grade2", "Grade3")) |>
- dplyr::mutate(`age_at_diagnosis_days` = as.Date(patient_diagnosis_date) - as.Date(patient_birth_date)) |>
- dplyr::filter(!is.na(age_at_diagnosis_days)) |>
- dplyr::mutate(age_at_diagnosis_days = age_at_diagnosis_days - min(na.omit(age_at_diagnosis_days))) |>
- dplyr::mutate(age_at_diagnosis_days = as.numeric(age_at_diagnosis_days)) |>
- dplyr::mutate(time_tissue_in_ffpe = ifelse(isolation_material == "ffpe", time_between_resection_and_array, 0)) |>
- dplyr::select(resection_id,
- resection_tumor_grade,
- patient,
- gr.status,
- array_PC1,
- array_PC2,
- array_PC3,
- array_dnaMethyAge__PCHorvathS2018,
- array_A_IDH_HG__A_IDH_LG_lr__lasso_fit
- ) |>
- tibble::column_to_rownames('resection_id') |>
- dplyr::rename(PCHorvathS2018 = array_dnaMethyAge__PCHorvathS2018)
- data <- tmp |>
- dplyr::select(PCHorvathS2018) |>
- #dplyr::select(array_A_IDH_HG__A_IDH_LG_lr__lasso_fit) |>
- #dplyr::select(array_PC3) |>
- t() |>
- as.data.frame()
- stopifnot(rownames(tmp) == colnames(data))
- design <- model.matrix(~array_PC1 + factor(patient) + factor(gr.status), data=tmp)
- fit <- limma::lmFit(data, design)
- fit <- limma::eBayes(fit, trend=T)
- stats <- limma::topTable(fit,
- n=nrow(data),
- coef="factor(gr.status)Grade3",
- sort.by = "none",
- confint=T,
- adjust.method="fdr") |>
- tibble::rownames_to_column('covar')
- stats
vis_aging_clocks.R at commit 8d13094, no license · at the source
Overview
and 14 other authors
Johan 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. French122 affiliations
- Department of Neurology, Erasmus MC Cancer Institute, Erasmus MC, Rotterdam, the Netherlands
- Department of Neurosurgery, University Clinic Erlangen, Erlangen, Germany
- Department of Oncology, Oncology 1, Veneto Institute of Oncology IOV-IRCCS, 35128 Padua, Italy
- RCCS Humanitas Research Hospital, Via Alessandro Manzoni 56, Rozzano, Milan, Italy
- Department of Pathology, Erasmus MC Cancer Institute Erasmus MC, Rotterdam, the Netherlands
- Department of Pathology, Leiden University Medical Center, Leiden, the Netherlands
- Department of Neurology, Clinical Neuroscience Center, University Hospital Zurich and University of Zurich, Zurich, Switzerland
- Division of Oncology, Department of Medicine I, Medical University of Vienna, Vienna, Austria
- Department of Pathology, Neuropathology and Molecular Pathology, Medical University of Innsbruck, Innsbruck, Tyrol, Austria
- Division of Neuropathology and Neurochemistry, Department of Neurology, Medical University of Vienna, Vienna, Austria
- Institute of Biochemistry and Technical Biochemistry, Department of Biochemistry, University of Stuttgart, Stuttgart, Germany
- Department of Neurology, Leiden University Medical Center, Leiden, the Netherlands
- Department of Pathology, Haaglanden MC, The Hague, the Netherlands
- Department of Neurology, Amsterdam UMC, Amsterdam, the Netherlands
- Department of Pathology, Amsterdam UMC, Cancer Center Amsterdam, Amsterdam, the Netherlands
- Department of Human Genetics, Amsterdam UMC, Amsterdam, the Netherlands
- Department of Neurosurgery, Yale University, New Haven, CT, USA
- The Jackson Laboratory for Genomic Medicine, Farmington, CT, USA
- Department of Genetics and Genome Sciences, University of Connecticut Health Center, Farmington, CT, USA
- Institute for Systems Genomics, University of Connecticut, Storrs, CT, USA
- Department of Neurosurgery, Duke University, Durham, NC, USA
- Princess Máxima Center for Pediatric Oncology, Utrecht, the Netherlands
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
668c67c907144d8d2ba6b62a2a06280b8547e4b0, 22 June 2026Availability: 1 check, the latest on 30 September 2026: the link answers
- 30 September 2026: the link answers
10 files
- idattools/
__init__.py , Python, 47 lines - idattools/
cli.py , Python, 72 lines - idattools/
idat.py , Python, 886 lines - idattools/
utils.py , Python, 233 lines - setup.sh, Shell, 7 lines
- tests.sh, Shell, 97 lines
- tests/
evaluate.py , Python, 19 lines - tests/
mix.sh , Shell, 4 lines - LICENSE, License, 674 lines
- README.md, Text, 169 lines
yhoogstrate/glass-od
8d130941ab868349272dc7cc3a6377a7af95d980, 8 June 2026Availability: 1 check, the latest on 30 September 2026: the link answers
- 30 September 2026: the link answers
133 files
- autorun/
nextflow.sh , Shell, 4 lines - scripts/
analysis_ATAC.R , R, 175 lines - scripts/
analysis_A_IDH_HG__A_IDH , R, 530 lines, 1 match_LG_lr__lasso_fit.R - scripts/
analysis_DMP_gene_level. , R, 1,371 lines, 1 matchR - scripts/
analysis_DNAm_cell_cycli , R, 616 linesng_signature_EM.R - scripts/
analysis_EPITOC2.R , R, 211 lines, 1 match - scripts/
analysis_HE_thumbnails.p , Python, 20 linesy - scripts/
analysis_OR.R , R, 122 lines - scripts/
analysis_RFpurity.R , R, 88 lines - scripts/
analysis_chr4_del.R , R, 153 lines, 1 match - scripts/
analysis_differential.R , R, 4,567 lines, 1 match - scripts/
analysis_differential_GL , R, 630 linesASS-NL.R - scripts/
analysis_differential_pr , R, 1,468 linesoteomics.R - scripts/
analysis_differential_te , R, 400 linesstdata.R - scripts/
analysis_differential_va , R, 323 lineslidationset.R - scripts/
analysis_dyeCorrection_r , R, 490 lines, 1 matchate.R - scripts/
analysis_entropy_DMP.R , R, 21 lines - scripts/
analysis_ewastools.R , R, 97 lines - scripts/
analysis_genewise_cnvs.R , R, 67 lines - scripts/
analysis_ki67_geojson.R , R, 93 lines - scripts/
analysis_median_methylat , R, 105 linesion.R - scripts/
analysis_mix_idats.sh , Shell, 356 lines - scripts/
analysis_mvalues_all_sam , R, 187 lines, 1 matchples.R - scripts/
analysis_mvalues_beta.va , R, 940 lineslues_HQ_samples_only.R - scripts/
analysis_oligosarcoma_vs , R, 66 lines_A_IDH_HG.R - scripts/
analysis_pca_grading.R , R, 235 lines - scripts/
analysis_percentage_detP , R, 111 lines_probes.R - scripts/
analysis_predict_FFPE_ti , R, 5 linesme.R - scripts/
analysis_prepare_for_met , R, 112 lineshylscape_bethesda.R - scripts/
analysis_probe_median_st , R, 771 linesatistics.R - scripts/
analysis_progression_sig , R, 343 linesnatures.R - scripts/
analysis_project_validat , R, 57 linesion_set_onto_GLASS_OD_pc a.R - scripts/
analysis_snp_fingerprint , R, 618 lines, 1 matching.R - scripts/
analysis_survival.R , R, 2,188 lines, 2 matches - scripts/
analysis_time_between_re , R, 44 linessections.R - scripts/
analysis_tumor_purities_ , R, 387 lines, 1 matchEPIC.R - scripts/
analysis_unsupervised_PC , R, 377 linesA.R - scripts/
analysis_unsupervised_qc , R, 268 lines.R - scripts/
analysis_wgEncodeUWRepli , Python, 85 linesSeqAnnotations.py - scripts/
castor_extract_sex.py , Python, 49 lines - scripts/
download_TCGA-LAML.R , R, 90 lines - scripts/
download_glass_methylome , Python, 341 lines_scraper.py - scripts/
download_oligosarcoma_id , Python, 33 lines_scraper.py - scripts/
download_wgEncodeUwRepli , Shell, 42 lines, 1 matchSeq.sh - scripts/
epms.py , Python, 39 lines - scripts/
export_idats.R , R, 122 lines - scripts/
export_sequence_context. , R, 73 lines, 1 matchR - scripts/
func_calc_mixcol.R , R, 29 lines - scripts/
func_calc_ratio_detP.R , R, 29 lines - scripts/
func_distplot.R , R, 72 lines - scripts/
func_filter_GLASS_NL_ida , R, 30 linests.R - scripts/
func_filter_GLASS_OD_ida , R, 51 linests.R - scripts/
func_filter_GSAM_idats.R , R, 26 lines - scripts/
func_filter_OD_validatio , R, 44 linesn_idats.R - scripts/
func_filter_first_G2_G3_ , R, 41 linesand_last_G4.R - scripts/
func_filter_first_G2_and , R, 41 lines_last_G3.R - scripts/
func_filter_first_G2_and , R, 41 lines_last_G3_G4.R - scripts/
func_filter_primaries_an , R, 27 linesd_last_recurrences.R - scripts/
func_format_subtitle.R , R, 19 lines - scripts/
func_ggcorrplot.R , R, 89 lines - scripts/
func_ggforest_styled.R , R, 130 lines - scripts/
func_load_masks_hq.R , R, 11 lines - scripts/
func_parse_MethylScape_B , R, 51 linesv2.R - scripts/
func_parse_mnp_CNVP_chr4 , R, 35 lines_mean.R - scripts/
func_parse_mnp_CNVPoncog , R, 14 lineseneScores_csv.R - scripts/
func_parse_mnp_FrozenFFP , R, 15 linesEstatus_table.R - scripts/
func_parse_mnp_QCReport_ , R, 15 linescsv.R - scripts/
func_parse_mnp_RsGender_ , R, 11 linescsv.R - scripts/
func_parse_mnp_predictMG , R, 16 linesMT_csv.R - scripts/
func_parse_mnp_reportBra , R, 23 linesin_csv.R - scripts/
func_parse_sentrix_id.R , R, 8 lines - scripts/
func_query_mnp_12.8_CNVP , R, 26 lines_segment_csv.R - scripts/
func_reservselog_trans.R , R, 14 lines - scripts/
func_split_match.R , R, 7 lines - scripts/
install_packages.R , R, 29 lines - scripts/
load_AD_BMC_Clin_Epi.R , R, 20 lines - scripts/
load_G-SAM_metadata.R , R, 405 lines - scripts/
load_GLASS-NL_RNA-seq.R , R, 49 lines - scripts/
load_GLASS-NL_metadata.R , R, 549 lines - scripts/
load_GLASS-NL_proteomics , R, 57 lines.R - scripts/
load_GLASS-OD_metadata.R , R, 1,578 lines, 1 match - scripts/
load_GLASS-OD_proteomics , R, 339 lines.R - scripts/
load_TCGA-LAML_metadata. , R, 127 linesR - scripts/
load_TCGA-LGG_OD.R , R, 270 lines, 2 matches - scripts/
load_alzheimer_DMPs.R , R, 30 lines - scripts/
load_beta.values_hq_samp , R, 79 linesles.R - scripts/
load_chrom_sizes.R , R, 186 lines - scripts/
load_constants.R , R, 45 lines - scripts/
load_functions.R , R, 5 lines - scripts/
load_gene_annotations.R , R, 44 lines, 1 match - scripts/
load_intensities_hq_samp , R, 152 linesles.R - scripts/
load_mvalues_hq_samples. , R, 1,329 linesR - scripts/
load_nonmalignant_cortex , R, 404 lines_dilution_series.R - scripts/
load_palette.R , R, 141 lines - scripts/
load_probe_annotations.R , R, 1,006 lines, 2 matches - scripts/
load_themes.R , R, 7 lines - scripts/
sandbox_pr.R , R, 385 lines - scripts/
tab_CGC_probes.R , R, 67 lines - scripts/
tab_DMP_outcomes.R , R, 68 lines - scripts/
tab_DPA_outcomes.R , R, 125 lines - scripts/
tab_S1_GLASS-OD_discover , R, 68 linesy_set.R - scripts/
tab_spike_in_normals.R , R, 228 lines - scripts/
tab_time_between_surgeri , R, 24 lineses.R - scripts/
theme_cellpress.R , R, 102 lines - scripts/
theme_nature.R , R, 123 lines - scripts/
theme_youri_gg.R , R, 21 lines - scripts/
vis_1p19q.R , R, 176 lines - scripts/
vis_AcCGAP-OD_x_AcCGAP-1 , R, 190 lines0xCV-AC.R - scripts/
vis_CDKN2AB_incidence.R , R, 665 lines - scripts/
vis_CGC_aluvial.R , R, 48 lines - scripts/
vis_DMP_entropy.R , R, 31 lines - scripts/
vis_DMPs_GISTIC_style.R , R, 22 lines - scripts/
vis_FFPE_scarring_decay_ , R, 50 linestime.R - scripts/
vis_HovarthS2018.R , R, 88 lines - scripts/
vis_KI67_classifications , R, 387 lines.R - scripts/
vis_LGC_x_PCA.R , R, 3,312 lines, 1 match - scripts/
vis_PCA_loadings.R , R, 199 lines - scripts/
vis_UMAP_oligo_astro.R , R, 191 lines - scripts/
vis_aging_clocks.R , R, 873 lines, 3 matches - scripts/
vis_cnv_profiles_GISTIC_ , R, 788 linesstyle.R - scripts/
vis_cohort_overview.R , R, 754 lines, 1 match - scripts/
vis_differential.R , R, 5,451 lines, 1 match - scripts/
vis_differential__valida , R, 235 linestion_set.R - scripts/
vis_differential_motifs. , R, 2,377 linesR - scripts/
vis_differential_proteom , R, 1,894 lines, 2 matchesics.R - scripts/
vis_dyeCorrection_rate_x , R, 117 lines_quality.R - scripts/
vis_epiTOC2.R , R, 66 lines - scripts/
vis_individual_sample_do , R, 458 linesssier.R - scripts/
vis_mgmt_status.R , R, 55 lines - scripts/
vis_mixed_unsupervised.R , R, 1,000 lines - scripts/
vis_oligosarcoma_and_pur , R, 564 lines, 1 matchity.R - scripts/
vis_unsupervised_cluster , R, 193 linesing_patients.R - README.md, Text, 39 lines
ErasmusMC-Neuro-Oncology/Continuous_Grading_Classifier
ec666713db917d35fb1b01ecd626e038cb9b32d1, 13 April 2026Availability: 1 check, the latest on 30 September 2026: the link answers
- 30 September 2026: the link answers
yiluyucheng/dnaMethyAge
0d40c9bb02c7d9a4d91ce01d150a9c0b12edf1f4, 9 April 2026Availability: 1 check, the latest on 30 September 2026: the link answers
- 30 September 2026: the link answers
12 files
- R/
MethyAge.R , R, 276 lines - R/
Yang2016.R , R, 40 lines - R/
adjustedBMIQ.R , R, 655 lines - R/
arrayConverter_EPICtoMM. , R, 49 linesR - R/
availableClock.R , R, 20 lines - R/
epiTOC2.R , R, 55 lines - R/
getAccel.R , R, 161 lines - R/
meanImputation.R , R, 54 lines - R/
preprocessDunedinPACE.R , R, 29 lines - R/
preprocessHorvathS2013.R , R, 80 lines - R/
preprocessZhangQ2019.R , R, 26 lines - README.md, Text, 165 lines
Zenodo 2632938
Availability: 1 check, the latest on 30 September 2026: the link answers (HTTP 200)
- 30 September 2026: the link answers (HTTP 200)
1 file
- epiTOC2.R, R, 67 lines
Zenodo 7108429
Availability: 1 check, the latest on 30 September 2026: the link answers (HTTP 200)
- 30 September 2026: the link answers (HTTP 200)
20 files
- 1_MethylationArrayProces
s.R , R, 18 lines - 2_ImportProcessedEPIC.R, R, 8 lines
- CpGContext/
1_DefineContext.R , R, 106 lines - CpGContext/
2_Behavior_ts.R , R, 118 lines - Figure_2/
GeneExpression_Vis.R , R, 149 lines - Figure_2/
LOLA.R , R, 83 lines - Figure_2/
MethylationHeatmap_Densi , R, 114 linestyViridisPlots.R - Figure_2/
ReplicationSeq_anno.R , R, 197 lines - Figure_2/
TripleSankey.R , R, 72 lines - Growth_Arrest/
MMC.R , R, 94 lines - Growth_Arrest/
Serum_Deprivation.R , R, 67 lines - MedianMethylationRegress
ion.R , R, 41 lines - MethylationHeatmap.R, R, 43 lines
- RNAseq/
MethyltransferaseExpress , R, 58 linesion.R - RNAseq/
Oxygen_conditions_DE_FGS , R, 265 linesEA.R - RepliTali/
ApplyRepliTali.R , R, 6 lines - RepliTali/
GSE179847.R , R, 17 lines - RepliTali/
RepliTali_create.R , R, 111 lines - SessionInfo.R, R, 40 lines
- README.md, Text, 3 lines
jamieendicott/nature_comm_2022
e9e80847ff0a7fb4a20b03330d36b0d3da4c56aa, 25 May 2023Availability: 1 check, the latest on 30 September 2026: the link answers
- 30 September 2026: the link answers
20 files
- 1_MethylationArrayProces
s.R , R, 18 lines - 2_ImportProcessedEPIC.R, R, 8 lines
- CpGContext/
1_DefineContext.R , R, 106 lines - CpGContext/
2_Behavior_ts.R , R, 118 lines - Figure_2/
GeneExpression_Vis.R , R, 149 lines - Figure_2/
LOLA.R , R, 83 lines - Figure_2/
MethylationHeatmap_Densi , R, 114 linestyViridisPlots.R - Figure_2/
ReplicationSeq_anno.R , R, 197 lines - Figure_2/
TripleSankey.R , R, 72 lines - Growth_Arrest/
MMC.R , R, 94 lines - Growth_Arrest/
Serum_Deprivation.R , R, 67 lines - MedianMethylationRegress
ion.R , R, 41 lines - MethylationHeatmap.R, R, 43 lines
- RNAseq/
MethyltransferaseExpress , R, 58 lines, 1 matchion.R - RNAseq/
Oxygen_conditions_DE_FGS , R, 265 linesEA.R - RepliTali/
ApplyRepliTali.R , R, 6 lines - RepliTali/
GSE179847.R , R, 17 lines - RepliTali/
RepliTali_create.R , R, 111 lines - SessionInfo.R, R, 40 lines
- README.md, Text, 3 lines
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
- geo:GSE297733, at NCBI GEO; found in the text, “Key resources table”
- zenodo:17711746, at Zenodo; found in “Data and code availability”
Data and code availability
• DNA methylation data are available in GEO: GSE297733, proteomics data in PRIDE: PXD070222 (https://
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-specifi
BibTeX
@article{hoogstrate2026t
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-specifi
journal = {Cell reports. Medicine},
year = {2026},
month = mar,
volume = {7},
number = {3},
pages = {102682},
publisher = {Elsevier},
issn = {2666-3791},
doi = {10.1016/
url = {https://
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-specifi
T2 - Cell reports. Medicine
J2 - Cell Rep Med
PY - 2026
DA - 2026/
VL - 7
IS - 3
SP - 102682
SN - 2666-3791
PB - Elsevier
DO - 10.1016/
UR - https://
LA - en
ER -
CSL-JSON
{
"id": "10.1016/
"type": "article-journal",
"title": "TET CpG sequence-context-specifi
"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":
"volume": "7",
"issue": "3",
"page": "102682",
"DOI": "10.1016/
"PMID": "41850239",
"PMCID": "PMC13006442",
"ISSN": "2666-3791",
"publisher": "Elsevier",
"URL": "https://
"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. MedicineIn 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: NatureIn 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: iScienceIn 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 biologyIn 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 communicationsIn 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 sciencesIn 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 neuroscienceIn 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-oncologyIn 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 medicineIn 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.
Claim this paper
Correct its record
Say what each link of this record is, remove the ones that are not the paper's, add the ones that are missing. The correction becomes a new version of the record, in its Versions section.
Validate its tracing map
You validate the map as this page shows it: 7 repositories of the authors' code, each at its verified commit and with its license, 192 scripts, and 29 matches between paragraphs and code (see the Code and Map sections). It then receives a DOI on Zenodo, with you (your ORCID iD) and OSCR as its creators; the code itself is not deposited.
The map's fingerprint: sha256:80d0c27f778aa5ba…
Add the badge to its README
The badge links the code to this page. Copy one of these into the README of the paper's code: only you decide where it goes, and nothing is changed for you.
Markdown
[, paste the snippet at the top, then “Commit changes…” and, to review it first, “Create a new branch and start a pull request”. You open the pull request; OSCR asks for no permission.
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.
