OSCR

Gene regulatory network analysis identifies dysregulation of hypoxia pathways as contributing to glioblastoma treatment resistance in females.

Code ↔ Paper

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

The 12 matches
  1. [1] § Methods › Data preprocessing ↔ preprocessREMBRANDT.R, lines 1–39 · score 0.90 · hgu133plus2.db, Ensembl IDs, REMBRANDT clinical, AnnotationDbi, GSE108474, Affy
  2. [2] § Results › Hypoxia-related GBM-specific pathway targeting differs between males and females ↔ PathwayDifferentialAnalysis.R, lines 13–74 · score 0.87 · aerobic glycolysis, glycan biosynthesis, neutrophil degranulation, mRNA splicing, Extracellular Matrix, collagen
  3. [3] § Results › Hypoxia-related GBM-specific pathway targeting differs between males and females ↔ RunBLOBFISHAllTFS.R, lines 54–78 · score 0.84 · aerobic glycolysis, glycan biosynthesis, neutrophil degranulation, Extracellular Matrix, collagen, fibroblast
  4. [4] § Results › Hypoxia is co-regulated with carbohydrate metabolism, extracellular matrix, and immune pathways in females only ↔ plotBLOBFISH_REMBRANDT_noAR.R, lines 28–82 · score 0.73 · carbohydrate metabolism, immune pathways, hypoxia pathways, HIF1A, extracellular matrix, ECM
  5. [5] § Methods › Gene regulatory network inference ↔ netZooPy/panda/panda.py, lines 12–108 · score 0.69 · netZooPy, Gene Regulatory Network, co expression, GRAND, database, Binding
  6. [6] § Methods › Transcription factor activity between LGG and GBM in males and females ↔ R/MONSTER.R, lines 61–149 · score 0.64 · biological state transitions, transition matrix, diagonal, MONSTER, phenotype, weight
  7. [7] § Results › Hypoxia is co-regulated with carbohydrate metabolism, extracellular matrix, and immune pathways in females only ↔ plotBLOBFISH_REMBRANDT_noAR.R, lines 84–134 · score 0.64 · androgen receptor, HIF1A, pathway categories, REMBRANDT, ECM, carbohydrate
  8. [8] § Results › Hypoxia is co-regulated with carbohydrate metabolism, extracellular matrix, and immune pathways in females only ↔ RunBLOBFISHAllTFS.R, lines 128–178 · score 0.61 · carbohydrate metabolism, HIF1A, extracellular matrix, ECM, splicing, mRNA
  9. [9] § Results › Hypoxia-related GBM-specific pathway targeting differs between males and females ↔ RunBLOBFISHAllTFS.R, lines 54–78 · score 0.57 · renal cell carcinoma, extracellular matrix, formation, metabolism, immune, Hypoxia
  10. [10] § Results › Hypoxia-related GBM-specific pathway targeting differs between males and females ↔ blobfishforrevdata.r, lines 82–107 · score 0.57 · renal cell carcinoma, extracellular matrix, formation, metabolism, immune, Hypoxia
  11. [11] § Methods › Gene regulatory network inference ↔ inst/extdata/panda.py, lines 301–389 · score 0.54 · netZooPy, Gene Regulatory Network, Binding, Inferred, PPI, weights
  12. [12] § Methods › Data preprocessing ↔ R/SEAHORSE.R, lines 270–342 · score 0.53 · RNA seq, limma, raw, filtered, Modeling, genes

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 · 387 lines · 22 KB · no license · 3 matches

  1. library(netZooR)
  2. # Read the PANDAs.
  3. sourceDir <- NULL
  4. LGGFemale <- read.table(paste0(sourceDir, 'LGG_Female_Panda_output.txt'), sep = " ")
  5. GBMFemale <- read.table(paste0(sourceDir, 'GBM_Female_Panda_output.txt'), sep = " ")
  6. LGGMale <- read.table(paste0(sourceDir, 'LGG_Male_Panda_output.txt'), sep = " ")
  7. GBMMale <- read.table(paste0(sourceDir, 'GBM_Male_Panda_output.txt'), sep = " ")
  8. # Read the TFs.
  9. tfsDF <- read.csv(paste0(sourceDir, "gbmFemaleSpecificMONSTER.csv"), row.names = 1)
  10. tfs <- tfsDF[which(tfsDF[,2] != "Remove"), "x"]
  11. # Filter the PANDAs.
  12. filterPanda <- function(panda){
  13. pandaFilt <- panda[which(panda$V1 %in% tfs),]
  14. pandaFilt <- pandaFilt[,c(1,2,4)]
  15. colnames(pandaFilt) <- c("tf", "gene", "score")
  16. return(pandaFilt)
  17. }
  18. lggFemaleFilt <- filterPanda(LGGFemale)
  19. gbmFemaleFilt <- filterPanda(GBMFemale)
  20. lggMaleFilt <- filterPanda(LGGMale)
  21. gbmMaleFilt <- filterPanda(GBMMale)
  22. # Get symbols.
  23. library("org.Hs.eg.db")
  24. ensemblToSymbol <- function(data){
  25. # Map ENSEMBL to SYMBOL.
  26. results <- AnnotationDbi::mapIds(org.Hs.eg.db, keys=data$gene,
  27. column="SYMBOL", keytype="ENSEMBL",
  28. multiVals = "first")
  29. # Create a new data frame.
  30. newData <- data.frame(tf = data$tf, gene = results, score = data$score)
  31. pairNames <- paste(newData$tf, newData$gene, sep = "__")
  32. # Remove duplicate pairs in the data frame.
  33. pairCounts <- table(pairNames)
  34. dupPairs <- names(pairCounts)[which(pairCounts > 1)]
  35. toRemove <- unlist(lapply(1:length(dupPairs), function(i){
  36. pair <- dupPairs[i]
  37. whichPairNames <- which(pairNames == pair)
  38. whichMaxScore <- which.max(newData[whichPairNames, "score"])
  39. whichToRemove <- whichPairNames[setdiff(1:length(whichPairNames), whichMaxScore)]
  40. print(paste(i, "out of", length(dupPairs)))
  41. return(whichToRemove)
  42. }))
  43. newDataDedup <- newData[setdiff(1:nrow(newData), toRemove),]
  44. rownames(newDataDedup) <- paste(newDataDedup$tf, newDataDedup$gene, sep = "__")
  45. return(newDataDedup)
  46. }
  47. lggFemaleTarget <- ensemblToSymbol(lggFemaleFilt)
  48. write.csv(lggFemaleTarget, paste0(sourceDir, "lggFemaleTargetFull.csv"))
  49. gbmFemaleTarget <- ensemblToSymbol(gbmFemaleFilt)
  50. write.csv(gbmFemaleTarget, paste0(sourceDir, "gbmFemaleTargetFull.csv"))
  51. lggMaleTarget <- ensemblToSymbol(lggMaleFilt)
  52. write.csv(lggMaleTarget, paste0(sourceDir, "lggMaleTargetFull.csv"))
  53. gbmMaleTarget <- ensemblToSymbol(gbmMaleFilt)
  54. write.csv(gbmMaleTarget, paste0(sourceDir, "gbmMaleTargetFull.csv"))
  55. # Read pathway result files.
  56. GBMM_GBMF <- read.csv(paste0(sourceDir, "GBMMale_Female_PathwayFile.csv"))
  57. GBMF_GBMM <- read.csv(paste0(sourceDir, "GBMFemale_Male_PathwayFile.csv"))
  58. # Get all genes in the pathways of interest.
  59. gmtFile = fgsea::gmtPathways(paste0(sourceDir, "c2.cp.v2023.2.Hs.symbols.gmt"))
  60. mrnaPathways <- c("REACTOME_METABOLISM_OF_RNA", "REACTOME_Splicing_SPLICING", "REACTOME_PROCESSING_OF_CAPPED_INTRON_CONTAINING_PRE_Splicing")
  61. arPathways <- "PID_AR_NONGENOMIC_PATHWAY"
  62. immunePathways <- c("REACTOME_NEUTROPHIL_DEGRANULATION", "REACTOME_INNATE_IMMUNE_SYSTEM",
  63. "KEGG_LYSOSOME")
  64. carbPathways <- c("WP_METABOLIC_PATHWAYS_OF_FIBROBLASTS", "WP_AEROBIC_GLYCOLYSIS",
  65. "WP_N_GLYCAN_BIOSYNTHESIS")
  66. ecmPathways <- c("REACTOME_DEGRADATION_OF_THE_EXTRACELLULAR_MATRIX", "REACTOME_EXTRACELLULAR_MATRIX_ORGANIZATION",
  67. "REACTOME_COLLAGEN_FORMATION")
  68. cancerPathways <- c("WP_TYPE_2_PAPILLARY_RENAL_CELL_CARCINOMA", "WP_CLEAR_CELL_RENAL_CELL_CARCINOMA_PATHWAYS")
  69. hypoxiaPathways <- "PID_HIF1_TFPATHWAY"
  70. getGenesInPathways <- function(pathwayNames, pathwayFile){
  71. geneStrings <- pathwayFile[which(pathwayFile$pathway %in% pathwayNames), "leadingGenesDrivingEnrichment"]
  72. geneLists <- lapply(geneStrings, function(string){return(strsplit(string, "; ")[[1]])})
  73. geneSet <- unique(unlist(geneLists))
  74. return(geneSet)
  75. }
  76. mrnaGenes <- getGenesInPathways(mrnaPathways, GBMM_GBMF)
  77. arGenes <- getGenesInPathways(arPathways, GBMM_GBMF)
  78. immuneGenes <- getGenesInPathways(immunePathways, GBMF_GBMM)
  79. carbGenes <- getGenesInPathways(carbPathways, GBMF_GBMM)
  80. ecmGenes <- getGenesInPathways(ecmPathways, GBMF_GBMM)
  81. cancerGenes <- getGenesInPathways(cancerPathways, GBMF_GBMM)
  82. hypoxiaGenes <- getGenesInPathways(hypoxiaPathways, GBMF_GBMM)
  83. genesOfInterest <- unique(c(mrnaGenes, arGenes, immuneGenes, carbGenes, ecmGenes, cancerGenes,
  84. hypoxiaGenes))
  85. # Run BLOBFISH on the PANDAs.
  86. null<-readRDS(paste0(sourceDir, "nullPANDASubset.RDS"))
  87. lggFemaleBlobfish <- netZooR::RunBLOBFISH(networks = lggFemaleTarget,
  88. geneSet = genesOfInterest, hopConstraint = 2,
  89. alpha = 0.05, nullDistribution = null,
  90. pValueFile = paste0(sourceDir, "/lggFemaleBlobfishPvals"))
  91. write.csv(lggFemaleBlobfish, paste0(sourceDir, 'LGG_Female_Panda_BLOBFISH_Full.csv'))
  92. gbmFemaleBlobfish <- netZooR::RunBLOBFISH(networks = list(gbmFemaleTarget),
  93. geneSet = genesOfInterest, hopConstraint = 2,
  94. alpha = 0.05, nullDistribution = null,
  95. pValueFile = paste0(sourceDir, "/gbmFemaleBlobfishPvals"))
  96. write.csv(gbmFemaleBlobfish, paste0(sourceDir, 'GBM_Female_Panda_BLOBFISH_Full.csv'))
  97. lggMaleBlobfish <- netZooR::RunBLOBFISH(networks = list(lggMaleTarget),
  98. geneSet = genesOfInterest, hopConstraint = 2,
  99. alpha = 0.05, nullDistribution = null,
  100. pValueFile = paste0(sourceDir, "/lggMaleBlobfishPvals"))
  101. write.csv(lggMaleBlobfish, paste0(sourceDir, 'LGG_Male_Panda_BLOBFISH_Full.csv'))
  102. gbmMaleBlobfish <- netZooR::RunBLOBFISH(networks = list(gbmMaleTarget),
  103. geneSet = genesOfInterest, hopConstraint = 2,
  104. alpha = 0.05, nullDistribution = null,
  105. pValueFile = paste0(sourceDir, "/gbmMaleBlobfishPvals"))
  106. write.csv(gbmMaleBlobfish, paste0(sourceDir, 'GBM_Male_Panda_BLOBFISH_Full.csv'))
  107. # Find the GBM Female and Male specific edges.
  108. gbmFemaleSpecificBlobfish <- gbmFemaleBlobfish[setdiff(rownames(gbmFemaleBlobfish),
  109. c(rownames(lggFemaleBlobfish),
  110. rownames(gbmMaleBlobfish),
  111. rownames(lggMaleBlobfish))),]
  112. gbmMaleSpecificBlobfish <- gbmMaleBlobfish[setdiff(rownames(gbmMaleBlobfish),
  113. c(rownames(lggFemaleBlobfish),
  114. rownames(gbmFemaleBlobfish),
  115. rownames(lggMaleBlobfish))),]
  116. # Plot these networks, color-coding by pathway (use geneColorMapping for this.)
  117. # Also, include the TF labels.
  118. mrnaColor <- rgb(red = 1, green = 0, blue = 0, alpha = 0.5)
  119. arColor <- rgb(red = 0, green = 0, blue = 1, alpha = 0.5)
  120. immuneColor <- rgb(red = 0, green = 1, blue = 0, alpha = 0.5)
  121. carbColor <- rgb(red = 1, green = 1, blue = 0, alpha = 0.5)
  122. ecmColor <- rgb(red = 1, green = 0, blue = 1, alpha = 0.5)
  123. cancerColor <- rgb(red = 0, green = 1, blue = 1, alpha = 0.5)
  124. hypoxiaColor <- rgb(red = 0, green = 0, blue = 0, alpha = 0.5)
  125. gbmFemaleToPathway <- gbmFemaleSpecificBlobfish
  126. gbmFemaleToPathway$pathway <- "placeholder"
  127. gbmFemaleToPathway[which(gbmFemaleToPathway$gene %in% mrnaGenes), "pathway"] <- "Splicing"
  128. gbmFemaleToPathway[which(gbmFemaleToPathway$gene %in% arGenes), "pathway"] <- "Androgen Receptor"
  129. gbmFemaleToPathway[which(gbmFemaleToPathway$gene %in% immuneGenes), "pathway"] <- "Immune"
  130. gbmFemaleToPathway[which(gbmFemaleToPathway$gene %in% carbGenes), "pathway"] <- "Carbohydrate Metabolism"
  131. gbmFemaleToPathway[which(gbmFemaleToPathway$gene %in% ecmGenes), "pathway"] <- "Extracellular Matrix"
  132. gbmFemaleToPathway[which(gbmFemaleToPathway$gene %in% cancerGenes), "pathway"] <- "Targets of HIF1A"
  133. gbmFemaleToPathway[which(gbmFemaleToPathway$gene %in% hypoxiaGenes), "pathway"] <- "Hypoxia"
  134. gbmMaleToPathway <- gbmMaleSpecificBlobfish
  135. gbmMaleToPathway$pathway <- "placeholder"
  136. gbmMaleToPathway[which(gbmMaleToPathway$gene %in% mrnaGenes), "pathway"] <- "Splicing"
  137. gbmMaleToPathway[which(gbmMaleToPathway$gene %in% arGenes), "pathway"] <- "Androgen Receptor"
  138. gbmMaleToPathway[which(gbmMaleToPathway$gene %in% immuneGenes), "pathway"] <- "Immune"
  139. gbmMaleToPathway[which(gbmMaleToPathway$gene %in% carbGenes), "pathway"] <- "Carbohydrate Metabolism"
  140. gbmMaleToPathway[which(gbmMaleToPathway$gene %in% ecmGenes), "pathway"] <- "Extracellular Matrix"
  141. gbmMaleToPathway[which(gbmMaleToPathway$gene %in% cancerGenes), "pathway"] <- "Targets of HIF1A"
  142. gbmMaleToPathway[which(gbmMaleToPathway$gene %in% hypoxiaGenes), "pathway"] <- "Hypoxia"
  143. # Plot female.
  144. uniqueGenesFemale <- unique(gbmFemaleToPathway$pathway)
  145. geneColorMappingFemale <- data.frame(gene = uniqueGenesFemale, color = rep("gray", length(uniqueGenesFemale)))
  146. geneColorMappingFemale[which(uniqueGenesFemale == "Splicing"), "color"] <- mrnaColor
  147. geneColorMappingFemale[which(uniqueGenesFemale == "Androgen Receptor"), "color"] <- arColor
  148. geneColorMappingFemale[which(uniqueGenesFemale == "Immune"), "color"] <- immuneColor
  149. geneColorMappingFemale[which(uniqueGenesFemale == "Carbohydrate Metabolism"), "color"] <- carbColor
  150. geneColorMappingFemale[which(uniqueGenesFemale == "Extracellular Matrix"), "color"] <- ecmColor
  151. geneColorMappingFemale[which(uniqueGenesFemale == "Targets of HIF1A"), "color"] <- cancerColor
  152. geneColorMappingFemale[which(uniqueGenesFemale == "Hypoxia"), "color"] <- hypoxiaColor
  153. gbmFemaleEdgeNames <- paste(gbmFemaleToPathway$tf, gbmFemaleToPathway$pathway, sep = "_")
  154. gbmFemaleSimplified <- do.call(rbind, lapply(unique(gbmFemaleEdgeNames), function(edge){
  155. firstInstance <- which(gbmFemaleEdgeNames == edge)[1]
  156. print(firstInstance)
  157. return(data.frame(tf = gbmFemaleToPathway[firstInstance, "tf"], pathway = gbmFemaleToPathway[firstInstance, "pathway"]))
  158. }))
  159. colnames(gbmFemaleSimplified)[2] <- "gene"
  160. write.csv(gbmFemaleSimplified, paste0(sourceDir, "gbmFemaleSimplifiedBLOBFISH.csv"))
  161. PlotNetwork(gbmFemaleSimplified, geneColorMapping = geneColorMappingFemale,
  162. layoutBipartite = TRUE, nodeSize = 6, tfColor = "gray",
  163. vertexLabels = c(gbmFemaleSimplified[,2]))
  164. # Plot male.
  165. uniqueGenesMale <- unique(gbmMaleToPathway$pathway)
  166. geneColorMappingMale <- data.frame(gene = uniqueGenesMale, color = rep("gray", length(uniqueGenesMale)))
  167. geneColorMappingMale[which(uniqueGenesMale == "Splicing"), "color"] <- mrnaColor
  168. geneColorMappingMale[which(uniqueGenesMale == "Androgen Receptor"), "color"] <- arColor
  169. geneColorMappingMale[which(uniqueGenesMale == "Immune"), "color"] <- immuneColor
  170. geneColorMappingMale[which(uniqueGenesMale == "Carbohydrate Metabolism"), "color"] <- carbColor
  171. geneColorMappingMale[which(uniqueGenesMale == "Extracellular Matrix"), "color"] <- ecmColor
  172. geneColorMappingMale[which(uniqueGenesMale == "Targets of HIF1A"), "color"] <- cancerColor
  173. geneColorMappingMale[which(uniqueGenesMale == "Hypoxia"), "color"] <- hypoxiaColor
  174. gbmMaleEdgeNames <- paste(gbmMaleToPathway$tf, gbmMaleToPathway$pathway, sep = "_")
  175. gbmMaleSimplified <- do.call(rbind, lapply(unique(gbmMaleEdgeNames), function(edge){
  176. firstInstance <- which(gbmMaleEdgeNames == edge)[1]
  177. print(firstInstance)
  178. return(data.frame(tf = gbmMaleToPathway[firstInstance, "tf"], pathway = gbmMaleToPathway[firstInstance, "pathway"]))
  179. }))
  180. colnames(gbmMaleSimplified)[2] <- "gene"
  181. write.csv(gbmMaleSimplified, paste0(sourceDir, "gbmMaleSimplifiedBLOBFISH.csv"))
  182. PlotNetwork(gbmMaleSimplified, geneColorMapping = geneColorMappingMale,
  183. layoutBipartite = FALSE, nodeSize = 6, tfColor = "gray",
  184. vertexLabels = c(gbmMaleSimplified[,2]))
  185. # Obtain distributions.
  186. femaleDistrib <- table(gbmFemaleSimplified$gene) / length(unique(gbmFemaleBlobfish$tf))
  187. maleDistrib <- table(gbmMaleSimplified$gene) / length(unique(gbmMaleBlobfish$tf))
  188. distribDF <- data.frame(
  189. pathwayCategory = rep(names(femaleDistrib), 2),
  190. Sex = rep(c("female", "male"), each = length(femaleDistrib)),
  191. percentOfTFs = c(femaleDistrib, maleDistrib)
  192. )
  193. ggplot(distribDF, aes(x = pathwayCategory, y = percentOfTFs, fill = Sex)) +
  194. geom_col(position = "dodge") +
  195. labs(x = "Pathway Category", y = "Percent of Significant TFs Targeting Pathway Category", title = "Sex-Specific Pathway Targeting") +
  196. theme_minimal() +
  197. coord_flip() +
  198. scale_fill_manual(
  199. values = c("female" = rgb(red = 252 / 255, green = 182 / 255, blue = 195 / 255, alpha = 1),
  200. "male" = rgb(red = 189 / 255, green = 190 / 255, blue = 255 / 255, alpha = 1))
  201. )
  202. # Make an UpSet plot.
  203. library(ComplexHeatmap)
  204. gbmFemaleSimplifiedGraph <- igraph::graph_from_data_frame(gbmFemaleSimplified)
  205. gbmFemaleSimplifiedAdj <- igraph::as_adjacency_matrix(gbmFemaleSimplifiedGraph, sparse = FALSE,
  206. type = "upper")
  207. gbmFemaleSimplifiedAdjSub <- as.data.frame(gbmFemaleSimplifiedAdj[unique(gbmFemaleSimplified$tf),
  208. unique(gbmFemaleSimplified$gene)])
  209. gbmFemaleSimplifiedAdjPerc <- gbmFemaleSimplifiedAdjSub / nrow(gbmFemaleSimplifiedAdjSub)
  210. gbmMaleSimplifiedGraph <- igraph::graph_from_data_frame(gbmMaleSimplified)
  211. gbmMaleSimplifiedAdj <- igraph::as_adjacency_matrix(gbmMaleSimplifiedGraph, sparse = FALSE,
  212. type = "upper")
  213. gbmMaleSimplifiedAdjSub <- as.data.frame(gbmMaleSimplifiedAdj[unique(gbmMaleSimplified$tf),
  214. unique(gbmMaleSimplified$gene)])
  215. library(gridExtra)
  216. library(grid)
  217. # Set the UpSet plot intersections.
  218. setIntersections <- c("AndrogenReceptor&CarbohydrateMetabolism&ExtracellularMatrix&Hypoxia&Immune&Splicing",
  219. "AndrogenReceptor&CarbohydrateMetabolism&ExtracellularMatrix&Hypoxia&Immune&Splicing&TargetsofHIF1A",
  220. "AndrogenReceptor&CarbohydrateMetabolism&ExtracellularMatrix&Immune&Splicing",
  221. "AndrogenReceptor&CarbohydrateMetabolism&ExtracellularMatrix&Immune&Splicing&TargetsofHIF1A",
  222. "AndrogenReceptor&CarbohydrateMetabolism&Hypoxia&Immune&Splicing&TargetsofHIF1A",
  223. "AndrogenReceptor&CarbohydrateMetabolism&Immune&Splicing",
  224. "AndrogenReceptor&ExtracellularMatrix&Hypoxia&Immune&Splicing&TargetsofHIF1A",
  225. "AndrogenReceptor&Immune&Splicing&TargetsofHIF1A",
  226. "CarbohydrateMetabolism&ExtracellularMatrix",
  227. "CarbohydrateMetabolism&ExtracellularMatrix&Hypoxia&Immune&Splicing",
  228. "CarbohydrateMetabolism&ExtracellularMatrix&Hypoxia&Immune&Splicing&TargetsofHIF1A",
  229. "CarbohydrateMetabolism&ExtracellularMatrix&Hypoxia&Immune&TargetsofHIF1A",
  230. "CarbohydrateMetabolism&ExtracellularMatrix&Immune",
  231. "CarbohydrateMetabolism&ExtracellularMatrix&Immune&Splicing",
  232. "CarbohydrateMetabolism&ExtracellularMatrix&Immune&Splicing&TargetsofHIF1A",
  233. "CarbohydrateMetabolism&ExtracellularMatrix&Splicing",
  234. "CarbohydrateMetabolism&Hypoxia&Splicing&Immune&TargetsofHIF1A",
  235. "CarbohydrateMetabolism&Hypoxia&Splicing&Immune",
  236. "CarbohydrateMetabolism&Immune&Splicing",
  237. "CarbohydrateMetabolism&Immune&Splicing&TargetsofHIF1A",
  238. "CarbohydrateMetabolism&Immune&TargetsofHIF1A",
  239. "CarbohydrateMetabolism&Splicing",
  240. "ExtracellularMatrix&Hypoxia&Immune&Splicing&TargetsofHIF1A",
  241. "ExtracellularMatrix&Hypoxia&Immune&TargetsofHIF1A",
  242. "ExtracellularMatrix&Immune",
  243. "ExtracellularMatrix&Immune&Hypoxia",
  244. "ExtracellularMatrix&Immune&Hypoxia&Splicing",
  245. "ExtracellularMatrix&Immune&Splicing",
  246. "ExtracellularMatrix&Immune&Splicing&TargetsofHIF1A",
  247. "ExtracellularMatrix&Immune&TargetsofHIF1A",
  248. "Hypoxia&Immune",
  249. "Hypoxia&Immune&Splicing&TargetsofHIF1A",
  250. "Hypoxia&Immune&TargetsofHIF1A",
  251. "Hypoxia&Immune&Splicing",
  252. "Immune",
  253. "Immune&ExtracellularMatrix",
  254. "Immune&Hypoxia",
  255. "Immune&Splicing",
  256. "Immune&Splicing&TargetsofHIF1A",
  257. "Immune&TargetsofHIF1A",
  258. "Splicing")
  259. setIntersectionsBinary <- c("1111110", "1111111", "1110110", "1110111", "1101111",
  260. "1100110", "1011111", "1000111", "0110000", "0111110",
  261. "0111111", "0111101", "0110100", "0110110", "0110111",
  262. "0110010", "0101110", "0101111", "0100110", "0100111",
  263. "0100101", "0100010", "0011100", "0011110", "0011111",
  264. "0011101", "0010100", "0010110", "0010111", "0010101",
  265. "0001100", "0001110", "0001111", "0001001", "0000100",
  266. "0000110", "0000111", "0000101", "0000010")
  267. # Set up the matrices accordingly.
  268. gbmFemaleSimplifiedAdjSubMat <- as.matrix(gbmFemaleSimplifiedAdjSub)
  269. gbmMaleSimplifiedAdjSubMat <- as.matrix(gbmMaleSimplifiedAdjSub)
  270. mode(gbmFemaleSimplifiedAdjSubMat) <- "logical"
  271. mode(gbmMaleSimplifiedAdjSubMat) <- "logical"
  272. gbmFemaleSimplifiedAdjComb <- make_comb_mat(gbmFemaleSimplifiedAdjSubMat,
  273. mode = "distinct")
  274. gbmMaleSimplifiedAdjComb <- make_comb_mat(gbmMaleSimplifiedAdjSubMat,
  275. mode = "distinct")
  276. gbmFemaleSimplifiedAdjComb <- gbmFemaleSimplifiedAdjComb[sort(rownames(gbmFemaleSimplifiedAdjComb)),]
  277. gbmMaleSimplifiedAdjComb <- gbmMaleSimplifiedAdjComb[sort(rownames(gbmMaleSimplifiedAdjComb)),]
  278. gbmFemaleSimplifiedAdjComb <- gbmFemaleSimplifiedAdjComb[,setIntersectionsBinary]
  279. gbmMaleSimplifiedAdjComb <- gbmMaleSimplifiedAdjComb[,setIntersectionsBinary]
  280. # Print differences.
  281. femalePercentages <- attr(gbmFemaleSimplifiedAdjComb, "comb_size") / sum(attr(gbmFemaleSimplifiedAdjComb, "comb_size"))
  282. malePercentages <- attr(gbmMaleSimplifiedAdjComb, "comb_size") / sum(attr(gbmMaleSimplifiedAdjComb, "comb_size"))
  283. sexDiffs <- attr(gbmFemaleSimplifiedAdjComb, "comb_size") - attr(gbmMaleSimplifiedAdjComb, "comb_size")
  284. print(attr(gbmFemaleSimplifiedAdjComb, "dimnames")[[1]][which(sexDiffs > 100)])
  285. # Make plots.
  286. ylim_range <- c(0, 150)
  287. maleColor <- rgb(red = 189 / 255, green = 190 / 255,
  288. blue = 255 / 255)
  289. femaleColor <- rgb(red = 252 / 255, green = 182 / 255,
  290. blue = 195 / 255)
  291. maleColorSat <- rgb(red = 130 / 255, green = 141 / 255,
  292. blue = 255 / 255)
  293. femaleColorSat <- rgb(red = 255 / 255, green = 115 / 255,
  294. blue = 147 / 255)
  295. barsToHighlightFemales <- c("1111111", "0111111", "0110111", "0010111")
  296. barsToHighlightMales <- c("0111110", "0110110", "0011110", "0100110", "0010110", "0000110",
  297. "0000010")
  298. combColors <- rep("black", length(setIntersectionsBinary))
  299. combColors[which(setIntersectionsBinary %in% barsToHighlightFemales)] <- femaleColorSat
  300. combColors[which(setIntersectionsBinary %in% barsToHighlightMales)] <- maleColorSat
  301. taMale <- HeatmapAnnotation(
  302. "Co-Regulator Count" = anno_barplot(
  303. comb_size(gbmMaleSimplifiedAdjComb), # the bar heights
  304. ylim = ylim_range, # fix the y-axis range
  305. gp = gpar(fill = maleColor, col = NA), # bar color + remove border
  306. border = FALSE
  307. ),
  308. annotation_name_side = "left", # put label on left
  309. annotation_name_rot = 0,
  310. annotation_height = unit(4, "cm"),
  311. annotation_name_gp = gpar(fontface = "bold")
  312. )
  313. taFemale <- HeatmapAnnotation(
  314. "Co-Regulator Count" = anno_barplot(
  315. comb_size(gbmFemaleSimplifiedAdjComb), # the bar heights
  316. ylim = ylim_range, # fix the y-axis range
  317. gp = gpar(fill = femaleColor, col = NA), # bar color + remove border
  318. border = FALSE
  319. ),
  320. annotation_name_side = "left", # put label on left
  321. annotation_name_rot = 0,
  322. annotation_height = unit(4, "cm"),
  323. annotation_name_gp = gpar(fontface = "bold")
  324. )
  325. raMale <- HeatmapAnnotation(
  326. "Regulator Count" = anno_barplot(
  327. set_size(gbmMaleSimplifiedAdjComb), # bar lengths = set sizes
  328. border = FALSE,
  329. gp = gpar(fill = maleColor, col = NA)
  330. ),
  331. which = "row", # <- row annotation
  332. annotation_name_side = "bottom", # put label under x-axis
  333. annotation_name_rot = 0, # horizontal
  334. annotation_name_gp = gpar(fontface = "bold"),
  335. annotation_width = unit(3, "cm")
  336. )
  337. raFemale <- HeatmapAnnotation(
  338. "Regulator Count" = anno_barplot(
  339. set_size(gbmFemaleSimplifiedAdjComb), # bar lengths = set sizes
  340. border = FALSE,
  341. gp = gpar(fill = femaleColor, col = NA)
  342. ),
  343. which = "row", # <- row annotation
  344. annotation_name_side = "bottom", # put label under x-axis
  345. annotation_name_rot = 0, # horizontal
  346. annotation_name_gp = gpar(fontface = "bold"),
  347. annotation_width = unit(3, "cm")
  348. )
  349. grid.newpage()
  350. UpSet(gbmFemaleSimplifiedAdjComb, top_annotation = taFemale, right_annotation = raFemale,
  351. set_order = order(rownames(gbmFemaleSimplifiedAdjComb)),
  352. comb_col = combColors)
  353. gridFemale <- grid.grab()
  354. grid.newpage()
  355. UpSet(gbmMaleSimplifiedAdjComb, top_annotation = taMale, right_annotation = raMale,
  356. set_order = order(rownames(gbmFemaleSimplifiedAdjComb)),
  357. comb_col = combColors)
  358. gridMale <- grid.grab()
  359. grid.arrange(grobs = list(gridFemale, gridMale), nrow = 2) # two rows

