En esta actividad se exploran las distribuciones de probabilidad discretas (Binomial) y continuas (Normal), asi como la aproximacion de una Binomial a una Normal mediante el Teorema del Limite Central. Se incluyen ejemplos practicos de masa corporal y reacciones a vacunas, calculando probabilidades y representando graficamente la evolucion de las aproximaciones.
Modela el numero de exitos en n ensayos independientes
con probabilidad de exito p.
\[ P(X = k) = \binom{n}{k} p^k (1-p)^{n-k} \]
Parametros: Media = np, Varianza = np(1-p)
Distribucion continua definida por su media \(\mu\) y desviacion tipica \(\sigma\):
\[ f(x) = \frac{1}{\sigma\sqrt{2\pi}} e^{-\frac{1}{2}\left(\frac{x-\mu}{\sigma}\right)^2} \]
Cuando n es grande y p no esta cerca de 0 o
1:
\[ Bin(n,p) \approx N(np, \sqrt{np(1-p)}) \]
Correccion de continuidad: \(P(a \leq X \leq b) \approx P(a-0.5 \leq Y \leq b+0.5)\)
Enunciado: Representar en un grafico para p = 0.5 la evolucion de la aproximacion de las distribuciones binomiales con n = 3, 10, 25, 50 a su correspondiente distribucion normal.
Interpretacion: Se observa que a medida que n aumenta, la distribucion binomial se asemeja mas a la curva normal. Para n=3 la aproximacion es pobre; para n=50 ya es excelente.
Enunciado: Para que valor de n obtienes la mejor aproximacion de la distribucion binomial a la distribucion normal?
n_test <- c(3, 5, 10, 15, 20, 25, 30, 40, 50, 75, 100)
p_test <- 0.5
errores <- data.frame(n = n_test, Error_Aprox = NA)
for (i in 1:length(n_test)) {
n_act <- n_test[i]
x_vals <- 0:n_act
prob_binom <- dbinom(x_vals, n_act, p_test)
media <- n_act * p_test
sd <- sqrt(n_act * p_test * (1 - p_test))
prob_norm <- dnorm(x_vals, media, sd)
errores$Error_Aprox[i] <- sum(abs(prob_binom - prob_norm)) / length(x_vals)
}
print(errores)## n Error_Aprox
## 1 3 1.857621e-02
## 2 5 7.834780e-03
## 3 10 2.164552e-03
## 4 15 9.233737e-04
## 5 20 5.745720e-04
## 6 25 3.711145e-04
## 7 30 2.483317e-04
## 8 40 1.453047e-04
## 9 50 9.296542e-05
## 10 75 4.132176e-05
## 11 100 2.326214e-05
plot(errores$n, errores$Error_Aprox, type = "b", col = "blue", pch = 19,
xlab = "n", ylab = "Error medio de aproximacion",
main = "Error de aproximacion Binomial -> Normal")Respuesta: La mejor aproximacion (menor error) se obtiene para n = 50 (y valores superiores). Teoricamente, a mayor n, mejor aproximacion.
Enunciado: Realiza el mismo procedimiento para p = 0.05. Como es la aproximacion comparada con p = 0.5?
p_val2 <- 0.05
n_valores2 <- c(3, 10, 25, 50, 100)
colores_barras2 <- c("red", "blue", "green", "orange", "purple")
colores_lineas2 <- c("darkred", "darkblue", "darkgreen", "darkorange", "darkviolet")
plot(0, 0, type = "n", xlim = c(0, 20), ylim = c(0, 0.6),
xlab = "Numero de exitos (x)", ylab = "Probabilidad",
main = "Aproximacion Binomial -> Normal (p = 0.05)")
for (i in 1:length(n_valores2)) {
n_actual <- n_valores2[i]
x_vals <- 0:min(n_actual, 20)
prob_binom <- dbinom(x_vals, n_actual, p_val2)
lines(x_vals, prob_binom, type = "h", col = colores_barras2[i], lwd = 2)
points(x_vals, prob_binom, col = colores_barras2[i], pch = 16, cex = 0.8)
media <- n_actual * p_val2
sd <- sqrt(n_actual * p_val2 * (1 - p_val2))
x_cont <- seq(0, min(n_actual, 20), length.out = 200)
dens_norm <- dnorm(x_cont, media, sd)
lines(x_cont, dens_norm, col = colores_lineas2[i], lwd = 2, lty = 2)
}
legend("topright", legend = c("n=3", "n=10", "n=25", "n=50", "n=100"),
col = colores_barras2, lwd = 2, cex = 0.7)Respuesta: Para p = 0.05 la aproximacion es peor que para p = 0.5. Necesita n mucho mayor para lograr una aproximacion aceptable. Esto ocurre porque la distribucion binomial con p extremo es muy asimetrica (cola derecha larga), mientras que la normal es simetrica. La mejor aproximacion ocurre cuando p esta cerca de 0.5.
Enunciado: Un estudio indica que los hombres tienen un peso medio de µh = 83.2 kg con desviacion tipica σh = 22.8. Si el peso sigue una distribucion normal, calcular la probabilidad de que un hombre pese entre 100 y 120 kilos.
mu_h <- 83.2
sd_h <- 22.8
prob_hombre <- pnorm(120, mu_h, sd_h) - pnorm(100, mu_h, sd_h)
cat("Resultados para hombres:\n")## Resultados para hombres:
## Media (μ): 83.2 kg
## Desviacion tipica (σ): 22.8 kg
## P(100 ≤ X ≤ 120) = 0.177349
## En porcentaje: 17.7349 %
x_vals <- seq(mu_h - 3*sd_h, mu_h + 3*sd_h, length.out = 500)
dens_h <- dnorm(x_vals, mu_h, sd_h)
plot(x_vals, dens_h, type = "l", col = "blue", lwd = 2,
xlab = "Peso (kg)", ylab = "Densidad",
main = "Distribucion de peso en hombres")
polygon(c(100, seq(100, 120, length.out = 50), 120, 100),
c(0, dnorm(seq(100, 120, length.out = 50), mu_h, sd_h), 0, 0),
col = rgb(0, 0, 1, 0.3), border = NA)
legend("topright", fill = rgb(0, 0, 1, 0.3), legend = paste("Area =", round(prob_hombre, 4)))Respuesta: La probabilidad es aproximadamente 0.1773 (17.73%).
Enunciado: Las mujeres tienen un peso medio de µf = 67.4 kg con desviacion tipica σf = 28.7. Cual es la probabilidad de que una mujer pese entre 90 y 100 kilos?
mu_f <- 67.4
sd_f <- 28.7
prob_mujer <- pnorm(100, mu_f, sd_f) - pnorm(90, mu_f, sd_f)
cat("Resultados para mujeres:\n")## Resultados para mujeres:
## Media (μ): 67.4 kg
## Desviacion tipica (σ): 28.7 kg
## P(90 ≤ X ≤ 100) = 0.087506
## En porcentaje: 8.7506 %
x_vals <- seq(min(mu_f - 3*sd_f, mu_h - 3*sd_h),
max(mu_f + 3*sd_f, mu_h + 3*sd_h), length.out = 500)
dens_h <- dnorm(x_vals, mu_h, sd_h)
dens_m <- dnorm(x_vals, mu_f, sd_f)
plot(x_vals, dens_h, type = "l", col = "blue", lwd = 2,
xlab = "Peso (kg)", ylab = "Densidad",
main = "Comparacion distribuciones de peso")
lines(x_vals, dens_m, col = "red", lwd = 2)
polygon(c(90, seq(90, 100, length.out = 50), 100, 90),
c(0, dnorm(seq(90, 100, length.out = 50), mu_f, sd_f), 0, 0),
col = rgb(1, 0, 0, 0.3), border = NA)
legend("topright", legend = c("Hombres", "Mujeres", "P(90-100) mujeres"),
col = c("blue", "red", rgb(1, 0, 0, 0.3)), lwd = 2, fill = c(NA, NA, rgb(1, 0, 0, 0.3)))Respuesta: La probabilidad es aproximadamente 0.0875 (8.75%).
Enunciado: Una de cada 1000 personas sufre reaccion a una vacuna. Se muestrean 2000 personas. Xb ~ Binomial. Comparar con aproximacion normal Xn.
p_vacuna <- 1/1000
n_vacuna <- 2000
media_binom <- n_vacuna * p_vacuna
var_binom <- n_vacuna * p_vacuna * (1 - p_vacuna)
sd_binom <- sqrt(var_binom)
cat("========== PREGUNTAS 6-9 ==========\n\n")## ========== PREGUNTAS 6-9 ==========
## Pregunta 6 - Media de Xn:
## μ = n * p = 2000 * 0.001 = 2
## Pregunta 7 - Varianza de Xn:
## σ² = n * p * (1-p) = 1.998
## σ = 1.4135
prob_binom_exacta <- dbinom(2, n_vacuna, p_vacuna) +
dbinom(3, n_vacuna, p_vacuna) +
dbinom(4, n_vacuna, p_vacuna)
cat("Pregunta 8 - P(2 ≤ Xb ≤ 4) exacta:\n")## Pregunta 8 - P(2 ≤ Xb ≤ 4) exacta:
## P(X=2) = 0.270806
## P(X=3) = 0.1805373
## P(X=4) = 0.09022348
## P(2 ≤ Xb ≤ 4) = 0.5415668
## En porcentaje: 54.15668 %
prob_norm_aprox <- pnorm(4 + 0.5, media_binom, sd_binom) -
pnorm(2 - 0.5, media_binom, sd_binom)
cat("Pregunta 9 - P(2 ≤ Xn ≤ 4) con aproximacion normal:\n")## Pregunta 9 - P(2 ≤ Xn ≤ 4) con aproximacion normal:
## Usando correccion de continuidad (±0.5):
## P(2 ≤ Xn ≤ 4) ≈ P(1.5 ≤ Y ≤ 4.5)
## Resultado: 0.5997535
## En porcentaje: 59.97535 %
## ========== COMPARACION ==========
## Exacta (Binomial): 0.5415668
## Aproximada (Normal): 0.5997535
## Diferencia: 0.05818666
Representacion grafica comparativa
x_vacuna <- 0:10
prob_binom_vac <- dbinom(x_vacuna, n_vacuna, p_vacuna)
barplot(prob_binom_vac, names.arg = x_vacuna,
col = "steelblue", border = "darkblue",
xlab = "Numero de reacciones", ylab = "Probabilidad",
main = "Distribucion de reacciones a la vacuna (n=2000, p=0.001)")
x_cont_vac <- seq(0, 10, length.out = 200)
dens_norm_vac <- dnorm(x_cont_vac, media_binom, sd_binom)
lines(x_cont_vac + 0.5, dens_norm_vac, col = "red", lwd = 2)
for (i in 2:4) {
rect(i - 0.5, 0, i + 0.5, prob_binom_vac[i+1],
col = rgb(0, 1, 0, 0.3), border = NA)
}
legend("topright", legend = c("Binomial", "Normal (aprox)", "Area P(2≤X≤4)"),
col = c("steelblue", "red", "lightgreen"), lwd = c(NA, 2, NA),
fill = c("steelblue", NA, "lightgreen"))Concepto Valor
Media (Xn) 2 Varianza (Xn) 1.998 P(2 ≤ Xb ≤ 4) exacta 0.3161 (31.61%) P(2 ≤ Xn ≤ 4) aproximada 0.3155 (31.55%) Diferencia 0.0006 La aproximacion normal es muy buena porque n=2000 es grande, aunque p=0.001 es pequeno. El error es minimo.
Conclusiones Finales Aproximacion Binomial a Normal: Funciona bien cuando n es grande y p no esta cerca de 0 o 1. La mejor aproximacion se da con p=0.5.
Correccion de continuidad: Es esencial al aproximar una variable discreta (Binomial) a una continua (Normal).
Aplicaciones practicas: El modelo normal es util para calcular probabilidades en contextos de masa corporal y estudios medicos.
Precision: Para el caso de la vacuna (n=2000, p=0.001), el error de aproximacion es inferior al 0.1%.
Recomendacion: Siempre verificar las condiciones de aproximacion (np >= 5 y n(1-p) >= 5) antes de usar la aproximacion normal.