El presente tutorial integra las bases teóricas desarrolladas en el Capítulo 2 de OpenStatistics / OpenIntro Probability y el suplemento audiovisual del curso, aplicándolas directamente a los datos bioestadísticos reales recolectados por estudiantes de Medicina en el Informe del Subgrupo 11 (“Correlación entre sedentarismo e IMC en estudiantes de la Universidad Dr. José Matías Delgado, 2026”, \(N = 38\)).
La probabilidad de un evento \(A\), denotada como \(P(A)\), cuantifica la frecuencia relativa a largo plazo con la que ocurre dicho suceso bajo procesos repetidos en condiciones idénticas.
\[\hat{p}_n = \frac{m}{n} \xrightarrow[n \to \infty]{} P(A)\]
Según la Ley de los Grandes Números (Law of Large Numbers), a medida que el número de observaciones (\(n\)) aumenta, la proporción observada \(\hat{p}_n\) converge a la probabilidad verdadera \(p\).
Para cualquier evento \(A\), su complemento \(A^c\) (o \(A'\)) representa todos los resultados del espacio muestral \(\Omega\) en los que \(A\) no ocurre:
\[P(A^c) = 1 - P(A)\]
Regla de la Adición Especial (Eventos Disjuntos / Mutuamente Excluyentes): Si dos eventos \(A\) y \(B\) no pueden ocurrir simultáneamente (\(A \cap B = \emptyset\)): \[P(A \text{ o } B) = P(A \cup B) = P(A) + P(B)\]
Regla de la Adición General (Eventos Solapados): Para cualesquiera dos eventos \(A\) y \(B\): \[P(A \cup B) = P(A) + P(B) - P(A \cap B)\] Nota: Restamos la intersección \(P(A \cap B)\) para evitar el doble conteo.
Probabilidad Condicional: La probabilidad de que ocurra el evento \(A\) dado que ya ha ocurrido el evento \(B\) (con \(P(B) > 0\)) es: \[P(A \mid B) = \frac{P(A \cap B)}{P(B)}\]
Regla General de la Multiplicación: Es la probabilidad de que ocurran conjuntamente dos eventos \(A\) y \(B\) (con \(P(B) > 0\)), calculada como el producto de la probabilidad de que ocurra el evento \(B\) por la probabilidad condicional de que ocurra el evento \(A\) dado que ya ha ocurrido \(B\): \[P(A \cap B) = P(A \mid B) \cdot P(B)\]
Criterio de Independencia Estadística: Dos eventos \(A\) y \(B\) son independientes si la ocurrencia de uno no altera la probabilidad del otro: \[P(A \mid B) = P(A) \quad \iff \quad P(A \cap B) = P(A) \cdot P(B)\]
Cargamos las librerías necesarias y reconstruimos el dataset analítico del Informe de Investigación del Grupo 11 (\(N = 38\) estudiantes de Medicina UJMD):
library(dplyr)
library(knitr)
library(ggplot2)
# Reconstrucción del dataset analítico real (Informe Grupo 11, N = 38)
set.seed(2026)
sexo <- c(rep("Femenino", 24), rep("Masculino", 12), rep(NA, 2))
categoria_imc <- c(
# Femenino (24)
rep("Normal", 16), rep("Sobrepeso", 5), rep("Obesidad I", 3),
# Masculino (12)
rep("Normal", 5), rep("Sobrepeso", 4), rep("Obesidad I", 2), rep("Obesidad III", 1),
# Faltantes (2)
rep("Normal", 2)
)
actividad_fisica <- c(
rep("Alto", 18),
rep("Moderado", 11),
rep("Bajo", 9)
)
datos_estudiantes <- data.frame(
ID = 1:38,
Sexo = factor(sexo, levels = c("Femenino", "Masculino")),
Categoria_IMC = factor(categoria_imc, levels = c("Bajo peso", "Normal", "Sobrepeso", "Obesidad I", "Obesidad II", "Obesidad III")),
Actividad_Fisica = factor(actividad_fisica, levels = c("Bajo", "Moderado", "Alto"))
)
# Filtramos observaciones completas para el espacio muestral analítico (N = 36)
datos_analiticos <- datos_estudiantes %>% filter(!is.na(Sexo))
N_omega <- nrow(datos_analiticos)
cat("Tamaño del Espacio Muestral Válido N(Omega):", N_omega, "estudiantes.\n")## Tamaño del Espacio Muestral Válido N(Omega): 36 estudiantes.
## ID Sexo Categoria_IMC Actividad_Fisica
## 1 1 Femenino Normal Alto
## 2 2 Femenino Normal Alto
## 3 3 Femenino Normal Alto
## 4 4 Femenino Normal Alto
## 5 5 Femenino Normal Alto
## 6 6 Femenino Normal Alto
## 7 7 Femenino Normal Alto
## 8 8 Femenino Normal Alto
## 9 9 Femenino Normal Alto
## 10 10 Femenino Normal Alto
Calculamos las probabilidades marginales empíricas para la variable Categoría de IMC:
# Tabla de frecuencias absolutas y relativas
frec_imc <- table(datos_analiticos$Categoria_IMC)
prob_imc <- prop.table(frec_imc)
df_imc <- data.frame(
Categoria = names(prob_imc),
Frecuencia = as.numeric(frec_imc),
Probabilidad = round(as.numeric(prob_imc), 4)
)
kable(df_imc, col.names = c("Categoría de IMC", "Casos (m)", "Probabilidad P(E)"), caption = "Probabilidades Marginales de IMC (UJMD 2026)")| Categoría de IMC | Casos (m) | Probabilidad P(E) |
|---|---|---|
| Bajo peso | 0 | 0.0000 |
| Normal | 21 | 0.5833 |
| Sobrepeso | 9 | 0.2500 |
| Obesidad I | 5 | 0.1389 |
| Obesidad II | 0 | 0.0000 |
| Obesidad III | 1 | 0.0278 |
Definamos el evento \(A = \{\text{Estudiante con IMC Normal}\}\).
## P(IMC Normal): 0.5833
## P(IMC No Normal / Alterado) = 1 - P(Normal): 0.4167
Interpretación: La probabilidad de seleccionar un estudiante con IMC normal es del \(58.33\%\). Por el complemento, la probabilidad de que tenga un IMC alterado (sobrepeso u obesidad) es del \(41.67\%\).
Evaluemos la probabilidad de seleccionar un estudiante que tenga Sobrepeso (\(E_1\)) o Obesidad I (\(E_2\)). Dado que las categorías de IMC son mutuamente excluyentes (\(E_1 \cap E_2 = \emptyset\)):
\[P(E_1 \cup E_2) = P(E_1) + P(E_2)\]
P_E1 <- prob_imc["Sobrepeso"]
P_E2 <- prob_imc["Obesidad I"]
P_E1_o_E2 <- P_E1 + P_E2
cat("P(Sobrepeso O Obesidad I) = P(Sobrepeso) + P(Obesidad I):", round(P_E1_o_E2, 4), "\n")## P(Sobrepeso O Obesidad I) = P(Sobrepeso) + P(Obesidad I): 0.3889
Evaluemos la probabilidad de seleccionar un estudiante que sea de Sexo Femenino (\(F\)) O tenga Exceso de Peso (\(EP = \text{Sobrepeso u Obesidad}\)).
Un estudiante puede ser mujer y tener exceso de peso simultáneamente (\(F \cap EP \neq \emptyset\)), por lo que debemos aplicar la Regla General:
\[P(F \cup EP) = P(F) + P(EP) - P(F \cap EP)\]
# Creación de indicador de Exceso de Peso
datos_analiticos <- datos_analiticos %>%
mutate(Exceso_Peso = ifelse(Categoria_IMC %in% c("Sobrepeso", "Obesidad I", "Obesidad II", "Obesidad III"), "Sí", "No"))
# Tabla cruzada
tabla_cruzada <- table(Sexo = datos_analiticos$Sexo, Exceso_Peso = datos_analiticos$Exceso_Peso)
tabla_prob <- prop.table(tabla_cruzada)
kable(tabla_cruzada, caption = "Tabla de Contingencia: Sexo vs. Exceso de Peso (Frecuencias Absolutas)")| No | Sí | |
|---|---|---|
| Femenino | 16 | 8 |
| Masculino | 5 | 7 |
P_F <- sum(tabla_prob["Femenino", ])
P_EP <- sum(tabla_prob[, "Sí"])
P_F_y_EP <- tabla_prob["Femenino", "Sí"]
P_F_union_EP <- P_F + P_EP - P_F_y_EP
cat("P(Femenino):", round(P_F, 4), "\n")## P(Femenino): 0.6667
## P(Exceso de Peso): 0.4167
## P(Femenino Y Exceso de Peso): 0.2222
## P(Femenino O Exceso de Peso) [Corregido]: 0.8611
¿Cuál es la probabilidad de que un estudiante tenga exceso de peso dado que es de sexo masculino?
\[P(EP \mid M) = \frac{P(EP \cap M)}{P(M)}\]
# Probabilidad condicional por filas
prob_cond_sexo <- prop.table(tabla_cruzada, margin = 1)
kable(round(prob_cond_sexo, 4), caption = "Probabilidades Condicionales P(Exceso de Peso | Sexo)")| No | Sí | |
|---|---|---|
| Femenino | 0.6667 | 0.3333 |
| Masculino | 0.4167 | 0.5833 |
P_EP_dado_M <- prob_cond_sexo["Masculino", "Sí"]
P_EP_dado_F <- prob_cond_sexo["Femenino", "Sí"]
cat("P(Exceso Peso | Masculino):", round(P_EP_dado_M, 4), "\n")## P(Exceso Peso | Masculino): 0.5833
## P(Exceso Peso | Femenino): 0.3333
Comprobamos si el Sexo y el Exceso de Peso son estadísticamente independientes comparando \(P(EP \cap M)\) con \(P(EP) \cdot P(M)\):
P_M <- sum(tabla_prob["Masculino", ])
P_EP_esperada_indep <- P_EP * P_M
P_EP_y_M_observada <- tabla_prob["Masculino", "Sí"]
cat("P(Exceso de Peso Y Masculino) Observada:", round(P_EP_y_M_observada, 4), "\n")## P(Exceso de Peso Y Masculino) Observada: 0.1944
cat("P(Exceso de Peso) * P(Masculino) Esperada si fuera independiente:", round(P_EP_esperada_indep, 4), "\n")## P(Exceso de Peso) * P(Masculino) Esperada si fuera independiente: 0.1389
son_independientes <- abs(P_EP_y_M_observada - P_EP_esperada_indep) < 0.001
cat("¿Son estrictamente independientes?:", son_independientes, "\n")## ¿Son estrictamente independientes?: FALSE
Todo análisis probabilístico debe verificar formalmente las tres restricciones axiomáticas:
# Verificación computacional
axioma_1 <- all(tabla_prob >= 0 & tabla_prob <= 1)
axioma_2 <- abs(sum(tabla_prob) - 1.0) < 1e-9
cat("¿Axioma 1 Cumplido (0 <= P <= 1)?:", axioma_1, "\n")## ¿Axioma 1 Cumplido (0 <= P <= 1)?: TRUE
## ¿Axioma 2 Cumplido (Suma Total = 1.0)?: TRUE
if(axioma_1 && axioma_2) {
cat("RESULTADO DE AUDITORÍA: El modelo probabilístico cumple formalmente con los Axiomas de Kolmogorov.\n")
} else {
warning("ALERTA: El modelo viola los principios axiomáticos.")
}## RESULTADO DE AUDITORÍA: El modelo probabilístico cumple formalmente con los Axiomas de Kolmogorov.
En esta actividad en subgrupos de trabajo, utilizarán la base de datos de su propio informe de investigación para demostrar si dos condiciones de salud o factores de riesgo son estadísticamente independientes o dependientes.
Sí / No), Sexo (Masculino /
Femenino), Consumo de Bebidas Energizantes (Sí
/ No).Sí / No), Prehipertensión (Sí /
No), Alteración del Sueño (Sí /
No).Adapten el siguiente bloque de código en RStudio sustituyendo los nombres de sus variables:
# ==============================================================================
# TALLER GRUPAL: DEMOSTRACIÓN DE INDEPENDENCIA EN TABLAS 2x2
# Subgrupo N°: ________
# Integrantes: _________________________________________________________________
# ==============================================================================
# 1. Definición de Variables Dicotómicas de Interés en el Dataset
# Ejemplo del Subgrupo 11: Actividad Física Baja (Sedentarismo) vs. Exceso de Peso
datos_taller <- datos_analiticos %>%
mutate(
Sedentario = ifelse(Actividad_Fisica == "Bajo", "Sí", "No"),
Exceso_Peso = ifelse(Categoria_IMC %in% c("Sobrepeso", "Obesidad I", "Obesidad II", "Obesidad III"), "Sí", "No")
)
# 2. Construcción de la Tabla de Contingencia 2x2 (Frecuencias Absolutas)
tabla_2x2 <- table(Sedentarismo = datos_taller$Sedentario, Exceso_Peso = datos_taller$Exceso_Peso)
cat("=== TABLA 2x2: FRECUENCIAS ABSOLUTAS ===\n")## === TABLA 2x2: FRECUENCIAS ABSOLUTAS ===
## Exceso_Peso
## Sedentarismo No Sí
## No 21 8
## Sí 0 7
# 3. Matriz de Probabilidades Conjuntas y Marginales (Frecuencias Relativas)
matriz_p <- prop.table(tabla_2x2)
cat("\n=== MATRIZ DE PROBABILIDADES CONJUNTAS Y MARGINALES ===\n")##
## === MATRIZ DE PROBABILIDADES CONJUNTAS Y MARGINALES ===
## Exceso_Peso
## Sedentarismo No Sí
## No 0.5833 0.2222
## Sí 0.0000 0.1944
# 4. Extracción de Probabilidades Marginales para la Prueba
P_Sedentario_SI <- sum(matriz_p["Sí", ])
P_ExcesoPeso_SI <- sum(matriz_p[, "Sí"])
# 5. Cálculo de la Probabilidad Conjunta Observada vs. Esperada si fueran Independientes
P_Conjunta_Observada <- matriz_p["Sí", "Sí"]
P_Conjunta_Esperada <- P_Sedentario_SI * P_ExcesoPeso_SI
cat("\n=== PRUEBA MATEMÁTICA DE INDEPENDENCIA (CRITERIO 1: MULTIPLICATIVO) ===\n")##
## === PRUEBA MATEMÁTICA DE INDEPENDENCIA (CRITERIO 1: MULTIPLICATIVO) ===
## P(Sedentario 'Sí') Marginal: 0.1944
## P(Exceso Peso 'Sí') Marginal: 0.4167
## P(Sedentario 'Sí' Y Exceso Peso 'Sí') OBSERVADA: 0.1944
cat("P(Sedentario 'Sí') * P(Exceso Peso 'Sí') ESPERADA BAJO INDEPENDENCIA:", round(P_Conjunta_Esperada, 4), "\n")## P(Sedentario 'Sí') * P(Exceso Peso 'Sí') ESPERADA BAJO INDEPENDENCIA: 0.081
# 6. Evaluación del Criterio Condicional: P(Exceso Peso | Sedentario) vs. P(Exceso Peso)
matriz_p_cond_filas <- prop.table(tabla_2x2, margin = 1)
P_ExcesoPeso_dado_Sedentario_SI <- matriz_p_cond_filas["Sí", "Sí"]
P_ExcesoPeso_dado_Sedentario_NO <- matriz_p_cond_filas["No", "Sí"]
cat("\n=== PRUEBA MATEMÁTICA DE INDEPENDENCIA (CRITERIO 2: CONDICIONAL) ===\n")##
## === PRUEBA MATEMÁTICA DE INDEPENDENCIA (CRITERIO 2: CONDICIONAL) ===
## P(Exceso Peso | Sedentario 'Sí'): 1
## P(Exceso Peso | Sedentario 'No'): 0.2759
## P(Exceso Peso) Marginal Total: 0.4167
# 7. Regla de Decisión Numérica
diferencia_absoluta <- abs(P_Conjunta_Observada - P_Conjunta_Esperada)
umbral_tolerancia <- 0.02 # Criterio de aproximación empírica para muestras pequeñas
cat("\n=== CONCLUSIÓN DEL MODELO PROBABILÍSTICO ===\n")##
## === CONCLUSIÓN DEL MODELO PROBABILÍSTICO ===
if (diferencia_absoluta < umbral_tolerancia) {
cat("RESULTADO: Las variables presentan INDEPENDENCIA ESTADÍSTICA (P_obs ≈ P_esp).\n")
cat("INTERPRETACIÓN MÉDICA: En esta muestra, la presencia de sedentarismo no altera la probabilidad de presentar exceso de peso.\n")
} else {
cat("RESULTADO: Las variables son DEPENDIENTES o ASOCIADAS (P_obs ≠ P_esp).\n")
cat("INTERPRETACIÓN MÉDICA: Existe una asociación probabilística entre el sedentarismo y el exceso de peso en el grupo analizado.\n")
}## RESULTADO: Las variables son DEPENDIENTES o ASOCIADAS (P_obs ≠ P_esp).
## INTERPRETACIÓN MÉDICA: Existe una asociación probabilística entre el sedentarismo y el exceso de peso en el grupo analizado.
Al finalizar el script en RStudio, cada subgrupo deberá responder las siguientes tres preguntas en la sección de discusión de su reporte: