Pregunta orientadora: ¿Cómo podemos aprender de 10.000 clientes observando solo una parte de ellos, sin confundir una muestra grande con una muestra confiable?
10.000Clientes en la población
3Métodos probabilísticos
1Decisión empresarial

Resultados de aprendizaje. Al finalizar el material, podrás: (1) distinguir población, muestra, parámetro y estadístico; (2) calcular y justificar un tamaño muestral bajo supuestos explícitos; (3) implementar muestreo aleatorio simple, estratificado y sistemático en R; (4) comparar resultados muestrales con una población conocida en una simulación; y (5) defender una estrategia de selección ante una gerencia.

Ruta de trabajo: comprender el problema → definir qué estimar → calcular cuántos observar → decidir cómo seleccionar → medir diferencias → recomendar.

1 El caso transversal: una empresa que necesita escuchar a sus clientes

Mercado Conecta es una empresa comercializadora ficticia con 10.000 clientes distribuidos en cuatro regiones. La gerencia desea estimar la satisfacción, la proporción de recomendación y el promedio de compras anuales. Contactar a toda la base resulta costoso.

Tenemos una ventaja didáctica: simularemos la población completa. Así podremos comparar el valor poblacional verdadero con lo que indican diferentes muestras. En una encuesta real ese valor poblacional no se conoce.

1.1 Construcción de la población ficticia

La siguiente rutina crea los datos: no requiere descargar archivos ni disponer de cuentas externas. Las regiones suman exactamente 10.000 registros. Las diferencias entre regiones se introducen con fines pedagógicos; no son cifras reales del comercio colombiano.

regiones <- rep(c("Norte", "Centro", "Sur", "Occidente"),
                times = c(1000, 5000, 2500, 1500))
N <- length(regiones)

base_clientes <- data.frame(
  id_cliente = sprintf("CLI-%05d", seq_len(N)),
  region = regiones,
  stringsAsFactors = FALSE
)

prob_canal <- c(Tienda = 0.30, Web = 0.42, App = 0.28)
base_clientes$canal <- sample(names(prob_canal), N,
                              replace = TRUE, prob = prob_canal)
base_clientes$tipo_cliente <- sample(c("Nuevo", "Frecuente"), N,
                                     replace = TRUE, prob = c(0.38, 0.62))

# Efectos simulados distintos por región
ajuste_region <- c(Norte = -0.8, Centro = 0.4,
                   Sur = -0.4, Occidente = 0.1)
base_clientes$satisfaccion <- pmin(10, pmax(1,
  round(rnorm(N, mean = 7.2 + ajuste_region[base_clientes$region],
              sd = 1.55))))

p_recomienda <- plogis(-2.8 + 0.48 * base_clientes$satisfaccion)
base_clientes$recomienda <- ifelse(runif(N) < p_recomienda, "Sí", "No")

base_clientes$ventas_anuales <- round(rlnorm(N, meanlog = 13.1,
  sdlog = 0.50) * ifelse(base_clientes$tipo_cliente == "Frecuente", 1.35, 1), -2)

head(base_clientes, 8)
resumen_region <- base_clientes |>
  count(region, name = "clientes") |>
  mutate(participacion = percent(clientes / sum(clientes), accuracy = 0.1))
knitr::kable(resumen_region, caption = "Distribución real de la población por región")
Distribución real de la población por región
region clientes participacion
Centro 5000 50.0%
Norte 1000 10.0%
Occidente 1500 15.0%
Sur 2500 25.0%
ggplot(resumen_region, aes(x = reorder(region, -clientes), y = clientes, fill = region)) +
  geom_col(width = 0.65, show.legend = FALSE) +
  geom_text(aes(label = paste0(comma(clientes), " clientes")),
            vjust = -0.5, fontface = "bold", size = 4) +
  scale_fill_manual(values = colores) +
  scale_y_continuous(labels = comma, expand = expansion(mult = c(0, 0.14))) +
  labs(title = "Nuestra población no está distribuida por igual",
       subtitle = "Las regiones tienen pesos distintos en el negocio",
       x = NULL, y = "Cantidad de clientes") + tema_negocios

Para discutir: si el 50 % de los clientes está en Centro, ¿sería razonable asignarle solo el 10 % de una muestra cuyo objetivo es estimar la satisfacción total? ¿Cuándo tendría sentido tomar la misma cantidad en cada región?

