La inferencia estadística es una rama de la estadística que se encarga de hacer generalizaciones sobre una población basándose en una muestra representativa de esa población.
Vamos a explorar conceptos fundamentales de las proporciones poblacionales, incluyendo la estimación puntual, el valor Z, el margen de error y los intervalos de confianza. Estos conceptos son esenciales para entender cómo podemos usar datos muestrales para hacer afirmaciones sobre una población más grande.
Algunos estudios indican que la población de Puerto Rico tiene entre un 14% a 60% de ADN taíno (dependiendo del tipo de análisis: cromosoma Y o ADN mitocondrial, respectivamente), lo que refleja la herencia indígena de la isla. A partir de estos datos, exploraremos dos escenarios (asumiendo proporciones de 14% y 60%) para practicar conceptos fundamentales de la inferencia estadística.
Objetivo: Entender que una estimación puntual (la proporción de una muestra) varía cada vez que tomamos una muestra diferente.
# 1. Crear la población
tamano_poblacion <- 3000000
proporcion_real <- 0.14
poblacion_14 <- c(rep("Posee ADN taíno", tamano_poblacion * proporcion_real),
rep("No posee ADN taíno", tamano_poblacion * (1 - proporcion_real)))
# 2. Tomar la primera muestra y calcular la proporción
set.seed(111)
muestra_1 <- sample(poblacion_14, 200)
prop_muestra_1 <- sum(muestra_1 == "Posee ADN taíno") / length(muestra_1)
# 3. Tomar la segunda muestra y calcular la proporción
set.seed(113)
muestra_2 <- sample(poblacion_14, 200)
prop_muestra_2 <- sum(muestra_2 == "Posee ADN taíno") / length(muestra_2)
# 4. Imprimir y comparar los resultados
cat("Proporción en la Muestra 1 (14% real):", prop_muestra_1, "\n")
## Proporción en la Muestra 1 (14% real): 0.185
cat("Proporción en la Muestra 2 (14% real):", prop_muestra_2, "\n")
## Proporción en la Muestra 2 (14% real): 0.13
Interpretación: Las dos proporciones muestrales son diferentes entre sí y distintas de la proporción real (0.14). Esto demuestra la variabilidad del muestreo.
Extensión 1: Repite el proceso de tomar muestras dos
veces más (usa otras semillas set.seed(): 222 y 333).
Haremos el mismo ejercicio asumiendo un 60% de ADN taíno en la población.
# Generar población del 60%
pob60taina <- c(rep("taina", 0.60 * tamano_poblacion),
rep("no_taina", 0.40 * tamano_poblacion))
# Tomar primera muestra aleatoria
set.seed(123)
muestra_60_1 <- sample(pob60taina, 200, replace=FALSE)
prop_muestra_60_1 <- sum(muestra_60_1 == "taina") / length(muestra_60_1)
# Tomar segunda muestra aleatoria
set.seed(456)
muestra_60_2 <- sample(pob60taina, 200, replace=FALSE)
prop_muestra_60_2 <- sum(muestra_60_2 == "taina") / length(muestra_60_2)
cat("Proporción en la Muestra 1 (60% real):", prop_muestra_60_1, "\n")
## Proporción en la Muestra 1 (60% real): 0.625
cat("Proporción en la Muestra 2 (60% real):", prop_muestra_60_2, "\n")
## Proporción en la Muestra 2 (60% real): 0.6
Objetivo: Visualizar cómo se distribuyen las proporciones muestrales y entender el Teorema del Límite Central (TLC).
Tomaremos 10,000 muestras de 200 personas y graficaremos su distribución.
num_simulaciones <- 10000
tamano_muestra <- 200
proporciones_muestrales <- numeric(num_simulaciones)
set.seed(222)
for (i in 1:num_simulaciones) {
muestra <- sample(poblacion_14, tamano_muestra)
proporciones_muestrales[i] <- sum(muestra == "Posee ADN taíno") / length(muestra)
}
resultados_df <- data.frame(Proporciones = proporciones_muestrales)
ggplot(resultados_df, aes(x = Proporciones)) +
geom_histogram(aes(y = after_stat(density)), binwidth = 0.01, fill = "dodgerblue", color = "black", alpha = 0.7) +
geom_vline(xintercept = proporcion_real, color = "orange", linetype = "dashed", linewidth = 1.0) +
stat_function(fun = dnorm, args = list(mean = mean(proporciones_muestrales), sd = sd(proporciones_muestrales)), color = "darkred", linewidth = 1) +
labs(title = "Distribución de Proporciones Muestrales (n=200, p=0.14)", x = "Proporción Muestral", y = "Densidad") +
theme_minimal()
Interpretación: El histograma muestra una distribución en forma de campana (normal), centrada en la proporción real de la población (0.14).
Extensión 2: Cambia el tamaño de la muestra a 10. ¿Cómo afecta esto la forma de la distribución?
Extensión 3: Cambia el número de simulaciones a 100. Indica cómo cambia la distribución.
Comparemos qué sucede cuando aumentamos el tamaño de la muestra de \(n=200\) a \(n=1000\).
# Simulación para n=200
proporciones_200 <- numeric(num_simulaciones)
set.seed(123)
for (i in 1:num_simulaciones) {
muestra <- sample(pob60taina, 200, replace = FALSE)
proporciones_200[i] <- sum(muestra == "taina") / length(muestra)
}
resultados_200 <- data.frame(ProporcionTaina = proporciones_200)
histo200 <- ggplot(resultados_200, aes(x = ProporcionTaina)) +
geom_histogram(binwidth = 0.01, fill = "skyblue", color = "black") +
labs(title = "Muestra n=200", x = "Proporción", y = "Frecuencia") +
xlim(0.45, 0.75) + ylim(0, 2750) + theme_minimal()
# Simulación para n=1000
proporciones_1000 <- numeric(num_simulaciones)
set.seed(123)
for (i in 1:num_simulaciones) {
muestra <- sample(pob60taina, 1000, replace = FALSE)
proporciones_1000[i] <- sum(muestra == "taina") / length(muestra)
}
resultados_1000 <- data.frame(ProporcionTaina = proporciones_1000)
histo1000 <- ggplot(resultados_1000, aes(x = ProporcionTaina)) +
geom_histogram(binwidth = 0.01, fill = "skyblue", color = "black") +
labs(title = "Muestra n=1000", x = "Proporción", y = "Frecuencia") +
xlim(0.45, 0.75) + ylim(0, 2750) + theme_minimal()
# Comparar histogramas
grid.arrange(histo200, histo1000, ncol = 2)
Error Estándar: Mientras más grande es la muestra, menor es el error estándar y mayor es la precisión. La fórmula del error estándar de la proporción es: \[ SE = \sqrt{\frac{\hat{p}(1 - \hat{p})}{n}} \]
Objetivo: Calcular un rango de valores plausibles para el parámetro poblacional.
La fórmula para el intervalo de confianza del 95% es:
\[
\hat{p} \pm Z_{\alpha/2} \times \sqrt{\frac{\hat{p}(1 - \hat{p})}{n}}
\]
p_hat <- prop_muestra_1 # Proporción de la primera muestra (aprox 0.19)
n <- 200
nivel_confianza <- 0.95
z_score <- qnorm(1 - (1 - nivel_confianza) / 2)
error_estandar <- sqrt((p_hat * (1 - p_hat)) / n)
margen_de_error <- z_score * error_estandar
limite_inferior <- p_hat - margen_de_error
limite_superior <- p_hat + margen_de_error
cat("Estimación Puntual (p̂):", p_hat, "\n")
## Estimación Puntual (p̂): 0.185
cat("Intervalo de Confianza del 95%: [", limite_inferior, ",", limite_superior, "]\n")
## Intervalo de Confianza del 95%: [ 0.1311857 , 0.2388143 ]
Interpretación: Tenemos un 95% de confianza en que la verdadera proporción de todos los puertorriqueños que poseen ADN taíno se encuentra dentro de este intervalo. Nota que el valor real (0.14) está dentro.
Extensión 4: Cambia el nivel de confianza a 90% y 99%. ¿Cómo afecta esto el ancho del intervalo?
Un investigador piensa que la proporción de ADN taíno es menor en Culebra. Su muestra (n = 200) arrojó una proporción de 9.5%.
# Parámetros de la nueva prueba
n_culebra <- 200 # Asumiendo el mismo tamaño de muestra (n=200)
prop_observada <- 0.095
p_nula <- 0.14
# Calcular el número de éxitos (personas con ADN taíno en la muestra)
exitos_culebra <- round(prop_observada * n_culebra)
# 1. Realizar la prueba de hipótesis analítica
# H0: p >= 0.14 (R usa la igualdad para el cálculo del p-value)
# Ha: p < 0.14
resultado_test_culebra <- prop.test(
x = exitos_culebra,
n = n_culebra,
p = p_nula,
alternative = "less", # Prueba de cola izquierda
correct = FALSE # Sin corrección de Yates para mantener consistencia
)
# Imprimir el resultado numérico
print(resultado_test_culebra)
##
## 1-sample proportions test without continuity correction
##
## data: exitos_culebra out of n_culebra, null probability p_nula
## X-squared = 3.3638, df = 1, p-value = 0.03332
## alternative hypothesis: true p is less than 0.14
## 95 percent confidence interval:
## 0.0000000 0.1347093
## sample estimates:
## p
## 0.095
# 2. Visualización Gráfica de la Prueba
# Calcular la desviación estándar bajo H0
sd_nula <- sqrt((p_nula * (1 - p_nula)) / n_culebra)
# Crear la gráfica
ggplot(data.frame(x = c(0.05, 0.25)), aes(x = x)) +
# Curva normal teórica bajo H0
stat_function(fun = dnorm, args = list(mean = p_nula, sd = sd_nula),
color = "darkgreen", linewidth = 1) +
# Línea de la hipótesis nula (0.14)
geom_vline(xintercept = p_nula, color = "red", linetype = "dashed", linewidth = 1) +
# Línea de la proporción observada (0.12)
geom_vline(xintercept = prop_observada, color = "blue", linetype = "dashed", linewidth = 1) +
# Área sombreada de rechazo (alfa = 0.05, cola izquierda)
stat_function(fun = dnorm,
args = list(mean = p_nula, sd = sd_nula),
xlim = c(0.05, qnorm(0.05, mean = p_nula, sd = sd_nula)),
geom = "area", fill = "red", alpha = 0.3) +
labs(
title = "Prueba de Hipótesis: ADN Taíno en Culebra",
subtitle = "H0: p = 0.14 (rojo) | Observado: p = 0.095 (azul)",
x = "Proporción Muestral",
y = "Densidad"
) +
theme_minimal()
Conclusión: Si el valor p es menor a \(\alpha\) = 0.05, rechazamos la hipótesis nula.
Extensión 5: ¿Cómo cambiarías las hipótesis y el
resultado si el investigador solo indica de antemano que la proporción
es diferente? Usa alternative = "two.sided".
Vamos a evaluar si una proporción observada en Culebra del 65% o del 70% es significativamente mayor que el 60% nacional, utilizando nuestras 10,000 simulaciones previas.
# Graficar la distribución bajo H0 (p=0.60) y las líneas de interés
ggplot(resultados_200, aes(x = ProporcionTaina)) +
geom_histogram(binwidth = 0.005, fill = "skyblue", color = "black") +
geom_vline(xintercept = 0.60, color = "red", linetype = "dashed", linewidth = 1) +
geom_vline(xintercept = 0.65, color = "blue", linetype = "dashed", linewidth = 1) +
geom_vline(xintercept = 0.70, color = "purple", linetype = "dashed", linewidth = 1) +
labs(
title = "Simulación de Pruebas de Hipótesis",
subtitle = "H0: 0.60 (roja) | Observadas: 0.65 (azul), 0.70 (morada)",
x = "Proporción de ADN Taíno",
y = "Frecuencia"
) +
xlim(0.5, 0.8) + theme_minimal()
# Prueba para 65%
valor_p_65 <- sum(proporciones_200 >= 0.65) / num_simulaciones
cat("El valor p para 65% es:", valor_p_65, "\n")
## El valor p para 65% es: 0.0843
if (valor_p_65 <= 0.05) {
cat("Rechazamos H0: La proporción 0.65 es significativamente mayor que 0.60.\n\n")
} else {
cat("No rechazamos H0: No hay evidencia suficiente para concluir que 0.65 es mayor que 0.60.\n\n")
}
## No rechazamos H0: No hay evidencia suficiente para concluir que 0.65 es mayor que 0.60.
# Prueba para 70%
valor_p_70 <- sum(proporciones_200 >= 0.70) / num_simulaciones
cat("El valor p para 70% es:", valor_p_70, "\n")
## El valor p para 70% es: 0.0029
if (valor_p_70 <= 0.05) {
cat("Rechazamos H0: La proporción 0.70 es significativamente mayor que 0.60.\n")
} else {
cat("No rechazamos H0: No hay evidencia suficiente para concluir que 0.70 es mayor que 0.60.\n")
}
## Rechazamos H0: La proporción 0.70 es significativamente mayor que 0.60.