library("readxl") library("dplyr") #####Directories##### # us <-"C:/Users/bresesti.chiara/" # wdir1509<-paste0(us, "/Dropbox (HSR Global)/SquadritoM_1509_RNASeq_QIAseq_UPX/QIAseqUltraplexRNA_181342/primary_analysis") # wdir1510<-paste0(us, "/Dropbox (HSR Global)/SquadritoM_1510_RNA_miRNA_QIAseq_UPX") # fdir <- paste0(us, "/Dropbox (HSR Global)/CancerGeneTherapy/Cancer Gene Therapy/MS/2024 Bresesti et al/Scripts/plots and tables used in figures") # # input_d <-paste0(us, "/Dropbox (HSR Global)/SquadritoM_1509_RNASeq_QIAseq_UPX/QIAseqUltraplexRNA_181342/primary_analysis") # wdir1510 <-paste0(us, "/Dropbox (HSR Global)/SquadritoM_1510_RNA_miRNA_QIAseq_UPX") # output_d <- paste0(us, "/Dropbox (HSR Global)/CancerGeneTherapy/Cancer Gene Therapy/MS/2024 Bresesti et al/Scripts/plots and tables used in figures") input_dir <- "/beegfs/scratch/ric.squadrito/ric.squadrito/90-935462466_scRNAseq_Bresesti/Analysis_MM/GitLab_scripts/reference" output_dir <- "/beegfs/scratch/ric.squadrito/ric.squadrito/90-935462466_scRNAseq_Bresesti/Analysis_MM/GitLab_scripts/Output" ################################################################################ # R script to generate data and figures for manuscript figures 1B, 1C, and 1D. # # This script reads RNA-seq and miRNA-seq data from Excel files, performs # normalization and data transformation, and generates output tables and plots. # # Figures generated/data produced: # - Figure 1B: Heatmap data for selected marker genes (Excel table) # - Figure 1C: Pairwise MA plots for miRNA data # - Figure 1D: Heatmap data for selected miRNA families (Excel table) # # Input data files: # - Figure 1B: "QIAseqUltraplexRNA_181342.xlsx" (Sheet 3: umis.genes.polyA-mouse) # - Figure 1C & 1D: "173308.all_samples.summary.xlsx" (Sheet 2: miRNA_piRNA) # - Figure 1D: "miRNA_Family.xlsx" (Sheet 1) # ################################################################################ #### Figure 1B #### df1 <- as.data.frame(read_excel(paste0(input_dir, "/QIAseqUltraplexRNA_181342.xlsx"), sheet=3, col_names = T, skip=1)) #sheet: umis.genes.polyA-mouse df1 <-df1[,-c(1,3:6)] # keep only gene name and UMI counts df1[,-1] <-apply(df1[,-1],2,function(x){x/sum(x)*1000000}) # UMI normalized by CPM gene_vector <- c("Cd19", "Ms4a1", "Fcer2a", "Ighm", "Cd8a", "Xcr1", "Itgae", "Itgax", "Ccr2", "Itgam", "Mgl2", "Cd68", "Vcam1", "Csf1r", "Adgre1", "Siglec1", "Hmox1", "Timd4", "Vsig4", "Clec4f", "Marco", "Pecam1", "Tek", "Lyve1", "Stab2") df2 <- df1[df1$gene%in%gene_vector,] %>% arrange(factor(gene, levels=gene_vector)) rownames(df2) <- df2[,1] df2.scaled <- as.data.frame(t(scale(t(df2[-1])))) # Zscore normalization. Scaled only works on columns, so need to transform openxlsx::write.xlsx(df2.scaled, paste0(output_dir, "/Figure_1B_table.xlsx"), rowNames=T) # the df was exported and used to create a heatmap using Graphpad #### Figure 1C #### # "edgeR_DGE_res_volcano.pdf" (in the 'wdir1509' folder) was imported in illustrator # and merged with the plot generated by the code below df1 <- as.data.frame(read_excel(paste0(input_dir, "/173308.all_samples.summary.xlsx"), sheet=2, col_names=T)) #sheet: miRNA_piRNA df1 <-df1[,1:7] #UMI rownames(df1)<-df1$miRNA df2 <- apply(df1[,-1], 2, function(x) log(x)) #Log counts df2 <- as.data.frame(limma::normalizeCyclicLoess(df2, weights = NULL, span=0.7, iterations = 5, method = "pairs")) #Cyclic loess normalization colnames(df2)<-c("B cell","RPM","cDC1","cDC2","LSEC","KC") #Rename columns upper.panel<-function(x, y, ...){ points(((x+y)/2),(x-y), cex=0.6, pch=19, col="grey") above <- (x-y-1)*((x+y)/2-5) > 5 & ((x+y)/2)>5 points(((x+y)/2)[above],(x-y)[above], col="red", cex=0.6, pch=19) below <- (x-y+1)*((x+y)/2-5) < -5 & ((x+y)/2)>5 points(((x+y)/2)[below],(x-y)[below], col="blue", cex=0.6, pch=19) } # function for MA plot pairs(df2[,1:6], lower.panel = NULL, upper.panel = upper.panel, ylim=c(-8.5,8.5), xlim=c(2,14), cex.labels = 2) # pairwise plot #### Figure 1D #### df1 <- as.data.frame(read_excel(paste0(input_dir, "/173308.all_samples.summary.xlsx"), sheet=2, col_names=T)) #sheet: miRNA_piRNA df1 <- df1[-which(grepl("piR",df1[,1])),1:7] # UMI and piRNA removing df1[,1] <- gsub("/.*","",df1[,1]) # leave only first miRNA for ambiguous entries df1[,-1] <- apply(df1[,-1],2,function(x){x/sum(x,na.rm=T)*1000000}) #UMI normalized by CPM df.families <- as.data.frame(read_excel("Analysis CB/miRNA_Family.xlsx",sheet=1,col_names = T))#miRNA families from miRBase df.families <- df.families[df.families[,3]==10090,c(4,1)] #select mouse entries df.families[,1] <- sub(pattern = "p.*",replacement ="p",x = df.families[,1]) df2 <- merge(df.families,df1,by=1) df2 <- aggregate(df2[,-c(1:2)],by = df2["miR family"],FUN = sum,na.rm=T) #sum counts by family gene_vector <- c("miR-150-5p","miR-25-3p/32-5p/92-3p/363-3p/367-3p","miR-142-3p.1", "miR-17-5p/20-5p/93-5p/106-5p","miR-191-5p", "miR-15-5p/16-5p/195-5p/322-5p/497-5p","miR-26-5p","miR-138-5p", "miR-223-3p","miR-342-3p","miR-22-3p","miR-192-5p/215-5p", "miR-125-5p/351-5p","miR-126-3p.1","miR-199-3p") df3 <- subset(df2, df2$`miR family`%in% gene_vector) %>% arrange(factor(`miR family`, levels=gene_vector)) rownames(df3) <- df3[,1] df3.scaled <- as.data.frame(t(scale(t(df3[-1])))) #Zscore normalization. Scaled only works on columns, so need to transform openxlsx::write.xlsx(df2.scaled, paste0(output_dir, "/Figure_1D_table.xlsx"), rowNames=T) #the df was exported and used to create a heatmap using Graphpad