2 Conceptos fundamentales

Concepto Definición operativa En nuestro caso
Población objetivo Conjunto sobre el que queremos concluir Los 10.000 clientes
Marco muestral Lista o mecanismo desde el que seleccionamos La base de registros de clientes
Unidad de muestreo Elemento susceptible de ser seleccionado Un cliente
Muestra Subconjunto elegido según un diseño Por ejemplo, 370 clientes
Parámetro Característica numérica de la población Media poblacional de satisfacción, \(\mu\)
Estadístico Característica calculada con la muestra Media muestral, \(\bar x\)

Una muestra representativa reproduce de manera apropiada las características relevantes para el objetivo del estudio. La representatividad no queda garantizada simplemente porque \(n\) sea grande: depende también del marco, del mecanismo de selección, de las respuestas y de la ausencia de sesgos importantes.

2.1 Dos errores que no debemos confundir

Error muestral: variación ocasionada por observar una parte de la población. Bajo un muestreo probabilístico correctamente diseñado, podemos estudiar su comportamiento.
Error no muestral: cobertura incompleta, no respuesta, preguntas ambiguas, medición defectuosa o registros erróneos. Aumentar \(n\) no corrige automáticamente estas fallas.

Ejemplo: una encuesta voluntaria publicada en una red social recibe 50.000 respuestas. Aunque sea grande, no necesariamente representa a todos los clientes: quienes deciden responder pueden ser diferentes de quienes no responden.

3 ¿Cuántos clientes necesitamos?

El tamaño de muestra depende de la característica que se estimará, la precisión deseada, el nivel de confianza, la variabilidad y el diseño de selección. No existe un único tamaño correcto para todos los objetivos.

3.1 Nivel de confianza y margen de error

Nivel de confianza Valor crítico normal \(Z\) (aproximado)
90 % 1.645
95 % 1.960
99 % 2.576

El 95 % de confianza describe la cobertura a largo plazo de un procedimiento que construye intervalos bajo sus supuestos: si repitiéramos el muestreo y el cálculo muchas veces, aproximadamente el 95 % de los intervalos contendría el parámetro. No significa que un intervalo ya calculado tenga una probabilidad frecuentista del 95 % de contener un parámetro fijo.

El margen de error \(E\), para una proporción, expresa una distancia en puntos proporcionales. Si estimamos 72 % con \(E=0.05\), el intervalo aproximado es 67 % a 77 %, siempre que el diseño y los supuestos permitan utilizar esa aproximación.

3.2 Tamaño muestral para estimar una proporción

Para un muestreo aleatorio simple y una proporción, una primera aproximación en población muy grande es:

\[ n_0=\frac{Z^2p(1-p)}{E^2}. \]

  • \(Z\): valor crítico normal asociado con la confianza.
  • \(p\): proporción anticipada de la característica.
  • \(1-p\): proporción complementaria.
  • \(E\): margen de error absoluto deseado, expresado como proporción (por ejemplo, 0.05).

Si desconocemos \(p\), usar \(p=0.50\) maximiza \(p(1-p)\) y da un tamaño conservador para esta fórmula.

Si la población es finita y se muestrea sin reemplazo, aplicamos la corrección:

\[ \boxed{n=\frac{NZ^2p(1-p)}{E^2(N-1)+Z^2p(1-p)}} \]

Equivalentemente, \(n=\dfrac{Nn_0}{N+n_0-1}\).

Alcance de estas fórmulas: están orientadas a estimar una proporción bajo un diseño aleatorio simple, con aproximación normal, población bien definida y sin pérdidas de respuesta. Para medias, diseños estratificados no proporcionales, conglomerados o poblaciones difíciles de cubrir, se necesita un cálculo ajustado. Un nivel de confianza y un margen de error no solucionan sesgos de cobertura o no respuesta.

3.3 Cálculo guiado: población de 10.000 clientes

Queremos estimar el porcentaje de clientes que recomendaría la empresa:

\[N=10\,000,\qquad Z=1.96,\qquad p=0.50,\qquad E=0.05.\]

N <- nrow(base_clientes)
Z <- qnorm(0.975)
p <- 0.50
E <- 0.05

