library(shiny)
ui <- fluidPage( titlePanel(“Proyecto de Muestreo y Estimación - Melissa Morales Flores”),
sidebarLayout( sidebarPanel( h3(“Datos del estudiante”), textOutput(“nombre”), hr(),
h3("Parámetros de la población simulada"),
# Aunque el enunciado fija valores, los dejo modificables por si quieres jugar
numericInput("N", "Tamaño de la población (N)", value = 5000, min = 100, step = 1),
numericInput("media_teorica", "Media teórica (μ)", value = 120, step = 1),
numericInput("sd_teorica", "Desviación estándar teórica (σ)", value = 15, min = 0.1, step = 0.1),
h3("Parámetros de muestreo"),
numericInput("E", "Error máximo permitido (E)", value = 2, min = 0.1, step = 0.1),
numericInput("conf", "Nivel de confianza (%)", value = 95, min = 50, max = 99.9, step = 0.1),
hr(),
actionButton("simular", "Simular población y calcular")
),
mainPanel(
h3("Resultados"),
h4("1) Nombre y apellido"),
verbatimTextOutput("texto_nombre"),
h4("2) Población simulada y parámetros 'reales'"),
verbatimTextOutput("res_poblacion"),
h4("3) Tamaño de muestra requerido (n)"),
verbatimTextOutput("res_n"),
h4("4) Muestra extraída y estimación"),
verbatimTextOutput("res_muestra")
)
) )
server <- function(input, output) {
# 1) Mostrar nombre y apellido output$nombre <- renderText({ “Melissa Belen Morales Flores” })
output$texto_nombre <- renderPrint({ cat(“Nombre y apellido mostrado en la aplicación:”) cat(“Melissa Belen Morales Flores”) })
# 2) Crear la población de tamaño N con distribución Normal poblacion <- eventReactive(input\(simular, { set.seed(123) # Para reproducibilidad (opcional) rnorm(input\)N, mean = input\(media_teorica, sd = input\)sd_teorica) })
output$res_poblacion <- renderPrint({ req(poblacion()) media_pop <- mean(poblacion()) sd_pop <- sd(poblacion())
cat("Población simulada de tamaño N =", input$N, "\n")
cat("Distribución Normal con media teórica =", input$media_teorica,
"y sd teórica =", input$sd_teorica, "\n\n")
cat("Media 'real' de la población simulada (parámetro):", round(media_pop, 4), "\n")
cat("Desviación estándar 'real' de la población simulada (parámetro):", round(sd_pop, 4), "\n")
})
# 3) Estimar el tamaño de muestra n para estimar la media con error E y confianza n_muestra <- reactive({ req(poblacion()) sd_pop <- sd(poblacion())
alpha <- 1 - input$conf / 100
z <- qnorm(1 - alpha / 2) # Cuantil z para el nivel de confianza
E <- input$E
N <- input$N
# Primero n0 sin corrección por población finita:
n0 <- (z^2 * sd_pop^2) / (E^2)
# Con corrección por población finita:
n <- (N * n0) / (N + n0 - 1)
ceiling(n)
})
output\(res_n <- renderPrint({ req(poblacion()) sd_pop <- sd(poblacion()) alpha <- 1 - input\)conf / 100 z <- qnorm(1 - alpha / 2)
cat("Nivel de confianza:", input$conf, "%\n")
cat("Valor z utilizado:", round(z, 4), "\n")
cat("Desviación estándar poblacional (simulada):", round(sd_pop, 4), "\n")
cat("Error máximo permitido (E):", input$E, "\n\n")
cat("Tamaño de muestra requerido (n) con corrección por población finita:\n")
cat("n =", n_muestra(), "\n")
})
# 4) Extraer una muestra de tamaño n y estimar la media poblacional muestra <- reactive({ req(poblacion()) n <- n_muestra() # Muestreo aleatorio simple sin reemplazo sample(poblacion(), size = n, replace = FALSE) })
output$res_muestra <- renderPrint({ req(muestra()) x <- muestra() media_muestral <- mean(x) sd_muestral <- sd(x) n <- length(x)
# Error estándar del estimador media muestral (versión clásica):
error_estandar <- sd_muestral / sqrt(n)
cat("Muestra extraída de tamaño n =", n, "\n\n")
cat("Media muestral (estimador de la media poblacional):", round(media_muestral, 4), "\n")
cat("Desviación estándar muestral:", round(sd_muestral, 4), "\n")
cat("Error estándar de la media muestral:", round(error_estandar, 4), "\n")
}) }
shinyApp(ui = ui, server = server)