RunBLOBFISHAllTFS.R at commit 10f7c28, no license · at the source

Overview

Authors: Tomisin Adebari1, Viola Fanfani2, Marouen Ben Guebila2,3, Derrick DeConti2, Katherine Hoff Shutta2, Camila M Lopes-Ramos2,4,5, Lauren Hsu2, Dawn L DeMeo4,5, John Quackenbush2,4, Tara Eicher2
  1. Department of Biomedical Engineering, Johns Hopkins University, 3400 N. Charles Street, Baltimore, MD 21218 USA
  2. Department of Biostatistics, Harvard T.H. Chan School of Public Health, Harvard University, 677 Huntington Ave, Boston, MA 02115 USA
  3. Department of Medical Oncology, Dana-Farber Cancer Institute, Boston, MA USA
  4. Channing Division of Network Medicine, Brigham and Women’s Hospital, 181 Longwood Ave, Boston, MA 02115 USA
  5. Department of Medicine, Harvard Medical School, 25 Shattuck Street, Boston, MA 02115 USA
Institutions: Johns Hopkins University (United States); Harvard University (United States); Dana-Farber Cancer Institute (United States); Brigham and Women's Hospital (United States)
Journal: Biology of sex differences, volume 17, issue 1, article 134
Dates: received 14 January 2026; accepted 13 May 2026; published online 21 May 2026
Type: Research article · Language: English
License: CC BY
Identifiers: DOI 10.1186/s13293-026-00927-4 · PMID 42169093 · PMCID PMC13371200 · OpenAlex W7161954154
Open access: gold, a free copy (OpenAlex)
Status: code verified
Categories: human (organism), other condition (population), cellular / molecular (subfield)
Methods: Statistics
Keywords: Glioblastoma, Low-grade glioma, Gene regulatory network, Transcription factor, Gene expression, Hypoxia, Treatment resistance
MeSH: Brain Neoplasms*, Drug Resistance, Neoplasm*, Gene Regulatory Networks*, Glioblastoma*, Sex Characteristics*, Female, Gene Expression Regulation, Neoplastic, Humans, Male (* major topic)
Topic: Glioma Diagnosis and Treatment (Genetics, Medicine), according to OpenAlex
Funding: NHLBI NIH HHS (K01HL166376, K25 HL175222, K24 HL171900, K01 HL166376, K25HL175222, K24HL171900); NCI NIH HHS (K25CA297149, U24CA231846, R35CA220523, U24 CA231846, K25 CA297149, R35 CA220523); National Cancer Institute (U24CA231846, K25CA297149, R35CA220523); NIGMS NIH HHS (T32 GM135117, T32GM135117); National Heart Lung and Blood Institute (K24HL171900, K25HL175222, K01HL166376); National Human Genome Research Institute (R01HG011393); Du Bois Scholars Program; National Institute of General Medical Sciences (T32GM135117); NHGRI NIH HHS (R01 HG011393, R01HG011393)
Citations: not cited yet (Europe PMC); 73 references in the paper

