Neuron-supporting glial cells called astrocytes are the source of the extremely aggressive brain cancer known as glioblastoma. Fast development and the ability to penetrate and kill nearby healthy brain tissue are two of this cancer’s well-known traits. Although it is more commonly diagnosed in older persons, glioblastoma can occur at any age.
The molecular and genetic basis of glioblastoma must be understood because of the disease’s severe nature and the difficulties in treating it. Finding highly elevated and downregulated genes will be the goal of this project’s analysis of gene expression data from glioblastoma samples. Our objective is to identify critical pathways contributing to the advancement of glioblastoma by functional enrichment analysis. This could facilitate the creation of tailored therapeutics and enhanced approaches to management.
### Load Necessary Libraries
if (!requireNamespace("BiocManager", quietly = TRUE)) {
install.packages("BiocManager")
}
BiocManager::install("DESeq2")
## Bioconductor version 3.19 (BiocManager 1.30.25), R 4.4.1 (2024-06-14 ucrt)
## Warning: package(s) not installed when version(s) same as or greater than current; use
## `force = TRUE` to re-install: 'DESeq2'
## Installation paths not writeable, unable to update packages
## path: C:/Program Files/R/R-4.4.1/library
## packages:
## boot, foreign, MASS, nlme, survival
## Old packages: 'Deriv', 'digest', 'httr2', 'lpSolve', 'ps', 'ragg',
## 'RcppArmadillo', 'reactR', 'tinytex', 'xfun', 'yaml'
# Load the libraries
library(readr)
library(gplots)
##
## Attaching package: 'gplots'
## The following object is masked from 'package:stats':
##
## lowess
library(ggplot2)
library(dplyr)
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
library(Amelia)
## Loading required package: Rcpp
## ##
## ## Amelia II: Multiple Imputation
## ## (Version 1.8.2, built: 2024-04-10)
## ## Copyright (C) 2005-2024 James Honaker, Gary King and Matthew Blackwell
## ## Refer to http://gking.harvard.edu/amelia/ for more information
## ##
library(DESeq2)
## Loading required package: S4Vectors
## Loading required package: stats4
## Loading required package: BiocGenerics
##
## Attaching package: 'BiocGenerics'
## The following objects are masked from 'package:dplyr':
##
## combine, intersect, setdiff, union
## The following objects are masked from 'package:stats':
##
## IQR, mad, sd, var, xtabs
## The following objects are masked from 'package:base':
##
## anyDuplicated, aperm, append, as.data.frame, basename, cbind,
## colnames, dirname, do.call, duplicated, eval, evalq, Filter, Find,
## get, grep, grepl, intersect, is.unsorted, lapply, Map, mapply,
## match, mget, order, paste, pmax, pmax.int, pmin, pmin.int,
## Position, rank, rbind, Reduce, rownames, sapply, setdiff, table,
## tapply, union, unique, unsplit, which.max, which.min
##
## Attaching package: 'S4Vectors'
## The following objects are masked from 'package:dplyr':
##
## first, rename
## The following object is masked from 'package:gplots':
##
## space
## The following object is masked from 'package:utils':
##
## findMatches
## The following objects are masked from 'package:base':
##
## expand.grid, I, unname
## Loading required package: IRanges
##
## Attaching package: 'IRanges'
## The following objects are masked from 'package:dplyr':
##
## collapse, desc, slice
## The following object is masked from 'package:grDevices':
##
## windows
## Loading required package: GenomicRanges
## Loading required package: GenomeInfoDb
## Loading required package: SummarizedExperiment
## Loading required package: MatrixGenerics
## Loading required package: matrixStats
##
## Attaching package: 'matrixStats'
## The following object is masked from 'package:dplyr':
##
## count
##
## Attaching package: 'MatrixGenerics'
## The following objects are masked from 'package:matrixStats':
##
## colAlls, colAnyNAs, colAnys, colAvgsPerRowSet, colCollapse,
## colCounts, colCummaxs, colCummins, colCumprods, colCumsums,
## colDiffs, colIQRDiffs, colIQRs, colLogSumExps, colMadDiffs,
## colMads, colMaxs, colMeans2, colMedians, colMins, colOrderStats,
## colProds, colQuantiles, colRanges, colRanks, colSdDiffs, colSds,
## colSums2, colTabulates, colVarDiffs, colVars, colWeightedMads,
## colWeightedMeans, colWeightedMedians, colWeightedSds,
## colWeightedVars, rowAlls, rowAnyNAs, rowAnys, rowAvgsPerColSet,
## rowCollapse, rowCounts, rowCummaxs, rowCummins, rowCumprods,
## rowCumsums, rowDiffs, rowIQRDiffs, rowIQRs, rowLogSumExps,
## rowMadDiffs, rowMads, rowMaxs, rowMeans2, rowMedians, rowMins,
## rowOrderStats, rowProds, rowQuantiles, rowRanges, rowRanks,
## rowSdDiffs, rowSds, rowSums2, rowTabulates, rowVarDiffs, rowVars,
## rowWeightedMads, rowWeightedMeans, rowWeightedMedians,
## rowWeightedSds, rowWeightedVars
## Loading required package: Biobase
## Welcome to Bioconductor
##
## Vignettes contain introductory material; view with
## 'browseVignettes()'. To cite Bioconductor, see
## 'citation("Biobase")', and for packages 'citation("pkgname")'.
##
## Attaching package: 'Biobase'
## The following object is masked from 'package:MatrixGenerics':
##
## rowMedians
## The following objects are masked from 'package:matrixStats':
##
## anyMissing, rowMedians
library(gplots)
Read and Prepare the Data set
# Read in the data set
Glioblastoma_data <- read.csv("C:/Users/user/Desktop/Hackbio/Hackiobio/glioblastoma_data.csv")
# View the data
head(Glioblastoma_data)
## ...1 TCGA.19.4065.02A.11R.2005.01 TCGA.19.0957.02A.11R.2005.01
## 1 ENSG00000272398 763 4526
## 2 ENSG00000135439 2759 8384
## 3 ENSG00000130348 939 850
## 4 ENSG00000198719 231 1266
## 5 ENSG00000169429 540 512
## 6 ENSG00000171608 1282 720
## TCGA.06.0152.02A.01R.2005.01 TCGA.14.1402.02A.01R.2005.01
## 1 683 1820
## 2 2763 294
## 3 1250 1398
## 4 817 459
## 5 655 2891
## 6 1694 264
## TCGA.14.0736.02A.01R.2005.01 TCGA.06.5410.01A.01R.1849.01
## 1 3113 284
## 2 715 819
## 3 519 982
## 4 114 305
## 5 1194 41877
## 6 342 2286
## TCGA.19.5960.01A.11R.1850.01 TCGA.14.0781.01B.01R.1849.01
## 1 491251 949
## 2 83504 771
## 3 59301 1060
## 4 165404 337
## 5 135 7248
## 6 413 1181
## TCGA.02.2483.01A.01R.1849.01 TCGA.06.2570.01A.01R.1849.01
## 1 22400 9955
## 2 1504 21358
## 3 1553 1716
## 4 5404 4069
## 5 1911 3736
## 6 31702 1190
tail(Glioblastoma_data)
## ...1 TCGA.19.4065.02A.11R.2005.01 TCGA.19.0957.02A.11R.2005.01
## 577 ENSG00000135679 2720 139511
## 578 ENSG00000132432 4399 2629
## 579 ENSG00000163359 145767 2658
## 580 ENSG00000130635 178000 2292
## 581 ENSG00000240583 2640 71274
## 582 ENSG00000108821 688102 5620
## TCGA.06.0152.02A.01R.2005.01 TCGA.14.1402.02A.01R.2005.01
## 577 4017 3366
## 578 62671 73380
## 579 4185 540
## 580 7071 2128
## 581 5641 22766
## 582 29933 2755
## TCGA.14.0736.02A.01R.2005.01 TCGA.06.5410.01A.01R.1849.01
## 577 1690 4553
## 578 11773 3645
## 579 410 4167
## 580 248 5669
## 581 168871 8446
## 582 2169 27512
## TCGA.19.5960.01A.11R.1850.01 TCGA.14.0781.01B.01R.1849.01
## 577 1723 5375
## 578 2468 6383
## 579 328 3475
## 580 859 9816
## 581 27033 11259
## 582 1229 31020
## TCGA.02.2483.01A.01R.1849.01 TCGA.06.2570.01A.01R.1849.01
## 577 3569 3093
## 578 5134 2166
## 579 1991 640
## 580 3033 962
## 581 6072 7705
## 582 13036 5623
str(Glioblastoma_data)
## 'data.frame': 582 obs. of 11 variables:
## $ ...1 : chr "ENSG00000272398" "ENSG00000135439" "ENSG00000130348" "ENSG00000198719" ...
## $ TCGA.19.4065.02A.11R.2005.01: int 763 2759 939 231 540 1282 647 377 764 188 ...
## $ TCGA.19.0957.02A.11R.2005.01: int 4526 8384 850 1266 512 720 645 1211 597 1536 ...
## $ TCGA.06.0152.02A.01R.2005.01: int 683 2763 1250 817 655 1694 1065 186 606 509 ...
## $ TCGA.14.1402.02A.01R.2005.01: int 1820 294 1398 459 2891 264 879 124 695 311 ...
## $ TCGA.14.0736.02A.01R.2005.01: int 3113 715 519 114 1194 342 476 1465 312 112 ...
## $ TCGA.06.5410.01A.01R.1849.01: int 284 819 982 305 41877 2286 795 1030 613 253 ...
## $ TCGA.19.5960.01A.11R.1850.01: int 491251 83504 59301 165404 135 413 42065 1582 24579 486 ...
## $ TCGA.14.0781.01B.01R.1849.01: int 949 771 1060 337 7248 1181 1098 1454 821 79 ...
## $ TCGA.02.2483.01A.01R.1849.01: int 22400 1504 1553 5404 1911 31702 907 13392 851 19548 ...
## $ TCGA.06.2570.01A.01R.1849.01: int 9955 21358 1716 4069 3736 1190 845 35646 703 1115 ...
summary(Glioblastoma_data)
## ...1 TCGA.19.4065.02A.11R.2005.01 TCGA.19.0957.02A.11R.2005.01
## Length:582 Min. : 0.0 Min. : 0.0
## Class :character 1st Qu.: 1.0 1st Qu.: 1.0
## Mode :character Median : 7.5 Median : 6.0
## Mean : 2119.7 Mean : 809.1
## 3rd Qu.: 64.8 3rd Qu.: 46.0
## Max. :688102.0 Max. :139511.0
## TCGA.06.0152.02A.01R.2005.01 TCGA.14.1402.02A.01R.2005.01
## Min. : 0.00 Min. : 0.00
## 1st Qu.: 1.00 1st Qu.: 1.00
## Median : 5.00 Median : 8.50
## Mean : 484.93 Mean : 406.76
## 3rd Qu.: 27.75 3rd Qu.: 47.75
## Max. :77150.00 Max. :73380.00
## TCGA.14.0736.02A.01R.2005.01 TCGA.06.5410.01A.01R.1849.01
## Min. : 0 Min. : 0.0
## 1st Qu.: 3 1st Qu.: 1.0
## Median : 27 Median : 6.0
## Mean : 1202 Mean : 381.1
## 3rd Qu.: 172 3rd Qu.: 38.0
## Max. :168871 Max. :41877.0
## TCGA.19.5960.01A.11R.1850.01 TCGA.14.0781.01B.01R.1849.01
## Min. : 0 Min. : 0.0
## 1st Qu.: 0 1st Qu.: 1.0
## Median : 3 Median : 4.0
## Mean : 1732 Mean : 247.7
## 3rd Qu.: 27 3rd Qu.: 24.0
## Max. :491251 Max. :31020.0
## TCGA.02.2483.01A.01R.1849.01 TCGA.06.2570.01A.01R.1849.01
## Min. : 0.00 Min. : 0.0
## 1st Qu.: 0.25 1st Qu.: 0.0
## Median : 4.00 Median : 3.0
## Mean : 360.45 Mean : 303.8
## 3rd Qu.: 28.75 3rd Qu.: 23.0
## Max. :31702.00 Max. :35646.0
# Convert data to a data frame
Glioblastoma_data <- as.data.frame(Glioblastoma_data)
# Set rownames to gene identifiers
rownames(Glioblastoma_data) <- Glioblastoma_data[, 1]
Glioblastoma_data <- Glioblastoma_data[, -1] # Remove the first column which is now the rownames
# Transpose the data to match DESeq2 format
Glioblastoma_data_TRAN <- t(Glioblastoma_data)
# Check for missing data in the glioblastoma_data dataset
missmap(Glioblastoma_data)
Create Sample Metadata
# Create the data frame for colData
Glioblastoma_Info <- data.frame(row.names = rownames(Glioblastoma_data_TRAN))
# Assign tissue types based on the barcode
Glioblastoma_Info$tissue_type <- sapply(rownames(Glioblastoma_Info), function(barcode) {
Gene_type <- substr(barcode, 14, 15)
switch(Gene_type,
"01" = "Solid Tissue Normal",
"02" = "Primary Tumor",
"06" = "Metastatic",
"11" = "Solid Tissue Normal",
"12" = "Primary Blood Derived Cancer",
"14" = "Primary Blood Derived Cancer",
"Unknown")
})
# Display the first few rows of the data frame
head(Glioblastoma_Info)
## tissue_type
## TCGA.19.4065.02A.11R.2005.01 Primary Tumor
## TCGA.19.0957.02A.11R.2005.01 Primary Tumor
## TCGA.06.0152.02A.01R.2005.01 Primary Tumor
## TCGA.14.1402.02A.01R.2005.01 Primary Tumor
## TCGA.14.0736.02A.01R.2005.01 Primary Tumor
## TCGA.06.5410.01A.01R.1849.01 Solid Tissue Normal
# Check if rownames in Glioblastoma_Info match the column names in Glioblastoma_data
all(rownames(Glioblastoma_Info) %in% colnames(Glioblastoma_data )) # Should return TRUE
## [1] TRUE
all(rownames(Glioblastoma_Info) == colnames(Glioblastoma_data )) # Should return TRUE
## [1] TRUE
# Rounding the data for DESeq2
Glioblastoma_data <- round(Glioblastoma_data)
# Create DESeq2 dataset
dds <- DESeqDataSetFromMatrix(countData = Glioblastoma_data, colData = Glioblastoma_Info, design = ~tissue_type)
## converting counts to integer mode
## Warning in DESeqDataSet(se, design = design, ignoreRank): some variables in
## design formula are characters, converting to factors
## Note: levels of factors in the design contain characters other than
## letters, numbers, '_' and '.'. It is recommended (but not required) to use
## only letters, numbers, and delimiters '_' or '.', as these are safe characters
## for column names in R. [This is a message, not a warning or an error]
# Filter low count genes
keep <- rowSums(counts(dds)) >= 10
dds <- dds[keep, ]
# Relevel the reference group for comparison
dds$tissue_type <- relevel(dds$tissue_type, ref = "Solid Tissue Normal")
# Run DESeq analysis
dds <- DESeq(dds)
## estimating size factors
## Note: levels of factors in the design contain characters other than
## letters, numbers, '_' and '.'. It is recommended (but not required) to use
## only letters, numbers, and delimiters '_' or '.', as these are safe characters
## for column names in R. [This is a message, not a warning or an error]
## estimating dispersions
## gene-wise dispersion estimates
## mean-dispersion relationship
## Note: levels of factors in the design contain characters other than
## letters, numbers, '_' and '.'. It is recommended (but not required) to use
## only letters, numbers, and delimiters '_' or '.', as these are safe characters
## for column names in R. [This is a message, not a warning or an error]
## final dispersion estimates
## fitting model and testing
# Extract results
Res <- results(dds)
Res <- results(dds, alpha = 0.05) # Apply p-value threshold
summary(Res)
##
## out of 582 with nonzero total read count
## adjusted p-value < 0.05
## LFC > 0 (up) : 25, 4.3%
## LFC < 0 (down) : 78, 13%
## outliers [1] : 261, 45%
## low counts [2] : 43, 7.4%
## (mean count < 5)
## [1] see 'cooksCutoff' argument of ?results
## [2] see 'independentFiltering' argument of ?results
# Apply adjusted p-value cutoff (alpha = 0.05)
Res0.01 <- results(dds, alpha = 0.05)
# Filter for upregulated and downregulated genes (log2 fold change threshold of 2)
Res_filtered <- subset(Res0.01, log2FoldChange > 2 | log2FoldChange < -2)
# View summary of filtered results
summary(Res_filtered)
##
## out of 454 with nonzero total read count
## adjusted p-value < 0.05
## LFC > 0 (up) : 25, 5.5%
## LFC < 0 (down) : 78, 17%
## outliers [1] : 229, 50%
## low counts [2] : 41, 9%
## (mean count < 5)
## [1] see 'cooksCutoff' argument of ?results
## [2] see 'independentFiltering' argument of ?results
# Separate upregulated and downregulated genes
Upregulated <- Res_filtered[Res_filtered$log2FoldChange > 2, ]
Downregulated <- Res_filtered[Res_filtered$log2FoldChange < -2, ]
# Save upregulated genes to a CSV file
write.csv(Upregulated, file = "Upregulated_genes2.csv", row.names = TRUE)
# Save downregulated genes to a CSV file
write.csv(Downregulated, file = "Downregulated_genes2.csv", row.names = TRUE)
The Plot function creates a scatter plot of log fold change vs. negative log of p-values. - Points are colored red if the p-value is less than 0.05, indicating statistical significance. - A horizontal blue dashed line is added to indicate the significance threshold.
Prepare Gene Lists for Functional Enrichment
# Extract the rownames (gene names) of the upregulated genes
Upregulated_genes <- rownames(Upregulated)
# Save the upregulated gene names to a CSV file for functional enrichment
write.csv(Upregulated_genes, file = "Upregulated_genes_list.csv", row.names = FALSE)
# Extract the rownames (gene names) of the downregulated genes
Downregulated_genes <- rownames(Downregulated)
# Save the downregulated gene names to a CSV file for functional enrichment
write.csv(Downregulated_genes, file = "Downregulated_genes_list.csv", row.names = FALSE)
Select 20 UPregulated Genes and 20 Downregulated Genes
# Separate upregulated and downregulated genes
Upregulated_2<- Res_filtered[Res_filtered$log2FoldChange > 2, ]
Downregulated_2<- Res_filtered[Res_filtered$log2FoldChange < -2, ]
# Sort upregulated and downregulated genes by their log2FoldChange
sorted_upregulated <- Upregulated[order(-Upregulated$log2FoldChange), ] # Sort by decreasing log2FoldChange
sorted_downregulated <- Downregulated[order(Downregulated$log2FoldChange), ] # Sort by increasing log2FoldChange
# Get the top 20 upregulated and downregulated genes
top_20_upregulated <- head(sorted_upregulated, 20)
top_20_downregulated <- head(sorted_downregulated, 20)
# View the top 10 upregulated and downregulated genes
top_20_upregulated
## log2 fold change (MLE): tissue type Primary.Tumor vs Solid.Tissue.Normal
## Wald test p-value: tissue type Primary.Tumor vs Solid.Tissue.Normal
## DataFrame with 20 rows and 6 columns
## baseMean log2FoldChange lfcSE stat pvalue
## <numeric> <numeric> <numeric> <numeric> <numeric>
## ENSG00000198573 26.5725 21.11743 2.48464 8.49918 NA
## ENSG00000169550 14.2660 20.80701 2.68386 7.75265 NA
## ENSG00000227234 106.9928 9.59369 2.56930 3.73396 NA
## ENSG00000231317 71.2125 8.88317 2.11578 4.19853 NA
## ENSG00000211639 61.3815 8.78321 2.30742 3.80651 NA
## ... ... ... ... ... ...
## ENSG00000250993 6.19091 5.51464 2.83965 1.94201 NA
## ENSG00000155495 125.79889 5.42014 1.81952 2.97889 NA
## ENSG00000272763 45.08340 5.39870 1.74348 3.09651 NA
## ENSG00000247345 72.80374 5.39808 1.88181 2.86855 NA
## ENSG00000163646 8.65058 5.39674 2.42496 2.22549 NA
## padj
## <numeric>
## ENSG00000198573 NA
## ENSG00000169550 NA
## ENSG00000227234 NA
## ENSG00000231317 NA
## ENSG00000211639 NA
## ... ...
## ENSG00000250993 NA
## ENSG00000155495 NA
## ENSG00000272763 NA
## ENSG00000247345 NA
## ENSG00000163646 NA
top_20_downregulated
## log2 fold change (MLE): tissue type Primary.Tumor vs Solid.Tissue.Normal
## Wald test p-value: tissue type Primary.Tumor vs Solid.Tissue.Normal
## DataFrame with 20 rows and 6 columns
## baseMean log2FoldChange lfcSE stat pvalue
## <numeric> <numeric> <numeric> <numeric> <numeric>
## ENSG00000257288 27.3341 -22.98761 2.44822 -9.38950 NA
## ENSG00000233941 56.4191 -22.65230 2.62128 -8.64170 NA
## ENSG00000257541 12.6726 -21.94458 2.65977 -8.25057 NA
## ENSG00000223528 748.9305 -9.01709 2.13982 -4.21395 NA
## ENSG00000235142 93.0452 -8.03376 2.25865 -3.55689 NA
## ... ... ... ... ... ...
## ENSG00000286351 17.3129 -6.33261 2.21201 -2.86283 NA
## ENSG00000178919 32.0847 -6.32057 1.98474 -3.18459 0.0014496
## ENSG00000198719 23385.8008 -6.14107 1.42865 -4.29851 NA
## ENSG00000242021 10.0423 -6.11058 2.14533 -2.84833 0.0043950
## ENSG00000129514 60.0921 -6.09425 1.65635 -3.67932 NA
## padj
## <numeric>
## ENSG00000257288 NA
## ENSG00000233941 NA
## ENSG00000257541 NA
## ENSG00000223528 NA
## ENSG00000235142 NA
## ... ...
## ENSG00000286351 NA
## ENSG00000178919 0.0171300
## ENSG00000198719 NA
## ENSG00000242021 0.0203635
## ENSG00000129514 NA
# Save top 20 upregulated genes to CSV
write.csv(top_20_upregulated, file = "top_20_upregulated_genes.csv", row.names = TRUE)
# Save top 20 downregulated genes to CSV
write.csv(top_20_downregulated, file = "top_20_downregulated_genes.csv", row.names = TRUE)
Sequential
For Rows
For column
For both clusters
Enrichment pathways identify which biological pathways are overrepresented among differentially expressed genes in glioblastoma. Gene lists are prepared, enrichment analysis is conducted, and significant pathways are visualized using bar plots to highlight key pathways involved in the disease.
## Enrichment.FDR nGenes Pathway.Genes Fold.Enrichment
## 1 0.0000002120 11 99 11.992138
## 2 0.0001270810 8 93 9.284236
## 3 0.0015828410 7 99 7.631361
## 4 0.0000000663 18 294 6.607913
## 5 0.0344762110 5 85 6.348779
## 6 0.0137121320 6 103 6.287141
## Pathway
## 1 Path:hsa04061 Viral protein interaction with cytokine and cytokine receptor
## 2 Path:hsa04657 IL-17 signaling pathway
## 3 Path:hsa04640 Hematopoietic cell lineage
## 4 Path:hsa04060 Cytokine-cytokine receptor interaction
## 5 Path:hsa04610 Complement and coagulation cascades
## 6 Path:hsa04974 Protein digestion and absorption
## URL
## 1 http://www.genome.jp/kegg-bin/show_pathway?hsa04061
## 2 http://www.genome.jp/kegg-bin/show_pathway?hsa04657
## 3 http://www.genome.jp/kegg-bin/show_pathway?hsa04640
## 4 http://www.genome.jp/kegg-bin/show_pathway?hsa04060
## 5 http://www.genome.jp/kegg-bin/show_pathway?hsa04610
## 6 http://www.genome.jp/kegg-bin/show_pathway?hsa04974
## Genes
## 1 CXCL13 IL24 CXCL8 CXCL10 CXCL9 PPBP CCL7 CCL13 CCL17 CCL19 CXCL11
## 2 CSF2 CSF3 CXCL8 CXCL10 LCN2 MMP13 CCL7 CCL17
## 3 CR1 CR2 CSF2 CSF3 EPO CD1B CD8B
## 4 CXCL13 IL24 CSF2 CSF3 GDF7 EPO CXCL8 INHBC CXCL10 LEP CXCL9 PPBP CCL7 CCL13 CCL17 CCL19 CXCL11 GDF3
## 5 CR1 CR2 SERPIND1 C4BPA C6
## 6 COL1A1 COL5A1 COL6A3 COL7A1 COL10A1 CPA3
This analysis has revealed significant differentially expressed genes (DEGs) in glioblastoma and highlighted essential biological pathways that contribute to tumor progression. The enriched pathways associated with cell growth, invasion, and resistance to apoptosis underscore their role in the aggressive nature of glioblastoma. These insights enhance our understanding of the molecular mechanisms underlying the disease, indicating potential targets for new treatment strategies. By concentrating on the pathways most affected in glioblastoma, future therapeutic approaches could focus on inhibiting tumor growth and enhancing patient survival, leading to more personalized treatment options for this highly lethal brain cancer.