n0 <- (Z^2 * p * (1 - p)) / E^2
n_corregido <- N * n0 / (N + n0 - 1)
n <- ceiling(n_corregido)  # Siempre redondear hacia arriba

data.frame(
  calculo = c("Sin corrección finita", "Con corrección finita", "Tamaño entero"),
  resultado = c(round(n0, 2), round(n_corregido, 2), n)
) |> knitr::kable(caption = "Dimensionamiento inicial de la encuesta")
Dimensionamiento inicial de la encuesta
calculo resultado
Sin corrección finita 384.15
Con corrección finita 369.97
Tamaño entero 370.00
Resultado para nuestro caso: con los supuestos anteriores, necesitamos 370 clientes seleccionados mediante muestreo aleatorio simple, si todos responden y el marco cubre la población.

3.4 ¿Una población 100 veces mayor requiere una muestra 100 veces mayor?

poblaciones <- c(1000, 10000, 100000, 1000000)
tabla_n <- data.frame(N = poblaciones) |>
  mutate(n_necesario = ceiling(N * n0 / (N + n0 - 1)))
knitr::kable(tabla_n, caption = "Mismo nivel de confianza y margen de error")
Mismo nivel de confianza y margen de error
N n_necesario
1e+03 278
1e+04 370
1e+05 383
1e+06 384
ggplot(tabla_n, aes(x = factor(N, levels = N), y = n_necesario)) +
  geom_col(fill = "#218A88", width = 0.65) +
  geom_text(aes(label = n_necesario), vjust = -0.5, fontface = "bold", size = 4.6) +
  scale_y_continuous(limits = c(0, 440), breaks = seq(0, 400, 100)) +
  labs(title = "La muestra no crece proporcionalmente con la población",
       subtitle = "Estimación de una proporción: 95 % de confianza, error ±5 puntos",
       x = "Población (N)", y = "Tamaño muestral (n)") + tema_negocios

Para discutir: ¿por qué los tamaños de muestra se estabilizan cerca de 385 cuando la población es muy grande?

3.5 ¿Qué pasa si queremos más precisión?

precisiones <- c(0.10, 0.07, 0.05, 0.03, 0.02)
comparacion_error <- data.frame(error = precisiones) |>
  mutate(n0 = Z^2 * 0.5 * 0.5 / error^2,
         n_requerido = ceiling(N * n0 / (N + n0 - 1)),
         margen = percent(error, accuracy = 1))
knitr::kable(comparacion_error[, c("margen", "n_requerido")],
             caption = "La precisión cuesta: tamaño requerido para N = 10.000")
La precisión cuesta: tamaño requerido para N = 10.000
margen n_requerido
10% 96
7% 193
5% 370
3% 965
2% 1937
ggplot(comparacion_error, aes(x = reorder(margen, -error), y = n_requerido)) +
  geom_col(fill = "#D88732", width = 0.6) +
  geom_text(aes(label = comma(n_requerido)), vjust = -0.4, fontface = "bold") +
  scale_y_continuous(labels = comma, expand = expansion(mult = c(0, 0.14))) +
  labs(title = "Exigir menor margen de error aumenta el trabajo de campo",
       x = "Margen de error deseado", y = "Encuestas completas requeridas") + tema_negocios

Nota operativa: si esperamos que responda el 80 % de los clientes seleccionados, podemos planificar alrededor de \(\lceil n/0.80\rceil\) invitaciones para intentar conseguir \(n\) respuestas. Esto es una previsión logística, no una corrección automática del sesgo de no respuesta.

4 Muestreo aleatorio simple (MAS)

En el muestreo aleatorio simple sin reemplazo de tamaño fijo, todas las combinaciones de \(n\) unidades distintas tienen la misma probabilidad de ser seleccionadas. Cada cliente tiene probabilidad de inclusión \(n/N\), pero esto no implica que las elecciones sean independientes.

4.1 Implementación en R

set.seed(101)
muestra_mas <- base_clientes |>
  slice_sample(n = n, replace = FALSE)

head(muestra_mas, 7)

Calculamos valores poblacionales y muestrales. Como la satisfacción es una variable cuantitativa (escala de 1 a 10), utilizamos la media. Para recomendación, utilizamos una proporción.