Abstract

Background: Glioblastoma or GBM (IDH wild-type) is an aggressive brain tumor that is notoriously resistant to treatment, with an average survival time of 17 months. While the overall outcome is poor for both males and females, sex differences in GBM incidence and outcome suggest sex-specific biological mechanisms underlie tumorigenesis. In contrast, low-grade glioma (LGG) is a less aggressive brain tumor that tends to have a better prognosis and a longer survival time.

Methods: To understand mechanisms contributing to treatment resistance in GBM in both males and females, we inferred gene regulatory networks (GRNs) for males and females with LGG and GBM using RNA-seq data from The Cancer Genome Atlas (TCGA). We analyzed these to identify both sex-specific and sex-stratified gene regulation in GBM. We then validated these results on a separate cohort, the Repository of Molecular BRAin Neoplasia DaTa (REMBRANDT).

Results: We found sex-specific differential targeting of several pathways, including hypoxia and related pathways (carbohydrate metabolism, innate immune processes, and extracellular matrix pathways) known to be dysregulated in hypoxic conditions, in GBM when compared against LGG. After further evaluating the co-regulation of sex-specific pathways in GBM, we found that females exhibited a greater degree of co-regulation between hypoxia and hypoxia-associated transcriptional programs with the aforementioned downstream pathways than did males.

