1 Introducción y Objetivos de Aprendizaje

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\)).

1.1 Objetivos

  1. Comprender la definición frecuentista de probabilidad y la Ley de los Grandes Números.
  2. Aplicar las reglas fundamentales de la probabilidad: regla del complemento, regla de la adición (especial y general) y regla de la multiplicación.
  3. Calcular e interpretar probabilidades marginales, conjuntas y condicionales en tablas de contingencia epidemiológicas utilizando R.
  4. Evaluar la independencia estadística entre factores de riesgo y características sociodemográficas en poblaciones universitarias.
  5. Ejecutar un taller práctico grupal en RStudio aplicando tablas \(2 \times 2\) para demostrar la independencia o dependencia de condiciones clínicas en sus propios datos.

2 Marco Teórico: Conceptos Clave de OpenStatistics (Capítulo 2)

2.1 Definición de Probabilidad y Ley de los Grandes Números

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\).

2.2 Regla del Complemento

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)\]

2.3 Reglas de la Adición

  1. 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)\]

  2. 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.

2.4 Probabilidad Condicional y Regla de la Multiplicación

  1. 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)}\]

  2. 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)\]

  3. 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)\]


3 Carga y Preparación del Espacio Muestral (\(\Omega\))

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.
head(datos_analiticos, 10)
##    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

4 Análisis Univariado y Regla del Complemento

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)")
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

4.0.1 Aplicación de la Regla del Complemento

Definamos el evento \(A = \{\text{Estudiante con IMC Normal}\}\).

P_A <- prob_imc["Normal"]
P_A_complemento <- 1 - P_A

cat("P(IMC Normal):", round(P_A, 4), "\n")
## P(IMC Normal): 0.5833
cat("P(IMC No Normal / Alterado) = 1 - P(Normal):", round(P_A_complemento, 4), "\n")
## 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\%\).


5 Regla de la Adición Especial vs. General

5.1 Regla de la Adición Especial (Eventos Disjuntos)

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

5.2 Regla de la Adición General (Eventos Solapados)

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)")
Tabla de Contingencia: Sexo vs. Exceso de Peso (Frecuencias Absolutas)
No
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
cat("P(Exceso de Peso):", round(P_EP, 4), "\n")
## P(Exceso de Peso): 0.4167
cat("P(Femenino Y Exceso de Peso):", round(P_F_y_EP, 4), "\n")
## P(Femenino Y Exceso de Peso): 0.2222
cat("P(Femenino O Exceso de Peso) [Corregido]:", round(P_F_union_EP, 4), "\n")
## P(Femenino O Exceso de Peso) [Corregido]: 0.8611

6 Probabilidad Condicional y Prueba de Independencia

6.1 Probabilidad Condicional

¿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)")
Probabilidades Condicionales P(Exceso de Peso | Sexo)
No
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
cat("P(Exceso Peso | Femenino):", round(P_EP_dado_F, 4), "\n")
## P(Exceso Peso | Femenino): 0.3333

6.2 Evaluación Formal de Independencia

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

7 Auditoría Bioestadística de Axiomas de Kolmogorov

Todo análisis probabilístico debe verificar formalmente las tres restricciones axiomáticas:

  1. Axioma 1 (No Negatividad): \(0 \le P(E) \le 1, \quad \forall E\).
  2. Axioma 2 (Certidumbre): \(P(\Omega) = 1.0\).
  3. Axioma 3 (Aditividad): Para eventos disjuntos, la suma de probabilidades es igual a la probabilidad de la unión.
# 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
cat("¿Axioma 2 Cumplido (Suma Total = 1.0)?:", axioma_2, "\n")
## ¿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.

8 Actividad Práctica Grupal: Taller de Independencia en RStudio (Tablas 2 × 2)

8.1 Indicaciones para los Subgrupos

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.

8.1.1 Pasos a Ejecutar:

  1. Seleccionar dos variables cualitativas dicotómicas (2 × 2):
    • Variable A (Factor o Exposición): Ej. Sedentarismo ( / No), Sexo (Masculino / Femenino), Consumo de Bebidas Energizantes ( / No).
    • Variable B (Resultado Clínico): Ej. Exceso de Peso ( / No), Prehipertensión ( / No), Alteración del Sueño ( / No).
  2. Construir la Tabla de Contingencia 2 × 2 en RStudio.
  3. Calcular la Probabilidad Conjunta Observada: \(P(A \cap B)_{\text{observada}}\).
  4. Calcular la Probabilidad Conjunta Esperada bajo Independencia: \(P(A) \cdot P(B)\).
  5. Evaluar el Criterio Condicional de Independencia: Comprobar si \(P(A \mid B) \approx P(A)\).
  6. Redactar la Conclusión Médica: Justificar si existe asociación/dependencia epidemiológica entre ambos factores.

8.2 Plantilla de Código R Executable para la Actividad

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 ===
print(tabla_2x2)
##             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 ===
print(round(matriz_p, 4))
##             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) ===
cat("P(Sedentario 'Sí') Marginal:", round(P_Sedentario_SI, 4), "\n")
## P(Sedentario 'Sí') Marginal: 0.1944
cat("P(Exceso Peso 'Sí') Marginal:", round(P_ExcesoPeso_SI, 4), "\n")
## P(Exceso Peso 'Sí') Marginal: 0.4167
cat("P(Sedentario 'Sí' Y Exceso Peso 'Sí') OBSERVADA:", round(P_Conjunta_Observada, 4), "\n")
## 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) ===
cat("P(Exceso Peso | Sedentario 'Sí'):", round(P_ExcesoPeso_dado_Sedentario_SI, 4), "\n")
## P(Exceso Peso | Sedentario 'Sí'): 1
cat("P(Exceso Peso | Sedentario 'No'):", round(P_ExcesoPeso_dado_Sedentario_NO, 4), "\n")
## P(Exceso Peso | Sedentario 'No'): 0.2759
cat("P(Exceso Peso) Marginal Total:", round(P_ExcesoPeso_SI, 4), "\n")
## 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.

8.3 Guía de Discusión y Preguntas Reflexivas para el Reporte

Al finalizar el script en RStudio, cada subgrupo deberá responder las siguientes tres preguntas en la sección de discusión de su reporte:

  1. Evaluación de la Diferencia (\(\Delta\)): ¿De cuánto fue la diferencia absoluta entre la probabilidad conjunta observada \(P(A \cap B)_{\text{observada}}\) y la esperada bajo independencia \(P(A) \cdot P(B)\)?
  2. Impacto de la Condición: Comparando \(P(B \mid A = \text{"Sí"})\) frente a \(P(B \mid A = \text{"No"})\) y la marginal \(P(B)\), ¿aumenta o disminuye la probabilidad de la condición de salud cuando está presente el factor de exposición?
  3. Relevancia Clínica: ¿Qué recomendaciones de prevención primaria se derivan si las dos variables demuestran dependencia epidemiológica en la población universitaria?

9 Resumen de Resultados y Conclusiones Médicas

  1. Prevalencia de Exceso de Peso: El \(41.67\%\) de los estudiantes del espacio muestral presenta exceso de peso (sobrepeso u obesidad I/III).
  2. Efecto de Género: El \(58.33\%\) de los hombres presentó exceso de peso en comparación con el \(33.33\%\) de las mujeres en esta muestra.
  3. Dependencia Fisiopatológica: La prueba probabilística en tablas de contingencia demuestra que los factores de riesgo conductuales y las características sociodemográficas presentan grados de dependencia en este grupo universitario, sugiriendo la necesidad de estrategias de salud preventiva con enfoque diferenciado.