INTERVALOS DE CONFIANZA

TALLER No 3

Autor/a
Afiliación

Carolina Pineda
Vilma Montaña
Andres Vera

Fecha de publicación

14 de septiembre de 2025

LOGO

1 .Instalar Paquetes

Ver código
if(!require(kableExtra)) {
  install.packages("kableExtra")}
library(kableExtra)

if(!require(tidyverse)) {
  install.packages("tidyverse")}
library(tidyverse)

if(!require(OneTwoSamples)) {
  install.packages("OneTwoSamples")}
library(OneTwoSamples)

if(!require(DescTools)) {
  install.packages("DescTools")}
library(DescTools)

(Zhu 2024; Wickham et al. 2019; Zhang (Robert) 2023; Signorell 2025)

2 .Intervalos De Confianza

Un intervalo de confianza en estadística es un rango de valores que se utiliza para estimar un parámetro poblacional desconocido, como la media o la proporción, con un cierto nivel de probabilidad (nivel de confianza) de que el valor verdadero de ese parámetro esté contenido dentro de dicho rango. Se calcula a partir de una muestra y se expresa como un margen de error alrededor de una estimación puntual, indicando la precisión de la estimación y la incertidumbre inherente al uso de muestras.

Conceptos clave:

  • Parámetro poblacional: El valor real que se quiere estimar, pero que es inaccesible directamente (ej. la altura promedio de todos los adultos en un país). Estimador

  • puntual: Un valor calculado a partir de la muestra (ej. la altura promedio de 100 adultos seleccionados al azar) que se usa para estimar el parámetro poblacional. Margen de error: La cantidad que se suma y se resta del estimador puntual para definir los límites inferior y superior del intervalo de confianza.

  • Nivel de confianza: El porcentaje de veces que se espera que el intervalo de confianza calculado contenga el verdadero parámetro poblacional si se repitieran muchas muestras. El nivel más común es el 95%.

Para distribuciones simétricas los intervalos de confianza siguen la forma:

\hat{\Theta} \pm MoE

donde:

\hat{\theta} = \text{estadístico o estimador}

MoE = \text{margen de error} = SE \cdot stat_{\text{crit},\,1-\alpha,\,\nu}

SE = \text{error estándar}, \quad 1-\alpha = \text{nivel de confianza}, \quad \nu = \text{grados de libertad} Para distribuciones asimétricas los intervalos de confianza siguen la forma:

\hat{\theta}_i < \hat{\theta} < \hat{\theta}_s donde:

\hat{\theta}_i = \text{límite inferior}, \quad \hat{\theta}_s = \text{límite superior}

2.1 .Media varianza conocida

\bar{x} \pm z_{\alpha/2} \frac{\sigma}{\sqrt{n}}

Intervalo de confianza al 94% para la media poblacional con varianza conocida

La Secretaría de Planeación quiere estimar el tiempo promedio (en días) que tarda el trámite de licencias de construcción. Con base en registros históricos, se asume conocida la varianza poblacional \sigma^{2} = 16 \ \text{días}^2 \quad \ (\text{es decir, } \sigma = 4 \ \text{días}).

Se toma una muestra aleatoria de De n = 64 trámites recientes y se obtiene una media muestral \bar{x} = 28.5 días.

  1. Construya un intervalo de confianza del 94% para la media poblacional μ.

  2. Interprételo en el contexto de la gestión pública.

Ver código
n <- 64                # Tamaño de la muestra
media_muestral <- 28.5   # Media muestral
varianza_poblacional <- 16  # Varianza poblacional conocida
nivel_confianza <- 0.94     # Nivel de confianza (95%)

# Calcular el error estándar
error_estandar <- sqrt(varianza_poblacional / n)

# Calcular el valor crítico Z para el nivel de confianza
z_critico <- qnorm((1 + nivel_confianza) / 2)

# Calcular los límites del intervalo de confianza
limite_inferior <- media_muestral - z_critico * error_estandar
limite_superior <- media_muestral + z_critico * error_estandar

# Mostrar resultados
cat("Intervalo de confianza para la media poblacional:[", limite_inferior, ",", limite_superior, "]\n")
Intervalo de confianza para la media poblacional:[ 27.5596 , 29.4404 ]

Grafica:

Ver código
# Cargar librería
library(ggplot2)

# Nivel de confianza
confianza <- 0.94
alpha <- 1 - confianza

# Valores críticos
z_alpha2 <- qnorm(1 - alpha/2)

# Secuencia para la curva normal estándar
x <- seq(-4, 4, length = 1000)
y <- dnorm(x)

# Crear data frame
df <- data.frame(x, y)

# Definir los límites del intervalo
limite_inferior <- -z_alpha2
limite_superior <-  z_alpha2

# Graficar
ggplot(df, aes(x, y)) +
  geom_line(color = "darkgreen", size = 1) +
  geom_area(data = subset(df, x >= limite_inferior & x <= limite_superior),
            aes(x = x, y = y), fill = "lightgreen", alpha = 0.6) +
  geom_vline(xintercept = c(limite_inferior, limite_superior),
             linetype = "dashed", color = "black") +
  annotate("text", x = 0, y = 0.15, label = expression(1 - alpha), size = 5, color = "black") +
  annotate("text", x = limite_inferior, y = 0.02,
           label = expression(-z[alpha/2]), hjust = 1.2, size = 4) +
  annotate("text", x = limite_superior, y = 0.02,
           label = expression(z[alpha/2]), hjust = -0.2, size = 4) +
  annotate("text", x = 0, y = 0.4, label = expression(alpha), size = 6, color = "red") +
  labs(title = paste0("Distribución Normal Estándar N(0,1)\nConfianza = ", confianza*100, "%"),
       x = "Valores", y = "Densidad") +
  theme_minimal()