media_real <- mean(base_clientes$satisfaccion)
prop_real <- mean(base_clientes$recomienda == "Sí")
ventas_reales <- mean(base_clientes$ventas_anuales)

comparacion_mas <- data.frame(
  indicador = c("Satisfacción promedio", "Proporción que recomienda", "Ventas anuales promedio (COP)"),
  poblacion = c(media_real, prop_real, ventas_reales),
  muestra_MAS = c(mean(muestra_mas$satisfaccion),
                  mean(muestra_mas$recomienda == "Sí"),
                  mean(muestra_mas$ventas_anuales))
) |>
  mutate(diferencia = muestra_MAS - poblacion)
knitr::kable(comparacion_mas, digits = 3,
             caption = "Población conocida frente a una muestra aleatoria simple")
Población conocida frente a una muestra aleatoria simple
indicador poblacion muestra_MAS diferencia
Satisfacción promedio 7.202 7.162 -0.040
Proporción que recomienda 0.638 0.651 0.013
Ventas anuales promedio (COP) 673948.550 659249.459 -14699.091
Pregunta: ¿es incorrecta una muestra cuando su media no coincide exactamente con la media poblacional? Justifica tu respuesta diferenciando variabilidad muestral y sesgo.

4.2 La variabilidad muestral se puede observar

Tomamos 500 muestras MAS independientes entre sí, todas de tamaño 370, y calculamos la media de satisfacción para cada una.

set.seed(102)
B <- 500
medias_mas <- replicate(B,
  mean(sample(base_clientes$satisfaccion, size = n, replace = FALSE)))

df_medias <- data.frame(media = medias_mas)

ggplot(df_medias, aes(x = media)) +
  geom_histogram(bins = 25, fill = "#3F79B0", color = "white") +
  geom_vline(xintercept = media_real, color = "#C74B50", linewidth = 1.1,
             linetype = "dashed") +
  annotate("label", x = media_real, y = Inf, vjust = 1.4,
           label = paste0("Media poblacional = ", round(media_real, 3)),
           fill = "#FFF4F1", size = 3.7) +
  labs(title = "Quinientas muestras, quinientas estimaciones",
       subtitle = "La línea punteada muestra el parámetro verdadero",
       x = "Media de satisfacción en cada muestra", y = "Número de muestras") +
  tema_negocios

data.frame(
  medida = c("Media de las 500 medias", "Desviación estándar de las medias", "Media poblacional"),
  valor = round(c(mean(medias_mas), sd(medias_mas), media_real), 4)
) |> knitr::kable(caption = "Qué revela repetir el procedimiento")
Qué revela repetir el procedimiento
medida valor
Media de las 500 medias 7.2060
Desviación estándar de las medias 0.0796
Media poblacional 7.2021

Idea central: diferentes muestras válidas producen resultados diferentes; al repetir el procedimiento observamos la distribución muestral del estimador.

5 Muestreo estratificado

Una población se divide en estratos (subgrupos) mutuamente excluyentes y conjuntamente exhaustivos. Luego seleccionamos aleatoriamente unidades dentro de cada estrato. Aquí utilizamos la región como criterio de estratificación.

El interés comercial puede justificar la división: queremos evitar que una región pequeña desaparezca accidentalmente del estudio y, además, producir resultados regionales.

5.1 Asignación proporcional

Sea \(N_h\) el tamaño del estrato \(h\) y \(n_h\) su muestra. En una asignación proporcional:

\[n_h\approx n\frac{N_h}{N}.\]

Los valores se redondean conservando la suma total \(\sum_h n_h=n\).

tamanos_region <- base_clientes |>
  count(region, name = "N_h") |>
  mutate(cuota_exacta = n * N_h / sum(N_h),
         n_h = floor(cuota_exacta),
         resto = cuota_exacta - n_h)

# Método de mayores restos para garantizar exactamente n encuestas.
faltantes <- n - sum(tamanos_region$n_h)
if (faltantes > 0) {
  posiciones <- order(tamanos_region$resto, decreasing = TRUE)[seq_len(faltantes)]
  tamanos_region$n_h[posiciones] <- tamanos_region$n_h[posiciones] + 1L
}
stopifnot(sum(tamanos_region$n_h) == n)
knitr::kable(tamanos_region[, c("region", "N_h", "cuota_exacta", "n_h")],
             digits = 2, caption = "Asignación proporcional de la muestra por región")
