packages <- c( "tidyverse", "printr", "ggthemes", "miR34AasRNAproject", "broom" ) purrr::walk(packages, library, character.only = TRUE) rm(packages)
As p53 is a well-known regulator of senescence, growth, and apoptosis and has been shown to specifically important under conditions of cellular stress, such as starvation. Therefore, we investigated whether overexpression of miR34a AS affects proliferation rate under normal and starvation conditions.
Cell culture and proliferation assay
PC3 stable cell lines, either miR34a asRNA overexpressing or mock, were harvested and stained in 1 ml PBS with 5uM CellTrace Violet for 5 minutes and subsequently seeded in 12 well plates at 2 x 104 cells per well. Time 0 measurements were taken once cells had attached and treatments with RPMI (Gibco, life technology) 10% FBS, RPMI 0.1% FBS, or HBSS were simultaneously initiated in the remaining cells. RPMI mediums were all additionally supplemented with 2mM L-glutamine and 50ug/ml Penicillin-Streptomycin. Cells were incubated for the indicated times before harvesting and CellTrace Violet was quantified via flow cytometry (Sony SH800S Cell Sorter). Time 0 was performed in biological triplicate and technical duplicate whereas all other time points were performed in biological triplicates with one technical replicate.
Analysis
Analysis was performed by first, subsampling each replicate and condition so that each had a total of 10000 cells. The mean of each technical replicate for time point 0 was calculated and, subsequently, the time 0 fluorescence intensity was subtracted from each sample. The mean difference in fluorescence intensity was then calculated for each biological replicate and condition and used to build a polynomial regression model per condition (i.e. RPMI, 0.1% FBS, and HBSS) where difference in fluorescence intensity was modeled as a function of time and cell line. Reported P values are derived from the t-test, testing the null hypothesis that the coefficient estimate of the cell line covariate is equal to 0.
data <- getData("Supplementary Figure 5b") #remove cells with negative fluorescence. Consider these 1224 cells artifacts data <- filter(data, Violet > 0) ##fix day0 data #Since there are no treatments at time 0 and we want a corresponding Time 0 for #each of the treated samples, here we expand the Time 0 sample 3 times, one for #each treatment condition at later time points. dataExpandT0 <- data %>% filter(Time == 0) %>% bind_rows(., ., .) %>% mutate(Condition = c( rep("RPMI", nrow(.) / 3), rep("0.1% FBS", nrow(.) / 3), rep("HBSS", nrow(.) / 3) )) %>% bind_rows(filter(data, Time != 0)) #calculate means of technical replicates in day0 #need to subsample first so that each condition has the same number of cells sampleN <- 10000 set.seed(2387723) data0 <- dataExpandT0 %>% filter(Time == "0" & Type == "stained") %>% select(-`FSC-A`, -`BSC-A`) %>% group_by(`Biological replicate`, `Technical replicate`, Condition, `Cell line`, Type) %>% sample_n(size = sampleN) %>% ungroup() %>% arrange(`Cell line`, Condition, `Biological replicate`, `Technical replicate`, Violet) %>% mutate( `Technical replicate` = rep(c("Tr1", "Tr2"), nrow(.)/2), row = rep(1:(nrow(.) / 2), each = 2) ) %>% spread(`Technical replicate`, Violet) %>% rowwise() %>% mutate(Violet = mean(c(Tr1, Tr2))) %>% ungroup() %>% select(-(row:Tr2)) %>% bind_rows(., ., ., .) %>% mutate(Time = rep(c("0", "24", "48", "72"), each = nrow(.) / 4)) %>% arrange(Time, `Cell line`, Condition, `Biological replicate`, Violet) #Randomly sample 10000 cells from each condition so that all samples have the #same number of cells set.seed(2387723) subData <- dataExpandT0 %>% select(-`FSC-A`, -`BSC-A`, -`Technical replicate`) %>% filter(Type == "stained" & Time != "0") %>% group_by(`Biological replicate`, Condition, `Cell line`, Type, Time) %>% sample_n(size = sampleN) %>% ungroup() #add back data from time point 0 with mean technical replicates calculated #in addition, add a time point 0 corresponding to each cell and condition and ##calculate the difference for each cell from time 0 subData <- subData %>% bind_rows(filter(data0, Time == "0")) %>% arrange(Time, `Cell line`, Condition, `Biological replicate`, Violet) %>% add_column(day0Violet = data0$Violet) %>% mutate(violetNorm = Violet - day0Violet) %>% mutate( Time = as.numeric(Time), cellLine = parse_factor(`Cell line`, levels = c("mock", "lncTAM34a")) ) %>% select(-`Cell line`) #calculate mean normalized flouresence for each condition and biological replicate subDataMeans <- subData %>% group_by(cellLine, Time, Condition, `Biological replicate`) %>% summarize(mean = mean(violetNorm)) %>% ungroup()
Show stained vs. Unstained
data %>% ggplot() + geom_histogram(aes(Violet, fill = Type), alpha = 1/2, position = position_dodge(), binwidth = 0.01) + theme_bw() + scale_x_log10() + labs(x = "log10(Fluorescence intensity)", y = "Count") + facet_wrap(~Time)
Show time 0
data %>% filter(Time == 0) %>% unite(Sample, c("Cell line", "Biological replicate")) %>% mutate(Sample = case_when( str_detect(Sample, "unstained-F4") ~ "unstained-lncTAM34a", str_detect(Sample, "unstained-mock") ~ "unstained-mock", TRUE ~ Sample )) %>% select(Sample, Violet) %>% distinct() %>% ggplot() + geom_boxplot(aes(Sample, Violet)) + scale_y_log10() + theme(axis.text.x = element_text(angle = 90)) + labs(x = "Sample_replicate", y = "log10(Fluorescence intensity)") + theme_bw()
Show fluorescence loss over time
data %>% mutate(Condition = if_else(Time == "0", "RPMI", Condition)) %>% ggplot() + geom_boxplot(aes(Time, Violet)) + facet_wrap(~Type) + scale_y_log10() + labs(y = "log10(Fluorescence intensity)") + theme_bw()
Show fluorescence per condition
data %>% filter(Type == "stained") %>% filter(Time != "0") %>% mutate(Condition = parse_factor(Condition, levels = c("RPMI", "0.1% FBS", "HBSS"))) %>% ggplot() + geom_boxplot(aes(Time, Violet)) + facet_wrap(~Condition) + theme_bw() + scale_y_log10() + labs(y = "log10(Fluorescence intensity)")
Show polynomial model info
#model each condition using the mean of all biological replicates using a lm model.info <- subDataMeans %>% group_by(Condition) %>% do(glance(lm(mean ~ poly(Time, 3) + cellLine, data = .))) %>% ungroup() as.data.frame(model.info) proliferation.lm <- subDataMeans %>% group_by(Condition) %>% do(tidy(lm(mean ~ poly(Time, 3) + cellLine, data = .))) %>% ungroup() as.data.frame(proliferation.lm) #extract model components to plot model.data <- proliferation.lm %>% filter(term == "cellLinelncTAM34a") %>% mutate(Condition = parse_factor( Condition, levels = c("RPMI", "0.1% FBS", "HBSS") )) %>% rename(pValue = p.value) %>% pFormat(.)
subData %>% select(-Violet, -day0Violet) %>% nest(violetNorm) %>% spread(Time, data) %>% mutate(`24-0` = map2_dbl(`0`, `24`, function(x, y) mean(unlist(y) - unlist(x)))) %>% mutate(`48-24` = map2_dbl(`24`, `48`, function(x, y) mean(unlist(y) - unlist(x)))) %>% mutate(`72-48` = map2_dbl(`48`, `72`, function(x, y) mean(unlist(y) - unlist(x)))) %>% select(-(`0`:`72`)) %>% gather(Time, diff, -(Type:cellLine)) %>% group_by(Condition, Time) %>% summarize(m = mean(diff)) subDataMeans %>% spread(cellLine, mean) %>% mutate(diff = lncTAM34a - mock) %>% group_by(Time, Condition) %>% summarize(meanDiff = mean(diff)) %>% print(n = nrow(.))
Plot final figure
p <- subDataMeans %>% mutate(Condition = parse_factor(Condition, levels = c("RPMI", "0.1% FBS", "HBSS"))) %>% ggplot() + geom_smooth( aes(Time, mean, colour = cellLine, group = cellLine), colour = "lightgrey", method = "lm", formula = y ~ poly(x, 3), size = 0.5, alpha = 0.1 ) + geom_boxplot( aes(Time, mean, colour = cellLine, group = interaction(Time, cellLine)), fatten = 2, lwd = 0.2 ) + facet_wrap(~Condition) + scale_x_continuous(breaks = c(0, 24, 48, 72)) + labs( x = "Time (hours)", y = "Mean \U0394 fluorescence intensity" ) + guides(colour = guide_legend(title = "Cell line")) markdown <- p + geom_label( data = model.data, aes(x = 0, y = 2000, label = paste0("estimate=", round(estimate))), fill = "white", label.size = 0, label.padding = unit(0.01, "lines"), position = position_dodge(width = 0.9), show.legend = FALSE, fontface = "bold", family = "Arial Unicode MS", size = 3, hjust = 0 ) + geom_label( data = model.data, aes(x = 0, y = 1500, label = paste0("std.error=", round(std.error))), fill = "white", label.size = 0, label.padding = unit(0.01, "lines"), position = position_dodge(width = 0.9), show.legend = FALSE, fontface = "bold", family = "Arial Unicode MS", size = 3, hjust = 0 ) + geom_label( data = model.data, aes(x = 0, y = 1000, label = paste0("p=", pFormat)), fill = "white", label.size = 0, label.padding = unit(0.01, "lines"), position = position_dodge(width = 0.9), show.legend = FALSE, fontface = "bold", family = "Arial Unicode MS", size = 3, hjust = 0 ) plotRmarkdown(markdown) pdf <- p + geom_label( data = model.data, aes(x = 0, y = 3000, label = paste0("estimate=", round(estimate))), fill = "white", label.size = 0, label.padding = unit(0.01, "lines"), position = position_dodge(width = 0.9), show.legend = FALSE, fontface = "plain", family = "Arial Unicode MS", size = 2, hjust = 0 ) + geom_label( data = model.data, aes(x = 0, y = 2000, label = paste0("std.error=", round(std.error))), fill = "white", label.size = 0, label.padding = unit(0.01, "lines"), position = position_dodge(width = 0.9), show.legend = FALSE, fontface = "plain", family = "Arial Unicode MS", size = 2, hjust = 0 ) + geom_label( data = model.data, aes(x = 0, y = 1000, label = paste0("p=", pFormat)), fill = "white", label.size = 0, label.padding = unit(0.01, "lines"), position = position_dodge(width = 0.9), show.legend = FALSE, fontface = "plain", family = "Arial Unicode MS", size = 2, hjust = 0 ) figure <- plotPDF(pdf) #path <- file.path("~/GitHub/miR34a_asRNA_project/inst", fileMap(type = "pdf")["Supplementary Figure 5b"][[1]]) #ggsave( # plot = figure, # filename = path, # device = cairo_pdf, # height = 60, # width = 100, # units = "mm" #)
miR34a asRNA overexpression causes a decrease in cell growth under all examined conditions.
sessionInfo()
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.