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$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 obs') t(res) }, rownames = TRUE, align='c', bordered = TRUE) # Para obtener tabla con rownames 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 distiguir 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$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 <- t.test(x=xx[[1]], y=xx[[2]], alternative=input$h0, mu=input$delta0, conf.level=input$alfa, var.equal=input$var.equal) paste0('El estadístico de prueba es t0=', round(ph$statistic, 4), ' con un valor-P de ', round(ph$p.value, 4), '.') } }) 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 <- t.test(x=xx[[1]], y=xx[[2]], alternative=input$h0, mu=input$delta0, conf.level=input$alfa, var.equal=input$var.equal) 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 la diferencia de medias poblacionales es ', intervalo) } }) output$miteoria <- renderUI({ HTML(markdown::markdownToHTML(knit(input='teoria.md', quiet = TRUE))) }) })