Conclusions: Our results suggest that dysregulation of hypoxia-related pathways in GBM plays a female-specific role in resistance to treatment and overall outcomes.

Supplementary Information: The online version contains supplementary material available at 10.1186/s13293-026-00927-4.

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 12 matches between paragraphs and lines of code.

QuackenbushLab/Adebari_Glioma_scripts

License: none: the authors keep all their rights
State: the link answers, verified on 28 September 2026
Evidence: files inventoried
Commit: 10f7c2853b53b7d5080ea248d69f9b99b84a5927, 29 April 2026
Languages: R (11), Python (4)
Size: 21 files, 15 scripts
Software Heritage: not archived
Found in: “Data availability”
Holds: README
Not found: license file, CITATION.cff, environment file, tests, continuous integration, documentation
Tools: igraph (4 files), pandas (4 files), ComplexHeatmap (3 files), ggplot2 (1 file), Matplotlib (1 file), reshape2 (1 file)
Availability: 1 check, the latest on 28 September 2026: the link answers
  • 28 September 2026: the link answers
16 files

netZoo/netZooPy

License: GPL-3.0
State: the link answers, verified on 28 September 2026
Evidence: files inventoried
Commit: 60bcaf5ac69ac8f002db5fc6b1b10cbc101ee822, 9 January 2026
Languages: Python (60), Jupyter (6), Shell (1)
Size: 185 files, 67 scripts
Software Heritage: not archived
Found in: the text, “Gene regulatory network inference”
Holds: README, license file, environment (requirements.txt, setup.cfg, setup.py, conda/conda_build_config.yaml, docs/requirements.txt, .github/workflows/conda-publish-manual.yml, .github/workflows/conda-publish.yml), tests, continuous integration, documentation, 6 notebooks
Not found: CITATION.cff
Tools: NumPy (36 files), pandas (32 files), SciPy (13 files), Matplotlib (8 files), CuPy (6 files), NetworkX (6 files), igraph (2 files), PyTorch (2 files), statsmodels (2 files), h5py (1 file)
Availability: 1 check, the latest on 28 September 2026: the link answers
  • 28 September 2026: the link answers
