Una variable es discreta si sus valores se pueden contar (enteros), y continua si se puede medir y tomar cualquier valor dentro de un rango.
variables <- data.frame(
Variable = c("X", "Y", "M", "Z", "G", "Q", "R", "S", "T", "V", "W"),
Descripcion = c(
"Número de accidentes automovilísticos en un día en Cali",
"Tiempo en recorrer 100 metros (segundos)",
"Cantidad de leche que produce una vaca semanalmente (litros)",
"Número de huevos que produce una gallina semanalmente",
"Número de permisos de construcción aprobados mensualmente en Cali",
"Peso en kilogramos de un automóvil",
"Envergadura de las alas de un cóndor en metros",
"Tiempo que dedica una persona al ocio (horas)",
"Ingresos de una familia en pesos por mes",
"Cantidad de calorías que contiene una bebida gaseosa",
"Largo del fémur de un adulto humano en centímetros"
),
Tipo = c(
"Discreta", "Continua", "Continua", "Discreta", "Discreta",
"Continua", "Continua", "Continua", "Discreta", "Discreta", "Continua"
),
Justificacion = c(
"Se cuentan: 0, 1, 2... no puede haber 2.7 accidentes",
"Se mide: puede ser 13.472 s, 13.4721 s, etc.",
"Se mide: puede ser 45.3 litros, 45.31 litros, etc.",
"Se cuentan: 0, 1, 2... no puede poner 4.5 huevos",
"Se cuentan: 0, 1, 2... no puede haber 15.6 permisos",
"Se mide: puede ser 1250.47 kg, 1250.471 kg, etc.",
"Se mide: puede ser 2.73 m, 2.731 m, etc.",
"Se mide: puede ser 3.5 h, 3.52 h, etc.",
"Se cuentan: unidades enteras de pesos colombianos",
"Se cuentan: 150, 151, 152 kcal (valores enteros)",
"Se mide: puede ser 45.3 cm, 45.31 cm, etc."
)
)
knitr::kable(variables, caption = "Clasificación de variables aleatorias")
| Variable | Descripcion | Tipo | Justificacion |
|---|---|---|---|
| X | Número de accidentes automovilísticos en un día en Cali | Discreta | Se cuentan: 0, 1, 2… no puede haber 2.7 accidentes |
| Y | Tiempo en recorrer 100 metros (segundos) | Continua | Se mide: puede ser 13.472 s, 13.4721 s, etc. |
| M | Cantidad de leche que produce una vaca semanalmente (litros) | Continua | Se mide: puede ser 45.3 litros, 45.31 litros, etc. |
| Z | Número de huevos que produce una gallina semanalmente | Discreta | Se cuentan: 0, 1, 2… no puede poner 4.5 huevos |
| G | Número de permisos de construcción aprobados mensualmente en Cali | Discreta | Se cuentan: 0, 1, 2… no puede haber 15.6 permisos |
| Q | Peso en kilogramos de un automóvil | Continua | Se mide: puede ser 1250.47 kg, 1250.471 kg, etc. |
| R | Envergadura de las alas de un cóndor en metros | Continua | Se mide: puede ser 2.73 m, 2.731 m, etc. |
| S | Tiempo que dedica una persona al ocio (horas) | Continua | Se mide: puede ser 3.5 h, 3.52 h, etc. |
| T | Ingresos de una familia en pesos por mes | Discreta | Se cuentan: unidades enteras de pesos colombianos |
| V | Cantidad de calorías que contiene una bebida gaseosa | Discreta | Se cuentan: 150, 151, 152 kcal (valores enteros) |
| W | Largo del fémur de un adulto humano en centímetros | Continua | Se mide: puede ser 45.3 cm, 45.31 cm, etc. |
Para que \(f(x) = C\binom{2}{x}\binom{3}{3-x}\) sea una función de probabilidad válida, la suma de todas las probabilidades debe ser igual a 1: \(\sum f(x) = 1\).
# Calculo f(x) para cada valor usando combinatorios
fx_p2 <- function(x, C) {
C * choose(2, x) * choose(3, 3 - x)
}
cat("Evaluando f(x) para x = 0, 1, 2:\n\n")
## Evaluando f(x) para x = 0, 1, 2:
cat("f(0) = C × C(2,0) × C(3,3) = C ×", choose(2,0), "×", choose(3,3), "= C ×", choose(2,0)*choose(3,3), "\n")
## f(0) = C × C(2,0) × C(3,3) = C × 1 × 1 = C × 1
cat("f(1) = C × C(2,1) × C(3,2) = C ×", choose(2,1), "×", choose(3,2), "= C ×", choose(2,1)*choose(3,2), "\n")
## f(1) = C × C(2,1) × C(3,2) = C × 2 × 3 = C × 6
cat("f(2) = C × C(2,2) × C(3,1) = C ×", choose(2,2), "×", choose(3,1), "= C ×", choose(2,2)*choose(3,1), "\n\n")
## f(2) = C × C(2,2) × C(3,1) = C × 1 × 3 = C × 3
suma_coef <- choose(2,0)*choose(3,3) + choose(2,1)*choose(3,2) + choose(2,2)*choose(3,1)
cat("Aplicando condición de suma = 1:\n")
## Aplicando condición de suma = 1:
cat("C ×", choose(2,0)*choose(3,3), "+ C ×", choose(2,1)*choose(3,2),
"+ C ×", choose(2,2)*choose(3,1), "= 1\n")
## C × 1 + C × 6 + C × 3 = 1
cat("C ×", suma_coef, "= 1\n")
## C × 10 = 1
C <- 1 / suma_coef
cat("C = 1/", suma_coef, "=", C, "\n\n")
## C = 1/ 10 = 0.1
# Tabla final
tabla_p2 <- data.frame(
x = 0:2,
fx = round(sapply(0:2, fx_p2, C = C), 4)
)
knitr::kable(tabla_p2, col.names = c("x", "f(x)"), caption = "Distribución de probabilidad con C = 1/10")
| x | f(x) |
|---|---|
| 0 | 0.1 |
| 1 | 0.6 |
| 2 | 0.3 |
cat("Verificación suma:", sum(tabla_p2$fx), "✓\n")
## Verificación suma: 1 ✓
barplot(tabla_p2$fx, names.arg = tabla_p2$x,
col = "#2980b9", border = "white",
xlab = "x", ylab = "f(x)",
main = "Distribución de probabilidad — Problema 2",
ylim = c(0, 0.7))
Función de probabilidad f(x) con C = 1/10
x3 <- 0:4
fx3 <- c(0.41, 0.37, 0.16, 0.05, 0.01)
Fx3 <- cumsum(fx3)
cat("Verificación suma f(x):", sum(fx3), "✓\n\n")
## Verificación suma f(x): 1 ✓
tabla_p3 <- data.frame(x = x3, `f(x)` = fx3, `F(x)` = Fx3)
knitr::kable(tabla_p3, caption = "Función de masa f(x) y distribución acumulada F(x)")
| x | f.x. | F.x. |
|---|---|---|
| 0 | 0.41 | 0.41 |
| 1 | 0.37 | 0.78 |
| 2 | 0.16 | 0.94 |
| 3 | 0.05 | 0.99 |
| 4 | 0.01 | 1.00 |
par(mfrow = c(1, 2))
barplot(fx3, names.arg = x3, col = "#2980b9", border = "white",
xlab = "x (imperfecciones)", ylab = "f(x)",
main = "Función de masa f(x)", ylim = c(0, 0.50))
plot(c(-0.5, 0), c(0, 0), type = "l", lwd = 2.5, col = "#e74c3c",
xlim = c(-0.5, 5), ylim = c(0, 1.05),
xlab = "x", ylab = "F(x)", main = "Distribución acumulada F(x)")
segments(x0 = c(0,1,2,3,4), y0 = Fx3, x1 = c(1,2,3,4,5), lwd = 2.5, col = "#e74c3c")
points(x3, Fx3, pch = 16, col = "#e74c3c", cex = 1.2)
points(c(0,1,2,3,4), c(0, Fx3[-5]), pch = 1, col = "#e74c3c", cex = 1.2)
abline(h = c(0,1), col = "gray80", lty = 2)
f(x) y F(x) — imperfecciones en tela
p_menos3 <- sum(fx3[x3 < 3])
cat("P(X < 3) = f(0) + f(1) + f(2)\n")
## P(X < 3) = f(0) + f(1) + f(2)
cat(" = 0.41 + 0.37 + 0.16\n")
## = 0.41 + 0.37 + 0.16
cat(" =", p_menos3, "\n")
## = 0.94
cat("También: F(2) =", Fx3[3], "\n\n")
## También: F(2) = 0.94
cat("Interpretación: el", p_menos3*100,"% de los rollos de 10 metros tiene menos de 3 imperfecciones.\n")
## Interpretación: el 94 % de los rollos de 10 metros tiene menos de 3 imperfecciones.
EX3 <- sum(x3 * fx3)
cat("E[X] = (0×0.41) + (1×0.37) + (2×0.16) + (3×0.05) + (4×0.01)\n")
## E[X] = (0×0.41) + (1×0.37) + (2×0.16) + (3×0.05) + (4×0.01)
cat(" = 0.00 + 0.37 + 0.32 + 0.15 + 0.04\n")
## = 0.00 + 0.37 + 0.32 + 0.15 + 0.04
cat(" =", EX3, "\n\n")
## = 0.88
cat("Interpretación: en promedio hay", EX3, "imperfecciones por cada 10 metros de tela.\n")
## Interpretación: en promedio hay 0.88 imperfecciones por cada 10 metros de tela.
EX2_3 <- sum(x3^2 * fx3)
VX3 <- EX2_3 - EX3^2
cat("E[X²] = (0²×0.41) + (1²×0.37) + (2²×0.16) + (3²×0.05) + (4²×0.01)\n")
## E[X²] = (0²×0.41) + (1²×0.37) + (2²×0.16) + (3²×0.05) + (4²×0.01)
cat(" = 0.00 + 0.37 + 0.64 + 0.45 + 0.16\n")
## = 0.00 + 0.37 + 0.64 + 0.45 + 0.16
cat(" =", EX2_3, "\n\n")
## = 1.62
cat("V[X] = E[X²] - (E[X])²\n")
## V[X] = E[X²] - (E[X])²
cat(" =", EX2_3, "-", round(EX3^2, 4), "\n")
## = 1.62 - 0.7744
cat(" =", round(VX3, 4), "\n")
## = 0.8456
S <- expand.grid(L1 = c("C","S"), L2 = c("C","S"), L3 = c("C","S"))
S$W <- rowSums(S == "S")
colnames(S) <- c("Lanzamiento 1", "Lanzamiento 2", "Lanzamiento 3", "W (sellos)")
knitr::kable(S, caption = "Espacio muestral y valor de W en cada punto muestral")
| Lanzamiento 1 | Lanzamiento 2 | Lanzamiento 3 | W (sellos) |
|---|---|---|---|
| C | C | C | 0 |
| S | C | C | 1 |
| C | S | C | 1 |
| S | S | C | 2 |
| C | C | S | 1 |
| S | C | S | 2 |
| C | S | S | 2 |
| S | S | S | 3 |
P(cara) = 2/3 y P(sello) = 1/3 porque la cara tiene el doble de probabilidad que el sello.
pS <- 1/3; pC <- 2/3
resultados <- data.frame(
Punto = c("CCC","CCS","CSC","SCC","CSS","SCS","SSC","SSS"),
W = c(0, 1, 1, 1, 2, 2, 2, 3),
Probabilidad = round(c(pC^3, pC^2*pS, pC^2*pS, pC^2*pS,
pC*pS^2, pC*pS^2, pC*pS^2, pS^3), 6)
)
knitr::kable(resultados, caption = "Probabilidad de cada punto muestral")
| Punto | W | Probabilidad |
|---|---|---|
| CCC | 0 | 0.296296 |
| CCS | 1 | 0.148148 |
| CSC | 1 | 0.148148 |
| SCC | 1 | 0.148148 |
| CSS | 2 | 0.074074 |
| SCS | 2 | 0.074074 |
| SSC | 2 | 0.074074 |
| SSS | 3 | 0.037037 |
dist_W <- aggregate(Probabilidad ~ W, data = resultados, sum)
dist_W$Probabilidad <- round(dist_W$Probabilidad, 6)
knitr::kable(dist_W, caption = "Distribución de probabilidad de W")
| W | Probabilidad |
|---|---|
| 0 | 0.296296 |
| 1 | 0.444444 |
| 2 | 0.222222 |
| 3 | 0.037037 |
cat("Verificación suma:", sum(dist_W$Probabilidad), "✓\n")
## Verificación suma: 0.999999 ✓
barplot(dist_W$Probabilidad, names.arg = dist_W$W,
col = "#2980b9", border = "white",
xlab = "W (número de sellos)", ylab = "f(w)",
main = "Distribución de probabilidad de W",
ylim = c(0, 0.50))
Distribución de W — moneda cargada
\[f_x(x) = \frac{20000}{(x+100)^3}, \quad x \geq 0\]
fx_med <- function(x) 20000 / (x + 100)^3
x_med <- seq(0, 400, length.out = 500)
p_22 <- integrate(fx_med, 22, Inf)$value
cat("P(X >= 22) = ∫(22 a ∞) 20000/(x+100)³ dx =", round(p_22, 6), "\n")
## P(X >= 22) = ∫(22 a ∞) 20000/(x+100)³ dx = 0.671862
plot(x_med, fx_med(x_med), type = "l", lwd = 2, col = "#2c3e50",
xlab = "x (días)", ylab = "f(x)", main = "P(X ≥ 22)")
x_s <- seq(22, 400, length.out = 300)
polygon(c(22, x_s, 400), c(0, fx_med(x_s), 0), col = "#3498db80", border = NA)
abline(v = 22, lty = 2, col = "#e74c3c")
text(120, 0.0004, paste0("P = ", round(p_22, 4)), col = "#2980b9", cex = 1.1)
P(X ≥ 22)
p_80_120 <- integrate(fx_med, 80, 120)$value
cat("P(80 <= X <= 120) = ∫(80 a 120) 20000/(x+100)³ dx =", round(p_80_120, 6), "\n")
## P(80 <= X <= 120) = ∫(80 a 120) 20000/(x+100)³ dx = 0.10203
plot(x_med, fx_med(x_med), type = "l", lwd = 2, col = "#2c3e50",
xlab = "x (días)", ylab = "f(x)", main = "P(80 ≤ X ≤ 120)")
x_s2 <- seq(80, 120, length.out = 200)
polygon(c(80, x_s2, 120), c(0, fx_med(x_s2), 0), col = "#27ae6080", border = NA)
abline(v = c(80, 120), lty = 2, col = "#e74c3c")
text(100, 0.0002, paste0("P = ", round(p_80_120, 4)), col = "#27ae60", cex = 1.1)
P(80 ≤ X ≤ 120)
EX_med <- integrate(function(x) x * fx_med(x), 0, Inf)$value
cat("E[X] = ∫(0 a ∞) x · 20000/(x+100)³ dx\n")
## E[X] = ∫(0 a ∞) x · 20000/(x+100)³ dx
cat("E[X] =", round(EX_med, 2), "días\n\n")
## E[X] = 100 días
cat("Interpretación: en promedio un frasco dura", round(EX_med, 0), "días.\n")
## Interpretación: en promedio un frasco dura 100 días.
X está en unidades de 100 horas. Menos de 120 horas = X < 1.2. Entre 50 y 100 horas = 0.5 ≤ X ≤ 1.0.
fx6 <- function(x) ifelse(x >= 0 & x < 1, x, ifelse(x >= 1 & x <= 2, 2 - x, 0))
x6 <- seq(-0.2, 2.5, length.out = 500)
p_120 <- integrate(function(x) x, 0, 1)$value +
integrate(function(x) 2 - x, 1, 1.2)$value
cat("P(X < 1.2) = ∫(0 a 1) x dx + ∫(1 a 1.2) (2-x) dx\n")
## P(X < 1.2) = ∫(0 a 1) x dx + ∫(1 a 1.2) (2-x) dx
cat(" =", integrate(function(x) x, 0, 1)$value,
"+", integrate(function(x) 2-x, 1, 1.2)$value, "\n")
## = 0.5 + 0.18
cat(" =", round(p_120, 4), "\n")
## = 0.68
plot(x6, fx6(x6), type = "l", lwd = 2, col = "#8e44ad",
xlab = "x (×100 horas)", ylab = "f(x)", main = "P(X < 1.2)")
x_s1 <- seq(0, 1, length.out = 200)
x_s2 <- seq(1, 1.2, length.out = 100)
polygon(c(0, x_s1, 1), c(0, fx6(x_s1), 0), col = "#9b59b680", border = NA)
polygon(c(1, x_s2, 1.2), c(0, fx6(x_s2), 0), col = "#9b59b680", border = NA)
abline(v = 1.2, lty = 2, col = "#e74c3c")
text(0.5, 0.4, paste0("P = ", round(p_120, 4)), cex = 1.1, col = "#8e44ad")
P(X < 1.2) = P(X < 120 horas)
p_50_100 <- integrate(function(x) x, 0.5, 1.0)$value
cat("P(0.5 <= X <= 1.0) = ∫(0.5 a 1) x dx =", round(p_50_100, 4), "\n")
## P(0.5 <= X <= 1.0) = ∫(0.5 a 1) x dx = 0.375
plot(x6, fx6(x6), type = "l", lwd = 2, col = "#8e44ad",
xlab = "x (×100 horas)", ylab = "f(x)", main = "P(0.5 ≤ X ≤ 1.0)")
x_s3 <- seq(0.5, 1.0, length.out = 200)
polygon(c(0.5, x_s3, 1.0), c(0, fx6(x_s3), 0), col = "#e67e2280", border = NA)
abline(v = c(0.5, 1.0), lty = 2, col = "#e74c3c")
text(0.75, 0.25, paste0("P = ", round(p_50_100, 4)), cex = 1.1, col = "#e67e22")
P(0.5 ≤ X ≤ 1.0)
cat("Área = (1/2) × (3 - 1) = (1/2) × 2 =",
integrate(function(x) rep(1/2, length(x)), 1, 3)$value, "✓\n")
## Área = (1/2) × (3 - 1) = (1/2) × 2 = 1 ✓
cat("P(2 < X < 2.5) = (1/2)(2.5-2) =", (1/2)*(2.5-2), "\n")
## P(2 < X < 2.5) = (1/2)(2.5-2) = 0.25
cat("P(X = 2.5) = 0 (variable continua)\n")
## P(X = 2.5) = 0 (variable continua)
cat("P(2 <= X < 2.5) = (1/2)(2.5-2) =", (1/2)*(2.5-2), "\n")
## P(2 <= X < 2.5) = (1/2)(2.5-2) = 0.25
cat("P(X > 2.5) = (1/2)(3-2.5) =", (1/2)*(3-2.5), "\n")
## P(X > 2.5) = (1/2)(3-2.5) = 0.25
cat("P(X >= 2.5) = (1/2)(3-2.5) =", (1/2)*(3-2.5), "\n")
## P(X >= 2.5) = (1/2)(3-2.5) = 0.25
En variables continuas P(X = c) = 0 para cualquier valor constante c, por lo tanto P(2 < X < 2.5) = P(2 ≤ X < 2.5) = P(2 < X ≤ 2.5) = P(2 ≤ X ≤ 2.5).
\[F(x) = \frac{x-1}{2}, \quad 1 \leq x \leq 3\]
Fx7 <- function(x) (x - 1) / 2
cat("Usando F(x) = (x-1)/2:\n")
## Usando F(x) = (x-1)/2:
cat("P(2 < X < 2.5) = F(2.5) - F(2) =", Fx7(2.5), "-", Fx7(2), "=", Fx7(2.5)-Fx7(2), "\n")
## P(2 < X < 2.5) = F(2.5) - F(2) = 0.75 - 0.5 = 0.25
cat("P(X = 2.5) = 0\n")
## P(X = 2.5) = 0
cat("P(2 <= X < 2.5) = F(2.5) - F(2) =", Fx7(2.5)-Fx7(2), "\n")
## P(2 <= X < 2.5) = F(2.5) - F(2) = 0.25
cat("P(X > 2.5) = 1 - F(2.5) =", 1-Fx7(2.5), "\n")
## P(X > 2.5) = 1 - F(2.5) = 0.25
cat("P(X >= 2.5) = 1 - F(2.5) =", 1-Fx7(2.5), "\n")
## P(X >= 2.5) = 1 - F(2.5) = 0.25
par(mfrow = c(1, 2))
x7 <- seq(0.5, 3.5, length.out = 400)
fx7_plot <- function(x) ifelse(x >= 1 & x <= 3, 0.5, 0)
plot(x7, fx7_plot(x7), type = "l", lwd = 2, col = "#16a085",
xlab = "x", ylab = "f(x)", main = "f(x)", ylim = c(0, 0.7))
x_s <- seq(2, 2.5, length.out = 100)
polygon(c(2, x_s, 2.5), c(0, rep(0.5, 100), 0), col = "#1abc9c80", border = NA)
text(2.25, 0.3, "P=0.25", cex = 0.9, col = "#16a085")
plot(x7, punif(x7, 1, 3), type = "l", lwd = 2, col = "#16a085",
xlab = "x", ylab = "F(x)", main = "F(x) acumulada")
abline(v = 2.5, lty = 2, col = "#e74c3c")
abline(h = Fx7(2.5), lty = 2, col = "#e74c3c")
text(2.8, 0.6, "F(2.5)=0.75", cex = 0.9, col = "#e74c3c")
f(x) y F(x) — uniforme continua
fx8 <- function(x) ifelse(x >= 0 & x <= 1, 2*(1-x), 0)
x8 <- seq(-0.1, 1.2, length.out = 300)
cat("Verificación área:", integrate(function(x) 2*(1-x), 0, 1)$value, "✓\n")
## Verificación área: 1 ✓
pA <- integrate(function(x) 2*(1-x), 0, 1/3)$value
cat("P(X <= 1/3) = ∫(0 a 1/3) 2(1-x) dx =", round(pA, 6), "\n")
## P(X <= 1/3) = ∫(0 a 1/3) 2(1-x) dx = 0.555556
plot(x8, fx8(x8), type = "l", lwd = 2, col = "#c0392b",
xlab = "x", ylab = "f(x)", main = "P(X ≤ 1/3)")
x_s <- seq(0, 1/3, length.out = 100)
polygon(c(0, x_s, 1/3), c(0, fx8(x_s), 0), col = "#e74c3c80", border = NA)
abline(v = 1/3, lty = 2, col = "#c0392b")
text(0.1, 0.5, paste0("P = ", round(pA, 4)), cex = 1.1, col = "#c0392b")
P(X ≤ 1/3)
pB <- integrate(function(x) 2*(1-x), 0.5, 1)$value
cat("P(X > 0.5) = ∫(0.5 a 1) 2(1-x) dx =", round(pB, 6), "\n")
## P(X > 0.5) = ∫(0.5 a 1) 2(1-x) dx = 0.25
plot(x8, fx8(x8), type = "l", lwd = 2, col = "#c0392b",
xlab = "x", ylab = "f(x)", main = "P(X > 0.5)")
x_s2 <- seq(0.5, 1, length.out = 100)
polygon(c(0.5, x_s2, 1), c(0, fx8(x_s2), 0), col = "#e74c3c80", border = NA)
abline(v = 0.5, lty = 2, col = "#c0392b")
text(0.7, 0.3, paste0("P = ", round(pB, 4)), cex = 1.1, col = "#c0392b")
P(X > 0.5)
num <- integrate(function(x) 2*(1-x), 0.5, 0.75)$value
den <- pB
cond <- num / den
cat("P(0.5 <= X < 0.75) =", round(num, 6), "\n")
## P(0.5 <= X < 0.75) = 0.1875
cat("P(X >= 0.5) =", round(den, 6), "\n")
## P(X >= 0.5) = 0.25
cat("P(X < 0.75 | X >= 0.5) =", round(num,6), "/", round(den,6), "=", round(cond, 6), "\n")
## P(X < 0.75 | X >= 0.5) = 0.1875 / 0.25 = 0.75
EX8 <- integrate(function(x) x * 2*(1-x), 0, 1)$value
EX2_8 <- integrate(function(x) x^2 * 2*(1-x), 0, 1)$value
VX8 <- EX2_8 - EX8^2
cat("E[X] = ∫(0 a 1) x·2(1-x) dx =", round(EX8, 6), "\n")
## E[X] = ∫(0 a 1) x·2(1-x) dx = 0.333333
cat("E[X²] = ∫(0 a 1) x²·2(1-x) dx =", round(EX2_8, 6), "\n")
## E[X²] = ∫(0 a 1) x²·2(1-x) dx = 0.166667
cat("V[X] = E[X²] - (E[X])² =", round(EX2_8,6), "-", round(EX8^2,6), "=", round(VX8, 6), "\n\n")
## V[X] = E[X²] - (E[X])² = 0.166667 - 0.111111 = 0.055556
cat("Interpretación: el equipo opera en promedio", round(EX8, 4),
"unidades de tiempo antes de fallar.\n")
## Interpretación: el equipo opera en promedio 0.3333 unidades de tiempo antes de fallar.
El 80% de las personas con reserva asiste (p = 0.80). Hay 25 reservas y 20 mesas. Todas tienen asiento si X ≤ 20.
n9 <- 25; p9 <- 0.80
prob9 <- pbinom(20, n9, p9)
cat("P(X <= 20) = pbinom(20, 25, 0.80) =", round(prob9, 6), "\n\n")
## P(X <= 20) = pbinom(20, 25, 0.80) = 0.579326
cat("Interpretación: hay un", round(prob9*100, 2),
"% de probabilidad de que todos los asistentes tengan mesa.\n")
## Interpretación: hay un 57.93 % de probabilidad de que todos los asistentes tengan mesa.
cols9 <- ifelse(0:25 <= 20, "#3498db", "#e74c3c")
barplot(dbinom(0:25, n9, p9), names.arg = 0:25,
col = cols9, border = "white",
xlab = "X (personas que asisten)", ylab = "f(x)",
main = "Binomial(25, 0.80) — probabilidad de asistencia")
legend("topleft", legend = c("X ≤ 20: todos tienen mesa", "X > 20: no hay mesas"),
fill = c("#3498db", "#e74c3c"), border = "white", bty = "n", cex = 0.85)
Distribución binomial — asistentes al restaurante