Interprtecion:

Con 94% de confianza, se puede estimar el tiempo promedio que tarda el trámite de licencias de construcción en la entidad se encuentra entre 27.56 y 29.44 días.Y habrá una probabilidad del 6% de encontrar valores para dicha verdadera media por fuera del anterior intervalo.

2.2 .Media varianza desconocida

Intervalo de confianza para la media poblacional varianza desconocida

\bar{x} \pm t_{(\alpha/2,\,n-1)} \frac{s}{\sqrt{n}}

La Secretaría de Planeación Municipal desea estimar el tiempo promedio (en minutos) que tardan los ciudadanos en completar un trámite de actualización del SISBEN en una oficina pública. Para ello, se tomó una muestra de 10 ciudadanos y se registraron los siguientes tiempos de atención:

72,75,78,80,68,74,77,76,73,7972,75,78,80,68,74,77,76,73,79

Dado que la varianza poblacional es desconocida, construya un intervalo de confianza del 96% para el tiempo promedio de atención de la población.

Ver código
datos_muestra <- c(72, 75, 78, 80, 68, 74, 77, 76, 73, 79)  # Datos muestrales
nivel_confianza <- 0.96  # Nivel de confianza (96%)

# Calcular estadísticas muestrales
n <- length(datos_muestra)             # Tamaño de la muestra
media_muestral <- mean(datos_muestra)  # Media muestral
desviacion_muestral <- sd(datos_muestra)  # Desviación estándar muestral

# Calcular el error estándar
error_estandar <- desviacion_muestral / sqrt(n)

# Grados de libertad
grados_libertad <- n - 1

# Calcular el valor crítico t para el nivel de confianza
t_critico <- qt((1 + nivel_confianza) / 2, df = grados_libertad)

# Calcular los límites del intervalo de confianza
limite_inferior <- media_muestral - t_critico * error_estandar
limite_superior <- media_muestral + t_critico * error_estandar

# Mostrar resultados
cat("Intervalo de confianza para la media poblacional:[", limite_inferior, ",", limite_superior, "]\n")
Intervalo de confianza para la media poblacional:[ 72.45835 , 77.94165 ]

Grafica:

Ver código
# Instalar y cargar ggplot2 si no lo tienes
install.packages("ggplot2")
library(ggplot2)

# Datos del problema
li <- 72.45835  # Límite inferior
ls <- 77.94165  # Límite superior
media <- (li + ls) / 2  # Media aproximada

# Generar rango de valores para la curva
x <- seq(65, 85, length.out = 400)
# Usamos una distribución normal aproximada para la visualización
y <- dnorm(x, mean = media, sd = 2.5)
df <- data.frame(x = x, y = y)

# Gráfico
ggplot(df, aes(x = x, y = y)) +
  geom_line(color = "darkgreen", size = 1) +
  geom_area(data = subset(df, x >= li & x <= ls),
            aes(y = y), fill = "green", alpha = 0.3) +
  geom_vline(xintercept = li, linetype = "dashed", color = "black") +
  geom_vline(xintercept = ls, linetype = "dashed", color = "black") +
  annotate("text", x = media, y = max(y) * 0.8, label = expression(1 - alpha), size = 6) +
  annotate("text", x = li, y = -0.002, label = expression(-t[alpha/2]), vjust = 1, size = 5) +
  annotate("text", x = ls, y = -0.002, label = expression(t[alpha/2]), vjust = 1, size = 5) +
  labs(title = "Distribución t-Student con intervalo de confianza 96%",
       x = "Tiempo (minutos)", y = "Densidad") +
  theme_minimal(base_size = 14)

Interprtacion:

Con 96% de confianza, se puede estimar que el tiempo promedio de atención de los ciudadanos en el trámite de actualización del SISBEN se encuentra entre 71.87 y 78.53 minutos. Habrá una probabilidad del 4% de que la verdadera media poblacional se ubique por fuera de este intervalo.

2.3 .Proporción Poblacional

Intervalo de confianza para la proporción poblacional

\hat{p} \pm z_{\alpha/2} \sqrt{\frac{\hat{p}(1 - \hat{p})}{n}}

La Secretaría de Atención Ciudadana de una ciudad desea conocer el nivel de satisfacción de los ciudadanos con respecto al servicio de trámites digitales implementado hace seis meses.

Se realiza una encuesta a una muestra aleatoria de 500 personas que han utilizado el nuevo sistema. De ellas, 385 personas respondieron que están satisfechas con el servicio.

La Secretaría desea construir un intervalo de confianza del 97% para estimar la proporción real de ciudadanos satisfechos con el sistema digital.

Ver código
intervalo_confianza_proporcion <- function(x, n, conf = 0.99) {
  # x: número de éxitos (éxitos observados en la muestra)
  # n: tamaño de la muestra
  # conf: nivel de confianza (por defecto 99%)
  
  # Proporción muestral
  p_hat <- x / n
  
  # Valor z para el nivel de confianza deseado (en este caso, 99%)
  z <- qnorm(1 - (1 - conf) / 2)
  
  # Error estándar de la proporción
  error <- z * sqrt((p_hat * (1 - p_hat)) / n)
  
  # Limites inferior y superior del intervalo de confianza
  IC_inf <- p_hat - error
  IC_sup <- p_hat + error
  
  # Retornar el intervalo de confianza
  return(c(IC_inf, IC_sup))
}

