choose() e Implementación en RStudio con
Datos de la UJMDEn la investigación biomédica y la práctica clínica, la mayoría de los eventos de interés presentan una naturaleza dicotómica o binaria: un paciente responde o no a un antiviral, desarrolla o no una complicación, presenta prehipertensión o normotensión, o califica con exceso de peso o peso normal.
Cuando evaluamos a una cohorte fija de \(n\) individuos y contabilizamos cuántos presentan el evento de interés (“éxito”), la incertidumbre biológica se modela matemáticamente a través de la Distribución Binomial.
Para que una variable aleatoria discreta \(X\) siga una distribución binomial \(X \sim \text{Bin}(n, p)\), deben cumplirse estrictamente cuatro supuestos:
B — Binary (Resultado Binario): Cada paciente solo presenta dos resultados mutuamente excluyentes: Éxito (\(1\)) o Fracaso (\(0\)). I — Independent (Independencia): La respuesta de un paciente no modifica la probabilidad de respuesta de otro paciente en la cohorte. N — Number fixed (Número Fijo): El tamaño de la muestra \(n\) está predeterminado antes de iniciar la recolección de datos. S — Same \(p\) (Probabilidad Constante): La probabilidad teórica de éxito \(p\) permanece constante para todos los participantes del estudio.
La probabilidad de observar exactamente \(k\) éxitos en \(n\) ensayos independientes viene dada por la fórmula binomial completa:
\[P(X = k) = \binom{n}{k} \cdot p^k \cdot (1-p)^{n-k}\]
El primer componente de la fórmula es el coeficiente binomial \(\binom{n}{k}\) (\(n\) choose \(k\)), el cual calcula de forma manual el número de escenarios o combinaciones posibles en que pueden ordenarse \(k\) éxitos y \((n-k)\) fracasos entre los \(n\) pacientes:
\[\binom{n}{k} = \frac{n!}{k! \cdot (n-k)!}\]
En RStudio, antes de recurrir de forma directa a las funciones
automatizadas de distribución, podemos utilizar la función
choose(n, k) para calcular el número
exacto de combinaciones o escenarios posibles de forma transparente.
| Función en R | Propósito Bioestadístico | Expresión Matemática Equivalente |
|---|---|---|
choose(n, k) |
Número de escenarios posibles (\(n\) choose \(k\)) | \(\binom{n}{k} = \frac{n!}{k!(n-k)!}\) |
dbinom(x, size, prob) |
Probabilidad Puntual exacta | \(P(X = x) = \binom{n}{x} p^x (1-p)^{n-x}\) |
pbinom(q, size, prob) |
Probabilidad Acumulada | \(P(X \le q) = \sum_{x=0}^{q} \binom{n}{x} p^x (1-p)^{n-x}\) |
qbinom(p, size, prob) |
Cuantil de la Distribución | Encuentra \(k\) tal que \(P(X \le k) = p\) |
rbinom(n, size, prob) |
Simulación de Monte Carlo | Genera vectores aleatorios binomiales |
A continuación se presentan 5 ejercicios extraídos de los informes
descriptivos estudiantiles de la Universidad Dr. José Matías Delgado
(UJMD), donde se demuestra explícitamente el cálculo manual del número
de escenarios combinatorios con factoriales, su verificación en R
mediante choose(), y la solución final con la distribución
binomial.
Contexto: En el estudio del Subgrupo 3 sobre prehipertensión (\(N = 44\)), entre los 36 estudiantes con mediciones de presión arterial válidas, el \(75.0\%\) (\(p = 0.75\)) presentó cifras compatibles con prehipertensión.
Problema: En una muestra aleatoria de \(n = 12\) estudiantes de Medicina: a) Calcule de forma manual el número de escenarios posibles para obtener \(k = 9\) estudiantes con prehipertensión y determine la probabilidad \(P(X = 9)\). b) Determine el Valor Esperado \(E(X)\) y la Varianza \(\text{Var}(X)\) de la muestra. c) Compruebe los resultados en RStudio utilizando
choose()ydbinom().
# Parámetros del Ejercicio 1
n1 <- 12
k1 <- 9
p1 <- 0.75
# 1. Cálculo del número de escenarios con choose()
escenarios_1 <- choose(n1, k1) # 12 choose 9
# 2. Cálculo manual de la probabilidad usando choose()
prob_manual_1 <- escenarios_1 * (p1^k1) * ((1 - p1)^(n1 - k1))
# 3. Verificación directa con dbinom()
prob_r_1 <- dbinom(x = k1, size = n1, prob = p1)
# 4. Parámetros
esperanza_1 <- n1 * p1
varianza_1 <- n1 * p1 * (1 - p1)
desv_est_1 <- sqrt(varianza_1)
# Resultados en Consola
cat("--- EJERCICIO 1 (Prehipertensión) ---\n")## --- EJERCICIO 1 (Prehipertensión) ---
## Número de escenarios (choose(12, 9)): 220
cat("P(X = 9) con choose() manual: ", round(prob_manual_1, 4), " (", round(prob_manual_1 * 100, 2), "%)\n")## P(X = 9) con choose() manual: 0.2581 ( 25.81 %)
## P(X = 9) verificado con dbinom(): 0.2581
## Valor Esperado E(X): 9 estudiantes
## Varianza Var(X): 2.25 estudiantes^2
## Desviación Estándar (sigma): 1.5 estudiantes
Contexto: El reporte del Subgrupo 11 (\(N = 38\)) registró que 15 estudiantes presentaron exceso de peso (sobrepeso u obesidad), lo que representa una prevalencia del \(39.5\%\) (\(p = 0.395\)).
Problema: En un grupo de \(n = 8\) estudiantes de la Facultad: a) Calcule manualmente el número de escenarios posibles para \(k = 0\) y \(k = 1\) mediante el coeficiente binomial. b) Determine la probabilidad de que al menos 2 estudiantes presenten exceso de peso (\(P(X \ge 2)\)) mediante la regla del complemento. c) Desarrolle el código en RStudio combinando
choose()para los escenarios ypbinom()para la verificación.
Por la regla del complemento: \(P(X \ge 2) = 1 - P(X < 2) = 1 - [P(X = 0) + P(X = 1)]\).
n2 <- 8
p2 <- 0.395
# 1. Escenarios individuales con choose()
escenarios_k0 <- choose(n2, 0) # 1 escenario
escenarios_k1 <- choose(n2, 1) # 8 escenarios
# 2. Probabilidades puntuales manuales usando choose()
p_k0_manual <- escenarios_k0 * (p2^0) * ((1 - p2)^8)
p_k1_manual <- escenarios_k1 * (p2^1) * ((1 - p2)^7)
p_al_menos_2_manual <- 1 - (p_k0_manual + p_k1_manual)
# 3. Verificación automatizada con pbinom()
p_al_menos_2_r <- 1 - pbinom(q = 1, size = n2, prob = p2)
cat("--- EJERCICIO 2 (Exceso de Peso) ---\n")## --- EJERCICIO 2 (Exceso de Peso) ---
cat("Escenarios k=0 (choose(8,0)): ", escenarios_k0, " | Escenarios k=1 (choose(8,1)): ", escenarios_k1, "\n")## Escenarios k=0 (choose(8,0)): 1 | Escenarios k=1 (choose(8,1)): 8
cat("P(X >= 2) Manual con choose(): ", round(p_al_menos_2_manual, 4), " (", round(p_al_menos_2_manual * 100, 2), "%)\n")## P(X >= 2) Manual con choose(): 0.8883 ( 88.83 %)
## P(X >= 2) Verificado con pbinom(): 0.8883
# Gráfico de Masa de Probabilidad con Highlight
df_ex2 <- data.frame(
x = 0:n2,
prob = dbinom(0:n2, size = n2, prob = p2),
destacado = ifelse(0:n2 >= 2, "X >= 2 (Cumple)", "X < 2")
)
ggplot(df_ex2, aes(x = factor(x), y = prob, fill = destacado)) +
geom_col(width = 0.6) +
scale_fill_manual(values = c("X < 2" = "#CBD5E1", "X >= 2 (Cumple)" = "#1E293B")) +
labs(
title = "Distribución Binomial: Exceso de Peso (n=8, p=0.395)",
subtitle = "Área sombreada representa P(X >= 2) = 88.85%",
x = "Número de Estudiantes con Exceso de Peso (X)",
y = "Probabilidad P(X = x)",
fill = "Categoría"
) +
theme_minimal(base_size = 12)Contexto: En la muestra de \(N = 44\) estudiantes del Subgrupo 3, 20 participantes alcanzaron un nivel Alto de actividad física segun el IPAQ, registrando un \(45.5\%\) (\(p = 0.455\)).
Problema: En una comisión de \(n = 10\) estudiantes: a) Calcule de forma manual el número de escenarios posibles \(\binom{10}{5}\) y determine \(P(X = 5)\). b) Determine la probabilidad de observar menos de 3 estudiantes con nivel alto (\(P(X < 3) = P(X \le 2)\)) calculando los escenarios para \(k=0, 1, 2\). c) Compruebe las soluciones en RStudio utilizando
choose()ypbinom().
Para \(P(X = 5)\): \[\binom{10}{5} = \frac{10!}{5! \cdot 5!} = \frac{10 \times 9 \times 8 \times 7 \times 6}{5 \times 4 \times 3 \times 2 \times 1} = \frac{30240}{120} = \mathbf{252 \text{ escenarios}}\] \[P(X = 5) = 252 \times (0.455)^5 \times (0.545)^5 = 252 \times 0.01948 \times 0.04705 = \mathbf{0.2310} \quad (23.10\%)\]
Para \(P(X < 3) = P(X=0) + P(X=1) + P(X=2)\):
n3 <- 10
p3 <- 0.455
# 1. Escenarios para k = 5
escenarios_k5 <- choose(10, 5) # 252
prob_k5_manual <- escenarios_k5 * (p3^5) * ((1 - p3)^5)
# 2. Escenarios para k = 0, 1, 2
escenarios_k0_3 <- choose(10, 0) # 1
escenarios_k1_3 <- choose(10, 1) # 10
escenarios_k2_3 <- choose(10, 2) # 45
prob_menos_3_manual <- sum(
sapply(0:2, function(k) choose(10, k) * (p3^k) * ((1 - p3)^(10 - k)))
)
# 3. Verificación con pbinom()
prob_menos_3_r <- pbinom(q = 2, size = n3, prob = p3)
cat("--- EJERCICIO 3 (Actividad Física Alta) ---\n")## --- EJERCICIO 3 (Actividad Física Alta) ---
## Escenarios choose(10, 5): 252 | P(X = 5): 0.2363
## Escenarios k=0,1,2: 1 , 10 , 45
cat("P(X < 3) Manual con choose(): ", round(prob_menos_3_manual, 4), " (", round(prob_menos_3_manual * 100, 2), "%)\n")## P(X < 3) Manual con choose(): 0.0941 ( 9.41 %)
## P(X < 3) Verificado con pbinom(): 0.0941
Contexto: En la encuesta sobre conocimientos de Diabetes Mellitus Tipo 2 (\(N = 25\)), el \(88.0\%\) (\(p = 0.880\)) reconoció correctamente que mantener un peso ideal reduce significativamente el riesgo de padecer la enfermedad.
Problema: Se toma una muestra de \(n = 15\) estudiantes: a) Calcule de forma manual el número de escenarios posibles para \(k = 15\) y para el rango \(k \in \{12, 13, 14\}\). b) Determine la probabilidad de que todos los 15 estudiantes (\(k = 15\)) respondan correctamente. c) Calcule la probabilidad de que entre 12 y 14 estudiantes inclusive respondan correctamente (\(P(12 \le X \le 14)\)). d) Desarrolle la solución en RStudio empleando
choose()ydbinom().
Para \(P(X = 15)\): \[\binom{15}{15} = \frac{15!}{15! \cdot 0!} = \mathbf{1 \text{ escenario}}\] \[P(X = 15) = 1 \times (0.88)^{15} \times (0.12)^0 = \mathbf{0.1470} \quad (14.70\%)\]
Para \(P(12 \le X \le 14) = P(X=12) + P(X=13) + P(X=14)\):
n4 <- 15
p4 <- 0.880
# 1. Escenarios con choose()
escenarios_k15 <- choose(15, 15) # 1
escenarios_rango <- choose(15, 12:14) # 455, 105, 15
# 2. Probabilidades con choose()
p_k15_manual <- escenarios_k15 * (p4^15) * ((1 - p4)^0)
p_rango_manual <- sum(choose(15, 12:14) * (p4^(12:14)) * ((1 - p4)^(15 - (12:14))))
# 3. Verificación automatizada
p_k15_r <- dbinom(15, n4, p4)
p_rango_r <- sum(dbinom(12:14, n4, p4))
cat("--- EJERCICIO 4 (Conocimiento DM2) ---\n")## --- EJERCICIO 4 (Conocimiento DM2) ---
cat("Escenarios k=15 (choose(15,15)): ", escenarios_k15, " | P(X = 15): ", round(p_k15_manual, 4), "\n")## Escenarios k=15 (choose(15,15)): 1 | P(X = 15): 0.147
## Escenarios k=12,13,14 (choose(15, 12:14)): 455, 105, 15
cat("P(12 <= X <= 14) Manual con choose(): ", round(p_rango_manual, 4), " (", round(p_rango_manual * 100, 2), "%)\n")## P(12 <= X <= 14) Manual con choose(): 0.7572 ( 75.72 %)
## P(12 <= X <= 14) Verificado en R: 0.7572
Contexto: En la muestra de \(N = 44\) estudiantes del Subgrupo 3, 7 participantes reportaron ser fumadores activos, registrando una prevalencia del \(15.9\%\) (\(p = 0.159\)).
Problema: En un grupo de tamizaje de \(n = 20\) estudiantes: a) Calcule manualmente el número de escenarios para \(k = 0\) y determine \(P(X = 0)\) y \(P(X \ge 1)\). b) Determine el Valor Esperado \(E(X)\) y la Desviación Estándar \(\sigma\). c) Realice una simulación de Monte Carlo en RStudio generando 1,000 muestras de 20 estudiantes.
Escenarios para \(k = 0\): \[\binom{20}{0} = \frac{20!}{0! \cdot 20!} = \mathbf{1 \text{ escenario}}\] \[P(X = 0) = 1 \times (0.159)^0 \times (0.841)^{20} = \mathbf{0.0321} \quad (3.21\%)\] \[P(X \ge 1) = 1 - P(X = 0) = 1 - 0.0321 = \mathbf{0.9679} \quad (96.79\%)\]
Esperanza y Desviación Estándar:
n5 <- 20
p5 <- 0.159
# 1. Escenario k=0 con choose()
escenario_k0_5 <- choose(20, 0) # 1
p_0_manual <- escenario_k0_5 * (p5^0) * ((1 - p5)^20)
p_al_menos_1_manual <- 1 - p_0_manual
# 2. Parámetros
esp_5 <- n5 * p5
desv_5 <- sqrt(n5 * p5 * (1 - p5))
cat("--- EJERCICIO 5 (Tabaquismo) ---\n")## --- EJERCICIO 5 (Tabaquismo) ---
## Escenario k=0 (choose(20,0)): 1
## P(X = 0): 0.0313 | P(X >= 1): 0.9687
## Esperanza E(X): 3.18 fumadores | Desviación Estándar: 1.635
# 3. Simulación de Monte Carlo (1,000 replicaciones)
set.seed(2026)
simulacion <- rbinom(n = 1000, size = n5, prob = p5)
media_simulada <- mean(simulacion)
desv_simulada <- sd(simulacion)
cat("\n--- RESULTADOS DE SIMULACIÓN DE MONTE CARLO (N = 1000) ---\n")##
## --- RESULTADOS DE SIMULACIÓN DE MONTE CARLO (N = 1000) ---
## Media empírica simulada: 3.151 (Teórica: 3.18)
## Desviación estándar simulada: 1.63 (Teórica: 1.635)
# Histograma de la Simulación
df_sim <- data.frame(Fumadores = simulacion)
ggplot(df_sim, aes(x = Fumadores)) +
geom_histogram(binwidth = 1, fill = "#2563EB", color = "white", alpha = 0.8) +
labs(
title = "Simulación de Monte Carlo: Tabaquismo Estudiantil (1,000 muestras)",
subtitle = paste("Media Simulada =", round(media_simulada, 2), "| Media Teórica = 3.18"),
x = "Número de Fumadores por Muestra de 20 Estudiantes",
y = "Frecuencia Observada en 1,000 Experimentos"
) +
theme_minimal(base_size = 12)| Ejercicio / Tema | Tamaño Muestra (\(n\)) | Éxitos (\(k\)) | Escenarios Combinatorios \(\binom{n}{k}\) | Función R choose() |
Probabilidad Resultado | Función R Automática |
|---|---|---|---|---|---|---|
| 1. Prehipertensión | \(n = 12\) | \(k = 9\) | \(220\) escenarios | choose(12, 9) |
\(25.81\%\) | dbinom(9, 12, 0.75) |
| 2. Exceso de Peso | \(n = 8\) | \(k < 2\) (\(0, 1\)) | \(1\) y \(8\) escenarios | choose(8, 0:1) |
\(88.85\%\) (\(P(X \ge 2)\)) | 1 - pbinom(1, 8, 0.395) |
| 3. Actividad Física Alta | \(n = 10\) | \(k = 5\) | \(252\) escenarios | choose(10, 5) |
\(23.10\%\) | dbinom(5, 10, 0.455) |
| 4. Conocimiento DM2 | \(n = 15\) | \(k \in \{12,13,14\}\) | \(455\), \(105\), \(15\) escenarios | choose(15, 12:14) |
\(75.71\%\) | sum(dbinom(12:14, 15, 0.88)) |
| 5. Tabaquismo | \(n = 20\) | \(k = 0\) | \(1\) escenario | choose(20, 0) |
\(96.79\%\) (\(P(X \ge 1)\)) | 1 - dbinom(0, 20, 0.159) |
Este documento RMarkdown ejecutable en RStudio demuestra que la
función choose(n, k) implementa de forma directa el
coeficiente combinatorio \(\binom{n}{k}\), sirviendo como puente
pedagógico entre el cálculo aritmético manual con factoriales y las
funciones de distribución automatizadas de R (dbinom y
pbinom).