R Markdown

Solo necesitas tener instalado shiny

install.packages(“shiny”) # Solo la primera vez, si hace falta

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)