# Ejemplo de uso
# Número de éxitos (x), tamaño de la muestra (n) y nivel de confianza
x <- 385   # Número de éxitos
n <- 500  # Tamaño de la muestra
confianza <- 0.97  # Nivel de confianza deseado

# Calcular el intervalo de confianza
ic <- intervalo_confianza_proporcion(x, n, confianza)

# Mostrar el resultado
cat("Intervalo de confianza para la proporción poblacional: [", round(ic[1], 3), ",", round(ic[2], 3), "]\n")
Intervalo de confianza para la proporción poblacional: [ 0.729 , 0.811 ]

Grafica:

Ver código
# Librerías
library(ggplot2)

# Valores de la normal estándar
x <- seq(-4, 4, length=1000)
y <- dnorm(x)

# Nivel de confianza
alpha <- 0.03
z <- qnorm(1 - alpha/2)

# Data frame
df <- data.frame(x = x, y = y)

# Gráfico
ggplot(df, aes(x, y)) +
  geom_line(color="darkgreen", size=1) +
  geom_area(data=subset(df, x >= -z & x <= z), 
            aes(x, y), fill="green", alpha=0.3) +
  geom_vline(xintercept = c(-z, z), linetype="dashed", color="black") +
  annotate("text", x=0, y=0.15, label="1 - α", size=6) +
  annotate("text", x=-z, y=0.02, label=expression(-z[alpha/2]), hjust=1.2, size=5) +
  annotate("text", x=z, y=0.02, label=expression(z[alpha/2]), hjust=-0.2, size=5) +
  labs(title="Zona de confianza al 97% en la Normal Estándar",
       x="", y="Densidad") +
  theme_minimal()

Interpretación: Con un 95% de confianza, se estima que entre el 73.3% y el 80.7% de los ciudadanos están satisfechos con el sistema de trámites digitales. Esta información puede ayudar a la Secretaría a evaluar el impacto de la digitalización y tomar decisiones sobre futuras mejoras.

2.4 .Varianza poblacional

Intervalo de confianza para la varianza poblacional

L_i = \frac{(n-1)s^2}{\chi^2_{(\alpha/2, \, n-1)}} L_s = \frac{(n-1)s^2}{\chi^2_{(1-\alpha/2, \, n-1)}}

La Secretaría de Atención Ciudadana quiere conocer qué tan variable es el tiempo de espera (en minutos) de los ciudadanos para ser atendidos en los Puntos de Atención Presencial.

Para ello, se selecciona una muestra aleatoria de 15 ciudadanos y se registran los siguientes tiempos de espera (en minutos):

12,15,14,10,13,16,12,14,11,15,13,12,17,14,13

La Secretaría desea construir un intervalo de confianza al 99% para la varianza poblacional de los tiempos de espera.

Ver código
# Datos muestrales: pesos de los 30 bolígrafos
muestra <- c(12,15,14,10,13,16,12,14,11,15,13,12,17,14,13)

# Tamaño de la muestra
n <- length(muestra)

# Calcular la varianza muestral
var_muestral <- var(muestra)

# Nivel de confianza del 99%
alpha <- 0.01
chi2_izq <- qchisq(1 - alpha / 2, df = n - 1)  # Cuantil superior
chi2_der <- qchisq(alpha / 2, df = n - 1)      # Cuantil inferior

# Calcular el intervalo de confianza para la varianza
lim_inf <- (n - 1) * var_muestral / chi2_izq
lim_sup <- (n - 1) * var_muestral / chi2_der

# Mostrar los resultados
cat("La varianza muestral es:", var_muestral, "\n")
La varianza muestral es: 3.542857 
Ver código
cat("Intervalo de confianza para la varianza poblacional del 99%: [", lim_inf, ", ", lim_sup, "]\n")
Intervalo de confianza para la varianza poblacional del 99%: [ 1.583686 ,  12.17275 ]

Grafica:

Ver código
library(ggplot2)

# Definir los grados de libertad
gl <- 14

# Secuencia de valores numéricos
x <- seq(0, 40, length.out = 1000)  # 1000 puntos entre 0 y 40
y <- dchisq(x, df = gl)             # densidad chi-cuadrado

# Crear dataframe
df_plot <- data.frame(x = x, y = y)

# Valores críticos (para IC 99%)
alpha <- 0.01
chi_low  <- qchisq(alpha/2,   gl)
chi_high <- qchisq(1 - alpha/2, gl)

# Gráfico
ggplot(df_plot, aes(x = x, y = y)) +
  geom_line(size = 1, color = "darkblue") +
  geom_area(data = subset(df_plot, x >= chi_low & x <= chi_high),
            aes(x, y), fill = "skyblue", alpha = 0.5) +
  geom_vline(xintercept = c(chi_low, chi_high), linetype = "dashed", color = "red") +
  annotate("text", x = mean(c(chi_low, chi_high)), y = max(y)*0.9,
           label = "1 - α = 99%", size = 5) +
  annotate("text", x = chi_low, y = max(y)*0.6,
           label = paste0("chi^2[0.005] = ", round(chi_low, 3)),
           hjust = 1.1, size = 4, color = "red") +
  annotate("text", x = chi_high, y = max(y)*0.6,
           label = paste0("chi^2[0.995] = ", round(chi_high, 3)),
           hjust = -0.1, size = 4, color = "red") +
  labs(title = paste("Distribución Chi-cuadrado (gl =", gl, ")"),
       x = expression(chi^2), y = "Densidad") +
  theme_minimal()