Asignación proporcional de la muestra por región
region N_h cuota_exacta n_h
Centro 5000 185.0 185
Norte 1000 37.0 37
Occidente 1500 55.5 56
Sur 2500 92.5 92

5.2 Selección aleatoria dentro de cada estrato

set.seed(103)
indices_estratificados <- unlist(lapply(seq_len(nrow(tamanos_region)), function(i) {
  grupo <- tamanos_region$region[i]
  candidatos <- which(base_clientes$region == grupo)
  sample(candidatos, size = tamanos_region$n_h[i], replace = FALSE)
}))
muestra_estratificada <- base_clientes[indices_estratificados, ]

muestra_estratificada |>
  count(region) |>
  knitr::kable(caption = "Clientes elegidos en cada región")
Clientes elegidos en cada región
region n
Centro 185
Norte 37
Occidente 56
Sur 92

5.3 Estimador estratificado: no olvides ponderar

Para estimar una media poblacional:

\[\widehat{\mu}_{est}=\sum_{h=1}^{H}W_h\bar{x}_h,\qquad W_h=\frac{N_h}{N}.\]

Para una proporción sustituimos \(\bar x_h\) por la proporción muestral \(\hat p_h\) de cada estrato. La ponderación es indispensable cuando los tamaños seleccionados no guardan proporción con los estratos.

est_por_region <- muestra_estratificada |>
  group_by(region) |>
  summarise(media_h = mean(satisfaccion),
            prop_h = mean(recomienda == "Sí"),
            ventas_h = mean(ventas_anuales), .groups = "drop") |>
  left_join(tamanos_region[, c("region", "N_h")], by = "region") |>
  mutate(W_h = N_h / sum(N_h))

media_est <- sum(est_por_region$W_h * est_por_region$media_h)
prop_est <- sum(est_por_region$W_h * est_por_region$prop_h)
ventas_est <- sum(est_por_region$W_h * est_por_region$ventas_h)
knitr::kable(est_por_region, digits = 3,
             caption = "Medias y proporciones muestrales con los pesos poblacionales")
Medias y proporciones muestrales con los pesos poblacionales
region media_h prop_h ventas_h N_h W_h
Centro 7.514 0.703 661007.6 5000 0.50
Norte 6.432 0.459 598681.1 1000 0.10
Occidente 7.250 0.554 773142.9 1500 0.15
Sur 7.109 0.598 666221.7 2500 0.25
pesos <- data.frame(
  region = rep(tamanos_region$region, 2),
  fraccion = c(tamanos_region$N_h / N, tamanos_region$n_h / n),
  grupo = rep(c("Población", "Muestra estratificada"), each = nrow(tamanos_region))
)
ggplot(pesos, aes(x = region, y = fraccion, fill = grupo)) +
  geom_col(position = position_dodge(width = 0.75), width = 0.69) +
  scale_y_continuous(labels = percent_format(accuracy = 1)) +
  scale_fill_manual(values = c("Población" = "#3976AB", "Muestra estratificada" = "#1D9A80")) +
  labs(title = "El reparto proporcional conserva aproximadamente los pesos regionales",
       x = "Región", y = "Participación", fill = NULL) + tema_negocios

5.4 ¿Y si asignamos igual número de encuestas a cada región?

Con asignación igualitaria, cada región recibe cerca de \(n/4\), incluso aunque tenga tamaños poblacionales diferentes. Este diseño puede ser útil si la gerencia requiere precisión comparable en cada región. Sin embargo, el promedio simple de todos los registros de esa muestra no estima correctamente la media global cuando las regiones tienen pesos diferentes; requiere los pesos \(W_h\).

set.seed(104)
H <- nrow(tamanos_region)
cuota_igual <- rep(n %/% H, H)
cuota_igual[seq_len(n %% H)] <- cuota_igual[seq_len(n %% H)] + 1
indices_iguales <- unlist(lapply(seq_len(H), function(i) {
  sample(which(base_clientes$region == tamanos_region$region[i]),
         cuota_igual[i], replace = FALSE)
}))
muestra_igual <- base_clientes[indices_iguales, ]

