# =====================================================================
# Taller 3.3.1 - Distribuciones discretas
# Curso 013 - https://dgonxalex80.github.io/curso013/taller331.html
# Autor: Dilan Velez Rojas
# Convencion de R (se usa en todo el taller):
# dgeom(x, p) -> X = numero de FALLOS antes del primer exito
# dnbinom(x, r, p) -> X = numero de FALLOS antes del r-esimo exito
# =====================================================================
# Funcion auxiliar para graficar f_X(x) de forma uniforme
graf_fx <- function(x, fx, titulo, col = "steelblue") {
plot(x, fx, type = "h", lwd = 3, col = col,
main = titulo, xlab = "x", ylab = expression(f[X](x)),
ylim = c(0, max(fx) * 1.1))
points(x, fx, pch = 19, col = col)
grid()
}
# Problema 1. Binomial X ~ Bin(n = 10, p = 0.5)
n1 <- 10; p1 <- 0.5
x1 <- 0:n1
tabla1 <- data.frame(x = x1, fx = dbinom(x1, n1, p1), Fx = pbinom(x1, n1, p1))
print(round(tabla1, 4)) # funcion de distribucion
## x fx Fx
## 1 0 0.0010 0.0010
## 2 1 0.0098 0.0107
## 3 2 0.0439 0.0547
## 4 3 0.1172 0.1719
## 5 4 0.2051 0.3770
## 6 5 0.2461 0.6230
## 7 6 0.2051 0.8281
## 8 7 0.1172 0.9453
## 9 8 0.0439 0.9893
## 10 9 0.0098 0.9990
## 11 10 0.0010 1.0000
cat("P1 a) P(X = 5) =", dbinom(5, n1, p1), "\n")
## P1 a) P(X = 5) = 0.2460938
cat("P1 b) P(X <= 2) =", pbinom(2, n1, p1), "\n")
## P1 b) P(X <= 2) = 0.0546875
cat("P1 c) P(3 <= X < 5) =", sum(dbinom(3:4, n1, p1)), "\n")
## P1 c) P(3 <= X < 5) = 0.3222656
cat("P1 d) P(X >= 8) =", 1 - pbinom(7, n1, p1), "\n")
## P1 d) P(X >= 8) = 0.0546875
graf_fx(x1, tabla1$fx, "Binomial (n = 10, p = 0.5)")

# Problema 2. Geometrica p = 0.05 (X = fallos antes del 1er exito)
p2 <- 0.05
cat("\nP2 a) P(X = 1) =", dgeom(1, p2), "\n")
##
## P2 a) P(X = 1) = 0.0475
cat("P2 b) P(X <= 2) =", pgeom(2, p2), "\n")
## P2 b) P(X <= 2) = 0.142625
cat("P2 c) P(X = 8) =", dgeom(8, p2), "\n")
## P2 c) P(X = 8) = 0.03317102
cat("P2 d) P(X >= 2) =", 1 - pgeom(1, p2), "\n")
## P2 d) P(X >= 2) = 0.9025
x2 <- 0:80
graf_fx(x2, dgeom(x2, p2), "Geometrica (p = 0.05)")

# Problema 3. Hipergeometrica N = 100, K = 20 (exitos), n = 4
# dhyper(x, m = K, n = N - K, k = n)
N3 <- 100; K3 <- 20; n3 <- 4
cat("\nP3 a) P(X = 1) =", dhyper(1, K3, N3 - K3, n3), "\n")
##
## P3 a) P(X = 1) = 0.4190527
cat("P3 b) P(X = 6) =", dhyper(6, K3, N3 - K3, n3),
" (imposible: la muestra es de 4)\n")
## P3 b) P(X = 6) = 0 (imposible: la muestra es de 4)
cat("P3 c) P(X >= 1) =", 1 - dhyper(0, K3, N3 - K3, n3), "\n")
## P3 c) P(X >= 1) = 0.5966618
cat("P3 d) P(X = 4) =", dhyper(4, K3, N3 - K3, n3), "\n")
## P3 d) P(X = 4) = 0.001235583
x3 <- 0:n3
graf_fx(x3, dhyper(x3, K3, N3 - K3, n3), "Hipergeometrica (N = 100, K = 20, n = 4)")