69 files

netZoo/netZooR

License: GPL-3.0
State: the link answers, verified on 28 September 2026
Evidence: files inventoried
Commit: 47cdd73a6eefa969b02dd33f04f9306d2a8785d9, 24 July 2026
Languages: R (58), JavaScript (41), Python (2)
Size: 608 files, 101 scripts
Software Heritage: not archived
Found in: the text, “Transcription factor activity between LGG and GB”
Holds: README, license file, environment (DESCRIPTION), tests, continuous integration, documentation, 12 notebooks
Not found: CITATION.cff
Tools: reshape2 (8 files), igraph (7 files), ggplot2 (5 files), reticulate (4 files), data.table (3 files), tidyverse (3 files), CuPy (2 files), limma (2 files), NumPy (2 files), pandas (2 files), SciPy (2 files), edgeR (1 file), Matplotlib (1 file), NetworkX (1 file), Stan (1 file)
Availability: 1 check, the latest on 28 September 2026: the link answers
  • 28 September 2026: the link answers
103 files

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

Tracing map

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

What the map holds:

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

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

Data

Datasets cited

Data availability

Gene expression data for GBM and LGG are accessible through Zenodo (https://zenodo.org/records/18226833), the protein-protein interaction data used for GRN inference are available from the GRAND database (https://granddb.s3.amazonaws.com/tissues/ppi/tissues_ppi.txt), the curated gene set file used for pathway analysis is available from MSigDB (https://www.gsea-msigdb.org/gsea/msigdb/collections.jsp), and the basic gene annotation file used to subset protein coding genes is available from GENCODE (https://www.gencodegenes.org/human/). Male-specific and female-specific motif binding data, clinical data for GBM and LGG, and code to replicate analysis are available from GitHub (https://github.com/QuackenbushLab/Adebari_Glioma_scripts).

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, 28 September 2026: the first record

Recorded: type, language, journal, volume, issue, pages, dates, 10 authors, 7 keywords, 9 MeSH terms, 9 funders, 68 references.

Cite

This paper

Adebari, T., Fanfani, V., Guebila, M. B., DeConti, D., Shutta, K. H., Lopes-Ramos, C. M., Hsu, L., DeMeo, D. L., Quackenbush, J., & Eicher, T. (2026). Gene regulatory network analysis identifies dysregulation of hypoxia pathways as contributing to glioblastoma treatment resistance in females. Biology of sex differences, 17(1), 134. https://doi.org/10.1186/s13293-026-00927-4

BibTeX

@article{adebari2026gene,
author = {Adebari, Tomisin and Fanfani, Viola and Guebila, Marouen Ben and DeConti, Derrick and Shutta, Katherine Hoff and Lopes-Ramos, Camila M and Hsu, Lauren and DeMeo, Dawn L and Quackenbush, John and Eicher, Tara},
title = {{Gene regulatory network analysis identifies dysregulation of hypoxia pathways as contributing to glioblastoma treatment resistance in females}},
journal = {Biology of sex differences},
year = {2026},
month = may,
volume = {17},
number = {1},
pages = {134},
publisher = {BMC},
issn = {2042-6410},
doi = {10.1186/s13293-026-00927-4},
url = {https://doi.org/10.1186/s13293-026-00927-4},
pmid = {42169093},
pmcid = {PMC13371200}
}

RIS

TY - JOUR
AU - Adebari, Tomisin
AU - Fanfani, Viola
AU - Guebila, Marouen Ben
AU - DeConti, Derrick
AU - Shutta, Katherine Hoff
AU - Lopes-Ramos, Camila M
AU - Hsu, Lauren
AU - DeMeo, Dawn L
AU - Quackenbush, John
AU - Eicher, Tara
TI - Gene regulatory network analysis identifies dysregulation of hypoxia pathways as contributing to glioblastoma treatment resistance in females
T2 - Biology of sex differences
J2 - Biol Sex Differ
PY - 2026
DA - 2026/05/21
VL - 17
IS - 1
SP - 134
SN - 2042-6410
PB - BMC
DO - 10.1186/s13293-026-00927-4
UR - https://doi.org/10.1186/s13293-026-00927-4
LA - en
ER -

CSL-JSON

{
"id": "10.1186/s13293-026-00927-4",
"type": "article-journal",
"title": "Gene regulatory network analysis identifies dysregulation of hypoxia pathways as contributing to glioblastoma treatment resistance in females",
"container-title": "Biology of sex differences",
"author": [
{
"family": "Adebari",
"given": "Tomisin"
},
{
"family": "Fanfani",
"given": "Viola"
},
{
"family": "Guebila",
"given": "Marouen Ben"
},
{
"family": "DeConti",
"given": "Derrick"
},
{
"family": "Shutta",
"given": "Katherine Hoff"
},
{
"family": "Lopes-Ramos",
"given": "Camila M"
},
{
"family": "Hsu",
"given": "Lauren"
},
{
"family": "DeMeo",
"given": "Dawn L"
},
{
"family": "Quackenbush",
"given": "John"
},
{
"family": "Eicher",
"given": "Tara"
}
],
"container-title-short": "Biol Sex Differ",
"volume": "17",
"issue": "1",
"page": "134",
"DOI": "10.1186/s13293-026-00927-4",
"PMID": "42169093",
"PMCID": "PMC13371200",
"ISSN": "2042-6410",
"publisher": "BMC",
"URL": "https://doi.org/10.1186/s13293-026-00927-4",
"language": "en",
"issued": {
"date-parts": [
[
2026,
5,
21
]
]
}
}

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.1038/s42003-026-10957-8 [code]
Brain defence by the extracellular matrix protein Cochlin.
Journal: Communications biology
In common: CuPy, Stan, edgeR, 15 other tools, cellular / molecular
[2] doi:10.1016/j.xcrm.2026.102766 [code]
A longitudinal single-cell and spatial multiomic atlas of pediatric high-grade glioma.
Journal: Cell reports. Medicine
In common: edgeR, limma, igraph, 11 other tools, other condition, cellular / molecular, 2 references
[3] doi:10.1186/s12967-026-08266-z [code]
Single-cell multi-omic integration analysis prioritizes druggable genes and reveals cell-type-specific causal effects in glioblastomagenesis.
Journal: Journal of translational medicine
In common: edgeR, reticulate, limma, 6 other tools, other condition, cellular / molecular, 4 references
[4] 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: edgeR, reticulate, limma, 11 other tools, other condition
[5] doi:10.1038/s41467-026-76675-1 [code]
Long-read proteogenomic atlas of human neuronal differentiation reveals isoform diversity informing neurodevelopmental risk mechanisms.
Journal: Nature communications
In common: edgeR, reticulate, limma, 11 other tools
[6] doi:10.1016/j.cpblue.2026.100007 [code]
An integrated single-cell and spatial proteotranscriptomics atlas of fibroblast-driven immunoregulation within the human adult oral cavity.
Journal: Cell press blue
In common: edgeR, reticulate, limma, 11 other tools
[7] doi:10.1073/pnas.2523130123 [code]
FABP7 controls radial glial scaffold stability during human cortical development.
Journal: Proceedings of the National Academy of Sciences of the United States of America
In common: edgeR, reticulate, limma, 10 other tools
[8] doi:10.1016/j.xcrm.2026.102651 [code]
Integrative CSF profiling identifies disease-specific immune responses in leptomeningeal disease.
Journal: Cell reports. Medicine
In common: reticulate, igraph, ComplexHeatmap, 10 other tools, other condition, cellular / molecular
[9] doi:10.3389/fnmol.2026.1844705 [code]
Risperidone regulates the expression of schizophrenia-related genes in the forebrain of adult male mice.
Journal: Frontiers in molecular neuroscience
In common: edgeR, limma, igraph, 10 other tools, cellular / molecular
[10] doi:10.1371/journal.pcbi.1014327 [code]
Supervised deep learning with gene functional annotation for cell classification.
Journal: PLoS computational biology
In common: reticulate, limma, reshape2, 10 other tools, other condition, cellular / molecular

Contribute

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

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

Request its removal

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

Discussion, reproductions, activity

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

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

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