media_ingenua <- mean(muestra_igual$satisfaccion)
medias_igual <- muestra_igual |>
  group_by(region) |>
  summarise(media_h = mean(satisfaccion), .groups = "drop") |>
  left_join(tamanos_region[, c("region", "N_h")], by = "region")
media_ponderada <- sum(medias_igual$media_h * medias_igual$N_h / N)

knitr::kable(data.frame(
  estimacion = c("Media real", "Promedio sin ponderar: asignación igualitaria",
                 "Estimador ponderado: asignación igualitaria"),
  valor = c(media_real, media_ingenua, media_ponderada)),
  digits = 3, caption = "Por qué ponderar es una decisión metodológica")
Por qué ponderar es una decisión metodológica
estimacion valor
Media real 7.202
Promedio sin ponderar: asignación igualitaria 6.938
Estimador ponderado: asignación igualitaria 7.104
Error frecuente: dividir una muestra de 400 en 100 personas por región y después calcular un promedio global sin ponderar, pese a que las regiones no tienen el mismo tamaño. Esto puede sobre-representar a las pequeñas y sub-representar a las grandes.

6 Muestreo sistemático

En el muestreo sistemático, elegimos un arranque aleatorio y después seleccionamos unidades mediante un intervalo regular sobre una lista previamente definida. Es una estrategia práctica cuando existe un marco muestral ordenado.

La separación teórica es:

\[k=\frac{N}{n}.\]

Aquí, \(k=\frac{10000}{370}=\text{27.027}\); por eso es aproximadamente un registro cada 27. Como \(k\) no es entero, evitaremos redondearlo y luego recorrer toda la lista sin control: eso puede dejar parte de la población con probabilidades de inclusión diferentes.

6.1 Implementación con intervalo fraccionario

Para lograr exactamente \(n\) registros distribuidos por toda la lista, escogemos un arranque continuo uniforme en \([0,k)\) y tomamos las posiciones \(\lfloor r+jk\rfloor+1\) para \(j=0,\ldots,n-1\). Este procedimiento conserva las probabilidades individuales de inclusión iguales para todas las unidades cuando la lista está fija y \(N/n\ge1\).

set.seed(105)
k <- N / n
arranque <- runif(1, min = 0, max = k)
posiciones <- floor(arranque + (0:(n - 1)) * k) + 1L
stopifnot(length(posiciones) == n,
          length(unique(posiciones)) == n,
          min(posiciones) >= 1, max(posiciones) <= N)

muestra_sistematica <- base_clientes[posiciones, ]
data.frame(intervalo = k, arranque = arranque,
           primera_posicion = posiciones[1], ultima_posicion = tail(posiciones, 1)) |>
  knitr::kable(digits = 3, caption = "Selección sistemática de tamaño exactamente n")
Selección sistemática de tamaño exactamente n
intervalo arranque primera_posicion ultima_posicion
27.027 2.646 3 9976
head(posiciones, 12)
##  [1]   3  30  57  84 111 138 165 192 219 246 273 300
Atención al orden del marco: en nuestra población simulada, los clientes están agrupados por región. Un muestreo sistemático podría capturar aproximadamente las proporciones regionales por su distribución a lo largo de la lista, pero esa propiedad depende del orden y no debe generalizarse automáticamente.

6.2 El peligro de la periodicidad

Imaginemos que una empresa registra canales en secuencia repetida: Tienda, Web, App, Tienda, Web, App… Si tomamos siempre cada tercer registro, un arranque específico puede entregar un solo canal, sin representar adecuadamente los tres.

lista_periodica <- data.frame(
  posicion = 1:30,
  canal = rep(c("Tienda", "Web", "App"), 10)
)
seleccion_periodica <- lista_periodica[seq(2, 30, by = 3), ]
knitr::kable(head(seleccion_periodica, 10),
             caption = "Un intervalo de 3: todos los registros terminan en el mismo canal")
