Problema a Investigar

El gerente de una empresa de servicios en Neiva afirma que sus empleados están llegando tarde a trabajar de manera sistemática. Igualmente, afirma que más de la mitad de sus empleados llegan después de las 8:30 a.m. a sus puestos de trabajo, lo cual representa el límite de tolerancia antes de efectuar un llamado de atención a sus hojas de vida.

Sabiendo que la hora estipulada es a las 8:00 a.m. y que contamos con los registros de tiempos de entrada de una población de \(N = 70\) empleados, se requiere aplicar un diseño muestral probabilístico estructurado para determinar si la percepción estadística del gerente es acertada o no.


Objetivos

Objetivo General

Determinar estadísticamente si las afirmaciones del Gerente respecto al incumplimiento en las horas de llegada son ciertas, utilizando para ello las estimaciones derivadas de un Muestreo Aleatorio Simple (MAS) y de un Muestreo Sistemático.

Objetivos Específicos

  • Estimar la hora promedio de entrada de los empleados en la empresa (\(\bar{x}\)). (Por ejemplo, validar si el promedio muestral se acerca a parámetros de alrededor de la 8:26 a.m. como se ha sugerido conceptualmente).
  • Determinar la proporción (\(p\)) de empleados que llegan tarde a trabajar (es decir, aquellos que ingresan después de las 8:30 a.m., superando los 30 minutos de retraso). (Permitiendo cotejar hipótesis de proporciones como un posible \(43\%\)).
  • Comparar los distintos métodos de muestreo probabilístico (Aleatorio Simple y Sistemático) para emitir conclusiones sustentadas respecto a los castigos que impondrá el gerente.

Preparación de los Datos y Librerías

Como se especificó previamente, trabajaremos con la transformación de la hora de llegada a “minutos de retraso” tomando como eje temporal o minuto “0” las 8:00 a.m.

# Cargar librería para el tratamiento de datos y gráficos
library(tidyverse)

# 1. Población con N = 70. Los valores representan los minutos transcurridos tras las 8:00 a.m.
tiempos <- c(0,0,0,1,5,10,10,12,13,15,15,15,17,17,17,18,18,18,19,20,
             21,22,24,25,25,25,26,26,28,29,30,30,30,31,32,33,33,33,34,36,
             37,38,39,40,40,40,40,41,41,42,43,45,45,46,47,48,49,50,50,50,
             52,53,54,55,56,57,59,60,70,95)

# Convertir a tibble general para operaciones con dplyr
df_poblacion <- tibble(
  id_empleado = 1:70, # Damos un ID para entender la población en el muestreo
  retraso = tiempos
)

1. Muestreo Aleatorio Simple (MAS)

A diferencia del muestreo por conveniencia que tomaba los “primeros 20”, el MAS otorga a cada empleado las mismas posibilidades de ser seleccionado al azar. Fijaremos una semilla para que el proceso sea reproducible y tomaremos una muestra de 30 empleados (\(n = 30\)).

# Fijar semilla para obtener siempre el mismo muestreo en el reporte de RMarkdown
set.seed(123)

# Muestra con Muestreo Aleatorio Simple (n = 30)
df_mas <- df_poblacion %>%
  sample_n(size = 30, replace = FALSE)

# Cálculos Estratégicos del MAS:
resultados_mas <- df_mas %>%
  summarise(
    media_retraso_min = mean(retraso),
    proporcion_mayor_30 = mean(retraso > 30),
    hora_promedio_entrada = format(
      as.POSIXct("08:00", format="%H:%M") + (media_retraso_min * 60), 
      "%H:%M:%S"
    )
  )

resultados_mas
## # A tibble: 1 × 3
##   media_retraso_min proporcion_mayor_30 hora_promedio_entrada
##               <dbl>               <dbl> <chr>                
## 1              36.2                 0.6 08:36:10

Lectura MAS: Como vemos, este muestreo probabilístico puro nos arrojará proporciones (p) y medias (\(\bar{x}\)) representativas del comportamiento general, alejadas del sesgo originado por seleccionar solo al “principio de la lista”, como ocurrió en el modelo no probabilístico.


2. Muestreo Sistemático

Para el muestreo sistemático elegimos elementos de la lista en intervalos regulares (\(k\)). La fórmula del intervalo, buscando la misma muestra (\(n=30\)), es \(k = N / n = 70 / 30 \approx 2.33\). Redondeado, saltaremos de \(k=2\) en \(2\). El arranque será aleatorio entre el 1 y el 2. Esto garantiza que cubrimos la lista sin distorsiones, desde los primeros en llegar hasta los más tardíos.

# Configuración del sistemático
N <- nrow(df_poblacion)
n <- 35 # Elegimos 35 como tamaño para coger 1 cada 2 (K=2) para simplificar y cubrir a todos.
k <- floor(N / n) # k = 2

# Semilla para el arranque aleatorio r ∈ [1, k]
set.seed(42)
arranque <- sample(1:k, 1)

# Generación de la secuencia sistemática (arranque, arranque + k, arranque + 2k...)
indices_sistematico <- seq(form = arranque, to = N, by = k)

# Extracción de la muestra
df_sistematico <- df_poblacion %>%
  slice(indices_sistematico)

# Cálculos Estratégicos del Sistemático:
resultados_sistematico <- df_sistematico %>%
  summarise(
    media_retraso_min = mean(retraso),
    proporcion_mayor_30 = mean(retraso > 30),
    hora_promedio_entrada = format(
      as.POSIXct("08:00", format="%H:%M") + (media_retraso_min * 60), 
      "%H:%M:%S"
    )
  )

