library(CytoSpill) library(flowCore) library(ggplot2) library(Rtsne) library(dplyr) library(RColorBrewer) library(reshape2) library(Rphenograph)
#read expression data_Levine32 <- flowCore::exprs(flowCore::read.FCS("/Users/qmiao/CytoSpill copy/data/Levine_32dim_notransform.fcs",transformation = FALSE,truncate_max_range = FALSE)) #remove negative values data_Levine32[which(data_Levine32<0)] <- 0 #load metals used for each channel load("/Users/qmiao/CytoSpill copy/data/Levine_32dim_colnames.RData") col_names Levine_marker <- colnames(data_Levine32) names(Levine_marker)[1:39] <- col_names colnames(data_Levine32)[1:39] <- col_names population_names <- c("Basophils", "CD16- NK cells", "CD16+ NK cells", "CD34+CD38+CD123-_HSPCs", "CD34+CD38+CD123+_HSPCs", "CD34+CD38lo_HSCs", "CD4_T_cells", "CD8_T_cells", "Mature_B_cells", "Monocytes", "pDCs", "Plasma_B_cells", "Pre_B_cells", "Pro_B_cells")
data_Levine32_temp <- data_Levine32[,c(5:36)] #remove duplicates duplicates_id <- duplicated(data_Levine32_temp) data_Levine32_temp <- data_Levine32_temp[!duplicates_id,]
# Levine_results <- SpillComp(data = data_Levine32_temp, cols = 1:32, n = 50000) set.seed(123) Levine_results <- SpillComp(data = data_Levine32_temp, cols = 1:32, n = 20000, threshold = 0.1, flexrep = 5, neighbor = 1) compensated_Levine32 <- Levine_results[[1]]
##compensated exprs compensated_Levine32_exprs <- as.data.frame(flowCore::exprs(compensated_Levine32)) compensated_Levine32_exprs[,"label"] <- as.factor(data_Levine32[,"label"][!duplicates_id]) ##uncompensated exprs data_Levine32_temp <- as.data.frame(data_Levine32_temp) data_Levine32_temp[,"label"] <- as.factor(data_Levine32[,"label"][!duplicates_id])
# downsample for faster calculation, plotting nsample = 20000 # subsample set.seed(123) rowsample <- sample(nrow(data_Levine32_temp), nsample) compensated_Levine32_exprs_downsample <- compensated_Levine32_exprs[rowsample,] data_Levine32_temp_downsample <- data_Levine32_temp[rowsample,] #function to censor data, for clear heatmap censor_dat <- function (x, a = 0.99){ q = quantile(x, a) x[x > q] = q return(x) } #function for arcsinh transform transf <- function (x){asinh(x/5)}
calculate_pheno <- function (data, cols, asinhtransfer = T){ if (asinhtransfer <- T) { data[,cols] <- transf(data[,cols]) } pheno_out <- Rphenograph::Rphenograph(data[,cols]) cluster <- igraph::membership(pheno_out[[2]]) return(cluster) } uncompensated_pheno <- calculate_pheno(data_Levine32_temp_downsample, cols = 1:32) compensated_pheno <- calculate_pheno(compensated_Levine32_exprs_downsample, cols = 1:32)
calculate_tsne <- function (data, cols, asinhtransfer = T, verbose = T, dims = 2, seed = 123){ set.seed(seed) tsne_dat <- data[,cols] #asinh/5 transfer if (asinhtransfer) {tsne_dat <- transf(tsne_dat)} tsne_out <- Rtsne::Rtsne(tsne_dat, verbose = verbose, dims = dims) return(tsne_out) } #calculate based on uncompensated data uncompensated_tsne = calculate_tsne(data_Levine32_temp_downsample, cols = 1:32) # Setup some colors for plotting qual_col_pals = brewer.pal.info[brewer.pal.info$category == 'qual',] col_vector = unlist(mapply(brewer.pal, qual_col_pals$maxcolors, rownames(qual_col_pals)))
levels(data_Levine32_temp_downsample$label) <- c(population_names, "NA") tclust = data_Levine32_temp_downsample[,"label"] # nonNA <- !(data_Levine32_temp_downsample[,"label"]=="NA") tsne_coor <- uncompensated_tsne$Y colnames(tsne_coor) <- c("tsne_1", "tsne_2") col_list <- c("#DC050C", "#FB8072", "#1965B0", "#7BAFDE", "#882E72", "#B17BA6", "#FF7F00", "#FDB462", "#E7298A", "#E78AC3", "#33A02C", "#B2DF8A", "#55A1B1", "#8DD3C7", "gray85", "#E6AB02", "#7570B3", "#BEAED4", "#666666", "#999999", "#aa8282", "#d4b7b7", "#8600bf", "#ba5ce3", "#808000", "#aeae5c", "#1e90ff", "#00bfff", "#56ff0d", "#ffff00") p = ggplot(as.data.frame(tsne_coor), aes(x=tsne_1, y=tsne_2))+ geom_point(size=0.3, alpha=0.8, aes(color=as.factor(tclust)))+ scale_color_manual(values = col_list, name = "cell type")+ ggtitle('Levine uncompensated data tsne')+ guides(color=guide_legend(override.aes=list(size=5)))+ theme(strip.background = element_blank(), panel.background=element_rect(fill='white', colour = 'black'), panel.grid.major=element_blank(), panel.grid.minor=element_blank(), plot.background=element_blank(), legend.key = element_blank()) p
tclust = uncompensated_pheno tsne_coor <- uncompensated_tsne$Y colnames(tsne_coor) <- c("tsne_1", "tsne_2") col_list <- c("#DC050C", "#FB8072", "#1965B0", "#7BAFDE", "#882E72", "#B17BA6", "#FF7F00", "#FDB462", "#E7298A", "#E78AC3", "#33A02C", "#B2DF8A", "#55A1B1", "#8DD3C7", "#A6761D", "#E6AB02", "#7570B3", "#BEAED4", "#666666", "#999999", "#aa8282", "#d4b7b7", "#8600bf", "#ba5ce3", "#808000", "#aeae5c", "#1e90ff", "#00bfff", "#56ff0d", "#ffff00") p = ggplot(as.data.frame(tsne_coor), aes(x=tsne_1, y=tsne_2))+ geom_point(size=0.3, alpha=0.8, aes(color=as.factor(tclust)))+ scale_color_manual(values = col_list, name = "Phenograph cluster")+ ggtitle('Levine uncompensated data tsne with Phenograph clusters')+ guides(color=guide_legend(override.aes=list(size=5)))+ theme(strip.background = element_blank(), panel.background=element_rect(fill='white', colour = 'black'), panel.grid.major=element_blank(), panel.grid.minor=element_blank(), plot.background=element_blank(), legend.key = element_blank()) p
compensated_tsne = calculate_tsne(compensated_Levine32_exprs_downsample, cols = 1:32)
levels(compensated_Levine32_exprs_downsample$label) <- c(population_names, "NA") tclust = compensated_Levine32_exprs_downsample[,"label"] # nonNA <- !(compensated_Levine32_exprs_downsample[,"label"]=="NA") tsne_coor <- compensated_tsne$Y colnames(tsne_coor) <- c("tsne_1", "tsne_2") col_list <- c("#DC050C", "#FB8072", "#1965B0", "#7BAFDE", "#882E72", "#B17BA6", "#FF7F00", "#FDB462", "#E7298A", "#E78AC3", "#33A02C", "#B2DF8A", "#55A1B1", "#8DD3C7", "gray80", "#E6AB02", "#7570B3", "#BEAED4", "#666666", "#999999", "#aa8282", "#d4b7b7", "#8600bf", "#ba5ce3", "#808000", "#aeae5c", "#1e90ff", "#00bfff", "#56ff0d", "#ffff00") p = ggplot(as.data.frame(tsne_coor), aes(x=tsne_1, y=tsne_2))+ geom_point(size=0.3, alpha=0.8, aes(color=as.factor(tclust)))+ scale_color_manual(values = col_list, name = "cell type")+ ggtitle('Levine compensated data tsne')+ guides(color=guide_legend(override.aes=list(size=5)))+ theme(strip.background = element_blank(), panel.background=element_rect(fill='white', colour = 'black'), panel.grid.major=element_blank(), panel.grid.minor=element_blank(), plot.background=element_blank(), legend.key = element_blank()) p
tclust = compensated_pheno tsne_coor <- compensated_tsne$Y colnames(tsne_coor) <- c("tsne_1", "tsne_2") col_list <- c("#DC050C", "#FB8072", "#1965B0", "#7BAFDE", "#882E72", "#B17BA6", "#FF7F00", "#FDB462", "#E7298A", "#E78AC3", "#33A02C", "#B2DF8A", "#55A1B1", "#8DD3C7", "#A6761D", "#E6AB02", "#7570B3", "#BEAED4", "#666666", "#999999", "#aa8282", "#d4b7b7", "#8600bf", "#ba5ce3", "#808000", "#aeae5c", "#1e90ff", "#00bfff", "#56ff0d", "#ffff00") p = ggplot(as.data.frame(tsne_coor), aes(x=tsne_1, y=tsne_2))+ geom_point(size=0.3, alpha=0.8, aes(color=as.factor(tclust)))+ scale_color_manual(values = col_list, name = "Phenograph cluster")+ ggtitle('Levine compensated data tsne with Phenograph clusters')+ guides(color=guide_legend(override.aes=list(size=5)))+ theme(strip.background = element_blank(), panel.background=element_rect(fill='white', colour = 'black'), panel.grid.major=element_blank(), panel.grid.minor=element_blank(), plot.background=element_blank(), legend.key = element_blank()) p
tclust = compensated_pheno tsne_coor <- uncompensated_tsne$Y colnames(tsne_coor) <- c("tsne_1", "tsne_2") col_list <- c("#DC050C", "#FB8072", "#1965B0", "#7BAFDE", "#882E72", "#B17BA6", "#FF7F00", "#FDB462", "#E7298A", "#E78AC3", "#33A02C", "#B2DF8A", "#55A1B1", "#8DD3C7", "#A6761D", "#E6AB02", "#7570B3", "#BEAED4", "#666666", "#999999", "#aa8282", "#d4b7b7", "#8600bf", "#ba5ce3", "#808000", "#aeae5c", "#1e90ff", "#00bfff", "#56ff0d", "#ffff00") p = ggplot(as.data.frame(tsne_coor), aes(x=tsne_1, y=tsne_2))+ geom_point(size=0.3, alpha=0.8, aes(color=as.factor(tclust)))+ scale_color_manual(values = col_list, name = "Phenograph cluster")+ ggtitle('Levine uncompensated data tsne with compensated Phenograph clusters')+ guides(color=guide_legend(override.aes=list(size=5)))+ theme(strip.background = element_blank(), panel.background=element_rect(fill='white', colour = 'black'), panel.grid.major=element_blank(), panel.grid.minor=element_blank(), plot.background=element_blank(), legend.key = element_blank()) p
the following plots the asinh(x/5) transformed intensities were normalized between 0-1 by using the 0.99 percentile of the data.
pdat <- transf(data_Levine32_temp_downsample[,-33]) censor_pdat <- apply(pdat, 2, censor_dat) censor_pdat <- apply(censor_pdat, MARGIN = 2, FUN = function(X) (X - min(X))/diff(range(X))) ### add colnames for (i in seq_along(Levine_marker)){ names(Levine_marker)[i] <- paste(names(Levine_marker)[i], Levine_marker[i], sep ='-') } dimnames(censor_pdat)[[2]] <- names(Levine_marker[c(5:36)]) censor_pdat <- as.data.frame(censor_pdat) censor_pdat$tsne_1 <- uncompensated_tsne$Y[,1] censor_pdat$tsne_2 <- uncompensated_tsne$Y[,2] pdat_melt <- reshape2::melt(censor_pdat, id.vars = c("tsne_1","tsne_2"), variable.name = "channel") p = ggplot(pdat_melt, aes(x=tsne_1, y=tsne_2, color=value))+ facet_wrap(~channel, scales = "free", ncol = 8)+ geom_point(alpha=0.5, size=0.3)+ scale_color_gradientn(colours=rev(brewer.pal(11, 'Spectral')), name='Counts', limits=c(0, 1))+ ggtitle("Uncomepensated Levine markers")+ theme(strip.background = element_blank(), strip.text.x = element_text(size = 11), axis.line=element_blank(), axis.text.x=element_blank(), axis.text.y=element_blank(), axis.ticks=element_blank(), axis.title.x=element_blank(), axis.title.y=element_blank(), panel.background=element_blank(), panel.border=element_blank(), panel.grid.major=element_blank(), panel.grid.minor=element_blank(), plot.background=element_blank()) p # ggsave(filename = "/Users/qmiao/CytoSpill copy/scripts/plot/Levine_uncompensated_marker.png", plot = p,width=15, height=6, dpi = 300)
pdat <- transf(compensated_Levine32_exprs_downsample[,-33]) censor_pdat <- apply(pdat, 2, censor_dat) censor_pdat <- apply(censor_pdat, MARGIN = 2, FUN = function(X) (X - min(X))/diff(range(X))) dimnames(censor_pdat)[[2]] <- names(Levine_marker[c(5:36)]) censor_pdat <- as.data.frame(censor_pdat) censor_pdat$tsne_1 <- uncompensated_tsne$Y[,1] censor_pdat$tsne_2 <- uncompensated_tsne$Y[,2] pdat_melt <- reshape2::melt(censor_pdat, id.vars = c("tsne_1","tsne_2"), variable.name = "channel") p = ggplot(pdat_melt, aes(x=tsne_1, y=tsne_2, color=value))+ facet_wrap(~channel, scales = "free", ncol = 8)+ geom_point(alpha=0.5, size=0.3)+ scale_color_gradientn(colours=rev(brewer.pal(11, 'Spectral')), name='Counts', limits=c(0, 1))+ ggtitle("Compensated Levine markers")+ theme(strip.background = element_blank(), strip.text.x = element_text(size = 11), axis.line=element_blank(), axis.text.x=element_blank(), axis.text.y=element_blank(), axis.ticks=element_blank(), axis.title.x=element_blank(), axis.title.y=element_blank(), panel.background=element_blank(), panel.border=element_blank(), panel.grid.major=element_blank(), panel.grid.minor=element_blank(), plot.background=element_blank()) p # ggsave(filename = "/Users/qmiao/CytoSpill copy/scripts/plot/Levine_compensated_marker.png", plot = p,width=15, height=6, dpi = 300)
pdat <- transf(compensated_Levine32_exprs_downsample[,-33]) censor_pdat <- apply(pdat, 2, censor_dat) censor_pdat <- apply(censor_pdat, MARGIN = 2, FUN = function(X) (X - min(X))/diff(range(X))) dimnames(censor_pdat)[[2]] <- names(Levine_marker[c(5:36)]) censor_pdat <- as.data.frame(censor_pdat) censor_pdat$tsne_1 <- compensated_tsne$Y[,1] censor_pdat$tsne_2 <- compensated_tsne$Y[,2] pdat_melt <- reshape2::melt(censor_pdat, id.vars = c("tsne_1","tsne_2"), variable.name = "channel") p = ggplot(pdat_melt, aes(x=tsne_1, y=tsne_2, color=value))+ facet_wrap(~channel, scales = "free", ncol = 8)+ geom_point(alpha=0.5, size=0.3)+ scale_color_gradientn(colours=rev(brewer.pal(11, 'Spectral')), name='Counts', limits=c(0, 1))+ ggtitle("Compensated Levine markers on compensated tsne")+ theme(strip.background = element_blank(), strip.text.x = element_text(size = 11), axis.line=element_blank(), axis.text.x=element_blank(), axis.text.y=element_blank(), axis.ticks=element_blank(), axis.title.x=element_blank(), axis.title.y=element_blank(), panel.background=element_blank(), panel.border=element_blank(), panel.grid.major=element_blank(), panel.grid.minor=element_blank(), plot.background=element_blank()) p # ggsave(filename = "/Users/qmiao/CytoSpill copy/scripts/plot/Levine_compensated_marker_on_compensated_tsne.png", plot = p,width=15, height=6, dpi = 300)
write.FCS(flowFrame(as.matrix(data_Levine32_temp[,-33])), filename = "~/CytoSpill copy/data/flowSOM/data_Levine32_temp.fcs") write.FCS(flowFrame(as.matrix(compensated_Levine32_exprs[,-33])), filename = "~/CytoSpill copy/data/flowSOM/compensated_Levine32_exprs.fcs")
# save.image("~/CytoSpill copy/data/Levine32_analysis.Rdata") sessionInfo()
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.