Un intervalo de 3: todos los registros terminan en el mismo canal
posicion canal
2 2 Web
5 5 Web
8 8 Web
11 11 Web
14 14 Web
17 17 Web
20 20 Web
23 23 Web
26 26 Web
29 29 Web
lista_periodica |>
  mutate(seleccionado = posicion %in% seleccion_periodica$posicion) |>
  ggplot(aes(x = posicion, y = canal, color = seleccionado, size = seleccionado)) +
  geom_point() +
  scale_color_manual(values = c("FALSE" = "#AEB9C4", "TRUE" = "#C84D5A"),
                     labels = c("No", "Sí")) +
  scale_size_manual(values = c("FALSE" = 2.5, "TRUE" = 4.8), guide = "none") +
  scale_x_continuous(breaks = seq(1, 30, 2)) +
  labs(title = "Periodicidad: seleccionar cada tercer registro puede sesgar la composición",
       subtitle = "Lista organizada de forma cíclica por canal",
       x = "Posición en la lista", y = "Canal", color = "Seleccionado") + tema_negocios

Lección: un inicio aleatorio es necesario, pero no garantiza que el procedimiento sea adecuado cuando el orden de la lista tiene una periodicidad asociada con la variable de interés. Además, la precisión estadística del muestreo sistemático no se calcula en general con las mismas fórmulas simples del MAS.

7 Laboratorio comparativo: tres diseños y una población

Ya contamos con tres muestras independientes, cada una de tamaño 370. Compare las estimaciones con los valores verdaderos de nuestra población simulada.

comparacion_final <- data.frame(
  metodo = c("Población completa", "Aleatorio simple", "Estratificado proporcional", "Sistemático"),
  satisfaccion = c(media_real,
     mean(muestra_mas$satisfaccion), media_est,
     mean(muestra_sistematica$satisfaccion)),
  recomienda = c(prop_real,
     mean(muestra_mas$recomienda == "Sí"), prop_est,
     mean(muestra_sistematica$recomienda == "Sí")),
  ventas = c(ventas_reales,
     mean(muestra_mas$ventas_anuales), ventas_est,
     mean(muestra_sistematica$ventas_anuales))
)
knitr::kable(comparacion_final, digits = 3,
             caption = "Comparación de indicadores por método de selección")
Comparación de indicadores por método de selección
metodo satisfaccion recomienda ventas
Población completa 7.202 0.638 673948.6
Aleatorio simple 7.162 0.651 659249.5
Estratificado proporcional 7.265 0.630 672898.8
Sistemático 7.273 0.662 689842.4
comparacion_final |>
  mutate(metodo = factor(metodo, levels = metodo)) |>
  ggplot(aes(x = metodo, y = satisfaccion, fill = metodo)) +
  geom_col(width = 0.65, show.legend = FALSE) +
  geom_hline(yintercept = media_real, linetype = "dashed", colour = "#B54A4E") +
  geom_text(aes(label = round(satisfaccion, 3)), vjust = -0.5,
            fontface = "bold", size = 4) +
  coord_cartesian(ylim = c(0, 9)) +
  scale_fill_manual(values = c("#173A5B", "#4B87BC", "#159381", "#E5A23E")) +
  labs(title = "Tres muestras distintas producen estimaciones distintas",
       subtitle = "Línea punteada: media verdadera de satisfacción",
       x = NULL, y = "Satisfacción promedio (1 a 10)") +
  theme(axis.text.x = element_text(angle = 14, hjust = 1)) + tema_negocios

7.1 Error observado, precisión y selección correcta

Para un estadístico \(\widehat\theta\) y un parámetro conocido \(\theta\), definimos, en esta simulación:

\[\text{Error observado}=\widehat\theta-\theta.\]

El error observado de una sola muestra no es el margen de error de confianza. Tampoco basta una única extracción para determinar qué diseño es universalmente mejor: es necesario considerar la variación bajo muestreos repetidos, los costos, el marco y los objetivos.

comparacion_final |>
  filter(metodo != "Población completa") |>
  mutate(error_satisfaccion = satisfaccion - media_real,
         error_prop_recomienda = recomienda - prop_real) |>
  select(metodo, error_satisfaccion, error_prop_recomienda) |>
  knitr::kable(digits = 4, caption = "Errores observados en una realización de cada diseño")
Errores observados en una realización de cada diseño
metodo error_satisfaccion error_prop_recomienda
Aleatorio simple -0.0399 0.0129
Estratificado proporcional 0.0626 -0.0087
Sistemático 0.0709 0.0237

8 Comparación para una decisión empresarial

