--- title: "GSE77930_prostate" output: html_document date: "2024-09-17" --- ```{r} # Load necessary libraries library(GSVA) library(GSEABase) library(pheatmap) rm(list=ls()) ``` ```{r} library(GSVA) library(GSEABase) library(pheatmap) library(RColorBrewer) library(viridis) # Load data load("/Volumes/Fengshuo_14T/Lab/Yunfeng/cancer_comparsions/Zenodo/data/Bulk_Microarray_Data(published)/PMID-26667932.RData") marker <- readRDS("~/Library/CloudStorage/OneDrive-BaylorCollegeofMedicine/Human_Bone_Mets_Comparsion_scRNA/Additional human metastasis datasets/data/markers_from_scRNA.rds") # Assuming 'gse74685.clps' is your expression data matrix with genes as rows and samples as columns expression_matrix <- gse74685.clps # Prepare gene names rownames(expression_matrix) <- toupper(rownames(expression_matrix)) # Split the marker data into cell types and only keep the top 10 genes per cell type cell_type_markers <- split(marker$gene, marker$cluster) cell_type_markers <- lapply(cell_type_markers, function(genes) { toupper(genes[1:min(10, length(genes))]) # Keep top 10 genes }) # Run ssGSEA to calculate enrichment scores using all cell types (no filtering) ssgsea_scores_all <- gsva(expression_matrix, cell_type_markers, method='ssgsea', ssgsea.norm=TRUE) # Reorder the samples based on new sample annotation 'gse74685.ann' common_samples <- intersect(colnames(ssgsea_scores_all), rownames(gse74685.ann)) gse74685.ann <- gse74685.ann[common_samples, ] ssgsea_scores_all <- ssgsea_scores_all[, common_samples] # Scale the data ssgsea_scores_scaled <- t(scale(t(ssgsea_scores_all))) # Generate heatmap # Adjust the scale range to -1.5 to 1.5 breaks <- seq(-1.5, 1.5, length.out = 100) # Create annotations for the samples (Met.Site and other annotations) gse74685.ann$Site <- factor(gse74685.ann$Site) # Ensure 'Site' is a factor sample_annotations <- data.frame(Met.Site = gse74685.ann$Site) rownames(sample_annotations) <- rownames(gse74685.ann) # Generate color palette for Met.Site based on the number of unique values unique_met_sites <- unique(gse74685.ann$Site) num_met_sites <- length(unique_met_sites) # Generate more colors if needed based on unique Met.Site values met_site_colors <- if (num_met_sites > 10) { colorRampPalette(brewer.pal(9, "Paired"))(num_met_sites) # Generate more colors if needed } else { brewer.pal(10, "Paired") } # Assign colors for each unique Met.Site and make sure levels match names(met_site_colors) <- levels(gse74685.ann$Site) # Specify color palettes for annotations annotation_colors <- list( Met.Site = met_site_colors # Custom palette for Met.Site ) # Generate the heatmap with annotations and custom color palettes pheatmap(ssgsea_scores_scaled, breaks = breaks, clustering_distance_rows = 'correlation', clustering_distance_cols = 'correlation', clustering_method = 'complete', show_colnames = TRUE, show_rownames = TRUE, cluster_rows = T, cluster_cols = TRUE, fontsize_row = 10, fontsize_col = 10, annotation_col = sample_annotations, annotation_colors = annotation_colors) ```