##.Diferencia de medias pareadas

Intervalo de confianza para la diferencia de medias poblacionales muestras pareadas

\bar{X}_{d_i} \; \mp \; t_{(\alpha/2, n-1)} \, \frac{S_{d_i}}{\sqrt{n}} \bar{X}_{d_i} = \frac{\sum d_i}{n}

S^2_{d_i} = \frac{\sum (d_i - \bar{d}_i)^2}{n-1}

S_{d_i} = \sqrt{S^2_{d_i}}

d_i = X_{\text{antes}} - X_{\text{despues}} Para concluir:

La Secretaría de Tránsito de un municipio implementó un nuevo sistema digital para la expedición de licencias de conducción. El objetivo es reducir los tiempos de atención a los ciudadanos en la ventanilla.

Para evaluar el impacto, se tomó una muestra de 12 ciudadanos. A cada uno se le midió el tiempo (en minutos) que tardaba en ser atendido antes y después de la implementación del nuevo sistema.

Se desea construir un intervalo de confianza al 98% para la diferencia promedio de los tiempos (antes – después).

Ciudadano Antes (min) Después (min)
1 42 35
2 39 33
3 45 37
4 40 34
5 47 38
6 44 36
7 41 35
8 46 39
9 43 36
10 48 40
11 39 33
12 44 36
Ver código
# Datos de presión arterial antes y después del tratamiento
antes <- c(42, 39, 45, 40, 47, 44, 41, 46,43,48,39,44)
despues <- c(35,33,37,34,38,36,35,39,36,40,33,36)

# Calcular las diferencias
diferencias <- antes - despues

# Media y desviación estándar de las diferencias
media_diferencias <- mean(diferencias)
sd_diferencias <- sd(diferencias)

# Número de pacientes
n <- length(diferencias)

# Grados de libertad
df <- n - 1

# Valor crítico t para un intervalo de confianza del 95%
t_critico <- qt(0.985, df)

# Error estándar de la media de las diferencias
error_estandar <- sd_diferencias / sqrt(n)

# Intervalo de confianza
limite_inferior <- media_diferencias - t_critico * error_estandar
limite_superior <- media_diferencias + t_critico * error_estandar

# Mostrar resultados
cat("Media de las diferencias:", media_diferencias, "\n")
Media de las diferencias: 7.166667 
Ver código
cat("Desviación estándar de las diferencias:", sd_diferencias, "\n")
Desviación estándar de las diferencias: 1.029857 
Ver código
cat("Intervalo de confianza del 95% para la diferencia de medias: [", limite_inferior, ",", limite_superior, "]\n")
Intervalo de confianza del 95% para la diferencia de medias: [ 6.426207 , 7.907127 ]

Interpretación:

Con un 98% de confianza, se puede afirmar que el tiempo promedio de atención se redujo entre 6.4 y 7.9 minutos después de implementar el nuevo sistema.

Esto indica que la política de digitalización sí tuvo un impacto positivo y estadísticamente significativo en la eficiencia del servicio público.

Como:

Conclusión

El análisis estadístico muestra que, con un nivel de confianza del 98%, la reducción promedio en los tiempos de atención tras la implementación del sistema digital se encuentra entre 6,4 y 7,9 minutos.

Esto significa que la medida adoptada por la administración pública fue eficaz, ya que la disminución del tiempo es consistente, estadísticamente significativa y no atribuible al azar. En términos de gestión pública, el resultado respalda la inversión realizada y evidencia una mejora real en la calidad y eficiencia del servicio al ciudadano.

2.5 .Diferencia de medias independientes

Caso a) Diferencia de las medias de dos poblaciones varianzas poblacionales conocidas

(\bar{X}_1 - \bar{X}_2) \; \mp \; Z_{\alpha/2} \sqrt{ \frac{\sigma_1^2}{n_1} + \frac{\sigma_2^2}{n_2} }

La Dirección de Servicios Municipales desea comparar la eficiencia en minutos entre dos modalidades de atención ciudadana para trámites: un nuevo módulo exprés y el módulo tradicional. Se supone que, por estudios previos, las desviaciones estándar poblacionales son conocidas.

Se toma una muestra de cada modalidad:

  • Módulo exprés (Población 1): n1=80n_1 = 80n 1​=80, tiempo medio muestral xˉ1=35.4\bar{x}_1 = 35.4x 1​=35.4 minutos, desviación estándar poblacional σ1=6\sigma_1 = 64σ 4 1​=6 minutos.

  • Módulo tradicional (Población 2):n2=75n_2 = 75n 2​=75, tiempo medio muestral xˉ2=38.1\bar{x}_2 = 38.1xˉ2​=38.1 minutos, desviación estándar poblacional σ2=7\sigma_2 = 7σ 2​=7 minutos.

Construya un intervalo de confianza del 94% para la diferencia de medias poblacionales μ1−μ2\mu_1 - \mu_2μ1​−μ2​(asumiendo varianzas conocidas). Interprete el resultado en el contexto.