Método Cómo se selecciona Fortalezas Cuidados
Aleatorio simple Se eligen al azar \(n\) clientes distintos entre todos los disponibles. Transparente y conceptualmente directo. Exige un marco adecuado; no asegura cantidades específicas por grupo.
Estratificado Se divide por grupos y se selecciona al azar dentro de cada uno. Asegura presencia en los grupos definidos; puede mejorar precisión si los estratos son adecuados. Requiere información de estratos y estimación con ponderaciones correctas.
Sistemático Se elige un arranque aleatorio y se selecciona siguiendo un intervalo. Fácil de implementar en una lista. Debe revisarse su orden, periodicidad y método de estimación de precisión.
Importante: ningún diseño gana siempre. El mejor método depende de qué se quiere estimar, cómo es la población, de qué marco dispone la empresa y de qué precisión se necesita.

9 Actividades de comprobación

9.1 Reto 1. La encuesta de una cadena de tiendas

Una cadena tiene 2.500 clientes activos y desea estimar la proporción que recomendaría su servicio con 95 % de confianza, \(E=0.04\) y \(p=0.5\).

  1. Identifica población, unidad y parámetro.
  2. Calcula \(n_0\) y después el tamaño corregido por población finita.
  3. Explica qué representa el margen de error.
  4. ¿Qué cambiaría si solo responde el 70 % de las personas contactadas?
# Completa y ejecuta
N_reto <- 2500
Z_reto <- qnorm(0.975)
p_reto <- 0.50
E_reto <- 0.04
n0_reto <- NA_real_  # Reemplaza NA_real_ por tu formula
n_reto <- NA_real_   # Reemplaza NA_real_ por tu formula

9.2 Reto 2. ¿Qué estratos usarías?

Una empresa vende por Tienda, Web y App. La gerencia quiere medir satisfacción por canal y mejorar la experiencia digital.

  1. ¿Cómo definirías los estratos y por qué?
  2. ¿Harías asignación proporcional o igualitaria? Justifica según el objetivo.
  3. ¿Qué problema produciría ignorar las ponderaciones si tomas la misma cantidad por canal?

9.3 Reto 3. El orden importa

Una lista de clientes está ordenada por semana y por canal de compra. Se propone seleccionar cada décimo registro.

  1. ¿Qué revisarías antes de adoptar este muestreo?
  2. ¿Qué puede pasar si existe un patrón que se repite cada 10 registros?
  3. ¿Cómo documentarías la selección para que fuera reproducible?

9.4 Reto 4. Decisión gerencial

La empresa solo puede obtener 370 entrevistas completas. La gerencia exige estimar satisfacción global, pero también quiere resultados útiles de cada región.

Entrega breve (máximo una página): propone el diseño, justifica los estratos o el marco, explica cómo seleccionar, indica qué estimador utilizarás y describe al menos dos amenazas a la calidad de los datos.

10 Cierre: lo que un analista debe recordar

1. Una muestra grande no sustituye un buen diseño.
2. El tamaño muestral depende de la precisión, la confianza, la variabilidad y el diseño.
3. Aleatorio simple, estratificado y sistemático tienen ventajas y riesgos diferentes.
4. Si los estratos tienen tamaños o tasas muestrales diferentes, la ponderación importa.
5. La muestra es una herramienta para decidir bajo incertidumbre, no una promesa de exactitud absoluta.

Pregunta final: si mañana debes defender ante la gerencia cómo estudiar 10.000 clientes, ¿podrías explicar no solo cuántos encuestar, sino también a quiénes y por qué?

11 Bibliografía de consulta

  • Lind, D. A., Marchal, W. G., y Wathen, S. A. Estadística aplicada a los negocios y la economía.
  • Anderson, D. R., Sweeney, D. J., y Williams, T. A. Estadística para administración y economía.
  • Contento Rubio, M. R. (2019). Estadística con aplicaciones en R. Universidad Jorge Tadeo Lozano.
  • Cochran, W. G. (1977). Sampling Techniques (3.ª ed.). Wiley. [Referencia metodológica adicional para diseño muestral].

Nota docente: las tres primeras obras están contempladas en la bibliografía del microcurrículo. El caso, las cifras, el código y los gráficos de este documento son desarrollos didácticos originales y simulados.