library(shiny) source("auxiliar.R") shinyServer(function(input,output,session){ observe({ inFile <- input$file1 if(is.null(inFile)) dt <- datos else dt <- read.csv(inFile$datapath, header=input$header, sep=input$sep) updateSelectInput(session, "variable1", choices = names(dt), selected = "Weight") updateSelectInput(session, "variable2", choices = names(dt), selected = "Group") }) output$summary <- renderTable({ inFile <- input$file1 if(is.null(inFile)) dt <- datos else dt <- read.csv(inFile$datapath, header=input$header, sep=input$sep) dt <- na.omit(dt) # Para eliminar obs con NA dt }) output$appPlot <- renderPlot({ inFile <- input$file1 if(is.null(inFile)) dt <- datos else dt <- read.csv(inFile$datapath, header=input$header, sep=input$sep) # Para eliminar obs con NA dt <- na.omit(dt) # Para obtener x y grupo x <- dt[, input$variable1] group <- dt[, input$variable2] group <- as.factor(group) if (nlevels(group) != 2) { plot(1, type = "n", xlab = "", ylab = "", axes = FALSE) mensaje <- "La variable cualitativa \n que eligió debe tener sólo \n 2 niveles." text(x=1, y=1, mensaje, cex=2, col = "blue", pos=3) } else { par(mfrow=c(1, 2), bg="gray98") # Para dibujar las densidades xx <- split(x, group) den <- lapply(xx, density) plot(den[[1]], lwd=4, col="deepskyblue3", main="Densidad", las=1, xlab=as.character(input$variable1), ylab="Densidad", xlim=range(range(den[[1]]$x), range(den[[2]]$x)), ylim=c(0, max(c(den[[1]]$y, den[[2]]$y)))) lines(den[[2]], lwd=4, col="firebrick3") # Leyenda para distinguir las densidades legend("topright", bty="n", lwd=4, col=c("deepskyblue3", "firebrick3"), legend=unique(group)) # Para dibujar los qqplot qq1 <- qqnorm(xx[[1]], plot.it=FALSE) qq2 <- qqnorm(xx[[2]], plot.it=FALSE) plot(qq1, las=1, main="QQplot", pch=19, col="deepskyblue3", xlim=range(c(qq1$x, qq2$x)), ylim=range(c(qq1$y, qq2$y)), xlab="Cuantiles teóricos N(0, 1)", ylab=as.character(input$variable1)) points(qq2, pch=19, col="firebrick3") # Para construir los qqplot qqline(xx[[1]], col="deepskyblue3") qqline(xx[[2]], col="firebrick3") # Para incluir el valor P de Shapiro shapi <- lapply(xx, shapiro.test) leyenda <- c(paste("Valor P=", round(shapi[[1]]$p.value, 2)), paste("Valor P=", round(shapi[[2]]$p.value, 2))) legend("topleft", bty="n", text.col=c("deepskyblue3", "firebrick3"), legend=leyenda) } }) output$statistic <- renderTable({ inFile <- input$file1 if(is.null(inFile)) dt <- datos else dt <- read.csv(inFile$datapath, header=input$header, sep=input$sep) # Para eliminar obs con NA dt <- na.omit(dt) # Para obtener x y grupo x <- dt[, input$variable1] group <- dt[, input$variable2] group <- as.factor(group) xx <- split(x, group) # Lista con variable interes resumen <- function(x) c(mean(x), var(x), length(x)) res <- sapply(xx, resumen) rownames(res) <- c("Media", "Varianza", "Número de observaciones") t(res) }, rownames = TRUE, align="c", bordered = TRUE) output$resul1 <- renderText({ inFile <- input$file1 if(is.null(inFile)) dt <- datos else dt <- read.csv(inFile$datapath, header=input$header, sep=input$sep) # Para eliminar obs con NA dt <- na.omit(dt) # Para obtener x y grupo x <- dt[, input$variable1] group <- dt[, input$variable2] group <- as.factor(group) if (nlevels(group) != 2) { paste0("La variable cualitativa \n que eligió debe tener sólo \n 2 niveles.") } else { xx <- split(x, group) ph <- var.test(x=xx[[1]], y=xx[[2]], alternative=input$h0, ratio=1, conf.level=input$alfa) paste0('El estadístico de prueba es f0=', round(ph$statistic, 4), ' con un valor-P de ', round(ph$p.value, 2), '.') } }) output$resul2 <- renderText({ inFile <- input$file1 if(is.null(inFile)) dt <- datos else dt <- read.csv(inFile$datapath, header=input$header, sep=input$sep) dt <- na.omit(dt) # Para eliminar obs con NA x <- dt[, input$variable1] group <- dt[, input$variable2] group <- as.factor(group) if (nlevels(group) != 2) { paste0("La variable cualitativa \n que eligió debe tener sólo \n 2 niveles.") } else { xx <- split(x, group) ph <- var.test(x=xx[[1]], y=xx[[2]], alternative=input$h0, ratio=1, conf.level=input$alfa) intervalo <- paste("(", round(ph$conf.int[1], digits=4), ", ", round(ph$conf.int[2], digits=4), ").", sep='') paste0('El intervalo de confianza del ', 100*input$alfa, '% para el cociente de varianzas poblacionales es ', intervalo) } }) })