Ver código
# Datos del ejercicio
x1_bar <- 35.4   # Media del primer grupo (exprés)
x2_bar <- 38.1   # Media del segundo grupo (tradicional)
sigma1_sq <- 36  # Varianza del primer grupo
sigma2_sq <- 49  # Varianza del segundo grupo
n1 <- 80         # Tamaño de la muestra del primer grupo
n2 <- 75         # Tamaño de la muestra del segundo grupo
z_alpha2 <- 1.88079  # Valor crítico Z para un nivel de confianza del 94%

# Cálculo de la diferencia de medias
diff_means <- x1_bar - x2_bar

# Cálculo del error estándar de la diferencia de medias
se_diff <- sqrt(sigma1_sq / n1 + sigma2_sq / n2)

# Cálculo del intervalo de confianza
margin_of_error <- z_alpha2 * se_diff
lower_bound <- diff_means - margin_of_error
upper_bound <- diff_means + margin_of_error

# Resultados
cat("La diferencia de medias es:", diff_means, "\n")
La diferencia de medias es: -2.7 
Ver código
cat("Error estándar:", se_diff, "\n")
Error estándar: 1.050397 
Ver código
cat("Margen de error:", margin_of_error, "\n")
Margen de error: 1.975576 
Ver código
cat("Intervalo de confianza del 94%: [", lower_bound, ",", upper_bound, "]\n")
Intervalo de confianza del 94%: [ -4.675576 , -0.7244243 ]

Grafica

Ver código
# Librerías
library(ggplot2)

# Datos
xbar1 <- 35.4; n1 <- 80; sigma1 <- 6
xbar2 <- 38.1; n2 <- 75; sigma2 <- 7

# Diferencia muestral
diff <- xbar1 - xbar2

# Nivel y valor crítico
alpha <- 0.06
z <- qnorm(1 - alpha/2)   # z_{alpha/2}

# Error estándar y margen
se <- sqrt(sigma1^2 / n1 + sigma2^2 / n2)
ME <- z * se

# Intervalo
lim_inf <- diff - ME
lim_sup <- diff + ME

cat(sprintf("Diferencia muestral = %.3f\n", diff))
Diferencia muestral = -2.700
Ver código
cat(sprintf("z (alpha/2) = %.6f\n", z))
z (alpha/2) = 1.880794
Ver código
cat(sprintf("SE = %.6f\n", se))
SE = 1.050397
Ver código
cat(sprintf("ME = %.6f\n", ME))
ME = 1.975579
Ver código
cat(sprintf("IC 94%% para mu1 - mu2 = [ %.6f , %.6f ]\n", lim_inf, lim_sup))
IC 94% para mu1 - mu2 = [ -4.675579 , -0.724421 ]
Ver código
# ---------- Gráfico A: Normal estándar con zona central sombreada ----------
x <- seq(-4, 4, length.out = 1000)
y <- dnorm(x)
df_norm <- data.frame(x = x, y = y)
zval <- z

p1 <- ggplot(df_norm, aes(x = x, y = y)) +
  geom_line(size = 1, color = "darkgreen") +
  geom_area(data = subset(df_norm, x >= -zval & x <= zval), aes(x, y),
            fill = "green", alpha = 0.35) +
  geom_vline(xintercept = c(-zval, zval), linetype = "dashed") +
  annotate("text", x = 0, y = 0.35, label = "1 - α = 94%", size = 6) +
  annotate("text", x = -zval, y = 0.05, label = sprintf("-z = %.3f", -zval), hjust = 1.2) +
  annotate("text", x = zval,  y = 0.05, label = sprintf(" z = %.3f",  zval), hjust = -0.2) +
  labs(title = "Normal estándar: zona central (1 - α) con α = 0.06",
       x = "Z", y = "Densidad") +
  theme_minimal()

# ---------- Gráfico B: Diferencia de medias con IC (punto y barra de error) ----------
df_diff <- data.frame(
  grupo = "Diff (xbar1 - xbar2)",
  diff = diff,
  li = lim_inf,
  ls = lim_sup
)

p2 <- ggplot(df_diff, aes(x = grupo, y = diff)) +
  geom_point(size = 4, color = "blue") +
  geom_errorbar(aes(ymin = li, ymax = ls), width = 0.15, size = 1, color = "red") +
  geom_hline(yintercept = 0, linetype = "dashed") +
  labs(title = "Diferencia de medias y su IC al 94%",
       y = expression(mu[1] - mu[2]), x = "") +
  theme_minimal() +
  theme(axis.text.x = element_blank(), axis.ticks.x = element_blank())

# Para mostrar ambos gráficos en RStudio
print(p1)

Ver código
print(p2)

Interpretación:

con un 94% de confianza, la media de tiempo de atención del módulo exprés es entre 0.72 y 4.68 minutos menor que la del módulo tradicional. Como el intervalo no contiene 0 y es negativo, hay evidencia consistente de que el módulo exprés reduce el tiempo promedio de atención.

Como:

Conlucion:

Dado que el intervalo de confianza al 94% no incluye el valor 0, podemos inferir que existe una diferencia significativa entre los tiempos de atención en los dos módulos (exprés y tradicional), al menos con un 94% de confianza. La diferencia está entre 2.15 y 9.85 minutos, lo que sugiere que el módulo exprés atiende a los ciudadanos en menor tiempo que el módulo tradicional.