# Problema 4. Poisson lambda = 4
l4 <- 4
cat("\nP4 a) P(X = 0) =", dpois(0, l4), "\n")
##
## P4 a) P(X = 0) = 0.01831564
cat("P4 b) P(X = 4) =", dpois(4, l4), "\n")
## P4 b) P(X = 4) = 0.1953668
cat("P4 c) P(X >= 2) =", 1 - ppois(1, l4), "\n")
## P4 c) P(X >= 2) = 0.9084218
cat("P4 d) P(X <= 2) =", ppois(2, l4), "\n")
## P4 d) P(X <= 2) = 0.2381033
x4 <- 0:15
graf_fx(x4, dpois(x4, l4), "Poisson (lambda = 4)")

# Problema 5. Binomial negativa N = 100, K = 20, n = 5
# Supuesto: p = K/N = 0.2 y r = n = 5 exitos
# X = fallos antes del 5o exito
r5 <- 5; p5 <- 20 / 100
cat("\nP5 a) P(X = 0) =", dnbinom(0, r5, p5), "\n")
##
## P5 a) P(X = 0) = 0.00032
cat("P5 b) P(X = 6) =", dnbinom(6, r5, p5), "\n")
## P5 b) P(X = 6) = 0.01761608
cat("P5 c) P(X >= 10) =", 1 - pnbinom(9, r5, p5), "\n")
## P5 c) P(X >= 10) = 0.8701604
cat("P5 d) P(X <= 12) =", pnbinom(12, r5, p5), "\n")
## P5 d) P(X <= 12) = 0.2417768
cat("P5 e) E[X] = r(1-p)/p =", r5 * (1 - p5) / p5, "\n")
## P5 e) E[X] = r(1-p)/p = 20
cat("P5 f) V[X] = r(1-p)/p^2 =", r5 * (1 - p5) / p5^2, "\n")
## P5 f) V[X] = r(1-p)/p^2 = 100
x5 <- 0:60
graf_fx(x5, dnbinom(x5, r5, p5), "Binomial negativa (r = 5, p = 0.2)")

