|
|
@ -6,6 +6,7 @@ library(dplyr) |
|
|
|
library(car) |
|
|
|
library(ggbeeswarm) |
|
|
|
library(gtools) |
|
|
|
library(gridExtra) |
|
|
|
source("../../funcions.R") |
|
|
|
|
|
|
|
# Define UI for application |
|
|
@ -17,21 +18,42 @@ ui <- fluidPage( |
|
|
|
sidebarPanel( |
|
|
|
fileInput(inputId = "file_sizes", label = "Hoja de tamaños", multiple = F), |
|
|
|
selectInput(inputId = "measure_sys", "Sistema de medida", selected = "L-W-D", choices = c("L-W-D","Min-Max","Absorbance")), |
|
|
|
sliderInput("ncages", "Cajas", min=1, max=10, value=1), |
|
|
|
sliderInput("iterations", "Iteraciones", min=100, max=2000, step=100, value=100), |
|
|
|
uiOutput('ncages'), |
|
|
|
uiOutput('lowcut'), |
|
|
|
uiOutput('upcut'), |
|
|
|
uiOutput('goButton'), |
|
|
|
uiOutput('iterations'), |
|
|
|
downloadButton("downloadData", "Descargar Excel") |
|
|
|
), |
|
|
|
mainPanel( |
|
|
|
plotOutput("firstPlot"), |
|
|
|
plotOutput("distPlot") |
|
|
|
) |
|
|
|
), |
|
|
|
tabPanel("Análisis") |
|
|
|
tabPanel("Análisis", |
|
|
|
sidebarPanel( |
|
|
|
fileInput(inputId = "file_analy", label = "Hoja de análisis", multiple = F), |
|
|
|
selectInput(inputId = "vacc", "Experimento de Vacunación", selected = "No", choices = c("Sí","No")), |
|
|
|
checkboxInput("filter_stats","Filtrar Estadística") |
|
|
|
), |
|
|
|
mainPanel( |
|
|
|
h3('Ratones'), |
|
|
|
tableOutput('ntable'), |
|
|
|
h3('Cinéticas'), |
|
|
|
plotOutput('cin_group'), |
|
|
|
plotOutput('cin_indiv'), |
|
|
|
h3('Estadística'), |
|
|
|
verbatimTextOutput('stats'), |
|
|
|
tableOutput('tab_stats') |
|
|
|
)) |
|
|
|
) |
|
|
|
|
|
|
|
) |
|
|
|
|
|
|
|
# Define server logic required to draw a histogram |
|
|
|
server <- function(input, output) { |
|
|
|
|
|
|
|
# Diseño |
|
|
|
dades<-reactiveValues() |
|
|
|
dades$taula<-NULL |
|
|
|
dades$groups<-NULL |
|
|
@ -42,12 +64,42 @@ server <- function(input, output) { |
|
|
|
dades$groups<-read.xlsx(input$file_sizes$datapath, sheet = 2)[,1] |
|
|
|
} |
|
|
|
}) |
|
|
|
output$distPlot <- renderPlot({ |
|
|
|
output$firstPlot <- renderPlot({ |
|
|
|
observeEvent(dades$taula, {}) |
|
|
|
if (!is.null(dades$taula)){ |
|
|
|
ggplot(dades$taula, aes(x="1", y=Volumen))+geom_quasirandom(width=0.2) |
|
|
|
} |
|
|
|
}) |
|
|
|
|
|
|
|
output$iterations<-renderUI({ |
|
|
|
if (!is.null(dades$taula)){ |
|
|
|
sliderInput("iterations", "Iteraciones", min=100, max=2000, step=100, value=100) |
|
|
|
} |
|
|
|
}) |
|
|
|
output$lowcut<-renderUI({ |
|
|
|
if (!is.null(dades$taula)){ |
|
|
|
sliderInput("lowcut", "Corte inferior", min=0, max=1000, step=5, value=0) |
|
|
|
} |
|
|
|
}) |
|
|
|
output$upcut<-renderUI({ |
|
|
|
if (!is.null(dades$taula)){ |
|
|
|
sliderInput("upcut", "Corte superior", min=0, max=1000, step=5, value=400) |
|
|
|
} |
|
|
|
}) |
|
|
|
output$goButton<-renderUI({ |
|
|
|
if (!is.null(dades$taula)){ |
|
|
|
actionButton("goButton", "Selecciona") |
|
|
|
} |
|
|
|
}) |
|
|
|
output$ncages<-renderUI({ |
|
|
|
if (is.null(dades$taula)){ |
|
|
|
sliderInput("ncages", "Cajas", min=1, max=10, value=1) |
|
|
|
} |
|
|
|
}) |
|
|
|
grafic<-eventReactive(input$goButton,{ |
|
|
|
df<-dades$taula |
|
|
|
up_cuttof<-400 |
|
|
|
low_cuttof<-50 |
|
|
|
up_cuttof<-input$upcut |
|
|
|
low_cuttof<-input$lowcut |
|
|
|
df<-df[df$Volumen < up_cuttof & df$Volumen > low_cuttof,] |
|
|
|
df["Mouse"]<-gsub("[a-zA-Z]", "", df$MouseID) |
|
|
|
|
|
|
@ -88,6 +140,11 @@ server <- function(input, output) { |
|
|
|
geom_jitter(width=0.25)+ |
|
|
|
geom_point(stat="summary", color="blue", size=3)+ |
|
|
|
lims(y=c(0,max(df_def$Volumen)+10)) |
|
|
|
}) |
|
|
|
output$distPlot <- renderPlot({ |
|
|
|
observeEvent(dades$taula, {}) |
|
|
|
if (!is.null(dades$taula)){ |
|
|
|
grafic() |
|
|
|
} |
|
|
|
}) |
|
|
|
|
|
|
@ -144,7 +201,126 @@ server <- function(input, output) { |
|
|
|
write.xlsx(dtemplate,file) |
|
|
|
} |
|
|
|
) |
|
|
|
|
|
|
|
|
|
|
|
# Análisis |
|
|
|
analysis<-reactiveValues() |
|
|
|
analysis$taula<-NULL |
|
|
|
analysis$taula_def<-NULL |
|
|
|
observe({ |
|
|
|
if (!is.null(input$file_analy)){ |
|
|
|
analysis$taula<-read.xlsx(input$file_analy$datapath, sheet = 1) |
|
|
|
} |
|
|
|
}) |
|
|
|
output$ntable<-renderTable({ |
|
|
|
if (!is.null(input$file_analy)){ |
|
|
|
observeEvent(analysis$taula, {}) |
|
|
|
stattest<-"dunn" |
|
|
|
oneside<-"" |
|
|
|
cutoff<-750 |
|
|
|
|
|
|
|
table<-analysis$taula |
|
|
|
table<- table %>% add_column("0"=0, .before="12") |
|
|
|
table[table$ID.tumor == "R","0"]<-NA |
|
|
|
table<-melt(table, id=colnames(table)[1:6], variable.name = "Timepoint") |
|
|
|
if ("DPV" %in% colnames(table)){ |
|
|
|
table<-dcast(table, Cage+ID.animal+ID.tumor+Group+Timepoint~DPV, value.var = "value") |
|
|
|
table$Major<-table$Major/1000 |
|
|
|
table$Minor<-table$Minor/1000 |
|
|
|
table["Volume"]<-((table$Major*table$Minor*table$Minor)*(pi/6))*1000 |
|
|
|
} |
|
|
|
if ("TS" %in% colnames(table)){ |
|
|
|
table<-dcast(table, Cage+ID.animal+ID.tumor+Group+Timepoint~TS, value.var = "value") |
|
|
|
table["Volume"]<-table$`TS-Deep`*table$`TS-Length`*table$`TS-Width`*pi/6 |
|
|
|
} |
|
|
|
table<-table %>% filter(!is.na(Group)) |
|
|
|
analysis$taula_def<-table |
|
|
|
|
|
|
|
table_plot<-dcast(dcast(table %>% filter(!is.na(Volume)), Cage+`ID.animal`+Group+Timepoint~., value.var = "Volume", fun.aggregate = mean), Group~Timepoint) |
|
|
|
table_plot |
|
|
|
} |
|
|
|
}) |
|
|
|
output$cin_group<-renderPlot({ |
|
|
|
if (!is.null(input$file_analy) & !is.null(analysis$taula_def)){ |
|
|
|
observeEvent(analysis$taula_def, {}) |
|
|
|
table<-analysis$taula_def |
|
|
|
ggplot(table, aes(as.numeric(as.character(Timepoint)), Volume, color=Group, group=Group))+ |
|
|
|
geom_errorbar(stat="summary", width=0.05)+ |
|
|
|
geom_line(stat="summary")+ |
|
|
|
geom_point(stat="summary")+ |
|
|
|
facet_grid(factor(ID.tumor, labels = c("Vaccination", "Rechallenge"))~., scale="free_y")+ |
|
|
|
labs(x="Days after tumor challenge")+ |
|
|
|
scale_y_continuous(expand = expansion(mult = c(0,0.05)))+ |
|
|
|
scale_x_continuous(expand = expansion(mult = c(0,0.05)), limits = c(0, (round(max(as.numeric(as.character(table$Timepoint))) / 5)+1)*5))+ |
|
|
|
theme_bw() |
|
|
|
} |
|
|
|
}) |
|
|
|
output$cin_indiv<-renderPlot({ |
|
|
|
if (!is.null(input$file_analy) & !is.null(analysis$taula_def)){ |
|
|
|
observeEvent(analysis$taula_def, {}) |
|
|
|
table<-analysis$taula_def |
|
|
|
ggplot(table, aes(as.numeric(as.character(Timepoint)), Volume, color=Group, group=paste0(Cage,ID.animal)))+ |
|
|
|
# geom_errorbar(stat="summary", width=0.05)+ |
|
|
|
geom_line()+ |
|
|
|
geom_point()+ |
|
|
|
scale_y_continuous(expand = expansion(mult = c(0,0.05)))+ |
|
|
|
scale_x_continuous(expand = expansion(mult = c(0,0.05)), limits = c(0, (round(max(as.numeric(as.character(table$Timepoint))) / 5)+1)*5))+ |
|
|
|
facet_grid(factor(ID.tumor, labels = c("Vaccination", "Rechallenge"))~Group, scale="free_y")+ |
|
|
|
labs(x="Days after tumor challenge")+ |
|
|
|
theme_bw() |
|
|
|
} |
|
|
|
}) |
|
|
|
output$stats<-renderPrint({ |
|
|
|
stattest<-"dunn" |
|
|
|
oneside<-"" |
|
|
|
cutoff<-750 |
|
|
|
if (!is.null(input$file_analy) & !is.null(analysis$taula_def)){ |
|
|
|
observeEvent(analysis$taula_def, {}) |
|
|
|
table<-analysis$taula_def |
|
|
|
if (oneside != ""){ |
|
|
|
tableR<-filter(table, ID.tumor == rechallenge) %>% filter(!is.na(Volume)) |
|
|
|
summary(aov(Volume~Group+Timepoint+Error(ID.animal), data=table[table$ID.tumor == oneside,])) |
|
|
|
}else{ |
|
|
|
for (side in c("L","R")){ |
|
|
|
tableR<-filter(table, ID.tumor == side) %>% filter(!is.na(Volume)) |
|
|
|
if (length(unique(tableR$Volume)) > 1 & length(unique(tableR$Timepoint)) > 1){ |
|
|
|
print(paste0("Side: ",side)) |
|
|
|
# print(summary(aov(Volume~Group+Timepoint+Error(paste0(ID.animal,Cage)), data=tableR))) |
|
|
|
print(summary(aov(Volume~Group+Timepoint+Error(ID.animal), data=tableR))) |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
}) |
|
|
|
output$tab_stats<-renderTable({ |
|
|
|
stattest<-"dunn" |
|
|
|
oneside<-"" |
|
|
|
cutoff<-750 |
|
|
|
if (!is.null(input$file_analy) & !is.null(analysis$taula_def)){ |
|
|
|
table<-analysis$taula_def |
|
|
|
table_stats<-list() |
|
|
|
for (side in c("L","R")){ |
|
|
|
tableR<-filter(table, ID.tumor == side) %>% filter(!is.na(Volume)) |
|
|
|
if (length(unique(tableR$Volume)) > 1){ |
|
|
|
table_stats[[side]]<-multi_stats(tableR, "Volume", "Timepoint", "Group", stat.test=stattest) |
|
|
|
} |
|
|
|
table_kw<-as.data.frame(matrix(nrow=0, ncol=2)) |
|
|
|
for (point in unique(tableR$Timepoint)){ |
|
|
|
len_group<-length(unique(tableR %>% filter(Timepoint == point) %>% pull(Group))) |
|
|
|
if (len_group > 1){ |
|
|
|
table_kw<-rbind(table_kw, data.frame(point,kruskal.test(tableR %>% filter(Timepoint == point) %>% pull(Volume), tableR %>% filter(Timepoint == point) %>% pull(Group))[3][[1]])) |
|
|
|
} |
|
|
|
} |
|
|
|
colnames(table_kw)<-c("Timepoint", "KW-p.val") |
|
|
|
table_stats[[side]]<-merge(table_stats[[side]], table_kw) |
|
|
|
} |
|
|
|
table_stats_def<-bind_rows(table_stats, .id = "ID tumor") |
|
|
|
if (input$filter_stats == T){ |
|
|
|
table_stats_def %>% filter(p.adj < 0.05) |
|
|
|
}else{ |
|
|
|
table_stats_def |
|
|
|
} |
|
|
|
} |
|
|
|
}) |
|
|
|
} |
|
|
|
|
|
|
|
# Run the application |
|
|
|