Caso b) Diferencia de las medias de dos poblaciones varianzas poblacionales desconocidas e iguales

Caso c) Diferencia de las medias de dos poblaciones varianzas poblacionales desconocidas y distintas

2.6 Ejercicio 1: Varianzas desconocidas pero iguales

La Secretaría de Planeación desea evaluar si existe diferencia en el nivel de satisfacción ciudadana entre dos métodos de atención al público:

  • Módulo exprés (rápida atención).

  • Módulo tradicional (atención normal).

Se encuestó a ciudadanos sobre su satisfacción (escala de 1 a 100).

  • Muestra módulo exprés: n1=20n_1 = 20n 1​=20, xˉ1=82\bar{x}_1 = 82x 1​=82, s12=25s_1^2 = 25s12​=25.

  • Muestra módulo tradicional: n2=18n_2 = 18n2​=18, xˉ2=75\bar{x}_2 = 75xˉ2​=75, s22=20s_2^2 = 20s22​=20.

  • Nivel de confianza: 95%.

Como las varianzas son desconocidas pero iguales, usamos la t de Student con varianza combinada:

sp2=(n1−1)s12+(n2−1)s22n1+n2−2s_p^2 = frac{(n_1 - 1) s_1^2 + (n_2 - 1) s_2^2}{n_1 + n_2 - 2}

Ver código
### --- Ejercicio 1: Varianzas desconocidas pero iguales ---

# Datos
x1_bar <- 82; s1_sq <- 25; n1 <- 20
x2_bar <- 75; s2_sq <- 20; n2 <- 18
alpha <- 0.05

# Diferencia de medias
diff <- x1_bar - x2_bar

# Varianza combinada
sp2 <- ((n1-1)*s1_sq + (n2-1)*s2_sq) / (n1+n2-2)
sp <- sqrt(sp2)

# Error estándar
se <- sp * sqrt(1/n1 + 1/n2)

# Grados de libertad y valor crítico
df <- n1 + n2 - 2
t_crit <- qt(1 - alpha/2, df)

# Intervalo de confianza
LI <- diff - t_crit*se
LS <- diff + t_crit*se

cat("Ejercicio 1 (Varianzas iguales)\n")
Ejercicio 1 (Varianzas iguales)
Ver código
cat("Diferencia =", diff, "\n")
Diferencia = 7 
Ver código
cat("IC 95% = [", LI, ",", LS, "]\n\n")
IC 95% = [ 3.864865 , 10.13513 ]
Ver código
# Datos
n1 <- 30; x1 <- 45; s1 <- 8
n2 <- 28; x2 <- 50; s2 <- 7

# Diferencia de medias
diff_media <- x1 - x2

# Varianza agrupada
sp2 <- ((n1-1)*s1^2 + (n2-1)*s2^2) / (n1+n2-2)
sp <- sqrt(sp2)

# Error estándar combinado
SE <- sp * sqrt(1/n1 + 1/n2)

# Grados de libertad
df <- n1 + n2 - 2

# Valor crítico t para 95%
t_crit <- qt(0.975, df)

list(
  Diferencia_Medias = diff_media,
  Varianza_Agrupada = sp2,
  Error_Estandar = SE,
  Valor_Critico_t = t_crit,
  gl = df
)
$Diferencia_Medias
[1] -5

$Varianza_Agrupada
[1] 56.76786

$Error_Estandar
[1] 1.97982

$Valor_Critico_t
[1] 2.003241

$gl
[1] 56

Grafica:

Ver código
library(ggplot2)

# Parámetros
alpha <- 0.05
gl <- 15 # grados de libertad
t_crit <- qt(1 - alpha/2, df = gl)

# Datos
x <- seq(-4, 4, length = 1000)
y <- dt(x, df = gl)
df <- data.frame(x, y)

# Gráfica
ggplot(df, aes(x, y)) +
  geom_line(color = "darkgreen", size = 1) +
  geom_area(data = subset(df, x >= -t_crit & x <= t_crit),
            aes(x, y), fill = "lightgreen", alpha = 0.6) +
  geom_vline(xintercept = c(-t_crit, t_crit), linetype = "dashed", color = "black") +
  annotate("text", x = 0, y = 0.1, label = "1 - α", size = 6, color = "black") +
  theme_minimal() +
  labs(title = "Distribución t-Student",
       subtitle = paste("gl =", gl, ", α =", alpha),
       x = "t", y = "Densidad")

Ejercicio 2: Varianzas desconocidas y distintas

La Alcaldía quiere comparar el tiempo promedio de respuesta a solicitudes ciudadanas en dos canales:

  • Canal digital (PQR en línea).

  • Canal presencial (ventanilla).

Datos:

  • Muestra canal digital: $𝑛 1 = 25 n 1 ​ =25, 𝑥 ˉ $1 = 12.5 dıas x ˉ 1 ​ =12.5d dias, $𝑠 1 2 = 4.2 s 1 2 $​ =4.2.

  • Muestra canal presencial: n2​=22,𝑥ˉ2=15.1 dias xˉ2​=15.1 dias,𝑠22=6.0s22​=6.0.

  • Nivel de confianza: 90%.

Como las varianzas son desconocidas y distintas, aplicamos la corrección de Welch:

SE = \sqrt{\frac{s_1^2}{n_1} + \frac{s_2^2}{n_2}}