# Problema 6. Llantas X ~ Bin(4, 0.05)
cat("\nP6 a) Ninguna con imperfecciones =", dbinom(0, 4, 0.05), "\n")
##
## P6 a) Ninguna con imperfecciones = 0.8145062
cat("P6 b) Exactamente una =", dbinom(1, 4, 0.05), "\n")
## P6 b) Exactamente una = 0.171475
cat("P6 c) Una o mas =", 1 - dbinom(0, 4, 0.05), "\n")
## P6 c) Una o mas = 0.1854938
# Problema 7. Clientes Poisson, 8 por hora
tasa <- 8
cat("\nP7 a) Exactamente 5 entre 8 y 9 AM (1 h) =", dpois(5, tasa * 1), "\n")
##
## P7 a) Exactamente 5 entre 8 y 9 AM (1 h) = 0.09160366
cat("P7 b) No mas de 3 entre 2:30 y 3:30 PM (1 h) =", ppois(3, tasa * 1), "\n")
## P7 b) No mas de 3 entre 2:30 y 3:30 PM (1 h) = 0.04238011
cat("P7 c) Exactamente 2 en 2 horas (lambda = 16) =", dpois(2, tasa * 2), "\n")
## P7 c) Exactamente 2 en 2 horas (lambda = 16) = 1.44045e-05
cat("P7 d) Valor esperado entre 2 y 4:30 PM (2.5 h) =", tasa * 2.5, "clientes\n")
## P7 d) Valor esperado entre 2 y 4:30 PM (2.5 h) = 20 clientes
# Problema 8. Germinacion de maiz X ~ Bin(20, 0.90)
E8 <- 20 * 0.90
p8 <- pbinom(15, 20, 0.90)
cat("\nP8 a) Numero esperado de semillas que germinan =", E8, "\n")
##
## P8 a) Numero esperado de semillas que germinan = 18
cat("P8 b) P(X <= 15) =", p8, "\n")
## P8 b) P(X <= 15) = 0.0431745
cat(" ", ifelse(p8 < 0.05,
"Es muy poco probable (< 5%): si germinan 15 o menos hay razon para dudar del 90%.",
"No es tan raro: no hay razon fuerte para dudar del 90%."), "\n")
## Es muy poco probable (< 5%): si germinan 15 o menos hay razon para dudar del 90%.
# Problema 9. Examen 100 preguntas, 4 opciones -> p = 0.25
p9 <- 0.25
cat("\nP9 a) P(aprobar: al menos 60 correctas) =", 1 - pbinom(59, 100, p9), "\n")
##
## P9 a) P(aprobar: al menos 60 correctas) = 1.326717e-13
cat("P9 b) Primera correcta en la pregunta 10 (9 fallos) =", dgeom(9, p9), "\n")
## P9 b) Primera correcta en la pregunta 10 (9 fallos) = 0.01877117
cat("P9 c) E[errores antes de 5 correctas] = r(1-p)/p =", 5 * (1 - p9) / p9, "\n")
## P9 c) E[errores antes de 5 correctas] = r(1-p)/p = 15
# Problema 10. Microorganismos Poisson, media 15
l10 <- 15
cat("\nP10 a) P(X >= 17) =", 1 - ppois(16, l10), "\n")
##
## P10 a) P(X >= 17) = 0.3358768
cat("P10 b) P(X <= 18) =", ppois(18, l10), "\n")
## P10 b) P(X <= 18) = 0.8194717
cat("P10 c) P(X = 2) =", dpois(2, l10), "\n")
## P10 c) P(X = 2) = 3.441401e-05
# Problema 11. Aerolinea 105 tiquetes, 100 asientos, p = 0.90
# Todos tienen asiento si llegan 100 o menos
cat("\nP11) P(X <= 100) =", pbinom(100, 105, 0.90), "\n")
##
## P11) P(X <= 100) = 0.9832837
# Problema 12. Grietas 1 por cada 100 m (Poisson)
cat("\nP12 a) P(8 grietas en 500 m), lambda = 5 =", dpois(8, 5), "\n")
##
## P12 a) P(8 grietas en 500 m), lambda = 5 = 0.06527804
cat("P12 b) P(ninguna en 100 m), lambda = 1 =", dpois(0, 1), "\n")
## P12 b) P(ninguna en 100 m), lambda = 1 = 0.3678794
cat("P12 c) P(menos de 2 en 500 m), lambda = 5 =", ppois(1, 5), "\n")
## P12 c) P(menos de 2 en 500 m), lambda = 5 = 0.04042768
# Problema 13. Sensores X = aprobados ~ Bin(12, 0.92)
n13 <- 12; p13 <- 0.92
c1 <- dbinom(12, n13, p13) # los 12 aprueban
c2 <- 1 - pbinom(10, n13, p13) # al menos 11 aprueban
c3 <- pbinom(10, n13, p13) # 2 o mas fallan <=> 10 o menos aprueban
c4 <- pbinom(9, n13, p13) # menos de 10 aprueban
decision <- data.frame(
Criterio = c("P(12 aprueban) > 35%",
"P(al menos 11 aprueban) > 70%",
"P(2 o mas fallan) > 20%",
"P(menos de 10 aprueban) < 10%"),
Probabilidad = round(c(c1, c2, c3, c4), 4),
Cumple = c(c1 > 0.35, c2 > 0.70, c3 > 0.20, c4 < 0.10),
Accion = c("Reducir frecuencia de inspecciones",
"Clasificar proceso como alta confiabilidad",
"Revision preventiva de equipos",
"Senal de alerta: investigar el proceso")
)
cat("\nP13) Evaluacion de directrices\n")
##
## P13) Evaluacion de directrices
print(decision)
## Criterio Probabilidad Cumple
## 1 P(12 aprueban) > 35% 0.3677 TRUE
## 2 P(al menos 11 aprueban) > 70% 0.7513 TRUE
## 3 P(2 o mas fallan) > 20% 0.2487 TRUE
## 4 P(menos de 10 aprueban) < 10% 0.0652 TRUE
## Accion
## 1 Reducir frecuencia de inspecciones
## 2 Clasificar proceso como alta confiabilidad
## 3 Revision preventiva de equipos
## 4 Senal de alerta: investigar el proceso
cat("Acciones a tomar:\n")
## Acciones a tomar:
print(decision$Accion[decision$Cumple])
## [1] "Reducir frecuencia de inspecciones"
## [2] "Clasificar proceso como alta confiabilidad"
## [3] "Revision preventiva de equipos"
## [4] "Senal de alerta: investigar el proceso"
x13 <- 0:n13
graf_fx(x13, dbinom(x13, n13, p13), "Sensores aprobados: Bin(12, 0.92)", col = "#4C78A8")
