From f4184e2fbb0bb08dc43992741eb1a078fdc93d6d Mon Sep 17 00:00:00 2001 From: Daniel Date: Mon, 11 Nov 2024 18:07:27 -0300 Subject: [PATCH] App --- .Rproj.user/9A1153C7/pcs/source-pane.pper | 2 +- .Rproj.user/9A1153C7/pcs/source-window.pper | 4 +- .../9A1153C7/pcs/windowlayoutstate.pper | 2 +- .Rproj.user/9A1153C7/sources/prop/B92398CD | 2 +- .Rproj.user/9A1153C7/sources/prop/F6A8DCF6 | 6 +- .Rproj.user/9A1153C7/sources/prop/INDEX | 1 + .Rproj.user/shared/notebooks/paths | 3 +- App/server.R | 95 ++++++++++++++++++- App/ui.R | 36 +++++-- README.md | 1 + docs/app.json | 2 +- 11 files changed, 135 insertions(+), 19 deletions(-) create mode 100644 README.md diff --git a/.Rproj.user/9A1153C7/pcs/source-pane.pper b/.Rproj.user/9A1153C7/pcs/source-pane.pper index be19143..965e284 100644 --- a/.Rproj.user/9A1153C7/pcs/source-pane.pper +++ b/.Rproj.user/9A1153C7/pcs/source-pane.pper @@ -1,4 +1,4 @@ { - "activeTab": 0, + "activeTab": 1, "activeTabSourceWindow0": 0 } \ No newline at end of file diff --git a/.Rproj.user/9A1153C7/pcs/source-window.pper b/.Rproj.user/9A1153C7/pcs/source-window.pper index 26fcf8b..61a4cda 100644 --- a/.Rproj.user/9A1153C7/pcs/source-window.pper +++ b/.Rproj.user/9A1153C7/pcs/source-window.pper @@ -1,7 +1,7 @@ { "sourceWindowGeometry": { - "w82hsabbadq8f": { - "ordinal": 4, + "wlgs0n0ezrjv8": { + "ordinal": 5, "x": 1920, "y": 37, "width": 1080, diff --git a/.Rproj.user/9A1153C7/pcs/windowlayoutstate.pper b/.Rproj.user/9A1153C7/pcs/windowlayoutstate.pper index e135abc..290329c 100644 --- a/.Rproj.user/9A1153C7/pcs/windowlayoutstate.pper +++ b/.Rproj.user/9A1153C7/pcs/windowlayoutstate.pper @@ -1,6 +1,6 @@ { "left": { - "splitterpos": 439, + "splitterpos": 440, "topwindowstate": "NORMAL", "panelheight": 944, "windowheight": 982 diff --git a/.Rproj.user/9A1153C7/sources/prop/B92398CD b/.Rproj.user/9A1153C7/sources/prop/B92398CD index 2df712e..e90ca60 100644 --- a/.Rproj.user/9A1153C7/sources/prop/B92398CD +++ b/.Rproj.user/9A1153C7/sources/prop/B92398CD @@ -1,6 +1,6 @@ { "source_window_id": "", "Source": "Source", - "cursorPosition": "5,0", + "cursorPosition": "126,74", "scrollLine": "0" } \ No newline at end of file diff --git a/.Rproj.user/9A1153C7/sources/prop/F6A8DCF6 b/.Rproj.user/9A1153C7/sources/prop/F6A8DCF6 index 0dd8f3c..eda6c00 100644 --- a/.Rproj.user/9A1153C7/sources/prop/F6A8DCF6 +++ b/.Rproj.user/9A1153C7/sources/prop/F6A8DCF6 @@ -1,6 +1,6 @@ { - "source_window_id": "w82hsabbadq8f", + "source_window_id": "", "Source": "Source", - "cursorPosition": "341,19", - "scrollLine": "297" + "cursorPosition": "0,14", + "scrollLine": "0" } \ No newline at end of file diff --git a/.Rproj.user/9A1153C7/sources/prop/INDEX b/.Rproj.user/9A1153C7/sources/prop/INDEX index 1f58c00..37ac7b0 100644 --- a/.Rproj.user/9A1153C7/sources/prop/INDEX +++ b/.Rproj.user/9A1153C7/sources/prop/INDEX @@ -3,3 +3,4 @@ ~%2FMEGA%2FProgramaci%C3%B3n%2FTrabajos%20en%20R%2FBookdown%2FCursos%20de%20Estad%C3%ADstica%2FApp%20Shiny%20de%20cursos%2FApp%20Estadistica%20II%2FApp%2Fui.R="4C7F59B4" ~%2FMEGA%2FProgramaci%C3%B3n%2FTrabajos%20en%20R%2FBookdown%2FCursos%20de%20Estad%C3%ADstica%2FApp%20Shiny%20de%20cursos%2FApp%20Estadistica%2FApp%2Fserver.R="F6A8DCF6" ~%2FMEGA%2FProgramaci%C3%B3n%2FTrabajos%20en%20R%2FBookdown%2FCursos%20de%20Estad%C3%ADstica%2FApp%20Shiny%20de%20cursos%2FApp%20Estadistica%2FApp%2Fui.R="B92398CD" +~%2FMEGA%2FProgramaci%C3%B3n%2FTrabajos%20en%20R%2FBookdown%2FCursos%20de%20Estad%C3%ADstica%2FApp%20Shiny%20de%20cursos%2FApp%20Estadistica%2FREADME.md="7434C68C" diff --git a/.Rproj.user/shared/notebooks/paths b/.Rproj.user/shared/notebooks/paths index 3a6f17c..d62891c 100644 --- a/.Rproj.user/shared/notebooks/paths +++ b/.Rproj.user/shared/notebooks/paths @@ -1 +1,2 @@ -/home/daniel/MEGA/Programación/Trabajos en R/Bookdown/Cursos de Estadística/App Shiny de cursos/App Estadistica II/.Rbuildignore="D9492D28" +/home/daniel/MEGA/Programación/Trabajos en R/Bookdown/Cursos de Estadística/App Shiny de cursos/App Estadistica/App/server.R="A028F835" +/home/daniel/MEGA/Programación/Trabajos en R/Bookdown/Cursos de Estadística/App Shiny de cursos/App Estadistica/README.md="A87FC22D" diff --git a/App/server.R b/App/server.R index 2c0eff3..51f9db2 100644 --- a/App/server.R +++ b/App/server.R @@ -2,7 +2,6 @@ library(shiny) function(input, output, session) { - ### Distribuciones muestrales observeEvent(input$distribucionDM1,{ @@ -392,6 +391,70 @@ function(input, output, session) { }) } }) + + ### Pruebas de hipótesis + + # Función para generar el gráfico del estadístico de prueba + + # Función para generar el gráfico del IC + grafico_IC_PH = function(ic, mediaMuestra, varianza, mu0, tipoPH, nMuestra){ + + limites = mu0 + c(-1,1)*3*sqrt(varianza/nMuestra) + + valores_x = seq(from = limites[1], to = limites[2], by = 0.01) + plot(x = valores_x, y = dnorm(x = valores_x, mean = mu0, sd = sqrt(varianza/nMuestra)), + main = "Distribución de la media", xlab = "Valores del promedio", ylab = "Densidad", + las = 1, xaxt = "n", type = "l", bty = "n") + axis(side = 1, at = round(c(limites[1], mu0, limites[2]), 3), + labels = round(c(limites[1], mu0, limites[2]), 3), + col.axis = "darkblue", cex.axis = 1.2) + + } + + valor_critico = function(confianza, tipo, mu0, varianza, nMuestra, mediaMuestra){ + if(tipo == "two.sided") { + valor_critico = qnorm(1 - (1 - confianza)/2) + } else if(tipo == "less") { + valor_critico = qnorm(1 - confianza) + } else { + valor_critico = qnorm(confianza) + } + + estadistico_prueba = (mediaMuestra - mu0)/(sqrt(varianza/nMuestra)) + + return(c(estadistico_prueba, valor_critico)) + } + + + observeEvent(input$go_PH, { + confianza = input$confianzaPH/100 + mu0 = input$mu0PH + mediaMuestra = input$mediaMuestraPH + tipoPH = switch(input$tipoPH, "Bilateral" = "two.sided", "Unilateral derecha" = "greater", "Unilateral izquierda" = "less") + extremos = switch(tipoPH, "two.sided" = 1:2, "less" = 2, "greater" = 1) + varianza = input$sigma2PH + nombre_media = "Una" + nMuestra = input$nPH + + # Los argumentos data debe ser el promedio n veces para que calce con el cálculo del IC de la función "calculo_IC" + ic = calculo_IC(data1 = rep(mediaMuestra, nMuestra), tipo = tipoPH, varianzas_conocidas = TRUE, varianza = varianza, + extremos = extremos, confianza = confianza, media = mediaMuestra, tamanos_muestrales = nMuestra) + + valor_critico = valor_critico(confianza = confianza, tipo = tipoPH, mu0 = mu0, varianza = varianza, + nMuestra = nMuestra, mediaMuestra = mediaMuestra) + + output$plot_ph = renderPlot({ + plot(ic[1], ic[2]) + }, height = 400) + + output$plot_ic_ph = renderPlot({ + grafico_IC_PH(ic = ic, media = mediaMuestra, varianza = varianza, mu0 = mu0, tipoPH = tipoPH, nMuestra = nMuestra) + }, height = 400) + + }) + + +# End general function } @@ -402,3 +465,33 @@ function(input, output, session) { + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/App/ui.R b/App/ui.R index 86e61a4..79e76a0 100644 --- a/App/ui.R +++ b/App/ui.R @@ -17,13 +17,8 @@ panelLateral = dashboardSidebar( "Distribuciones muestrales", startExpanded = TRUE, tabName = "DM", menuSubItem("TCL", tabName = "DM1") ), - menuItem("IC: Intervalos de confianza", tabName = "IC")#, - # menuItem( - # "Pruebas de Hipótesis", tabName = "PH", startExpanded = TRUE, - # menuSubItem("Para una media", tabName = "PH1"), - # menuSubItem("Para dos medias", tabName = "PH2"), - # menuSubItem("Para varianzas", tabName = "PH3") - # ), + menuItem("IC: Intervalos de confianza", tabName = "IC"), + menuItem("Pruebas de Hipótesis", tabName = "PH")#, # menuItem( # "Regresión Lineal", tabName = "RL", startExpanded = TRUE, # menuSubItem("Simple", tabName = "RL1"), @@ -117,12 +112,37 @@ cuerpo_IC = sidebarLayout( ) ) +simulador3 = actionButton(inputId = "go_PH", label = "Simular") + +cuerpo_PH = sidebarLayout( + sidebarPanel( + width = 3, + radioButtons(inputId = "mediasPH", label = "Medias", choices = c("Una")),#, "Dos")), + radioButtons(inputId = "varianazasPH", label = "Varianzas", choices = c("Conocidas")),#, "Desconocidas")), + radioButtons(inputId = "tipoPH", label = "Tipo de prueba", choices = c("Bilateral", "Unilateral derecha", "Unilateral izquierda")), + sliderInput(inputId = "mu0PH", label = "Media bajo Hipótesis nula", min = -20, max = 20, value = 0, step = 0.1), + sliderInput(inputId = "sigma2PH", label = "Varianza poblacional", min = 1, max = 20, value = 6, step = 0.1), + sliderInput(inputId = "mediaMuestraPH", label = "Media muestral", min = -20, max = 20, value = 2, step = 0.1), + sliderInput(inputId = "nPH", label = "Tamaño muestral", min = 10, max = 200, value = 120, step = 10), + sliderInput(inputId = "confianzaPH", label = "% Confianza", min = 10, max = 99, value = 95, step = 1), + simulador3 + ), + mainPanel( + width = 9, + fluidRow( + column(width = 6, plotOutput("plot_ph")), + column(width = 6, plotOutput("plot_ic_ph")) + ) + ) +) + # Asignando los cuerpos por filtro hoja_DM = tabItem(tabName = "DM1", fluidPage(cuerpo_DM1)) hoja_IC = tabItem(tabName = "IC", fluidPage(cuerpo_IC)) +hoja_PH = tabItem(tabName = "PH", fluidPage(cuerpo_PH)) cuerpo = dashboardBody( - tabItems(hoja_DM, hoja_IC) + tabItems(hoja_DM, hoja_IC, hoja_PH) ) # Despliegue general diff --git a/README.md b/README.md new file mode 100644 index 0000000..97fba5a --- /dev/null +++ b/README.md @@ -0,0 +1 @@ +# Aplicació web de conceptos básicos de Estadística diff --git a/docs/app.json b/docs/app.json index 5e4ffa3..2b98972 100644 --- a/docs/app.json +++ b/docs/app.json @@ -1 +1 @@ -[{"name":"server.R","content":"library(shiny)\n\nfunction(input, output, session) {\n \n \n ### Distribuciones muestrales\n \n observeEvent(input$distribucionDM1,{\n output$Histograma_promedios = renderPlot({\n plot(1, 1, col = \"white\", ylab = \"\", xlab = \"\", axes = F)\n })\n \n output$fdp_fmp_simulaciones = renderPlot({\n plot(1, 1, col = \"white\", ylab = \"\", xlab = \"\", axes = F)\n })\n })\n \n histTCL = function(valores, media, desviacion, simulaciones){\n medias = unlist(lapply(X = valores, FUN = mean))\n factor = max(abs(media - c(min(medias), max(medias))))\n lim_inf = media - factor; lim_sup = media + factor\n grilla = seq(from = lim_inf, to = lim_sup, by = 0.001)\n teoricos = dnorm(x = grilla, mean = media, sd = desviacion)\n \n densidad_medias = density(medias)\n hist(x = medias, main = \"Distribución de las medias\", ylab = \"Función de densidad\",\n xlab = \"Valores de la media en las simulaciones\", freq = FALSE, las = 1, breaks = round(1 + log2(simulaciones)),\n xlim = c(lim_inf, lim_sup), ylim = c(0, max(densidad_medias$y, teoricos)*1.1))\n lines(densidad_medias , col = \"darkred\")\n lines(x = grilla, y = teoricos, col = \"darkblue\")\n legend(\n \"topright\", title = \"Distribución\", bty = \"n\",\n legend = c(\"Aproximada \", paste0(\"Teórica - TCL: N(\", media, \", \", round(desviacion^2,5), \")\")),\n lty = 1, col = c(\"darkred\", \"darkblue\")\n )\n }\n \n densidad_masa = function(x, valores, tipo, graph = \"p\"){\n plot(x, valores, main = paste(\"Función de \", tipo, \" probabilidad\"),\n xlab = \"Valores de X\", ylab = \"\", las = 1, type = graph, pch = 16)\n }\n \n plot_simulaciones = function(valores, dominio){\n largo = length(valores[[1]])\n cantidad = 4\n datos = data.frame(\n \"valores\" = unlist(valores[1:cantidad]),\n \"dominio\" = rep(1:cantidad, rep(largo, cantidad))\n )\n plot(\n datos$dominio, datos$valores,\n main = paste(\"Primeras \", cantidad, \" simulaciones\"),\n xlab = \"Simulación\", ylab = \"Valores de X simulados\", xaxt = \"n\",\n las = 1, pch = 16, ylim = c(min(datos$valores), max(datos$valores)*1.4)\n )\n axis(side = 1, at = 1:cantidad, labels = paste0(\"S\", 1:cantidad))\n legend(\n \"top\", \n legend = paste0(rep(\"S\", cantidad), 1:cantidad, rep(\": \", cantidad),\n unlist(lapply(X = valores[1: cantidad], FUN = function(x){return(round(mean(x), 4))}))),\n bty = \"n\", title = \"Media de la simulación\", ncol = 2)\n }\n\n observeEvent(input$go_DM1,{\n \n n = input$nDM1\n simulaciones = input$simulacionesDM1\n \n if(input$distribucionDM1 == \"Normal\"){\n media = input$mediaDM1_normal\n sigma = sqrt(input$varianzaDM1_normal)\n desviacion = sigma/sqrt(n)\n valores = lapply(X = as.list(1:simulaciones), FUN = function(sim){\n return(rnorm(n = n, mean = media, sd = sigma))\n })\n \n output$Histograma_promedios = renderPlot({\n histTCL(valores, media, desviacion, simulaciones)\n })\n \n output$fdp_fmp_simulaciones = renderPlot({\n medias = unlist(lapply(X = valores, FUN = mean))\n factor = max(abs(media - c(min(medias), max(medias))))\n lim_inf = media - factor; lim_sup = media + factor\n grilla = seq(from = lim_inf, to = lim_sup, by = 0.001)\n teoricos = dnorm(x = grilla, mean = media, sd = desviacion)\n \n par(mfrow = c(1,2))\n plot_simulaciones(valores)\n densidad_masa(x = grilla, valores = teoricos, tipo = \"densidad\", graph = \"l\")\n })\n \n } else if(input$distribucionDM1 == \"Exponencial\"){\n tasa = input$tasaDM1_exponencial\n media = tasa\n desviacion = sqrt(tasa^2/n)\n \n valores = lapply(X = as.list(1:simulaciones), FUN = function(sim){\n return(rexp(n = n, rate = 1/tasa))\n })\n \n output$Histograma_promedios = renderPlot({\n histTCL(valores, media, desviacion, simulaciones)\n })\n \n output$fdp_fmp_simulaciones = renderPlot({\n teoricos = dexp(seq(from = 0, to = 30, by = 0.001), rate = 1/tasa)\n par(mfrow = c(1,2))\n plot_simulaciones(valores)\n densidad_masa(x = seq(from = 0, to = 30, by = 0.001), valores = teoricos, tipo = \"densidad\", graph = \"l\")\n })\n \n } else if(input$distribucionDM1 == \"Binomial\") {\n ensayos = input$nDM1_binomial\n p = input$pDM1_binomial\n media = ensayos*p\n desviacion = sqrt(ensayos*p*(1-p)/n)\n \n valores = lapply(X = as.list(1:simulaciones), FUN = function(sim){\n return(rbinom(n = n, size = ensayos, prob = p))\n })\n\n output$Histograma_promedios = renderPlot({\n histTCL(valores, media, desviacion, simulaciones)\n })\n \n output$fdp_fmp_simulaciones = renderPlot({\n teoricos = dbinom(x = 0:ensayos, size = ensayos, prob = p)\n par(mfrow = c(1,2))\n plot_simulaciones(valores)\n densidad_masa(x = 0:ensayos, valores = teoricos,, tipo = \"masa\")\n })\n \n } else if(input$distribucionDM1 == \"Poisson\"){\n tasa = input$tasaDM1_poisson\n media = tasa\n desviacion = sqrt(tasa/n)\n \n valores = lapply(X = as.list(1:simulaciones), FUN = function(sim){\n return(rpois(n = n, lambda = tasa))\n })\n \n output$Histograma_promedios = renderPlot({\n histTCL(valores, media, desviacion, simulaciones)\n })\n \n output$fdp_fmp_simulaciones = renderPlot({\n teoricos = dpois(x = 0:30, lambda = tasa)\n par(mfrow = c(1,2))\n plot_simulaciones(valores)\n densidad_masa(x = 0:30, valores = teoricos, tipo = \"masa\")\n })\n }\n })\n \n \n ### Intervalos de confianza\n \n hist_muestra_IC = function(x, y = NULL, nombre_media = nombre_media, control_lanzamiento = FALSE, colores){\n \n color = ifelse(\"red\" %in% colores, \"red\", \"grey\")\n \n if(nombre_media == \"Una\") {\n titulo = ifelse(control_lanzamiento, \"Distribución de los datos de \\n la muestra del último IC\",\n paste(\"Distribución de los datos de la muestra \\n del IC número\", punto_seleccionado()))\n hist(x, main = titulo, xlab = \"Valores de la muestra\", ylab = \"Frecuencia\", las = 1, col = color)\n } else {\n titulo = ifelse(control_lanzamiento, \"Distribuciones de los datos \\n de las muestras del último IC\",\n paste(\"Distribuciones de los datos de las muestras \\n del IC número\", punto_seleccionado()))\n par(mfrow = c(2,1))\n h1 = hist(x)\n h2 = hist(y)\n par(mar = c(0,5,3,3))\n plot(h1, col = color, xlim = c(min(x, y), max(x,y)), ylim = c(0, max(h1$counts, h2$counts)),\n las = 1, ylab = \"Frecuencias de X\", xaxt = \"n\", main = titulo)\n par(mar = c(5,5,0,3))\n plot(h2, col = color, xlim = c(min(x, y), max(x,y)), ylim = c(max(h1$counts, h2$counts), 0),\n las = 1, main = \"\", ylab = \"Frecuencias de Y\", xlab = \"Valores de la muestra\")\n }\n }\n \n hist_medias_IC = function(x, nombre_media = nombre_media){\n if(nombre_media == \"Una\") {\n hist(x, main = \"Distribución de las medias muestrales\", xlab = \"Valores de la muestra\",\n ylab = \"Frecuencia\", las = 1)\n } else {\n hist(x, main = \"Distribución de las diferencias \\n de las medias muestrales (X-Y)\", xlab = \"Valores de la muestra\",\n ylab = \"Frecuencia\", las = 1)\n }\n }\n \n simulaciones_muestras = function(nombre_media = nombre_media){\n muestras = lapply(X = as.list(1:input$simulacionesIC), FUN = function(sim){\n if(nombre_media == \"Una\") {\n data1 = rnorm(n = input$nIC, mean = input$muIC, sd = sqrt(input$sigma2IC))\n } else {\n data1 = rnorm(n = input$nICX, mean = input$muICX, sd = sqrt(input$varianzaUnaMediaX))\n data2 = rnorm(n = input$nICY, mean = input$muICY, sd = sqrt(input$varianzaUnaMediaY))\n data1 = list(\"data1\" = data1, \"data2\" = data2)\n }\n return(data1)\n })\n return(muestras)\n }\n \n calculo_IC = function(data1, data2 = NULL, tipo, varianzas_conocidas, tipo_varianzas = FALSE, extremos,\n confianza, varianza = NA, varianzaX = NA, varianzaY = NA, tamanos_muestrales = NA, media = media){\n \n if(varianzas_conocidas == FALSE){\n limites = t.test(x = data1, y = data2, conf.level = confianza, alternative = tipo, var.equal = tipo_varianzas)$conf.int[extremos] \n } else {\n if (is.null(data2)) {\n if(tipo == \"two.sided\") {\n limites = mean(data1) + c(-1,1)*qnorm(1 - (1- confianza)/2)*sqrt(varianza/tamanos_muestrales[1])\n } else if(tipo == \"less\") {\n limites = mean(data1) + qnorm(confianza)*sqrt(varianza/tamanos_muestrales[1])\n } else {\n limites = mean(data1) - qnorm(confianza)*sqrt(varianza/tamanos_muestrales[1])\n }\n } else {\n if(tipo == \"two.sided\") {\n limites = c(mean(data1) - mean(data2) - qnorm(1 - (1- confianza)/2)*sqrt(varianzaX/tamanos_muestrales[1] + varianzaY/tamanos_muestrales[2]),\n mean(data1) - mean(data2) + qnorm(1 - (1 - confianza)/2)*sqrt(varianzaX/tamanos_muestrales[1] + varianzaY/tamanos_muestrales[2]))\n } else if(tipo == \"less\") {\n limites = mean(data1) - mean(data2) + qnorm(confianza)*sqrt(varianzaX/tamanos_muestrales[1] + varianzaY/tamanos_muestrales[2])\n } else {\n limites = mean(data1) - mean(data2) - qnorm(confianza)*sqrt(varianzaX/tamanos_muestrales[1] + varianzaY/tamanos_muestrales[2])\n }\n }\n }\n \n if(tipo == \"greater\") {\n limites = c(limites, limites[1] + 0.5*sqrt(varianza))\n colores = c(ifelse(limites[1] > media, \"red\", \"black\"), \"white\")\n } else if(tipo == \"less\") {\n limites = c(limites[1] - 0.5*sqrt(varianza), limites)\n colores = c(\"white\", ifelse(limites[2] < media, \"red\", \"black\"))\n } else {\n colores = rep(ifelse(limites[1] < media & limites[2] > media, \"black\", \"red\"), 2)\n }\n return(c(limites, colores))\n }\n \n grafico_IC = function(x, y, colores, limites_x, simulaciones, media, nombre_media, tipoIC){\n plot(\n x = x, y = 1:simulaciones, col = colores[,1], pch = 16, las = 1, bty = \"n\",\n ylim = c(-10, simulaciones), xlim = limites_x, xaxt = \"n\", yaxt = \"n\",\n xlab = \"Valores del IC\", ylab = \"Número de simulación\",\n main = ifelse(nombre_media == \"Una\",\n \"IC para la media proveniente \\n de una distribución normal\",\n \"IC para la diferencia de medias (X-Y) \\n provenientes de distribuciones normales\")\n )\n axis(side = 1, at = c(limites_x[1], media, limites_x[2]), labels = c(limites_x[1], media, limites_x[2]), xlim = limites_x)\n axis(side = 2, at = round(seq(from = 1, to = simulaciones, length.out = 10), 0))\n points(x = y, y = 1:simulaciones, pch = 16, col = colores[,2])\n if(tipoIC == \"less\"){\n arrows(x1 = x, x0 = y, y1 = 1:simulaciones, y0 = 1:simulaciones, length = 0.07, col = colores[,2])\n rojos = round(sum(colores[,2] == \"red\")/length(colores[,2])*100, digits = 2)\n negros = 100 - rojos\n } else if(tipoIC == \"greater\") {\n arrows(x0 = x, x1 = y, y0 = 1:simulaciones, y1 = 1:simulaciones, length = 0.07, col = colores[,1])\n rojos = round(sum(colores[,1] == \"red\")/length(colores[,2])*100, digits = 2)\n negros = 100 - rojos\n } else {\n segments(x0 = x, x1 = y, y0 = 1:simulaciones, y1 = 1:simulaciones, col = colores[,1])\n rojos = round(sum(colores[,1] == \"red\")/length(colores[,1])*100, digits = 2)\n negros = 100 - rojos\n }\n rojos = paste(rojos, \"%\")\n negros = paste(negros, \"%\")\n # abline(v = media, col = \"black\", lty = 2)\n segments(x0 = media, y0 = 0, x1 = media, y1 = simulaciones+1, lty = 2)\n legend(\"bottomleft\", legend = c(negros, rojos), lty = 1, col = c(\"black\", \"red\"), title = \"Proporción de IC\", bty = \"n\")\n legend(\"bottomright\", legend = c(\"Haga click en un IC (o cerca) \\n para ver la distribución de los \\n datos de la muestra. \\n \\n\"), bty = \"n\")\n }\n \n IC = function(tipo_varianzas, tipoIC, extremos, confianza, varianza, varianzaX = NA, varianzaY = NA,\n tamanos_muestrales, media = media, nombre_media = nombre_media){\n muestras_simuladas = simulaciones_muestras(nombre_media = nombre_media)\n ics = lapply(X = muestras_simuladas, FUN = function(muestra){\n if(input$VarianzasIC != \"Conocidas\") {\n if(input$MediasIC == \"Una\") {\n ic = calculo_IC(data1 = muestra, tipo = tipoIC, varianzas_conocidas = FALSE, varianza = varianza,\n extremos = extremos, confianza = confianza, media = media)\n } else {\n ic = calculo_IC(data1 = muestra$data1, data2 = muestra$data2, tipo = tipoIC, varianzas_conocidas = FALSE,\n tipo_varianzas = tipo_varianzas, extremos = extremos, confianza = confianza, media = media,\n varianza = varianza,)\n }\n } else {\n if(input$MediasIC == \"Una\") {\n ic = calculo_IC(data1 = muestra, tipo = tipoIC, varianzas_conocidas = TRUE, tipo_varianzas = tipo_varianzas,\n extremos = extremos, confianza = confianza, varianza = varianza, tamanos_muestrales = tamanos_muestrales,\n media = media)\n } else {\n ic = calculo_IC(data1 = muestra$data1, data2 = muestra$data2, tipo = tipoIC, varianzas_conocidas = TRUE,\n tipo_varianzas = tipo_varianzas, extremos = extremos, confianza = confianza, varianza = varianza,\n varianzaX = varianzaX, varianzaY = varianzaY, tamanos_muestrales = tamanos_muestrales, media = media)\n }\n }\n return(ic)\n })\n ics = as.data.frame(matrix(unlist(ics), ncol = 4, byrow = TRUE))\n ics[,1] = as.numeric(ics[,1])\n ics[,2] = as.numeric(ics[,2])\n return(list(ics, muestras_simuladas))\n }\n \n muestras = NULL\n ic = NULL\n nombre_media_global = NULL\n simulaciones_global = NULL\n \n observeEvent(input$go_IC,{\n confianza = input$ConfianzaIC/100\n simulaciones = input$simulacionesIC\n simulaciones_global <<- simulaciones\n media = ifelse(input$MediasIC == \"Una\", input$muIC, input$muICX - input$muICY)\n tipoIC = switch(input$tipoIC, \"Bilateral\" = \"two.sided\", \"Acotado por la derecha\" = \"less\", \"Acotado por la izquierda\" = \"greater\")\n extremos = switch(tipoIC, \"two.sided\" = 1:2, \"less\" = 2, \"greater\" = 1)\n varianza = ifelse(input$MediasIC == \"Una\", input$sigma2IC, (input$varianzaUnaMediaX + input$varianzaUnaMediaY)/2)\n tipo_varianzas = switch(input$VarianzasICMedias, \"Iguales\" = TRUE, \"Distintas\" = FALSE)\n nombre_media = ifelse(input$MediasIC == \"Una\", \"Una\", \"Dos\")\n nombre_media_global <<- nombre_media\n varianzaX = input$varianzaUnaMediaX\n varianzaY = input$varianzaUnaMediaY\n tamanos_muestrales = c(input$nIC, input$nICX, input$nICY)\n \n ic_y_muestras = IC(tipo_varianzas = tipo_varianzas, tipoIC = tipoIC, extremos = extremos, confianza = confianza,\n varianza = varianza, varianzaX = varianzaX, varianzaY = varianzaY,\n tamanos_muestrales = tamanos_muestrales, media = media, nombre_media = nombre_media)\n ic <<- ic_y_muestras[[1]]\n muestras <<- ic_y_muestras[[2]]\n \n dif_maxima = max(abs(c(media - c(ic[,1], ic[,2]))))\n maximo = round(media + 1.5*dif_maxima, digits = 4)\n minimo = round(media - 1.5*dif_maxima, digits = 4)\n \n output$plot_ic = renderPlot({\n grafico_IC(x = ic[,1], y = ic[,2], colores = ic[,3:4], limites_x = c(minimo, maximo),\n simulaciones = simulaciones, media = media, nombre_media = nombre_media, tipoIC = tipoIC)\n }, height = 800)\n \n punto_seleccionado(NULL)\n output$histogramaIC = renderPlot({\n if(nombre_media == \"Una\"){\n hist_muestra_IC(x = muestras[[simulaciones]], nombre_media = nombre_media,\n control_lanzamiento = TRUE, colores = ic[simulaciones,3:4])\n } else {\n hist_muestra_IC(x = muestras[[simulaciones]]$data1, y = muestras[[simulaciones]]$data2,\n nombre_media = nombre_media, control_lanzamiento = TRUE, colores = ic[simulaciones,3:4])\n }\n })\n \n output$histograma_medias_IC = renderPlot({\n if(nombre_media == \"Una\"){\n hist_medias_IC(x = unlist(lapply(X = muestras, FUN = mean)), nombre_media = nombre_media)\n } else {\n hist_medias_IC(\n x = unlist(lapply(X = muestras, FUN = function(muestra){\n return(mean(muestra$data1) - mean(muestra$data2))\n })),\n nombre_media = nombre_media)\n }\n })\n })\n \n punto_seleccionado = reactiveVal(NULL)\n \n observeEvent(input$plot_click, {\n click_y = input$plot_click$y\n punto_seleccionado(round(click_y))\n if(punto_seleccionado() >= 1 & punto_seleccionado() <= simulaciones_global){\n output$histogramaIC = renderPlot({\n if(nombre_media_global == \"Una\"){\n hist_muestra_IC(x = muestras[[punto_seleccionado()]], nombre_media = nombre_media_global,\n control_lanzamiento = FALSE, colores = ic[punto_seleccionado(),3:4])\n } else {\n hist_muestra_IC(x = muestras[[punto_seleccionado()]]$data1, y = muestras[[punto_seleccionado()]]$data2,\n nombre_media = nombre_media_global, control_lanzamiento = FALSE, colores = ic[punto_seleccionado(),3:4])\n }\n })\n } else {\n output$histogramaIC = renderPlot({\n if(nombre_media_global == \"Una\"){\n hist_muestra_IC(x = muestras[[simulaciones_global]], nombre_media = nombre_media_global,\n control_lanzamiento = TRUE, colores = ic[simulaciones_global,3:4])\n } else {\n hist_muestra_IC(x = muestras[[simulaciones_global]]$data1, y = muestras[[simulaciones_global]]$data2,\n nombre_media = nombre_media_global, control_lanzamiento = TRUE, colores = ic[simulaciones_global,3:4])\n }\n })\n }\n })\n}\n\n\n\n\n\n\n\n\n\n","type":"text"},{"name":"ui.R","content":"library(shiny)\nlibrary(shinydashboard)\nlibrary(Cairo)\noptions(shiny.usecairo = T)\n\n# Encabezado general\n\nencabezado = dashboardHeader(title = \"Estadística\")\n\n# Panel lateral general: filtro de temas\n\npanelLateral = dashboardSidebar(\n # useShinyjs(),\n collapsed = FALSE,\n sidebarMenu(\n menuItem(\n \"Distribuciones muestrales\", startExpanded = TRUE, tabName = \"DM\",\n menuSubItem(\"TCL\", tabName = \"DM1\")\n ),\n menuItem(\"IC: Intervalos de confianza\", tabName = \"IC\")#,\n # menuItem(\n # \"Pruebas de Hipótesis\", tabName = \"PH\", startExpanded = TRUE,\n # menuSubItem(\"Para una media\", tabName = \"PH1\"),\n # menuSubItem(\"Para dos medias\", tabName = \"PH2\"),\n # menuSubItem(\"Para varianzas\", tabName = \"PH3\")\n # ),\n # menuItem(\n # \"Regresión Lineal\", tabName = \"RL\", startExpanded = TRUE,\n # menuSubItem(\"Simple\", tabName = \"RL1\"),\n # menuSubItem(\"Múltiple\", tabName = \"RL2\")\n # )\n )\n)\n\n# Paneles: cuerpo de cada panel del Panel lateral\n# Un cuerpo se puede volver a dividir en otro tipo de Layout\n\nsimulador = actionButton(inputId = \"go_DM1\", label = \"Simular\")\n\ncuerpo_DM1 = sidebarLayout(\n sidebarPanel(\n width = 3,\n selectInput(inputId = \"distribucionDM1\", label = \"Distribución\", choices = c(\"Normal\", \"Exponencial\", \"Binomial\", \"Poisson\")),\n conditionalPanel(\n condition = \"input.distribucionDM1 == 'Normal'\",\n sliderInput(inputId = \"mediaDM1_normal\", label = \"Media poblacional\", min = 0, max = 20, value = 12, step = 0.2),\n sliderInput(inputId = \"varianzaDM1_normal\", label = \"Varianza poblacional\", min = 0, max = 20, value = 2, step = 0.1),\n ),\n conditionalPanel(\n condition = \"input.distribucionDM1 == 'Binomial'\",\n sliderInput(inputId = \"nDM1_binomial\", label = \"Ensayos\", min = 1, max = 100, value = 12, step = 1),\n sliderInput(inputId = \"pDM1_binomial\", label = \"Probabilidad de éxito\", min = 0, max = 1, value = 0.4, step = 0.05),\n ),\n conditionalPanel(\n condition = \"input.distribucionDM1 == 'Exponencial'\",\n sliderInput(inputId = \"tasaDM1_exponencial\", label = \"Tasa\", min = 0, max = 20, value = 5, step = 0.1)\n ),\n conditionalPanel(\n condition = \"input.distribucionDM1 == 'Poisson'\",\n sliderInput(inputId = \"tasaDM1_poisson\", label = \"Tasa\", min = 0, max = 20, value = 8, step = 0.1)\n ),\n sliderInput(inputId = \"nDM1\", label = \"Tamaño muestral\", min = 100, max = 1000, value = 200, step = 50),\n sliderInput(inputId = \"simulacionesDM1\", label = \"Cantidad de simulaciones\", min = 100, max = 7000, value = 1300, step = 100),\n simulador\n ),\n mainPanel(\n width = 9,\n plotOutput(\"Histograma_promedios\"), plotOutput(\"fdp_fmp_simulaciones\")\n )\n)\n\nsimulador2 = actionButton(inputId = \"go_IC\", label = \"Simular\")\n\ncuerpo_IC = sidebarLayout(\n sidebarPanel(\n width = 3,\n fluidRow(\n column(width = 4, radioButtons(inputId = \"MediasIC\", label = \"Medias\", choices = c(\"Una\", \"Dos\"))),\n column(width = 8, radioButtons(inputId = \"VarianzasIC\", label = \"Varianzas\", choices = c(\"Conocidas\", \"Desconocidas\")))\n ),\n conditionalPanel(\n condition = \"input.VarianzasIC == 'Desconocidas' && input.MediasIC == 'Dos'\",\n radioButtons(inputId = \"VarianzasICMedias\", label = \"Varianzas desconocidas\", choices = c(\"Iguales\", \"Distintas\"))\n ),\n sliderInput(inputId = \"ConfianzaIC\", label = \"% Confianza\", min = 10, max = 99, value = 90, step = 1),\n radioButtons(inputId = \"tipoIC\", label = \"Tipo de IC\", choices = c(\"Bilateral\", \"Acotado por la derecha\", \"Acotado por la izquierda\")),\n conditionalPanel(\n condition = \"input.MediasIC == 'Una'\",\n sliderInput(inputId = \"muIC\", label = \"Media poblacional\", min = -20, max = 20, value = 0, step = 0.1),\n sliderInput(inputId = \"sigma2IC\", label = \"Varianza poblacional\", min = 5, max = 30, value = 10, step = 0.1),\n sliderInput(inputId = \"nIC\", label = \"Tamaño muestral\", min = 10, max = 200, value = 120, step = 10)\n ),\n conditionalPanel(\n condition = \"input.MediasIC == 'Dos'\",\n fluidRow(\n column(width = 6, sliderInput(inputId = \"muICX\", label = \"Media poblacional X\", min = -10, max = 10, value = 0, step = 0.5)),\n column(width = 6, sliderInput(inputId = \"muICY\", label = \"Media poblacional Y\", min = -10, max = 10, value = 7, step = 0.5))\n ),\n fluidRow(\n column(width = 6, sliderInput(inputId = \"varianzaUnaMediaX\", label = \"Varianza poblacional X\", min = 10, max = 25, value = 12, step = 0.5)),\n column(width = 6, sliderInput(inputId = \"varianzaUnaMediaY\", label = \"Varianza poblacional Y\", min = 10, max = 25, value = 16, step = 0.5))\n ),\n fluidRow(\n column(width = 6, sliderInput(inputId = \"nICX\", label = \"Tamaño muestral X\", min = 50, max = 150, value = 120, step = 10)),\n column(width = 6, sliderInput(inputId = \"nICY\", label = \"Tamaño muestral Y\", min = 50, max = 150, value = 80, step = 10))\n ),\n ),\n sliderInput(inputId = \"simulacionesIC\", label = \"Cantidad de simulaciones\", min = 10, max = 100, value = 60, step = 1),\n simulador2\n ),\n mainPanel(\n width = 9,\n fluidRow(\n column(width = 6, plotOutput(\"plot_ic\", click = \"plot_click\", height = \"800px\")),\n column(width = 6, plotOutput(\"histogramaIC\"), plotOutput(\"histograma_medias_IC\"))\n )\n )\n)\n\n# Asignando los cuerpos por filtro\nhoja_DM = tabItem(tabName = \"DM1\", fluidPage(cuerpo_DM1))\nhoja_IC = tabItem(tabName = \"IC\", fluidPage(cuerpo_IC))\n\ncuerpo = dashboardBody(\n tabItems(hoja_DM, hoja_IC)\n)\n\n# Despliegue general\nui = dashboardPage(encabezado, panelLateral, cuerpo, skin = \"black\")","type":"text"}] +[{"name":"server.R","content":"library(shiny)\n\nfunction(input, output, session) {\n \n ### Distribuciones muestrales\n \n observeEvent(input$distribucionDM1,{\n output$Histograma_promedios = renderPlot({\n plot(1, 1, col = \"white\", ylab = \"\", xlab = \"\", axes = F)\n })\n \n output$fdp_fmp_simulaciones = renderPlot({\n plot(1, 1, col = \"white\", ylab = \"\", xlab = \"\", axes = F)\n })\n })\n \n histTCL = function(valores, media, desviacion, simulaciones){\n medias = unlist(lapply(X = valores, FUN = mean))\n factor = max(abs(media - c(min(medias), max(medias))))\n lim_inf = media - factor; lim_sup = media + factor\n grilla = seq(from = lim_inf, to = lim_sup, by = 0.001)\n teoricos = dnorm(x = grilla, mean = media, sd = desviacion)\n \n densidad_medias = density(medias)\n hist(x = medias, main = \"Distribución de las medias\", ylab = \"Función de densidad\",\n xlab = \"Valores de la media en las simulaciones\", freq = FALSE, las = 1, breaks = round(1 + log2(simulaciones)),\n xlim = c(lim_inf, lim_sup), ylim = c(0, max(densidad_medias$y, teoricos)*1.1))\n lines(densidad_medias , col = \"darkred\")\n lines(x = grilla, y = teoricos, col = \"darkblue\")\n legend(\n \"topright\", title = \"Distribución\", bty = \"n\",\n legend = c(\"Aproximada \", paste0(\"Teórica - TCL: N(\", media, \", \", round(desviacion^2,5), \")\")),\n lty = 1, col = c(\"darkred\", \"darkblue\")\n )\n }\n \n densidad_masa = function(x, valores, tipo, graph = \"p\"){\n plot(x, valores, main = paste(\"Función de \", tipo, \" probabilidad\"),\n xlab = \"Valores de X\", ylab = \"\", las = 1, type = graph, pch = 16)\n }\n \n plot_simulaciones = function(valores, dominio){\n largo = length(valores[[1]])\n cantidad = 4\n datos = data.frame(\n \"valores\" = unlist(valores[1:cantidad]),\n \"dominio\" = rep(1:cantidad, rep(largo, cantidad))\n )\n plot(\n datos$dominio, datos$valores,\n main = paste(\"Primeras \", cantidad, \" simulaciones\"),\n xlab = \"Simulación\", ylab = \"Valores de X simulados\", xaxt = \"n\",\n las = 1, pch = 16, ylim = c(min(datos$valores), max(datos$valores)*1.4)\n )\n axis(side = 1, at = 1:cantidad, labels = paste0(\"S\", 1:cantidad))\n legend(\n \"top\", \n legend = paste0(rep(\"S\", cantidad), 1:cantidad, rep(\": \", cantidad),\n unlist(lapply(X = valores[1: cantidad], FUN = function(x){return(round(mean(x), 4))}))),\n bty = \"n\", title = \"Media de la simulación\", ncol = 2)\n }\n\n observeEvent(input$go_DM1,{\n \n n = input$nDM1\n simulaciones = input$simulacionesDM1\n \n if(input$distribucionDM1 == \"Normal\"){\n media = input$mediaDM1_normal\n sigma = sqrt(input$varianzaDM1_normal)\n desviacion = sigma/sqrt(n)\n valores = lapply(X = as.list(1:simulaciones), FUN = function(sim){\n return(rnorm(n = n, mean = media, sd = sigma))\n })\n \n output$Histograma_promedios = renderPlot({\n histTCL(valores, media, desviacion, simulaciones)\n })\n \n output$fdp_fmp_simulaciones = renderPlot({\n medias = unlist(lapply(X = valores, FUN = mean))\n factor = max(abs(media - c(min(medias), max(medias))))\n lim_inf = media - factor; lim_sup = media + factor\n grilla = seq(from = lim_inf, to = lim_sup, by = 0.001)\n teoricos = dnorm(x = grilla, mean = media, sd = desviacion)\n \n par(mfrow = c(1,2))\n plot_simulaciones(valores)\n densidad_masa(x = grilla, valores = teoricos, tipo = \"densidad\", graph = \"l\")\n })\n \n } else if(input$distribucionDM1 == \"Exponencial\"){\n tasa = input$tasaDM1_exponencial\n media = tasa\n desviacion = sqrt(tasa^2/n)\n \n valores = lapply(X = as.list(1:simulaciones), FUN = function(sim){\n return(rexp(n = n, rate = 1/tasa))\n })\n \n output$Histograma_promedios = renderPlot({\n histTCL(valores, media, desviacion, simulaciones)\n })\n \n output$fdp_fmp_simulaciones = renderPlot({\n teoricos = dexp(seq(from = 0, to = 30, by = 0.001), rate = 1/tasa)\n par(mfrow = c(1,2))\n plot_simulaciones(valores)\n densidad_masa(x = seq(from = 0, to = 30, by = 0.001), valores = teoricos, tipo = \"densidad\", graph = \"l\")\n })\n \n } else if(input$distribucionDM1 == \"Binomial\") {\n ensayos = input$nDM1_binomial\n p = input$pDM1_binomial\n media = ensayos*p\n desviacion = sqrt(ensayos*p*(1-p)/n)\n \n valores = lapply(X = as.list(1:simulaciones), FUN = function(sim){\n return(rbinom(n = n, size = ensayos, prob = p))\n })\n\n output$Histograma_promedios = renderPlot({\n histTCL(valores, media, desviacion, simulaciones)\n })\n \n output$fdp_fmp_simulaciones = renderPlot({\n teoricos = dbinom(x = 0:ensayos, size = ensayos, prob = p)\n par(mfrow = c(1,2))\n plot_simulaciones(valores)\n densidad_masa(x = 0:ensayos, valores = teoricos,, tipo = \"masa\")\n })\n \n } else if(input$distribucionDM1 == \"Poisson\"){\n tasa = input$tasaDM1_poisson\n media = tasa\n desviacion = sqrt(tasa/n)\n \n valores = lapply(X = as.list(1:simulaciones), FUN = function(sim){\n return(rpois(n = n, lambda = tasa))\n })\n \n output$Histograma_promedios = renderPlot({\n histTCL(valores, media, desviacion, simulaciones)\n })\n \n output$fdp_fmp_simulaciones = renderPlot({\n teoricos = dpois(x = 0:30, lambda = tasa)\n par(mfrow = c(1,2))\n plot_simulaciones(valores)\n densidad_masa(x = 0:30, valores = teoricos, tipo = \"masa\")\n })\n }\n })\n \n \n ### Intervalos de confianza\n \n hist_muestra_IC = function(x, y = NULL, nombre_media = nombre_media, control_lanzamiento = FALSE, colores){\n \n color = ifelse(\"red\" %in% colores, \"red\", \"grey\")\n \n if(nombre_media == \"Una\") {\n titulo = ifelse(control_lanzamiento, \"Distribución de los datos de \\n la muestra del último IC\",\n paste(\"Distribución de los datos de la muestra \\n del IC número\", punto_seleccionado()))\n hist(x, main = titulo, xlab = \"Valores de la muestra\", ylab = \"Frecuencia\", las = 1, col = color)\n } else {\n titulo = ifelse(control_lanzamiento, \"Distribuciones de los datos \\n de las muestras del último IC\",\n paste(\"Distribuciones de los datos de las muestras \\n del IC número\", punto_seleccionado()))\n par(mfrow = c(2,1))\n h1 = hist(x)\n h2 = hist(y)\n par(mar = c(0,5,3,3))\n plot(h1, col = color, xlim = c(min(x, y), max(x,y)), ylim = c(0, max(h1$counts, h2$counts)),\n las = 1, ylab = \"Frecuencias de X\", xaxt = \"n\", main = titulo)\n par(mar = c(5,5,0,3))\n plot(h2, col = color, xlim = c(min(x, y), max(x,y)), ylim = c(max(h1$counts, h2$counts), 0),\n las = 1, main = \"\", ylab = \"Frecuencias de Y\", xlab = \"Valores de la muestra\")\n }\n }\n \n hist_medias_IC = function(x, nombre_media = nombre_media){\n if(nombre_media == \"Una\") {\n hist(x, main = \"Distribución de las medias muestrales\", xlab = \"Valores de la muestra\",\n ylab = \"Frecuencia\", las = 1)\n } else {\n hist(x, main = \"Distribución de las diferencias \\n de las medias muestrales (X-Y)\", xlab = \"Valores de la muestra\",\n ylab = \"Frecuencia\", las = 1)\n }\n }\n \n simulaciones_muestras = function(nombre_media = nombre_media){\n muestras = lapply(X = as.list(1:input$simulacionesIC), FUN = function(sim){\n if(nombre_media == \"Una\") {\n data1 = rnorm(n = input$nIC, mean = input$muIC, sd = sqrt(input$sigma2IC))\n } else {\n data1 = rnorm(n = input$nICX, mean = input$muICX, sd = sqrt(input$varianzaUnaMediaX))\n data2 = rnorm(n = input$nICY, mean = input$muICY, sd = sqrt(input$varianzaUnaMediaY))\n data1 = list(\"data1\" = data1, \"data2\" = data2)\n }\n return(data1)\n })\n return(muestras)\n }\n \n calculo_IC = function(data1, data2 = NULL, tipo, varianzas_conocidas, tipo_varianzas = FALSE, extremos,\n confianza, varianza = NA, varianzaX = NA, varianzaY = NA, tamanos_muestrales = NA, media = media){\n \n if(varianzas_conocidas == FALSE){\n limites = t.test(x = data1, y = data2, conf.level = confianza, alternative = tipo, var.equal = tipo_varianzas)$conf.int[extremos] \n } else {\n if (is.null(data2)) {\n if(tipo == \"two.sided\") {\n limites = mean(data1) + c(-1,1)*qnorm(1 - (1- confianza)/2)*sqrt(varianza/tamanos_muestrales[1])\n } else if(tipo == \"less\") {\n limites = mean(data1) + qnorm(confianza)*sqrt(varianza/tamanos_muestrales[1])\n } else {\n limites = mean(data1) - qnorm(confianza)*sqrt(varianza/tamanos_muestrales[1])\n }\n } else {\n if(tipo == \"two.sided\") {\n limites = c(mean(data1) - mean(data2) - qnorm(1 - (1- confianza)/2)*sqrt(varianzaX/tamanos_muestrales[1] + varianzaY/tamanos_muestrales[2]),\n mean(data1) - mean(data2) + qnorm(1 - (1 - confianza)/2)*sqrt(varianzaX/tamanos_muestrales[1] + varianzaY/tamanos_muestrales[2]))\n } else if(tipo == \"less\") {\n limites = mean(data1) - mean(data2) + qnorm(confianza)*sqrt(varianzaX/tamanos_muestrales[1] + varianzaY/tamanos_muestrales[2])\n } else {\n limites = mean(data1) - mean(data2) - qnorm(confianza)*sqrt(varianzaX/tamanos_muestrales[1] + varianzaY/tamanos_muestrales[2])\n }\n }\n }\n \n if(tipo == \"greater\") {\n limites = c(limites, limites[1] + 0.5*sqrt(varianza))\n colores = c(ifelse(limites[1] > media, \"red\", \"black\"), \"white\")\n } else if(tipo == \"less\") {\n limites = c(limites[1] - 0.5*sqrt(varianza), limites)\n colores = c(\"white\", ifelse(limites[2] < media, \"red\", \"black\"))\n } else {\n colores = rep(ifelse(limites[1] < media & limites[2] > media, \"black\", \"red\"), 2)\n }\n return(c(limites, colores))\n }\n \n grafico_IC = function(x, y, colores, limites_x, simulaciones, media, nombre_media, tipoIC){\n plot(\n x = x, y = 1:simulaciones, col = colores[,1], pch = 16, las = 1, bty = \"n\",\n ylim = c(-10, simulaciones), xlim = limites_x, xaxt = \"n\", yaxt = \"n\",\n xlab = \"Valores del IC\", ylab = \"Número de simulación\",\n main = ifelse(nombre_media == \"Una\",\n \"IC para la media proveniente \\n de una distribución normal\",\n \"IC para la diferencia de medias (X-Y) \\n provenientes de distribuciones normales\")\n )\n axis(side = 1, at = c(limites_x[1], media, limites_x[2]), labels = c(limites_x[1], media, limites_x[2]), xlim = limites_x)\n axis(side = 2, at = round(seq(from = 1, to = simulaciones, length.out = 10), 0))\n points(x = y, y = 1:simulaciones, pch = 16, col = colores[,2])\n if(tipoIC == \"less\"){\n arrows(x1 = x, x0 = y, y1 = 1:simulaciones, y0 = 1:simulaciones, length = 0.07, col = colores[,2])\n rojos = round(sum(colores[,2] == \"red\")/length(colores[,2])*100, digits = 2)\n negros = 100 - rojos\n } else if(tipoIC == \"greater\") {\n arrows(x0 = x, x1 = y, y0 = 1:simulaciones, y1 = 1:simulaciones, length = 0.07, col = colores[,1])\n rojos = round(sum(colores[,1] == \"red\")/length(colores[,2])*100, digits = 2)\n negros = 100 - rojos\n } else {\n segments(x0 = x, x1 = y, y0 = 1:simulaciones, y1 = 1:simulaciones, col = colores[,1])\n rojos = round(sum(colores[,1] == \"red\")/length(colores[,1])*100, digits = 2)\n negros = 100 - rojos\n }\n rojos = paste(rojos, \"%\")\n negros = paste(negros, \"%\")\n # abline(v = media, col = \"black\", lty = 2)\n segments(x0 = media, y0 = 0, x1 = media, y1 = simulaciones+1, lty = 2)\n legend(\"bottomleft\", legend = c(negros, rojos), lty = 1, col = c(\"black\", \"red\"), title = \"Proporción de IC\", bty = \"n\")\n legend(\"bottomright\", legend = c(\"Haga click en un IC (o cerca) \\n para ver la distribución de los \\n datos de la muestra. \\n \\n\"), bty = \"n\")\n }\n \n IC = function(tipo_varianzas, tipoIC, extremos, confianza, varianza, varianzaX = NA, varianzaY = NA,\n tamanos_muestrales, media = media, nombre_media = nombre_media){\n muestras_simuladas = simulaciones_muestras(nombre_media = nombre_media)\n ics = lapply(X = muestras_simuladas, FUN = function(muestra){\n if(input$VarianzasIC != \"Conocidas\") {\n if(input$MediasIC == \"Una\") {\n ic = calculo_IC(data1 = muestra, tipo = tipoIC, varianzas_conocidas = FALSE, varianza = varianza,\n extremos = extremos, confianza = confianza, media = media)\n } else {\n ic = calculo_IC(data1 = muestra$data1, data2 = muestra$data2, tipo = tipoIC, varianzas_conocidas = FALSE,\n tipo_varianzas = tipo_varianzas, extremos = extremos, confianza = confianza, media = media,\n varianza = varianza,)\n }\n } else {\n if(input$MediasIC == \"Una\") {\n ic = calculo_IC(data1 = muestra, tipo = tipoIC, varianzas_conocidas = TRUE, tipo_varianzas = tipo_varianzas,\n extremos = extremos, confianza = confianza, varianza = varianza, tamanos_muestrales = tamanos_muestrales,\n media = media)\n } else {\n ic = calculo_IC(data1 = muestra$data1, data2 = muestra$data2, tipo = tipoIC, varianzas_conocidas = TRUE,\n tipo_varianzas = tipo_varianzas, extremos = extremos, confianza = confianza, varianza = varianza,\n varianzaX = varianzaX, varianzaY = varianzaY, tamanos_muestrales = tamanos_muestrales, media = media)\n }\n }\n return(ic)\n })\n ics = as.data.frame(matrix(unlist(ics), ncol = 4, byrow = TRUE))\n ics[,1] = as.numeric(ics[,1])\n ics[,2] = as.numeric(ics[,2])\n return(list(ics, muestras_simuladas))\n }\n \n muestras = NULL\n ic = NULL\n nombre_media_global = NULL\n simulaciones_global = NULL\n \n observeEvent(input$go_IC,{\n confianza = input$ConfianzaIC/100\n simulaciones = input$simulacionesIC\n simulaciones_global <<- simulaciones\n media = ifelse(input$MediasIC == \"Una\", input$muIC, input$muICX - input$muICY)\n tipoIC = switch(input$tipoIC, \"Bilateral\" = \"two.sided\", \"Acotado por la derecha\" = \"less\", \"Acotado por la izquierda\" = \"greater\")\n extremos = switch(tipoIC, \"two.sided\" = 1:2, \"less\" = 2, \"greater\" = 1)\n varianza = ifelse(input$MediasIC == \"Una\", input$sigma2IC, (input$varianzaUnaMediaX + input$varianzaUnaMediaY)/2)\n tipo_varianzas = switch(input$VarianzasICMedias, \"Iguales\" = TRUE, \"Distintas\" = FALSE)\n nombre_media = ifelse(input$MediasIC == \"Una\", \"Una\", \"Dos\")\n nombre_media_global <<- nombre_media\n varianzaX = input$varianzaUnaMediaX\n varianzaY = input$varianzaUnaMediaY\n tamanos_muestrales = c(input$nIC, input$nICX, input$nICY)\n \n ic_y_muestras = IC(tipo_varianzas = tipo_varianzas, tipoIC = tipoIC, extremos = extremos, confianza = confianza,\n varianza = varianza, varianzaX = varianzaX, varianzaY = varianzaY,\n tamanos_muestrales = tamanos_muestrales, media = media, nombre_media = nombre_media)\n ic <<- ic_y_muestras[[1]]\n muestras <<- ic_y_muestras[[2]]\n \n dif_maxima = max(abs(c(media - c(ic[,1], ic[,2]))))\n maximo = round(media + 1.5*dif_maxima, digits = 4)\n minimo = round(media - 1.5*dif_maxima, digits = 4)\n \n output$plot_ic = renderPlot({\n grafico_IC(x = ic[,1], y = ic[,2], colores = ic[,3:4], limites_x = c(minimo, maximo),\n simulaciones = simulaciones, media = media, nombre_media = nombre_media, tipoIC = tipoIC)\n }, height = 800)\n \n punto_seleccionado(NULL)\n output$histogramaIC = renderPlot({\n if(nombre_media == \"Una\"){\n hist_muestra_IC(x = muestras[[simulaciones]], nombre_media = nombre_media,\n control_lanzamiento = TRUE, colores = ic[simulaciones,3:4])\n } else {\n hist_muestra_IC(x = muestras[[simulaciones]]$data1, y = muestras[[simulaciones]]$data2,\n nombre_media = nombre_media, control_lanzamiento = TRUE, colores = ic[simulaciones,3:4])\n }\n })\n \n output$histograma_medias_IC = renderPlot({\n if(nombre_media == \"Una\"){\n hist_medias_IC(x = unlist(lapply(X = muestras, FUN = mean)), nombre_media = nombre_media)\n } else {\n hist_medias_IC(\n x = unlist(lapply(X = muestras, FUN = function(muestra){\n return(mean(muestra$data1) - mean(muestra$data2))\n })),\n nombre_media = nombre_media)\n }\n })\n })\n \n punto_seleccionado = reactiveVal(NULL)\n \n observeEvent(input$plot_click, {\n click_y = input$plot_click$y\n punto_seleccionado(round(click_y))\n if(punto_seleccionado() >= 1 & punto_seleccionado() <= simulaciones_global){\n output$histogramaIC = renderPlot({\n if(nombre_media_global == \"Una\"){\n hist_muestra_IC(x = muestras[[punto_seleccionado()]], nombre_media = nombre_media_global,\n control_lanzamiento = FALSE, colores = ic[punto_seleccionado(),3:4])\n } else {\n hist_muestra_IC(x = muestras[[punto_seleccionado()]]$data1, y = muestras[[punto_seleccionado()]]$data2,\n nombre_media = nombre_media_global, control_lanzamiento = FALSE, colores = ic[punto_seleccionado(),3:4])\n }\n })\n } else {\n output$histogramaIC = renderPlot({\n if(nombre_media_global == \"Una\"){\n hist_muestra_IC(x = muestras[[simulaciones_global]], nombre_media = nombre_media_global,\n control_lanzamiento = TRUE, colores = ic[simulaciones_global,3:4])\n } else {\n hist_muestra_IC(x = muestras[[simulaciones_global]]$data1, y = muestras[[simulaciones_global]]$data2,\n nombre_media = nombre_media_global, control_lanzamiento = TRUE, colores = ic[simulaciones_global,3:4])\n }\n })\n }\n })\n \n ### Pruebas de hipótesis\n \n # Función para generar el gráfico del estadístico de prueba\n \n # Función para generar el gráfico del IC\n grafico_IC_PH = function(ic, mediaMuestra, varianza, mu0, tipoPH, nMuestra){\n\n limites = mu0 + c(-1,1)*3*sqrt(varianza/nMuestra)\n \n valores_x = seq(from = limites[1], to = limites[2], by = 0.01)\n plot(x = valores_x, y = dnorm(x = valores_x, mean = mu0, sd = sqrt(varianza/nMuestra)),\n main = \"Distribución de la media\", xlab = \"Valores del promedio\", ylab = \"Densidad\",\n las = 1, xaxt = \"n\", type = \"l\", bty = \"n\")\n axis(side = 1, at = round(c(limites[1], mu0, limites[2]), 3),\n labels = round(c(limites[1], mu0, limites[2]), 3),\n col.axis = \"darkblue\", cex.axis = 1.2)\n \n }\n \n valor_critico = function(confianza, tipo, mu0, varianza, nMuestra, mediaMuestra){\n if(tipo == \"two.sided\") {\n valor_critico = qnorm(1 - (1 - confianza)/2)\n } else if(tipo == \"less\") {\n valor_critico = qnorm(1 - confianza)\n } else {\n valor_critico = qnorm(confianza)\n }\n \n estadistico_prueba = (mediaMuestra - mu0)/(sqrt(varianza/nMuestra))\n \n return(c(estadistico_prueba, valor_critico))\n }\n \n \n observeEvent(input$go_PH, {\n confianza = input$confianzaPH/100\n mu0 = input$mu0PH\n mediaMuestra = input$mediaMuestraPH\n tipoPH = switch(input$tipoPH, \"Bilateral\" = \"two.sided\", \"Unilateral derecha\" = \"greater\", \"Unilateral izquierda\" = \"less\")\n extremos = switch(tipoPH, \"two.sided\" = 1:2, \"less\" = 2, \"greater\" = 1)\n varianza = input$sigma2PH\n nombre_media = \"Una\"\n nMuestra = input$nPH\n \n # Los argumentos data debe ser el promedio n veces para que calce con el cálculo del IC de la función \"calculo_IC\"\n ic = calculo_IC(data1 = rep(mediaMuestra, nMuestra), tipo = tipoPH, varianzas_conocidas = TRUE, varianza = varianza,\n extremos = extremos, confianza = confianza, media = mediaMuestra, tamanos_muestrales = nMuestra)\n \n valor_critico = valor_critico(confianza = confianza, tipo = tipoPH, mu0 = mu0, varianza = varianza,\n nMuestra = nMuestra, mediaMuestra = mediaMuestra)\n \n output$plot_ph = renderPlot({\n plot(ic[1], ic[2])\n }, height = 400)\n \n output$plot_ic_ph = renderPlot({\n grafico_IC_PH(ic = ic, media = mediaMuestra, varianza = varianza, mu0 = mu0, tipoPH = tipoPH, nMuestra = nMuestra)\n }, height = 400)\n \n })\n\n \n# End general function \n}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n","type":"text"},{"name":"ui.R","content":"library(shiny)\nlibrary(shinydashboard)\nlibrary(Cairo)\noptions(shiny.usecairo = T)\n\n# Encabezado general\n\nencabezado = dashboardHeader(title = \"Estadística\")\n\n# Panel lateral general: filtro de temas\n\npanelLateral = dashboardSidebar(\n # useShinyjs(),\n collapsed = FALSE,\n sidebarMenu(\n menuItem(\n \"Distribuciones muestrales\", startExpanded = TRUE, tabName = \"DM\",\n menuSubItem(\"TCL\", tabName = \"DM1\")\n ),\n menuItem(\"IC: Intervalos de confianza\", tabName = \"IC\"),\n menuItem(\"Pruebas de Hipótesis\", tabName = \"PH\")#,\n # menuItem(\n # \"Regresión Lineal\", tabName = \"RL\", startExpanded = TRUE,\n # menuSubItem(\"Simple\", tabName = \"RL1\"),\n # menuSubItem(\"Múltiple\", tabName = \"RL2\")\n # )\n )\n)\n\n# Paneles: cuerpo de cada panel del Panel lateral\n# Un cuerpo se puede volver a dividir en otro tipo de Layout\n\nsimulador = actionButton(inputId = \"go_DM1\", label = \"Simular\")\n\ncuerpo_DM1 = sidebarLayout(\n sidebarPanel(\n width = 3,\n selectInput(inputId = \"distribucionDM1\", label = \"Distribución\", choices = c(\"Normal\", \"Exponencial\", \"Binomial\", \"Poisson\")),\n conditionalPanel(\n condition = \"input.distribucionDM1 == 'Normal'\",\n sliderInput(inputId = \"mediaDM1_normal\", label = \"Media poblacional\", min = 0, max = 20, value = 12, step = 0.2),\n sliderInput(inputId = \"varianzaDM1_normal\", label = \"Varianza poblacional\", min = 0, max = 20, value = 2, step = 0.1),\n ),\n conditionalPanel(\n condition = \"input.distribucionDM1 == 'Binomial'\",\n sliderInput(inputId = \"nDM1_binomial\", label = \"Ensayos\", min = 1, max = 100, value = 12, step = 1),\n sliderInput(inputId = \"pDM1_binomial\", label = \"Probabilidad de éxito\", min = 0, max = 1, value = 0.4, step = 0.05),\n ),\n conditionalPanel(\n condition = \"input.distribucionDM1 == 'Exponencial'\",\n sliderInput(inputId = \"tasaDM1_exponencial\", label = \"Tasa\", min = 0, max = 20, value = 5, step = 0.1)\n ),\n conditionalPanel(\n condition = \"input.distribucionDM1 == 'Poisson'\",\n sliderInput(inputId = \"tasaDM1_poisson\", label = \"Tasa\", min = 0, max = 20, value = 8, step = 0.1)\n ),\n sliderInput(inputId = \"nDM1\", label = \"Tamaño muestral\", min = 100, max = 1000, value = 200, step = 50),\n sliderInput(inputId = \"simulacionesDM1\", label = \"Cantidad de simulaciones\", min = 100, max = 7000, value = 1300, step = 100),\n simulador\n ),\n mainPanel(\n width = 9,\n plotOutput(\"Histograma_promedios\"), plotOutput(\"fdp_fmp_simulaciones\")\n )\n)\n\nsimulador2 = actionButton(inputId = \"go_IC\", label = \"Simular\")\n\ncuerpo_IC = sidebarLayout(\n sidebarPanel(\n width = 3,\n fluidRow(\n column(width = 4, radioButtons(inputId = \"MediasIC\", label = \"Medias\", choices = c(\"Una\", \"Dos\"))),\n column(width = 8, radioButtons(inputId = \"VarianzasIC\", label = \"Varianzas\", choices = c(\"Conocidas\", \"Desconocidas\")))\n ),\n conditionalPanel(\n condition = \"input.VarianzasIC == 'Desconocidas' && input.MediasIC == 'Dos'\",\n radioButtons(inputId = \"VarianzasICMedias\", label = \"Varianzas desconocidas\", choices = c(\"Iguales\", \"Distintas\"))\n ),\n sliderInput(inputId = \"ConfianzaIC\", label = \"% Confianza\", min = 10, max = 99, value = 90, step = 1),\n radioButtons(inputId = \"tipoIC\", label = \"Tipo de IC\", choices = c(\"Bilateral\", \"Acotado por la derecha\", \"Acotado por la izquierda\")),\n conditionalPanel(\n condition = \"input.MediasIC == 'Una'\",\n sliderInput(inputId = \"muIC\", label = \"Media poblacional\", min = -20, max = 20, value = 0, step = 0.1),\n sliderInput(inputId = \"sigma2IC\", label = \"Varianza poblacional\", min = 5, max = 30, value = 10, step = 0.1),\n sliderInput(inputId = \"nIC\", label = \"Tamaño muestral\", min = 10, max = 200, value = 120, step = 10)\n ),\n conditionalPanel(\n condition = \"input.MediasIC == 'Dos'\",\n fluidRow(\n column(width = 6, sliderInput(inputId = \"muICX\", label = \"Media poblacional X\", min = -10, max = 10, value = 0, step = 0.5)),\n column(width = 6, sliderInput(inputId = \"muICY\", label = \"Media poblacional Y\", min = -10, max = 10, value = 7, step = 0.5))\n ),\n fluidRow(\n column(width = 6, sliderInput(inputId = \"varianzaUnaMediaX\", label = \"Varianza poblacional X\", min = 10, max = 25, value = 12, step = 0.5)),\n column(width = 6, sliderInput(inputId = \"varianzaUnaMediaY\", label = \"Varianza poblacional Y\", min = 10, max = 25, value = 16, step = 0.5))\n ),\n fluidRow(\n column(width = 6, sliderInput(inputId = \"nICX\", label = \"Tamaño muestral X\", min = 50, max = 150, value = 120, step = 10)),\n column(width = 6, sliderInput(inputId = \"nICY\", label = \"Tamaño muestral Y\", min = 50, max = 150, value = 80, step = 10))\n ),\n ),\n sliderInput(inputId = \"simulacionesIC\", label = \"Cantidad de simulaciones\", min = 10, max = 100, value = 60, step = 1),\n simulador2\n ),\n mainPanel(\n width = 9,\n fluidRow(\n column(width = 6, plotOutput(\"plot_ic\", click = \"plot_click\", height = \"800px\")),\n column(width = 6, plotOutput(\"histogramaIC\"), plotOutput(\"histograma_medias_IC\"))\n )\n )\n)\n\nsimulador3 = actionButton(inputId = \"go_PH\", label = \"Simular\")\n\ncuerpo_PH = sidebarLayout(\n sidebarPanel(\n width = 3,\n radioButtons(inputId = \"mediasPH\", label = \"Medias\", choices = c(\"Una\")),#, \"Dos\")),\n radioButtons(inputId = \"varianazasPH\", label = \"Varianzas\", choices = c(\"Conocidas\")),#, \"Desconocidas\")),\n radioButtons(inputId = \"tipoPH\", label = \"Tipo de prueba\", choices = c(\"Bilateral\", \"Unilateral derecha\", \"Unilateral izquierda\")),\n sliderInput(inputId = \"mu0PH\", label = \"Media bajo Hipótesis nula\", min = -20, max = 20, value = 0, step = 0.1),\n sliderInput(inputId = \"sigma2PH\", label = \"Varianza poblacional\", min = 1, max = 20, value = 6, step = 0.1),\n sliderInput(inputId = \"mediaMuestraPH\", label = \"Media muestral\", min = -20, max = 20, value = 2, step = 0.1),\n sliderInput(inputId = \"nPH\", label = \"Tamaño muestral\", min = 10, max = 200, value = 120, step = 10),\n sliderInput(inputId = \"confianzaPH\", label = \"% Confianza\", min = 10, max = 99, value = 95, step = 1),\n simulador3\n ),\n mainPanel(\n width = 9,\n fluidRow(\n column(width = 6, plotOutput(\"plot_ph\")),\n column(width = 6, plotOutput(\"plot_ic_ph\"))\n )\n )\n)\n\n# Asignando los cuerpos por filtro\nhoja_DM = tabItem(tabName = \"DM1\", fluidPage(cuerpo_DM1))\nhoja_IC = tabItem(tabName = \"IC\", fluidPage(cuerpo_IC))\nhoja_PH = tabItem(tabName = \"PH\", fluidPage(cuerpo_PH))\n\ncuerpo = dashboardBody(\n tabItems(hoja_DM, hoja_IC, hoja_PH)\n)\n\n# Despliegue general\nui = dashboardPage(encabezado, panelLateral, cuerpo, skin = \"black\")","type":"text"}]