df = \frac{\left( \frac{s_1^2}{n_1} + \frac{s_2^2}{n_2} \right)^2} {\frac{\left(\frac{s_1^2}{n_1}\right)^2}{n_1 - 1} +\frac{\left(\frac{s_2^2}{n_2}\right)^2}{n_2 - 1}}

IC = (\bar{x}_1 - \bar{x}_2) \; \pm \; t_{\alpha/2, \, df} \cdot SE

Ver código
### --- Ejercicio 2: Varianzas desconocidas y distintas (Welch) ---

# Datos
x1_bar <- 12.5; s1_sq <- 4.2; n1 <- 25
x2_bar <- 15.1; s2_sq <- 6.0; n2 <- 22
alpha <- 0.10

# Diferencia de medias
diff <- x1_bar - x2_bar

# Error estándar
se <- sqrt(s1_sq/n1 + s2_sq/n2)

# Grados de libertad con corrección de Welch
df <- ( (s1_sq/n1 + s2_sq/n2)^2 ) /
      ( (s1_sq/n1)^2/(n1-1) + (s2_sq/n2)^2/(n2-1) )

# Valor crítico
t_crit <- qt(1 - alpha/2, df)

# Intervalo de confianza
LI <- diff - t_crit*se
LS <- diff + t_crit*se

cat("Ejercicio 2 (Varianzas distintas)\n")
Ejercicio 2 (Varianzas distintas)
Ver código
cat("Diferencia =", diff, "\n")
Diferencia = -2.6 
Ver código
cat("IC 90% = [", LI, ",", LS, "]\n")
IC 90% = [ -3.71711 , -1.48289 ]
Ver código
# Datos
n1 <- 40; x1 <- 82; s1 <- 10
n2 <- 35; x2 <- 76; s2 <- 15

# Diferencia de medias
diff_media <- x1 - x2

# Error estándar combinado (Welch)
SE <- sqrt(s1^2/n1 + s2^2/n2)

# Grados de libertad con fórmula de Welch
df <- ( (s1^2/n1 + s2^2/n2)^2 ) / 
      ( ((s1^2/n1)^2)/(n1-1) + ((s2^2/n2)^2)/(n2-1) )

# Valor crítico t para 95%
t_crit <- qt(0.975, df)

list(
  Diferencia_Medias = diff_media,
  Error_Estandar = SE,
  Valor_Critico_t = t_crit,
  gl = df
)
$Diferencia_Medias
[1] 6

$Error_Estandar
[1] 2.988072

$Valor_Critico_t
[1] 2.001757

$gl
[1] 57.94644

Grafica:

Ver código
# Librerías
library(ggplot2)

# Parámetros
gl1 <- 5   # grados de libertad 1
gl2 <- 10  # grados de libertad 2
alpha <- 0.05

# Valores críticos
f_crit_inf <- qf(alpha/2, gl1, gl2, lower.tail = TRUE)   # cola izquierda
f_crit_sup <- qf(alpha/2, gl1, gl2, lower.tail = FALSE)  # cola derecha

# Rango para graficar
x <- seq(0, 6, length.out = 1000)  
y <- df(x, gl1, gl2)   # densidad F

# Data frame
df_plot <- data.frame(x = x, y = y)

# Gráfico
ggplot(df_plot, aes(x, y)) +
  geom_line(color = "darkgreen", size = 1) +
  geom_area(data = subset(df_plot, x >= f_crit_inf & x <= f_crit_sup),
            aes(x, y), fill = "lightgreen", alpha = 0.6) +
  geom_vline(xintercept = f_crit_inf, linetype = "dashed", color = "red") +
  geom_vline(xintercept = f_crit_sup, linetype = "dashed", color = "red") +
  labs(title = "Distribución F de Snedecor",
       subtitle = paste0("gl1 = ", gl1, ", gl2 = ", gl2, 
                         " | Confianza = ", (1-alpha)*100, "%"),
       x = "Valores F", y = "Densidad") +
  theme_minimal()

Como:

Concluciones:

1) Varianzas desconocidas pero iguales (Módulo exprés vs tradicional — satisfacción)

Con 95% de confianza, el módulo exprés tiene en promedio entre 3.9 y 10.1 puntos más de satisfacción que el módulo tradicional. Es decir, hay evidencia significativa de que el módulo exprés mejora la satisfacción ciudadana.

2) Varianzas desconocidas y distintas (Welch) (Canal digital vs presencial — tiempo de respuesta)

Con 90% de confianza, el canal digital responde entre 1.48 y 3.72 días más rápido que el canal presencial. El intervalo es totalmente negativo, por tanto hay evidencia de que el canal digital es más ágil.

3) Razón de varianzas — F de Snedecor (Variabilidad Dependencia A vs B)

𝜃=2.5 indica que la Dependencia A muestra mayor variabilidad muestral que la B. Si el intervalo de confianza para \frac{\sigma_1^2}{\sigma_2^2} (obtenido con la F) queda totalmente por encima de 1, entonces concluimos con el nivel seleccionado (p. ej. 95%) que la varianza de A es significativamente mayor que la de B. Si el IC incluye 1, no hay evidencia de diferencia en variabilidad.

2.7 .Diferencia de dos proporciones poblacionales

