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.
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.
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")| 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| 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.
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.
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.
| 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.
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}. \]
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}\).
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")| calculo | resultado |
|---|---|
| Sin corrección finita | 384.15 |
| Con corrección finita | 369.97 |
| Tamaño entero | 370.00 |
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")| 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_negociosPara discutir: ¿por qué los tamaños de muestra se estabilizan cerca de 385 cuando la población es muy grande?
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")| 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_negociosNota 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.
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.
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")| 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 |
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_negociosdata.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")| 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.
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.
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")| 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 |
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")| region | n |
|---|---|
| Centro | 185 |
| Norte | 37 |
| Occidente | 56 |
| Sur | 92 |
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")| 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_negociosCon 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")| estimacion | valor |
|---|---|
| Media real | 7.202 |
| Promedio sin ponderar: asignación igualitaria | 6.938 |
| Estimador ponderado: asignación igualitaria | 7.104 |
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.
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")| intervalo | arranque | primera_posicion | ultima_posicion |
|---|---|---|---|
| 27.027 | 2.646 | 3 | 9976 |
## [1] 3 30 57 84 111 138 165 192 219 246 273 300
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")| 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_negociosLecció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.
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")| 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_negociosPara 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")| metodo | error_satisfaccion | error_prop_recomienda |
|---|---|---|
| Aleatorio simple | -0.0399 | 0.0129 |
| Estratificado proporcional | 0.0626 | -0.0087 |
| Sistemático | 0.0709 | 0.0237 |
| 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. |
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\).
Una empresa vende por Tienda, Web y App. La gerencia quiere medir satisfacción por canal y mejorar la experiencia digital.
Una lista de clientes está ordenada por semana y por canal de compra. Se propone seleccionar cada décimo registro.
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.
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é?
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.