# install.packages(c("ggplot2", "dplyr")) # Ejecutar solo la primera vez
library(ggplot2)
library(dplyr)
cat("¡Entorno listo para el laboratorio!\n")## ¡Entorno listo para el laboratorio!
autor <- "Diego Alejandro Tous Aponte"
# Paleta neón
neon <- c(cian = "#00F5FF", magenta = "#FF2BD6", violeta = "#8E2DE2",
lima = "#39FF14", naranja = "#FF9F1C", azul = "#2D7BFF")
fondo <- "#0B0F1A"
panel <- "#101734"
rejilla <- "#1F2A5A"
texto <- "#D6E4FF"
tema_futurista <- function(base_size = 14) {
theme_minimal(base_size = base_size) +
theme(
text = element_text(color = texto),
plot.background = element_rect(fill = fondo, color = NA),
panel.background = element_rect(fill = panel, color = NA),
panel.grid.major = element_line(color = rejilla, linewidth = 0.3),
panel.grid.minor = element_blank(),
plot.title = element_text(hjust = 0.5, face = "bold",
color = neon["cian"]),
plot.subtitle = element_text(hjust = 0.5, color = neon["magenta"],
size = base_size - 2),
axis.title = element_text(color = neon["cian"], face = "bold"),
axis.text = element_text(color = texto),
axis.text.x = element_text(size = 9),
# Firma abajo a la derecha, pequeña
plot.caption = element_text(size = 8, color = "#8FA3D9",
hjust = 1, face = "italic"),
plot.caption.position = "plot",
plot.margin = margin(15, 20, 10, 15)
)
}plot_distribution <- function(values, pmf, title, highlight = NULL,
highlight_color = neon["magenta"], label = NULL) {
df <- data.frame(kn = values, k = factor(values, levels = values), prob = pmf)
# Si hay muchas barras, se muestran menos etiquetas en el eje x
paso <- if (length(values) > 40) 5 else if (length(values) > 20) 2 else 1
cortes <- as.character(values[seq(1, length(values), by = paso)])
p <- ggplot(df, aes(x = k, y = prob)) +
geom_col(fill = neon["violeta"], color = neon["cian"],
linewidth = 0.4, alpha = 0.85) +
scale_x_discrete(breaks = cortes) +
labs(title = toupper(title),
subtitle = "Función de probabilidad",
x = "Valores (k)", y = "Probabilidad P(X=k)",
caption = autor) +
tema_futurista()
if (!is.null(highlight)) {
df_high <- df %>% filter(kn %in% highlight)
p <- p +
geom_col(data = df_high, aes(x = k, y = prob),
fill = unname(highlight_color), color = "white",
linewidth = 0.4, alpha = 0.95)
}
if (!is.null(label)) {
p <- p + annotate("label", x = length(values) / 2 + 0.5,
y = max(pmf) * 0.92, label = label, size = 5,
color = neon["lima"], fill = fondo,
fontface = "bold", linewidth = 0.4)
}
print(p)
}
# Tabla resumen de resultados (se llena a lo largo del laboratorio)
resultados <- data.frame(Ejercicio = character(), Probabilidad = numeric())
registrar <- function(nombre, valor) {
resultados <<- rbind(resultados,
data.frame(Ejercicio = nombre,
Probabilidad = round(valor, 5)))
}Definición: Modela un único ensayo con dos resultados posibles: éxito (1) o fracaso (0).
n_bernoulli <- 1 # Un solo ensayo
p_bernoulli <- 0.5 # Probabilidad de éxito (cara)
x_bernoulli <- 0:n_bernoulli
pmf_bernoulli <- dbinom(x_bernoulli, n_bernoulli, p_bernoulli)
plot_distribution(x_bernoulli, pmf_bernoulli,
sprintf("Distribución de Bernoulli (p=%.1f)", p_bernoulli))## Media (Esperanza): 0.50
## Varianza: 0.25
Definición: Número de éxitos en \(n\) ensayos de Bernoulli independientes.
n_binom <- 10
p_binom <- 0.5
x_binom <- 0:n_binom
pmf_binom <- dbinom(x_binom, n_binom, p_binom)
plot_distribution(x_binom, pmf_binom,
sprintf("Distribución Binomial (n=%d, p=%.1f)", n_binom, p_binom))## Media (Esperanza): 5.00
## Varianza: 2.50
n <- 10; p <- 0.5; k <- 6
prob_binom_1 <- dbinom(k, n, p)
cat(sprintf("Probabilidad de obtener exactamente 6 caras: P(X = 6) = %.5f\n", prob_binom_1))## Probabilidad de obtener exactamente 6 caras: P(X = 6) = 0.20508
registrar("Binomial 1: P(X = 6)", prob_binom_1)
plot_distribution(0:n, dbinom(0:n, n, p),
"Distribución Binomial - P(X=6)",
highlight = k,
label = sprintf("P(X = 6) = %.5f", prob_binom_1))La probabilidad de que una pieza sea defectuosa es 0.1. Halla la probabilidad de que en una muestra de 25 piezas se encuentren a lo sumo cuatro defectuosas.
n <- 25; p <- 0.1
probabilidades <- dbinom(0:n, n, p)
probabilidad_acumulada <- pbinom(4, n, p)
plot_distribution(0:n, probabilidades,
"Distribución Binomial - P(X <= 4)",
highlight = 0:4,
label = sprintf("P(X <= 4) = %.5f", probabilidad_acumulada))cat(sprintf("La probabilidad de que en una muestra de 25 piezas se encuentren a lo sumo 4 defectuosas es: %.5f\n",
probabilidad_acumulada))## La probabilidad de que en una muestra de 25 piezas se encuentren a lo sumo 4 defectuosas es: 0.90201
El 60% de los psicólogos de una facultad encuentran trabajo el primer año. De 100 psicólogos en un curso, ¿cuántos se espera que se coloquen? ¿Cuál es la varianza?
n <- 100; p <- 0.6
esperanza_binom <- n * p
varianza_binom <- n * p * (1 - p)
cat(sprintf("Se espera que %.0f psicólogos encuentren trabajo en el primer año.\n", esperanza_binom))## Se espera que 60 psicólogos encuentren trabajo en el primer año.
## La varianza es: 24.00
Si el 40% de los comunicadores sociales tiene Rh-, en una muestra de siete: (a) ¿probabilidad de que todos sean Rh-? (b) ¿probabilidad de que máximo cuatro sean Rh-?
n <- 7; p <- 0.4
# (a) Todos Rh-
prob_todas_rh_neg <- dbinom(n, n, p)
cat(sprintf("Probabilidad de que todas sean Rh-: P(X = 7) = %.5f\n", prob_todas_rh_neg))## Probabilidad de que todas sean Rh-: P(X = 7) = 0.00164
registrar("Binomial 4a: P(X = 7)", prob_todas_rh_neg)
plot_distribution(0:n, dbinom(0:n, n, p),
"Distribución Binomial - P(X = 7)",
highlight = 7,
label = sprintf("P(X = 7) = %.5f", prob_todas_rh_neg))# (b) Máximo cuatro Rh-
prob_maximo_cuatro <- pbinom(4, n, p)
cat(sprintf("Probabilidad de que máximo cuatro sean Rh-: P(X <= 4) = %.5f\n", prob_maximo_cuatro))## Probabilidad de que máximo cuatro sean Rh-: P(X <= 4) = 0.90374
registrar("Binomial 4b: P(X <= 4)", prob_maximo_cuatro)
plot_distribution(0:n, dbinom(0:n, n, p),
"Distribución Binomial - P(X <= 4)",
highlight = 0:4,
label = sprintf("P(X <= 4) = %.5f", prob_maximo_cuatro))El 25% de quienes toman cierto antibiótico sufre efectos secundarios. De ocho enfermos, halla la probabilidad de que al menos tres los sufran.
p <- 0.25; n <- 8
# P(X >= 3) = 1 - P(X <= 2)
prob_al_menos_tres <- 1 - pbinom(2, n, p)
cat(sprintf("La probabilidad de que al menos tres enfermos sufran efectos secundarios es: %.5f\n",
prob_al_menos_tres))## La probabilidad de que al menos tres enfermos sufran efectos secundarios es: 0.32146
registrar("Binomial 5: P(X >= 3)", prob_al_menos_tres)
plot_distribution(0:n, dbinom(0:n, n, p),
"Distribución Binomial - P(X >= 3)",
highlight = 3:n,
label = sprintf("P(X >= 3) = %.5f", prob_al_menos_tres))p <- 0.25; n <- 8
# P(X < 3) = P(X <= 2)
prob_menos_de_tres <- pbinom(2, n, p)
cat(sprintf("La probabilidad de que menos de 3 enfermos sufran efectos secundarios es: %.5f\n",
prob_menos_de_tres))## La probabilidad de que menos de 3 enfermos sufran efectos secundarios es: 0.67854
registrar("Binomial 6: P(X < 3)", prob_menos_de_tres)
plot_distribution(0:n, dbinom(0:n, n, p),
"Distribución Binomial - P(X < 3)",
highlight = 0:2,
label = sprintf("P(X < 3) = %.5f", prob_menos_de_tres))Definición: Modela el número de ensayos de Bernoulli necesarios para obtener un número fijo de éxitos (\(r\)).
Nota de R:
dnbinom(x, size=r, prob=p)devuelve la probabilidad de obtenerxfracasos antes del r-ésimo éxito.
r <- 5 # Número de éxitos
p <- 0.7 # Probabilidad de éxito
k <- 3 # Fracasos antes de obtener 5 éxitos
prob_nbinom_1 <- dnbinom(k, size = r, prob = p)
cat(sprintf("Probabilidad de obtener 5 éxitos antes de 3 fracasos: P(X=5) = %.5f\n",
prob_nbinom_1))## Probabilidad de obtener 5 éxitos antes de 3 fracasos: P(X=5) = 0.15883
registrar("Bin. Negativa 1: 5 éxitos antes de 3 fracasos", prob_nbinom_1)
# Momentos
esperanza_nbinom <- r * (1 - p) / p
varianza_nbinom <- r * (1 - p) / (p^2)
desviacion_nbinom <- sqrt(varianza_nbinom)
cat("\nMomentos en el Modelo Binomial Negativo\n")##
## Momentos en el Modelo Binomial Negativo
## Esperanza: E(X) = 2.14
## Varianza: V(X) = 3.06
## Desviación estándar: 1.75
La probabilidad de que un niño expuesto al COVID-19 se contagie es 0.6.
n <- 10; r <- 3; p <- 0.6
k <- n - r # Fracasos antes de obtener 3 éxitos
prob_nbinom_2 <- dnbinom(k, size = r, prob = p)
cat(sprintf("Probabilidad de que el 10° niño sea el tercero en contagiarse: %.5f\n",
prob_nbinom_2))## Probabilidad de que el 10° niño sea el tercero en contagiarse: 0.01274
Definición: Modela el número de eventos en un intervalo de tiempo o espacio, dado un promedio de ocurrencia (\(\lambda\)).
Una central telefónica recibe en promedio 2 llamadas por minuto.
lambda_poisson <- 2
k <- 3
prob_poisson_1 <- dpois(k, lambda_poisson)
cat(sprintf("Probabilidad de recibir exactamente 3 llamadas: P(X=3) = %.5f\n", prob_poisson_1))## Probabilidad de recibir exactamente 3 llamadas: P(X=3) = 0.18045
registrar("Poisson 1: P(X = 3)", prob_poisson_1)
plot_distribution(0:14, dpois(0:14, lambda_poisson),
"Distribución de Poisson - P(X=3)",
highlight = k,
label = sprintf("P(X=3) = %.5f", prob_poisson_1))Los erizos cruzan una autovía a razón de 4 cada 30 minutos.
lambda_poisson <- 8 # 4 erizos/30 min * 2 = 8 por hora
prob_6_o_mas <- 1 - ppois(5, lambda_poisson) # P(X >= 6)
cat(sprintf("La probabilidad de que 6 o más erizos crucen la autovía en una hora es: %.5f\n",
prob_6_o_mas))## La probabilidad de que 6 o más erizos crucen la autovía en una hora es: 0.80876
registrar("Poisson 2: P(X >= 6)", prob_6_o_mas)
plot_distribution(0:19, dpois(0:19, lambda_poisson),
"Distribución de Poisson - P(X >= 6)",
highlight = 6:19,
label = sprintf("P(X >= 6) = %.5f", prob_6_o_mas))En una carretera se producen en promedio 2 accidentes anuales.
lambda_5_years <- 2 * 5
prob_mas_de_3 <- 1 - ppois(3, lambda_5_years) # P(X > 3)
cat(sprintf("La probabilidad de que en 5 años se produzcan más de 3 accidentes es: %.5f\n",
prob_mas_de_3))## La probabilidad de que en 5 años se produzcan más de 3 accidentes es: 0.98966
registrar("Poisson 3: P(X > 3) en 5 años", prob_mas_de_3)
plot_distribution(0:24, dpois(0:24, lambda_5_years),
"Distribución de Poisson - P(X > 3) en 5 años",
highlight = 4:24,
label = sprintf("P(X > 3) = %.5f", prob_mas_de_3))En un semáforo pasan en promedio 10 coches por minuto.
lambda_poisson <- 10 * 2
k <- 16
prob_poisson <- dpois(k, lambda_poisson)
cat(sprintf("La probabilidad de que pasen exactamente 16 coches en 2 minutos es: %.5f\n",
prob_poisson))## La probabilidad de que pasen exactamente 16 coches en 2 minutos es: 0.06456
registrar("Poisson 4: P(X = 16)", prob_poisson)
plot_distribution(0:39, dpois(0:39, lambda_poisson),
"Distribución de Poisson - P(X=16)",
highlight = k,
label = sprintf("P(X=16) = %.5f", prob_poisson))Un banco recibe en promedio 6 cheques sin fondo por día.
lambda_dia <- 6
# a. Cuatro cheques sin fondo en un día
prob_a <- dpois(4, lambda_dia)
cat(sprintf("a. Probabilidad de 4 cheques sin fondo en un día: %.5f\n", prob_a))## a. Probabilidad de 4 cheques sin fondo en un día: 0.13385
registrar("Poisson 5a: P(X = 4) en un día", prob_a)
plot_distribution(0:14, dpois(0:14, lambda_dia),
"Poisson - P(X=4) en un día",
highlight = 4,
label = sprintf("P(X=4) = %.5f", prob_a))# b. Cincuenta cheques sin fondo en una semana
lambda_semana <- lambda_dia * 7
prob_b <- dpois(50, lambda_semana)
cat(sprintf("b. Probabilidad de 50 cheques sin fondo en una semana: %.5f\n", prob_b))## b. Probabilidad de 50 cheques sin fondo en una semana: 0.02748
registrar("Poisson 5b: P(X = 50) en una semana", prob_b)
plot_distribution(0:69, dpois(0:69, lambda_semana),
"Poisson - P(X=50) en una semana",
highlight = 50,
label = sprintf("P(X=50) = %.5f", prob_b))# c. Diez cheques sin fondo en 12 horas
lambda_12horas <- lambda_dia * 0.5
prob_c <- dpois(10, lambda_12horas)
cat(sprintf("c. Probabilidad de 10 cheques sin fondo en 12 horas: %.5f\n", prob_c))## c. Probabilidad de 10 cheques sin fondo en 12 horas: 0.00081
registrar("Poisson 5c: P(X = 10) en 12 horas", prob_c)
plot_distribution(0:19, dpois(0:19, lambda_12horas),
"Poisson - P(X=10) en 12 horas",
highlight = 10,
label = sprintf("P(X=10) = %.5f", prob_c))# d. Cinco cheques sin fondo en 4 horas
lambda_4horas <- lambda_dia * (4/24)
prob_d <- dpois(5, lambda_4horas)
cat(sprintf("d. Probabilidad de 5 cheques sin fondo en 4 horas: %.5f\n", prob_d))## d. Probabilidad de 5 cheques sin fondo en 4 horas: 0.00307
registrar("Poisson 5d: P(X = 5) en 4 horas", prob_d)
plot_distribution(0:14, dpois(0:14, lambda_4horas),
"Poisson - P(X=5) en 4 horas",
highlight = 5,
label = sprintf("P(X=5) = %.5f", prob_d))En una empresa el promedio es de 5 accidentes por mes.
lambda_poisson <- 5
# P(X >= 2) = 1 - P(X <= 1)
prob_al_menos_2 <- 1 - ppois(1, lambda_poisson)
cat(sprintf("La probabilidad de que ocurran como mínimo 2 accidentes en un mes es: %.5f\n",
prob_al_menos_2))## La probabilidad de que ocurran como mínimo 2 accidentes en un mes es: 0.95957
registrar("Poisson 6: P(X >= 2) en un mes", prob_al_menos_2)
plot_distribution(0:14, dpois(0:14, lambda_poisson),
"Poisson - P(X >= 2) accidentes/mes",
highlight = 2:14,
label = sprintf("P(X >= 2) = %.5f", prob_al_menos_2))lambda_trimestre <- 5 * 3
k <- 8
prob_poisson_8 <- dpois(k, lambda_trimestre)
cat(sprintf("La probabilidad de que ocurran 8 accidentes en un trimestre es: %.5f\n",
prob_poisson_8))## La probabilidad de que ocurran 8 accidentes en un trimestre es: 0.01944
registrar("Poisson 7: P(X = 8) en un trimestre", prob_poisson_8)
plot_distribution(0:24, dpois(0:24, lambda_trimestre),
"Poisson - P(X=8) en un trimestre",
highlight = k,
label = sprintf("P(X=8) = %.5f", prob_poisson_8))Definición: Modela el número de éxitos en una muestra de tamaño \(n\), extraída sin reemplazo de una población finita de tamaño \(N\) que contiene \(K\) éxitos.
Nota de R:
dhyper(x, m=K, n=N-K, k=n), dondem= éxitos en la población,n= fracasos en la población yk= tamaño de la muestra.
Una urna contiene 10 bolas rojas y 20 azules. Se seleccionan 5 sin reemplazo.
N <- 30 # Población total
K <- 10 # Éxitos en la población (bolas rojas)
n <- 5 # Tamaño de la muestra
k <- 3 # Éxitos en la muestra
prob_hyper_1 <- dhyper(k, m = K, n = N - K, k = n)
cat(sprintf("Probabilidad de seleccionar exactamente 3 bolas rojas: P(X=3) = %.5f\n",
prob_hyper_1))## Probabilidad de seleccionar exactamente 3 bolas rojas: P(X=3) = 0.15999
registrar("Hipergeométrica 1: P(X = 3)", prob_hyper_1)
# Momentos
esperanza_hyper <- n * (K / N)
varianza_hyper <- n * (K/N) * (1 - K/N) * ((N - n) / (N - 1))
desviacion_hyper <- sqrt(varianza_hyper)
cat("\nMomentos en el Modelo Hipergeométrico\n")##
## Momentos en el Modelo Hipergeométrico
## Esperanza: E(X) = 1.67
## Varianza: V(X) = 0.96
## Desviación estándar: 0.98
plot_distribution(0:n, dhyper(0:n, m = K, n = N - K, k = n),
"Distribución Hipergeométrica - P(X=3)",
highlight = k,
label = sprintf("P(X=3) = %.5f", prob_hyper_1))Un estudiante responde 15 preguntas de opción múltiple (4 opciones cada una) al azar. ¿Probabilidad de acertar exactamente 6? ¿Y de acertar 5 o menos?
n <- 15; p <- 1/4
prob_6 <- dbinom(6, n, p)
prob_5_o_menos <- pbinom(5, n, p)
cat(sprintf("P(X = 6) = %.5f\n", prob_6))## P(X = 6) = 0.09175
## P(X <= 5) = 0.85163
registrar("Ejercicio 1: P(X = 6)", prob_6)
registrar("Ejercicio 1: P(X <= 5)", prob_5_o_menos)
plot_distribution(0:n, dbinom(0:n, n, p),
"Binomial - Examen (n=15, p=0.25)",
highlight = 6,
label = sprintf("P(X=6)=%.5f", prob_6))Un sitio web recibe en promedio 3 visitas por minuto. ¿Probabilidad de exactamente 5 visitas? ¿Y de 2 o menos?
lambda <- 3
prob_5 <- dpois(5, lambda)
prob_2_o_menos <- ppois(2, lambda)
cat(sprintf("P(X = 5) = %.5f\n", prob_5))## P(X = 5) = 0.10082
## P(X <= 2) = 0.42319
registrar("Ejercicio 2: P(X = 5)", prob_5)
registrar("Ejercicio 2: P(X <= 2)", prob_2_o_menos)
plot_distribution(0:14, dpois(0:14, lambda),
"Poisson - Visitas por minuto (λ=3)",
highlight = 5,
label = sprintf("P(X=5)=%.5f", prob_5))Un lote de 50 piezas contiene 10 defectuosas. Se seleccionan 8 al azar sin reemplazo. ¿Probabilidad de exactamente 2 defectuosas?
N <- 50; K <- 10; n <- 8; k <- 2
prob_2_defectuosas <- dhyper(k, m = K, n = N - K, k = n)
cat(sprintf("P(X = 2 defectuosas) = %.5f\n", prob_2_defectuosas))## P(X = 2 defectuosas) = 0.32172
registrar("Ejercicio 3: P(X = 2 defectuosas)", prob_2_defectuosas)
plot_distribution(0:n, dhyper(0:n, m = K, n = N - K, k = n),
"Hipergeométrica - 2 defectuosas en muestra de 8",
highlight = k,
label = sprintf("P(X=2) = %.5f", prob_2_defectuosas))Una máquina produce piezas con 5% de probabilidad de defecto. ¿Probabilidad de que la tercera defectuosa sea la décima pieza producida?
r <- 3 # 3 defectuosas (éxitos)
p <- 0.05 # Probabilidad de defecto
k <- 10 - 3 # Fracasos antes del 3er éxito
prob_3ra_defectuosa <- dnbinom(k, size = r, prob = p)
cat(sprintf("P(la 3ª defectuosa sea la 10ª pieza) = %.5f\n", prob_3ra_defectuosa))## P(la 3ª defectuosa sea la 10ª pieza) = 0.00314
registrar("Ejercicio 4: 3ª defectuosa en la 10ª pieza", prob_3ra_defectuosa)
plot_distribution(0:60 + r, dnbinom(0:60, size = r, prob = p),
"Binomial Negativa - Posición de la 3ª defectuosa (p=0.05)",
highlight = 10,
label = sprintf("P(X=10) = %.5f", prob_3ra_defectuosa))knitr::kable(resultados, align = "lc",
caption = paste("Probabilidades calculadas en el laboratorio —", autor))| Ejercicio | Probabilidad |
|---|---|
| Binomial 1: P(X = 6) | 0.20508 |
| Binomial 2: P(X <= 4) | 0.90201 |
| Binomial 4a: P(X = 7) | 0.00164 |
| Binomial 4b: P(X <= 4) | 0.90374 |
| Binomial 5: P(X >= 3) | 0.32146 |
| Binomial 6: P(X < 3) | 0.67854 |
| Bin. Negativa 1: 5 éxitos antes de 3 fracasos | 0.15883 |
| Bin. Negativa 2: 10° niño es el 3° contagiado | 0.01274 |
| Poisson 1: P(X = 3) | 0.18045 |
| Poisson 2: P(X >= 6) | 0.80876 |
| Poisson 3: P(X > 3) en 5 años | 0.98966 |
| Poisson 4: P(X = 16) | 0.06456 |
| Poisson 5a: P(X = 4) en un día | 0.13385 |
| Poisson 5b: P(X = 50) en una semana | 0.02748 |
| Poisson 5c: P(X = 10) en 12 horas | 0.00081 |
| Poisson 5d: P(X = 5) en 4 horas | 0.00307 |
| Poisson 6: P(X >= 2) en un mes | 0.95957 |
| Poisson 7: P(X = 8) en un trimestre | 0.01944 |
| Hipergeométrica 1: P(X = 3) | 0.15999 |
| Ejercicio 1: P(X = 6) | 0.09175 |
| Ejercicio 1: P(X <= 5) | 0.85163 |
| Ejercicio 2: P(X = 5) | 0.10082 |
| Ejercicio 2: P(X <= 2) | 0.42319 |
| Ejercicio 3: P(X = 2 defectuosas) | 0.32172 |
| Ejercicio 4: 3ª defectuosa en la 10ª pieza | 0.00314 |