La Secretaría de Atención Ciudadana quiere comparar la proporción de ciudadanos satisfechos entre dos canales de atención al público implementados en la ciudad:

  • Canal en línea (usuarios que tramitaron por internet): se tomó una muestra de n_1 = 420 \; \text{usuarios}, \quad \bar{x}_1 = 310

  • Canal presencial (ventanilla): se tomó una muestra de n_2 = 380 \; \text{usuarios}, \quad \bar{x}_2 = 260 declararon estar satisfechos.

La Secretaría pide construir un intervalo de confianza del 93% para la diferencia de proporciones 𝑝 1 − 𝑝 2(en línea menos presencial) y dar la interpretación.

Ver código
# Datos del ejercicio
x_1 <- 310   # Número de ciudadanos satisfechos en canal en línea
n_1 <- 420   # Tamaño de la muestra en canal en línea

x_2 <- 260   # Número de ciudadanos satisfechos en canal presencial
n_2 <- 380   # Tamaño de la muestra en canal presencial

# Paso 1: Calcular las proporciones muestrales
p1 <- x_1 / n_1
p2 <- x_2 / n_2

# Paso 2: Calcular la diferencia de las proporciones muestrales
diff_p <- p1 - p2

# Paso 3: Calcular el error estándar de la diferencia de proporciones
SE <- sqrt((p1 * (1 - p1) / n_1) + (p2 * (1 - p2) / n_2))

# Paso 4: Determinar el valor crítico z para un intervalo de confianza del 93%
z_critical <- qnorm(1 - 0.07/2)   # 1 - 0.035 = 0.965

# Paso 5: Calcular el intervalo de confianza
margin_error <- z_critical * SE
lower_bound <- diff_p - margin_error
upper_bound <- diff_p + margin_error

# Resultado final
cat("Proporción en línea (p1):", round(p1,4), "\n")
Proporción en línea (p1): 0.7381 
Ver código
cat("Proporción presencial (p2):", round(p2,4), "\n")
Proporción presencial (p2): 0.6842 
Ver código
cat("Diferencia de proporciones:", round(diff_p,4), "\n")
Diferencia de proporciones: 0.0539 
Ver código
cat("Error estándar:", round(SE,4), "\n")
Error estándar: 0.0321 
Ver código
cat("Valor crítico Z:", round(z_critical,4), "\n")
Valor crítico Z: 1.8119 
Ver código
cat("Margen de error:", round(margin_error,4), "\n")
Margen de error: 0.0581 
Ver código
cat("Intervalo de confianza 93%: [", round(lower_bound,4), ",", round(upper_bound,4), "]\n")
Intervalo de confianza 93%: [ -0.0042 , 0.112 ]

Interpretacion:

Aunque la satisfacción es ligeramente mayor en el canal en línea, el intervalo de confianza del 93% incluye el 0, por lo que no hay evidencia suficiente para concluir que exista una diferencia significativa entre los dos canales.

Ver código
library(ggplot2)

# Parámetros
alpha <- 0.07
z_crit <- qnorm(1 - alpha/2) # ≈ 1.81

# Datos
x <- seq(-4, 4, length = 1000)
y <- dnorm(x)
df <- data.frame(x, y)

# Gráfica
ggplot(df, aes(x, y)) +
  geom_line(color = "darkgreen", size = 1) +
  geom_area(data = subset(df, x >= -z_crit & x <= z_crit),
            aes(x, y), fill = "lightgreen", alpha = 0.6) +
  geom_vline(xintercept = c(-z_crit, z_crit), linetype = "dashed", color = "black") +
  annotate("text", x = 0, y = 0.2, label = "1 - α", size = 6, color = "black") +
  annotate("text", x = -z_crit, y = 0.02, label = expression(-Z[alpha/2]), hjust = 1.2) +
  annotate("text", x =  z_crit, y = 0.02, label = expression(Z[alpha/2]), hjust = -0.2) +
  annotate("text", x = 3, y = 0.35, label = "N(0,1)", size = 5, fontface = "italic") +
  theme_minimal() +
  labs(title = "Intervalo de Confianza (93%) en la Normal Estándar",
       x = "Z", y = "Densidad")

Conclucion

Dado que el intervalo de confianza del 93% para la diferencia de proporciones entre el canal en línea y el presencial es [−0.0042,0.1120], y este intervalo incluye al 0, no podemos afirmar con un 93% de confianza que exista una diferencia estadísticamente significativa entre los niveles de satisfacción de los dos canales.

2.8 Quarto

Quarto enables you to weave together content and executable code into a finished document. To learn more about Quarto see https://quarto.org.

2.9 Running Code

When you click the Render button a document will be generated that includes both content and the output of embedded code. You can embed code like this:

Ver código
1 + 1
[1] 2

The echo: false option disables the printing of code (only output is displayed).

Referencias

Signorell, Andri. 2025. «DescTools: Tools for Descriptive Statistics». https://doi.org/10.32614/CRAN.package.DescTools.
Wickham, Hadley, Mara Averick, Jennifer Bryan, Winston Chang, Lucy D’Agostino McGowan, Romain François, Garrett Grolemund, et al. 2019. «Welcome to the tidyverse» 4: 1686. https://doi.org/10.21105/joss.01686.
Zhang (Robert), Ying-Ying. 2023. «OneTwoSamples: Deal with One and Two (Normal) Samples». https://doi.org/10.32614/CRAN.package.OneTwoSamples.
Zhu, Hao. 2024. «kableExtra: Construct Complex Table with ’kable’ and Pipe Syntax». https://doi.org/10.32614/CRAN.package.kableExtra.