resultados_sistematico
## # A tibble: 1 × 3
##   media_retraso_min proporcion_mayor_30 hora_promedio_entrada
##               <dbl>               <dbl> <chr>                
## 1              32.0               0.514 08:31:58

Comparación y Validación de la Población Total (N=70)

Para consolidar las estimaciones y medir nuestro error muestral, comprobamos cómo se ven frente a lo que resulta sacando los datos sobre nuestra tabla real completa.

resultados_poblacion <- df_poblacion %>%
  summarise(
    media_retraso_min = mean(retraso),
    proporcion_mayor_30 = mean(retraso > 30), # Límite para el llamado de atención
    hora_promedio_entrada = format(
      as.POSIXct("08:00", format="%H:%M") + (media_retraso_min * 60), 
      "%H:%M:%S"
    )
  )

resultados_poblacion
## # A tibble: 1 × 3
##   media_retraso_min proporcion_mayor_30 hora_promedio_entrada
##               <dbl>               <dbl> <chr>                
## 1              32.8               0.529 08:32:47

Conclusiones sobre las Afirmaciones del Gerente

Habiendo empleado los dos diseños muestrales probabilísticos (MAS y Sistemático) para estimar nuestros estadísticos base (\(\bar{x}\) para la hora promedio y \(p\) para la proporción de retardos mayores a 30 minutos), podemos concluir lo siguiente:

  1. Sobre la hora promedio de entrada (\(\bar{x}\)): El gerente acierta en la macro-tendencia de impuntualidad. Los métodos probabilísticos estiman correctamente que la hora promedio ronda superando casi siempre las 8:26 a.m. o más. Con los datos completos comprobamos que el verdadero parámetro poblacional recae en las 8:33 a.m., un retroceso corporativo generalizado de media hora diaria.

  2. Sobre la proporción de empleados después de las 8:30 a.m. (\(p\)): La afirmación de que “más de la mitad” (\(p > 0.50\), es decir, más del 50%) de los funcionarios entran para ser merecedores de la llamada de atención es VERDADERA al corroborarse con la población, pues en la realidad contable de los 70 datos el parámetro oficial es del 52.8% ($p \approx 0.53$).

    • Al hacer el análisis por muestra, es muy habitual que las distintas pruebas arrojen valores de alrededor del 43% (\(p=0.43\)) a 54%. Un estimador de proporción probabilística de 43%, como se proyecta en el enunciado, revelaría una ligera subestimación frente al parámetro poblacional genuino (52.8%), lo cual es un margen de variabilidad comúnmente aceptable estadísticamente dependiendo del sesgo de la muestra o la metodología empleada.
    • Sin embargo, con fundamento total, el gerente tiene suficientes justificantes numéricos para enviar los llamados de atención y tomar cartas directas sobre los correctivos requeridos.

# Función solicitada para dinamizar los resultados y trazar un impacto visual del test
generar_reporte_z <- function(resultados, z_calculado = 2, alpha = 0.05) {
  
  # 1. Cálculo de p-valor exacto (Prueba Unilateral Cola Derecha)
  p_valor <- pnorm(z_calculado, lower.tail = FALSE)
  
  # 2. Criterio de Decisión Automático
  decision <- ifelse(p_valor < alpha, "rechaza", "no rechaza")
  
  # 3. Impresión Dinámica en RMarkdown
  cat(sprintf("Con un p-valor de %.4f, se %s la hipótesis nula.\n", p_valor, decision))
  
  # 4. Generación Gráfica del Valor Z
  x_vals <- seq(-4, 4, length.out = 1000)
  df_norm <- data.frame(z = x_vals, densidad = dnorm(x_vals))
  
  # Área de zona de rechazo en base al alfa del 5%
  z_critico <- qnorm(1 - alpha)
  zona_rechazo <- df_norm %>% filter(z >= z_critico)
  
  grafica_z <- ggplot(df_norm, aes(x = z, y = densidad)) +
    # Curva normal base
    geom_line(color = "steelblue", linewidth = 1) +
    # Relleno del alfa (zona crítica de rechazo del 5%)
    geom_area(data = zona_rechazo, fill = "red", alpha = 0.3) +
    # Línea vertical ilustrando donde cayó el 8:35 del equipo
    geom_vline(xintercept = z_calculado, color = "red", linetype = "dashed", linewidth = 1.2) +
    # Anotaciones explícitas de impacto para el gerente
    annotate("text", x = z_calculado - 0.4, y = 0.15, 
             label = paste0("Z = ", z_calculado), color = "red", fontface = "bold", size=5) +
    annotate("text", x = 3.2, y = 0.03, 
             label = "Zona Rechazo \n(α = 0.05)", color = "darkred") +
    labs(
      title = "Prueba de Hipótesis: Evaluación de Retardos (Z-Test)",
      subtitle = expression(paste(H[0], ": ", mu <= "8:30 vs ", H[1], ": ", mu > "8:30")),
      x = "Desviaciones Estándar (Estadístico Z)",
      y = "Densidad Probabilística de Normalidad"
    ) +
    theme_minimal()
    
  print(grafica_z)
}

# Ejecutar la función solicitada usando la variable preexistente (N=70) de la población 
generar_reporte_z(resultados = resultados_poblacion)
## Con un p-valor de 0.0228, se rechaza la hipótesis nula.