DNA methylation profiling identifies long-range epigenetic silencing of clustered protocadherins as a key determinant of meningioma progression.
The 22 matches
- [1] § Methods › Analyses of progression-free survival ↔ 06_survival.R, lines 875–913 · score 0.82 · integrated discrimination improvement, reclassification improvement, Adjuvant RT, full cohort, NRI, IDI
- [2] § Methods › DNA methylation profiling and analysis ↔ 03_discovery_clustering.R, lines 1211–1270 · score 0.81 · unsupervised hierarchical clustering, adjusted rand, probe subset, cluster assignments, matrices, scoring
- [3] § Methods › DNA methylation profiling and analysis ↔ 04_machine_learning_prediction.R, lines 251–311 · score 0.79 · highest accuracy, machine learning, Methylation cluster assignment, kappa, ROC, trained
- [4] § Methods › DNA methylation profiling and analysis ↔ 12_classifier.R, lines 46–90 · score 0.75 · cross validated, random forest, tuning, ROC, trained, metric
- [5] § Results › A DNA hypermethylation signature underlies meningioma progression independent of molecular groups ↔ 02_discovery_benchmarking.R, lines 73–144 · score 0.74 · Kaplan Meier curve, Cox proportional hazard, risk score, regression, PFS, survival
- [6] § Results › Long-range epigenetic silencing of clustered protocadherins drives meningioma progression ↔ 08_cell_lines.R, lines 351–405 · score 0.74 · PCDHGC3 overexpressing, Error bars, catenin localisation, BEN MEN, parental, GFP
- [7] § Methods › DNA methylation profiling and analysis ↔ 01_QC_preselect.R, lines 358–423 · score 0.74 · removeBatchEffect, DNA isolation, limma, distances, age, multivariate
- [8] § Methods › DNA methylation profiling and analysis ↔ 03_discovery_clustering.R, lines 852–894 · score 0.71 · variable probes, integrated risk score, clinically relevant, weighted, overlap, PC1
- [9] § Methods › DNA methylation profiling and analysis ↔ 01_QC_preselect.R, lines 83–121 · score 0.65 · pOOBAH, sex chromosomes, Discovery cohort, quality, SeSAMe, filtered
- [10] § Results › A DNA hypermethylation signature underlies meningioma progression independent of molecular groups ↔ 06_survival.R, lines 875–913 · score 0.65 · integrated discrimination improvement, reclassification improvement, full cohort, NRI, IDI, survival
- [11] § Results › A DNA hypermethylation signature underlies meningioma progression independent of molecular groups ↔ 06_survival.R, lines 1219–1258 · score 0.61 · clinical covariates, continuous signature, cluster signature, splines, nonlinear, variable
- [12] § Results › Long-range epigenetic silencing of clustered protocadherins drives meningioma progression ↔ 08_cell_lines.R, lines 351–405 · score 0.60 · catenin localisation, BEN MEN, overexpressed, GFP, cytoplasmic, PCDHGC3
- [13] § Methods › Cell culture studies ↔ 08_cell_lines.R, lines 56–111 · score 0.60 · IOMM Lee, BEN MEN, KT21, NCH93, cell
- [14] § Methods › Copy number variant analysis ↔ 10_longitudinal_CNV.R, lines 873–915 · score 0.59 · CNV.focal, Cancer Gene, conumee2, Longitudinal
- [15] § Results › Long-range epigenetic silencing of clustered protocadherins drives meningioma progression ↔ 08_cell_lines.R, lines 56–111 · score 0.58 · IOMM Lee, BEN MEN, KT21, NCH93, METHlow, METHhigh
- [16] § Results › Long-range epigenetic silencing of clustered protocadherins drives meningioma progression ↔ 11_RNAseq.R, lines 86–135 · score 0.57 · log2 fold changes, hypermethylated genes, PCDHA, PCDHB, Volcano, PCDHG
- [17] § Results › A DNA hypermethylation signature underlies meningioma progression independent of molecular groups ↔ 06_survival.R, lines 171–209 · score 0.57 · Kaplan Meier curve, HR, Cox, hazard, survival, model
- [18] § Methods › Gene expression profiling ↔ 11_RNAseq.R, lines 44–84 · score 0.56 · DESeq2, Gene expression, QC, clusters
- [19] § Methods › DNA methylation profiling and analysis ↔ 04_machine_learning_prediction.R, lines 126–201 · score 0.56 · meaningful components, prcomp, weighted, pairwise, predictive, overlap
- [20] § Methods › Confocal microscopy ↔ 08_cell_lines.R, lines 474–532 · score 0.56 · IOMM Lee, stained, nuclei, GFP, cytoplasmic, nuclear
- [21] § Results › Independent, but convergent effects of CNVs and methylation cluster signature on meningioma progression ↔ 09_discovery_CNV.R, lines 591–637 · score 0.52 · Kruskal Wallis, genome stability, Dunn, METHlow, METHhigh, deletions
- [22] § Results › CNVs and DNA methylation shape the evolutionary trajectory of meningioma progression ↔ 07_trajectory_analysis.R, lines 585–633 · score 0.52 · normal meninges, cluster signature, Ellipses, adjustment, Dura, Leptomeninges
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 · 578 lines · 22 KB · no license · 5 matches
- library(sesame)
- library(IlluminaHumanMethylationEPICv2anno.20a1.hg38)
- library(FactoMineR)
- library(factoextra)
- library(dplyr)
- library(ggplot2)
- library(here)
- ###clone figshare repository including the given folder structure to your local directory
- ###populate raw data subfolders with data from either GEO or figshare itself
- ###refer to the README.txt file at https://github.com/MerkLab/Meningioma_DNA_methylation_project for further information
- ###get data (discovery cohort and cell lines)
- idat_dir = here("data", "GSE304093")
- setwd(here("data", "general_datasets"))
- targets = read.csv(file="targets_discovery_celllines.csv")
- betas.celllines = openSesame(idat_dir)
- betas.celllines <- betas.celllines[complete.cases(betas.celllines), ]
- # tag sex chromosome probes for removal
- annoEPICv2 = getAnnotation(IlluminaHumanMethylationEPICv2anno.20a1.hg38)
- keep <- !(rownames(betas.celllines) %in% annoEPICv2$Name[annoEPICv2$chr %in%
- c("chrX","chrY")])
- table(keep)
- betas.celllines = betas.celllines[keep,]
- #######make PCA analysis
- #get top 10k most variable probes as for discovery
- #make subset of most variable beta values
- bVals.sub = betas.celllines
- bVals.sub = as.data.frame(bVals.sub)
- bVals.sub$var = apply(bVals.sub,1,var)
- bVals.sub <- bVals.sub[order(bVals.sub$var, decreasing = TRUE),]
- bVals.sub = bVals.sub[,-242]
- bVals.sub.50k = bVals.sub[1:10000,]
- ###projecting cell lines in pca space from discovery cohort
- ###use PCA function from factormineR that contains active and supplementary individuals
- ###discovery samples are used as active individuals
- ###those determine the prinicipal components
- ###cell lines are used as supplementary components
- meth.pca = PCA(t(bVals.sub.10k), ind.sup = 1:10,graph=FALSE)
- fviz_eig(meth.pca, addlabels = TRUE)
- coord.meth.pca = meth.pca$ind$coord
- coord.meth.pca = as.data.frame(coord.meth.pca)
- supp.ind.coord = as.data.frame(meth.pca$ind.sup$coord)
- coord.meth.pca = rbind(supp.ind.coord, coord.meth.pca)
- rownames(targets) = targets$ID
- all(rownames(targets)==rownames(coord.meth.pca))
- #make pca plots for various conditions for 10k probes
- df <- cbind(targets, coord.meth.pca)
- setwd(here("results"))
- cairo_pdf(filename = "PCA_10k_disc_celllines_PC1-2.pdf", width = 5, height = 5)
- ggplot(df, aes(x=Dim.1, y=Dim.2, color = clustering, size = 6, shape = clustering))+
- geom_jitter(data = df %>% filter(clustering == "METHlow"), shape=16, size=5, alpha=0.7,show.legend = F)+
- geom_jitter(data = df %>% filter(clustering == "METHhigh"), shape=16, size=5, alpha=0.7,show.legend = F)+
- geom_jitter(data = df %>% filter(clustering == "BEN_MEN"), shape=25, size=7,fill="black", alpha=0.6,show.legend = F)+
- geom_jitter(data = df %>% filter(clustering == "HBL52"), shape=17, size=7, alpha=0.6,show.legend = F)+
- geom_jitter(data = df %>% filter(clustering == "IOMM_LEE"), shape=19, size=7, alpha=0.6,show.legend = F)+
- geom_jitter(data = df %>% filter(clustering == "KT21"), shape=18, size=9, alpha=0.6,show.legend = F)+
- geom_jitter(data = df %>% filter(clustering == "NCH93"), shape=15, size=7, alpha=0.6,show.legend = F)+
- scale_color_manual(values=c(BEN_MEN = "black",
- IOMM_LEE = "black",
- HBL52 = "black",
- NCH93 = "black",
- KT21 = "black",
- METHhigh = "violetred4",
- METHlow = "cyan4"))+
- scale_shape_manual(values = c(BEN_MEN = 0,
- IOMM_LEE = 1,
- HBL52 = 2,
- NCH93 = 5,
- KT21 = 6,
- METHhigh = 16,
- METHlow = 16)) +
- theme_classic()
- dev.off()
- setwd(here("results"))
- cairo_pdf(filename = "PCA_10k_disc_celllines_PC1-3.pdf", width = 5, height = 5)
- ggplot(df, aes(x=Dim.1, y=Dim.3, color = clustering, size = 6, shape = clustering))+
- geom_jitter(data = df %>% filter(clustering == "METHlow"), shape=16, size=5, alpha=0.7,show.legend = F)+
- geom_jitter(data = df %>% filter(clustering == "METHhigh"), shape=16, size=5, alpha=0.7,show.legend = F)+
- geom_jitter(data = df %>% filter(clustering == "BEN_MEN"), shape=25, size=7,fill="black", alpha=0.6,show.legend = F)+
- geom_jitter(data = df %>% filter(clustering == "HBL52"), shape=17, size=7, alpha=0.6,show.legend = F)+
- geom_jitter(data = df %>% filter(clustering == "IOMM_LEE"), shape=19, size=7, alpha=0.6,show.legend = F)+
- geom_jitter(data = df %>% filter(clustering == "KT21"), shape=18, size=9, alpha=0.6,show.legend = F)+
- geom_jitter(data = df %>% filter(clustering == "NCH93"), shape=15, size=7, alpha=0.6,show.legend = F)+
- scale_color_manual(values=c(BEN_MEN = "black",
- IOMM_LEE = "black",
- HBL52 = "black",
- NCH93 = "black",
- KT21 = "black",
- METHhigh = "violetred4",
- METHlow = "cyan4"))+
- scale_shape_manual(values = c(BEN_MEN = 0,
- IOMM_LEE = 1,
- HBL52 = 2,
- NCH93 = 5,
- KT21 = 6,
- METHhigh = 16,
- METHlow = 16)) +
- theme_classic()
- dev.off()
- ####make boxplot to show hypermethylated METHhigh probes in discovery and cell lines
- #get hyper probes only and subset beta values
- setwd(here("data", "08_cell_lines"))
- hyper_probes = read.csv(file="probes_hyper_cluster_disc.csv", header = T)
- hyper_probes = hyper_probes$Probe_ID
- bVals = as.data.frame(betas.celllines)
- bVals.hyper.probes = subset(bVals, rownames(bVals) %in% hyper_probes)
- all(colnames(bVals.hyper.probes) == targets$Basename)
- bVals.hyper.probes = bVals.hyper.probes[,match(targets$Basename, colnames(bVals.hyper.probes))]
- all(colnames(bVals.hyper.probes) == targets$Basename)
- colnames(bVals.hyper.probes) = targets$clustering
- setwd(here("results"))
- write.csv(bVals.hyper.probes, file="hyper_probes_beta_discovery_cellines.csv")
- #do the plot, with only single averages for the cell lines as horizontal lines
- setwd(here("data", "08_cell_lines"))
- avg_beta_hyper_probes_disc = read.csv(file="avg_hyper_probes.csv", header = T)
- setwd(here("results"))
- cairo_pdf(filename = "Hyper_probes_box_disc_cl_avg.pdf", width = 3.2, height = 7)
- ggplot(avg_beta_hyper_probes_disc,
- aes(x=factor(cluster, levels = c("METHlow", "METHhigh")), y=betas))+
- geom_point(position = position_jitter(), alpha=0.95, aes(color=betas))+
- geom_boxplot(outlier.shape = NA, alpha=0.5)+
- scale_y_continuous(breaks = seq(0,1,0.25), limits=c(0,1))+
- scale_color_gradientn(colours = c("navy","dodgerblue3","indianred1","red3"), limits=c(0,1))+
- geom_hline(yintercept=0.4808, linetype="dotted", color = "#A56D90", size=2)+
- geom_hline(yintercept=0.2751, linetype="dotted", color = "#1257BA", size=2)+
- geom_hline(yintercept=0.7595, linetype="dotted", color = "#F25050", size=2)+
- geom_hline(yintercept=0.7464, linetype="dotted", color = "#F45353", size=2)+
- geom_hline(yintercept=0.6986, linetype="dotted", color = "#FD6666", size=2)+
- theme_classic()+
- theme(legend.position = "none")
- dev.off()
- #visualize genomic regions and get probe IDs and their beta values
- #after getting the probes for regions, re-do heatmap using pheatmap to have the same color range
- all(colnames(bVals) == targets$Basename)
- bVals = bVals[,match(targets$Basename, colnames(bVals))]
- colnames(bVals) = targets$ID
- bVals_cl = bVals[,1:10]
- # extract cell line names (remove _A / _B)
- cell_lines <- sub("_[AB]$", "", colnames(bVals_cl))
- # average replicates
- bVals_merged <- sapply(unique(cell_lines), function(cl) {
- rowMeans(bVals_cl[, cell_lines == cl, drop = FALSE])
- })
- # keep row names
- bVals_merged <- as.data.frame(bVals_merged)
- rownames(bVals_merged) <- rownames(bVals_cl)
- #order from benign to malignant
- bVals_merged = bVals_merged[,c(1,2,3,5,4)]
- #PCDHA@ cluster
- PCDHA_probes = visualizeRegion("chr5",140786136,141012344,bVals_merged, draw = F)
- setwd(here("results"))
- write.csv(PCDHA_probes,file ="Cell_lines_PCDHA_probes_betas.csv")
- setwd(here("results"))
- cairo_pdf(filename = "PCDHA_betas_cell_lines.pdf", width = 12, height = 3)
- pheatmap(t(PCDHA_probes), color = colorRampPalette(c("navy","dodgerblue3","indianred1","red3"))(100),
- cluster_rows=FALSE, cluster_cols=FALSE,show_colnames = F, border_color = NA)
- dev.off()
- #PCDHB@ cluster
- PCDHB_probes = visualizeRegion("chr5",141051394,141248234,bVals_merged, draw = F)
- setwd(here("results"))
- write.csv(PCDHB_probes,file ="Cell_lines_PCDHB_probes_betas.csv")
- setwd(here("results"))
- cairo_pdf(filename = "PCDHB_betas_cell_lines.pdf", width = 12, height = 3)
- pheatmap(t(PCDHB_probes), color = colorRampPalette(c("navy","dodgerblue3","indianred1","red3"))(100),
- cluster_rows=FALSE, cluster_cols=FALSE,show_colnames = F, border_color = NA)
- dev.off()
- #PCDHG@ cluster
- PCDHG_probes = visualizeRegion("chr5",141330685,141512979,bVals_merged, draw = F)
- setwd(here("results"))
- write.csv(PCDHG_probes,file ="Cell_lines_PCDHG_probes_betas.csv")
- setwd(here("results"))
- cairo_pdf(filename = "PCDHG_betas_cell_lines.pdf", width = 12, height = 3)
- pheatmap(t(PCDHG_probes), color = colorRampPalette(c("navy","dodgerblue3","indianred1","red3"))(100),
- cluster_rows=FALSE, cluster_cols=FALSE,show_colnames = F, border_color = NA)
- dev.off()
- ###boxplot for PCDH clusters
- #get data
- setwd(here("data", "08_cell_lines"))
- data_boxplot_PCDH = read.csv(file="data_longrange_cluster.csv")
- str(data_boxplot_PCDH)
- data_boxplot_PCDH$cell_line = factor(data_boxplot_PCDH$cell_line, levels = c("H","B","N","K","I"))
- # grouped boxplot PCDH clusters
- setwd(here("results"))
- cairo_pdf(filename = "Boxplot_Celllines_PCDH_clusters.pdf", width = 5, height = 5)
- ggplot(data_boxplot_PCDH, aes(x=cluster, y=values, fill=cell_line)) +
- geom_boxplot(outliers = F)+
- scale_fill_manual(values=c("#1257BA","#A56D90","#FD6666","#F45353","#F25050"))+
- theme_classic()
- dev.off()
- ###work on FACS data
- ###parental meningioma cells MFI and percentage b-catenin cyto + nuclear
- #get MFI data for parental cells
- setwd(here("data", "08_cell_lines"))
- parental_MFI = read.csv(file="Parental_MFI.csv", header = T)
- parental_MFI$line = factor(parental_MFI$line, levels = c("HBL", "BEN", "NCH", "Lee", "KT"))
- parental_MFI$group = factor(parental_MFI$group, levels = c("cytplasmic", "nuclear"))
- str(parental_MFI)
- #plot with datapoints
- # Define the manual order of your samples
- desired_order <- c("HBL", "BEN", "NCH", "Lee", "KT") # replace with your order
- # Set factor levels manually
- parental_MFI$line <- factor(parental_MFI$line, levels = desired_order)
- # Create numeric x-axis for spacing
- parental_MFI$x_pos <- as.numeric(parental_MFI$line) * 1.5 # increase multiplier for more spacing
- # Define consistent dodge for groups
- dodge <- position_dodge(width = 0.6)
- # Plot
- setwd(here("results"))
- cairo_pdf(filename = "Parental_MFI_points.pdf", width = 3, height = 7)
- ggplot(parental_MFI, aes(x = x_pos, y = MFI_FC, color = group)) +
- # Raw points with slight jitter
- geom_point(
- position = position_jitterdodge(
- jitter.width = 0.12,
- dodge.width = dodge$width
- ),
- size = 4,
- alpha = 0.8
- ) +
- # Error bars on top of mean
- geom_errorbar(
- stat = "summary",
- fun.data = mean_se,
- position = dodge,
- width = 0.5,
- linewidth = 1.4
- ) +
- # Mean points
- geom_point(
- stat = "summary",
- fun = mean,
- position = dodge,
- size = 3
- ) +
- scale_color_manual(values = c("magenta2")) +
- #add horizontal line
- geom_hline(yintercept = 1, linetype = "dashed", color = "deepskyblue1", size=2)+
- # Map numeric x back to labels with manual order
- scale_x_continuous(
- breaks = 1:length(desired_order) * 1.5,
- labels = desired_order
- ) +
- scale_y_continuous(limits = c(0, NA)) +
- theme_classic() +
- theme(legend.position = "none")
- dev.off()
- #get percentage data for parental cells
- setwd(here("data", "08_cell_lines"))
- parental_percent = read.csv(file="Parental_percentage.csv", header = T)
- parental_percent$line = factor(parental_percent$line, levels = c("HBL", "BEN", "NCH", "Lee", "KT"))
- parental_percent$group = factor(parental_percent$group, levels = c("cytplasmic", "nuclear"))
- str(parental_percent)
- #plot with datapoints shown
- desired_order <- c("HBL", "BEN", "NCH", "Lee", "KT")
- # Set factor levels manually
- parental_percent$line <- factor(parental_percent$line, levels = desired_order)
- # Create numeric x-axis for spacing
- parental_percent$x_pos <- as.numeric(parental_percent$line) * 1.5
- # Define dodge for groups
- dodge <- position_dodge(width = 0.6)
- setwd(here("results"))
- cairo_pdf(filename = "Parental_percent_points.pdf", width = 4, height = 7)
- ggplot(parental_percent, aes(x = x_pos, y = MFI_FC, color = group)) +
- # Raw points with slight jitter
- geom_point(
- position = position_jitterdodge(jitter.width = 0.1, dodge.width = dodge$width),
- size = 4,
- alpha = 0.8
- ) +
- # Error bars
- geom_errorbar(
- stat = "summary",
- fun.data = mean_se,
- position = dodge,
- width = 0.5,
- linewidth = 1.4
- ) +
- # Mean points
- geom_point(
- stat = "summary",
- fun = mean,
- position = dodge,
- size = 3
- ) +
- scale_color_manual(values = c("deepskyblue1", "magenta2")) +
- # Map numeric x back to labels in the correct order
- scale_x_continuous(
- breaks = 1:length(desired_order) * 1.5, # <- fixed
- labels = desired_order # <- fixed
- ) +
- scale_y_continuous(limits = c(0, NA)) +
- theme_classic() +
- theme(legend.position = "none")
- dev.off()
- ###investigate changes of PCDHGC3 overexpressiion on b-catenin localisation
- #####BEN-MEN-1 analysis with GFP or PCDHGC3 overexpression
- #get MFI data
- #get MFI data for GFP cells
- setwd(here("data", "08_cell_lines"))
- GFP_MFI = read.csv(file="GFP_MFI_BEN.csv", header = T)
- GFP_MFI$line = factor(GFP_MFI$line, levels = c("BEN_parental","BEN_GFP", "BEN_C3"))
- GFP_MFI$group = factor(GFP_MFI$group, levels = c("cytoplasmic", "nuclear"))
- str(GFP_MFI)
- #make plot with datapoints
- # Define manual order of samples
- desired_order <- c("BEN_parental", "BEN_GFP", "BEN_C3")
- # Set factor levels manually
- GFP_MFI$line <- factor(GFP_MFI$line, levels = desired_order)
- # Create numeric x-axis for spacing
- GFP_MFI$x_pos <- as.numeric(GFP_MFI$line) * 1.5 # adjust multiplier for more spacing
- # Define consistent dodge for groups
- dodge <- position_dodge(width = 0.6)
- # Plot
- setwd(here("results"))
- cairo_pdf(filename = "GFP_MFI_points_BEN.pdf", width = 4, height = 5)
- ggplot(GFP_MFI, aes(x = x_pos, y = MFI_FC, color = group)) +
- # Raw data points with slight jitter
- geom_point(
- position = position_jitterdodge(
- jitter.width = 0.12,
- dodge.width = dodge$width
- ),
- size = 6,
- alpha = 0.8
- ) +
- # Error bars for mean ± SE
- geom_errorbar(
- stat = "summary",
- fun.data = mean_se,
- position = dodge,
- width = 0.5,
- linewidth = 1.4
- ) +
- # Mean points
- geom_point(
- stat = "summary",
- fun = mean,
- position = dodge,
- size = 3
- ) +
- scale_color_manual(values = c("magenta2")) +
- scale_y_continuous(limits = c(0, 1),
- breaks = seq(0, 2.5, by = 0.5)) +
- #add horizontal line
- geom_hline(yintercept = 1, linetype = "dashed", color = "deepskyblue1", size=2)+
- # Map numeric x back to labels in the manual order
- scale_x_continuous(
- breaks = 1:length(desired_order) * 1.5,
- labels = desired_order
- ) +
- theme_classic() +
- theme(legend.position = "none")
- dev.off()
- #####IOMM-Lee analysis with GFP or PCDHGC3 overexpression
- #get MFI data
- #get MFI data for GFP cells
- setwd(here("data", "08_cell_lines"))
- GFP_MFI = read.csv(file="GFP_MFI_Lee.csv", header = T)
- GFP_MFI$line = factor(GFP_MFI$line, levels = c("Lee_parental","Lee_GFP", "Lee_C3"))
- GFP_MFI$group = factor(GFP_MFI$group, levels = c("cytplasmic", "nuclear"))
- str(GFP_MFI)
- #make plot with datapoints
- # Define manual order of samples
- desired_order <- c("Lee_parental", "Lee_GFP", "Lee_C3")
- # Set factor levels manually
- GFP_MFI$line <- factor(GFP_MFI$line, levels = desired_order)
- # Create numeric x-axis for spacing
- GFP_MFI$x_pos <- as.numeric(GFP_MFI$line) * 1.5 # adjust multiplier for more spacing
- # Define consistent dodge for groups
- dodge <- position_dodge(width = 0.6)
- # Plot
- setwd(here("results"))
- cairo_pdf(filename = "GFP_MFI_points.pdf", width = 5, height = 5)
- ggplot(GFP_MFI, aes(x = x_pos, y = MFI_FC, color = group)) +
- # Raw data points with slight jitter
- geom_point(
- position = position_jitterdodge(
- jitter.width = 0.12,
- dodge.width = dodge$width
- ),
- size = 6,
- alpha = 0.8
- ) +
- # Error bars for mean ± SE
- geom_errorbar(
- stat = "summary",
- fun.data = mean_se,
- position = dodge,
- width = 0.5,
- linewidth = 1.4
- ) +
- # Mean points
- geom_point(
- stat = "summary",
- fun = mean,
- position = dodge,
- size = 3
- ) +
- scale_color_manual(values = c("magenta2")) +
- scale_y_continuous(limits = c(0, NA),
- breaks = seq(0, 2.5, by = 0.5)) +
- #add horizontal line
- geom_hline(yintercept = 1, linetype = "dashed",color = "deepskyblue1", size=2)+
- # Map numeric x back to labels in the manual order
- scale_x_continuous(
- breaks = 1:length(desired_order) * 1.5,
- labels = desired_order
- ) +
- theme_classic() +
- theme(legend.position = "none")
- dev.off()
- ###analyses b-catenin cytoplasmic and nuclear from ICC stains
- ##############make boxplot of total b-catenin intensity
- ###IOMM-LEE
- setwd(here("data", "08_cell_lines"))
- Lee_total = read.csv(file="Bcatenin_ICC_quartiles_total_Lee.csv")
- Lee_total$MainGroup <- factor(Lee_total$MainGroup, levels = c("Lee-GFP", "Lee-C3"))
- setwd(here("results"))
- cairo_pdf(filename = "Boxplots_ICC_Bcatenin_total_3.pdf", width = 5, height = 7)
- ggplot(Lee_total, aes(x = MainGroup, y = Value, fill=MainGroup)) +
- geom_jitter(aes(color = MainGroup),position = position_jitterdodge(jitter.width = 0.2, dodge.width = 0.8),
- size = 1.8, alpha = 0.6) +
- geom_boxplot(position = position_dodge(width = 0.8), width = 0.6, outlier.shape = NA) +
- scale_fill_manual(values = c("Lee-GFP" = "violetred4", "Lee-C3" = "steelblue4")) +
- scale_color_manual(values = c("Lee-GFP" = "violetred4", "Lee-C3" = "steelblue4")) +
- labs(title = "Boxplot title", x = "Main Group", y = "Value") +
- theme_classic()
- dev.off()
- ##############make boxplot of b-catenin ratio nucleus to cytoplasm
- setwd(here("data", "08_cell_lines"))
- Lee_ratio = read.csv(file="Bcatenin_ICC_quartiles_ratios_Lee.csv")
- Lee_ratio$MainGroup <- factor(Lee_ratio$MainGroup, levels = c("Lee-GFP", "Lee-C3"))
- setwd(here("results"))
- cairo_pdf(filename = "Boxplots_ICC_Bcatenin_ratios_new.pdf", width = 7, height = 7)
- ggplot(Lee_ratio, aes(x = MainGroup, y = Value, fill=SubGroup)) +
- geom_jitter(aes(color = SubGroup),position = position_jitterdodge(jitter.width = 0.2, dodge.width = 0.8),
- size = 1.8, alpha = 0.6) +
- geom_boxplot(position = position_dodge(width = 0.8), width = 0.6, outlier.shape = NA) +
- scale_fill_manual(values = c("Q1" = "cyan2", "Q2" = "turquoise4",
- "Q3" = "violetred2", "Q4" = "darkmagenta")) +
- scale_color_manual(values = c("Q1" = "cyan2", "Q2" = "turquoise4",
- "Q3" = "violetred2", "Q4" = "darkmagenta")) +
- geom_hline(yintercept = 0.88, linetype = "dashed", color = "cyan2",linewidth = 1.25)+
- geom_hline(yintercept = 1.13, linetype = "dashed", color = "turquoise4",linewidth = 1.25)+
- geom_hline(yintercept = 1.46, linetype = "dashed", color = "violetred2",linewidth = 1.25)+
- geom_hline(yintercept = 2.15, linetype = "dashed", color = "darkmagenta",linewidth = 1.25)+
- labs(title = "Boxplot title", x = "Main Group", y = "Value") +
- theme_classic()
- dev.off()
- wilcox.test(Value ~ MainGroup, data = Lee_total)
- wilcox.test(Value ~ MainGroup, data = Lee_ratio)
- #do tha same for BEN-MEN-1
- setwd(here("data", "08_cell_lines"))
- BEN_total = read.csv(file="Bcatenin_ICC_quartiles_total_BEN.csv")
- BEN_total$MainGroup <- factor(BEN_total$MainGroup, levels = c("BEN_GFP", "BEN_C3"))
- setwd(here("results"))
- cairo_pdf(filename = "Boxplots_ICC_Bcatenin_total_BEN.pdf", width = 5, height = 7)
- ggplot(BEN_total, aes(x = MainGroup, y = Value, fill=MainGroup)) +
- geom_jitter(aes(color = MainGroup),position = position_jitterdodge(jitter.width = 0.2, dodge.width = 0.8),
- size = 1.8, alpha = 0.6) +
- geom_boxplot(position = position_dodge(width = 0.8), width = 0.6, outlier.shape = NA) +
- scale_fill_manual(values = c("BEN_GFP" = "violetred4", "BEN_C3" = "steelblue4")) +
- scale_color_manual(values = c("BEN_GFP" = "violetred4", "BEN_C3" = "steelblue4")) +
- labs(title = "Boxplot title", x = "Main Group", y = "Value") +
- theme_classic()
- dev.off()
- ##############make boxplot of b-catenin ratio nucleus to cytoplasm
- setwd(here("data", "08_cell_lines"))
- BEN_ratio = read.csv(file="Bcatenin_ICC_quartiles_ratios_BEN.csv")
- BEN_ratio$MainGroup <- factor(BEN_ratio$MainGroup, levels = c("BEN_GFP", "BEN_C3"))
- setwd(here("results"))
- cairo_pdf(filename = "Boxplots_ICC_Bcatenin_ratios_BEN.pdf", width = 7, height = 7)
- ggplot(BEN_ratio, aes(x = MainGroup, y = Value, fill=SubGroup)) +
- geom_jitter(aes(color = SubGroup),position = position_jitterdodge(jitter.width = 0.2, dodge.width = 0.8),
- size = 1.8, alpha = 0.6) +
- geom_boxplot(position = position_dodge(width = 0.8), width = 0.6, outlier.shape = NA) +
- scale_fill_manual(values = c("Q1" = "cyan2", "Q2" = "turquoise4",
- "Q3" = "violetred2", "Q4" = "darkmagenta")) +
- scale_color_manual(values = c("Q1" = "cyan2", "Q2" = "turquoise4",
- "Q3" = "violetred2", "Q4" = "darkmagenta")) +
- geom_hline(yintercept = 0.12538226, linetype = "dashed", color = "cyan2",linewidth = 1.25)+
- geom_hline(yintercept = 0.37512742, linetype = "dashed", color = "turquoise4",linewidth = 1.25)+
- geom_hline(yintercept = 0.62487258, linetype = "dashed", color = "violetred2",linewidth = 1.25)+
- geom_hline(yintercept = 0.87512742, linetype = "dashed", color = "darkmagenta",linewidth = 1.25)+
- labs(title = "Boxplot title", x = "Main Group", y = "Value") +
- theme_classic()
- dev.off()
- wilcox.test(Value ~ MainGroup, data = BEN_total)
- wilcox.test(Value ~ MainGroup, data = BEN_ratio)
08_cell_lines.R at commit d92e2bf, no license · at the source
Overview
- Department of Neurology and Interdisciplinary Neuro-Oncology, Hertie Institute for Clinical Brain Research, University Hospital Tübingen, Eberhard Karls University Tübingen, Tübingen, Germany
- Cluster of Excellence iFIT (EXC 2180) “Image Guided and Functionally Instructed Tumour Therapies”, Eberhard Karls University Tübingen, Tübingen, Germany
- Department of Pediatric Oncology, Dana-Farber/Boston Children’s Cancer and Blood Disorders Center, Boston, MA USA
- M3 Research Center for Malignome, Metabolome, and Microbiome, University Hospital Tübingen, Eberhard Karls University Tübingen, Tübingen, Germany
- Graduate Training Center for Neuroscience, Eberhard Karls University Tübingen, Tübingen, Germany
- German Consortium for Translational Cancer Research (DKTK), Partner Site Tübingen, German Cancer Research Center (DKFZ), Heidelberg, Germany
- Department of Neurosurgery, Copenhagen University Hospital, Rigshospitalet, Copenhagen, Denmark
- Department of Neurosurgery and Neurotechnology, University Hospital Tübingen, Eberhard Karls University Tübingen, Tübingen, Germany
- Institute of Neuropathology, Department of Pathology and Neuropathology, University Hospital Tübingen, Eberhard Karls University Tübingen, Tübingen, Germany
- Comprehensive Cancer Center Tübingen Stuttgart, University Hospital Tübingen, Eberhard Karls University Tübingen, Tübingen, Germany
Abstract
Meningioma is the most common primary brain tumour in adults. However, molecular drivers of progression occurring in a subset of meningiomas are poorly understood. We hypothesise that epigenomic variations are causal for the clinical heterogeneity of meningiomas and may be functionally relevant for disease progression. To test this hypothesis, we perform global DNA methylation profiling of a large cross-sectional cohort and a longitudinal cohort of human meningiomas. Our analysis identifies a DNA hypermethylation signature that is correlated with clinical outcomes and enables more accurate prognostication for meningiomas than previous classification systems. Analyses of longitudinal high-grade meningioma samples in comparison to clinically benign meningiomas and normal meningeal tissue show convergent contributions but differing plasticity of copy number variations and DNA hypermethylation along the trajectory of meningioma progression. Systematic analysis of DNA hypermethylation in high-grade meningiomas unravels a tumour suppressive role of clustered protocadherins by restricting β-catenin nuclear localisation, consistent with the association between nuclear β-catenin staining and meningioma progression. Together, our study provides fundamental insights into the molecular mechanisms underlying the heterogeneity of clinically benign and aggressive meningiomas and the microevolutionary adaptation during disease progression.
Reproduced under the paper's license (CC BY), from the paper cited above.
Repository
Its files are read in the Code ↔ Paper reader above, with 22 matches between paragraphs and lines of code.
MerkLabHIH/Meningioma_DNA_methylation_project
d92e2bfd47de12c85424e61b4f6e5e91f1fa57d9, 27 July 2026Availability: 1 check, the latest on 27 September 2026: the link answers
- 27 September 2026: the link answers
13 files
- 01_QC_preselect.R, R, 569 lines, 2 matches
- 02_discovery_benchmarkin
g.R , R, 147 lines, 1 match - 03_discovery_clustering.
R , R, 2,540 lines, 2 matches - 04_machine_learning_pred
iction.R , R, 463 lines, 2 matches - 05_differential_methylat
ion.R , R, 1,356 lines - 06_survival.R, R, 1,927 lines, 4 matches
- 07_trajectory_analysis.R
, R, 1,057 lines, 1 match - 08_cell_lines.R, R, 578 lines, 5 matches
- 09_discovery_CNV.R, R, 1,110 lines, 1 match
- 10_longitudinal_CNV.R, R, 1,115 lines, 1 match
- 11_RNAseq.R, R, 372 lines, 2 matches
- 12_classifier.R, R, 871 lines, 1 match
- README.md, Text, 77 lines
Code availability
All code used in this study is publicly available at GitHub (https://
Reproduced under the paper's license (CC BY), from the paper cited above.
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:
- 1 repository of the authors' code, each at its verified commit, with its license and how the link was found in the paper;
- 12 scripts, each with its path and the digest of its content;
- 22 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
- figshare:32043249, at figshare; found in “Data availability”
- geo:GSE304097, at NCBI GEO; found in “Data availability”
Data Availability Statement
The raw DNA methylation data and RNAseq data generated in this study have been deposited in the GEO database under accession code GSE304097 (https://
All code used in this study is publicly available at GitHub (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, 27 September 2026: the first record
Recorded: type, language, journal, volume, issue, pages, dates, 17 authors, 3 keywords, 18 MeSH terms, 1 funder, 63 references.
Cite
This paper
Merk, D. J., Paßlack, P., Surender, S., Tsiami, F., Haeusser, L. A., Arnold, V., Sampath-Kumar, V., Sevenich, L., Maier, A. D., Mathiesen, T., Tatagiba, M., Gött, H., Tellermann, J., Behling, F., Schittenhelm, J., Becker, H., & Tabatabai, G. (2026). DNA methylation profiling identifies long-range epigenetic silencing of clustered protocadherins as a key determinant of meningioma progression. Nature communications, 17(1), 9236. https://
BibTeX
@article{merk2026dna,
author = {Merk, Daniel J and Paßlack, Peter and Surender, Surender and Tsiami, Foteini and Haeusser, Lara A and Arnold, Vanessa and Sampath-Kumar, Vijayasarathy and Sevenich, Lisa and Maier, Andrea D and Mathiesen, Tiit and Tatagiba, Marcos and Gött, Hanna and Tellermann, Jonas and Behling, Felix and Schittenhelm, Jens and Becker, Hannes and Tabatabai, Ghazaleh},
title = {{DNA methylation profiling identifies long-range epigenetic silencing of clustered protocadherins as a key determinant of meningioma progression}},
journal = {Nature communications},
year = {2026},
month = aug,
volume = {17},
number = {1},
pages = {9236},
publisher = {Nature Publishing Group},
issn = {2041-1723},
doi = {10.1038/
url = {https://
pmid = {42668313},
pmcid = {PMC13526022}
}
RIS
TY - JOUR
AU - Merk, Daniel J
AU - Paßlack, Peter
AU - Surender, Surender
AU - Tsiami, Foteini
AU - Haeusser, Lara A
AU - Arnold, Vanessa
AU - Sampath-Kumar, Vijayasarathy
AU - Sevenich, Lisa
AU - Maier, Andrea D
AU - Mathiesen, Tiit
AU - Tatagiba, Marcos
AU - Gött, Hanna
AU - Tellermann, Jonas
AU - Behling, Felix
AU - Schittenhelm, Jens
AU - Becker, Hannes
AU - Tabatabai, Ghazaleh
TI - DNA methylation profiling identifies long-range epigenetic silencing of clustered protocadherins as a key determinant of meningioma progression
T2 - Nature communications
J2 - Nat Commun
PY - 2026
DA - 2026/
VL - 17
IS - 1
SP - 9236
SN - 2041-1723
PB - Nature Publishing Group
DO - 10.1038/
UR - https://
LA - en
ER -
CSL-JSON
{
"id": "10.1038/
"type": "article-journal",
"title": "DNA methylation profiling identifies long-range epigenetic silencing of clustered protocadherins as a key determinant of meningioma progression",
"container-title": "Nature communications",
"author": [
{
"family": "Merk",
"given": "Daniel J"
},
{
"family": "Paßlack",
"given": "Peter"
},
{
"family": "Surender",
"given": "Surender"
},
{
"family": "Tsiami",
"given": "Foteini"
},
{
"family": "Haeusser",
"given": "Lara A"
},
{
"family": "Arnold",
"given": "Vanessa"
},
{
"family": "Sampath-Kumar",
"given": "Vijayasarathy"
},
{
"family": "Sevenich",
"given": "Lisa"
},
{
"family": "Maier",
"given": "Andrea D"
},
{
"family": "Mathiesen",
"given": "Tiit"
},
{
"family": "Tatagiba",
"given": "Marcos"
},
{
"family": "Gött",
"given": "Hanna"
},
{
"family": "Tellermann",
"given": "Jonas"
},
{
"family": "Behling",
"given": "Felix"
},
{
"family": "Schittenhelm",
"given": "Jens"
},
{
"family": "Becker",
"given": "Hannes"
},
{
"family": "Tabatabai",
"given": "Ghazaleh"
}
],
"container-title-short":
"volume": "17",
"issue": "1",
"page": "9236",
"DOI": "10.1038/
"PMID": "42668313",
"PMCID": "PMC13526022",
"ISSN": "2041-1723",
"publisher": "Nature Publishing Group",
"URL": "https://
"language": "en",
"issued": {
"date-parts": [
[
2026,
8,
29
]
]
}
}
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.102682 [code]
- TET CpG sequence-context-specifi
c DNA demethylation shapes progression of IDH-mutant gliomas. Journal: Cell reports. MedicineIn common: pROC, survival, limma, 10 other tools, genetics / omics, other condition, 5 references - [2] 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: randomForest, pROC, survival, 12 other tools, genetics / omics, other condition, 1 reference
- [3] doi:10.1038/s42003-026-10957-8 [code]
- Brain defence by the extracellular matrix protein Cochlin.Journal: Communications biologyIn common: randomForest, survival, caret, 11 other tools, cellular / molecular
- [4] 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, limma, circlize, 9 other tools, genetics / omics, other condition, cellular / molecular, 2 references
- [5] 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: pROC, survival, limma, 9 other tools, other condition
- [6] doi:10.1038/s41386-026-02406-1 [code]
- Functional genomic profiling of schizophrenia-associated
genes reveals key microglial regulators. Journal: Neuropsychopharmacology : official publication of the American College of NeuropsychopharmacologyIn common: limma, broom, circlize, 9 other tools, genetics / omics, cellular / molecular, 1 reference - [7] doi:10.7717/peerj.21426 [code]
- Integrated transcriptomic identification and validation reveal key autophagy-associated biomarkers in sleep deprivation.Journal: PeerJIn common: randomForest, pROC, caret, 8 other tools, genetics / omics, cellular / molecular
- [8] doi:10.3390/ijms27156925 [code]
- XGBoost-SHAP Interpretable Modeling Identifies and Validates an Eight-Gene Biomarker for Hepatic Encephalopathy Risk Prediction in Cirrhosis.Journal: International journal of molecular sciencesIn common: randomForest, pROC, survival, 7 other tools, genetics / omics, other condition
- [9] 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: pROC, caret, limma, 8 other tools, genetics / omics - [10] 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: pROC, survival, caret, 7 other tools, genetics / omics, other condition
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: 1 repository of the authors' code, each at its verified commit and with its license, 12 scripts, and 22 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:d23cd0ca0dc973d2…
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.
