1. Introducción y Objetivos de Aprendizaje

En la práctica médica y epidemiológica, las decisiones clínicas rara vez se toman bajo certeza absoluta. Un resultado de laboratorio, un signo físico o un síntoma comunicado por el paciente no proporcionan un diagnóstico definitivo por sí solos, sino que actualizan la probabilidad de que el paciente padezca una determinada condición.

Este tutorial tiene como propósito guiar al estudiante de medicina en el uso de RStudio para comprender y aplicar la Probabilidad Condicional y el Teorema de Bayes en la toma de decisiones clínicas.

Objetivos Cognoscitivos e Instruccionales:

  1. Comprender la contracción del espacio muestral al evaluar probabilidades condicionales \(P(A \mid B)\).
  2. Analizar el ejemplo histórico del tamizaje de VIH mediante la prueba ELISA en reclutas militares de EE.UU. para entender la paradoja del Valor Predictivo Positivo (VPP) en poblaciones de baja prevalencia.
  3. Aplicar la regla de Bayes a datos piloto reales recolectados por los propios subgrupos de investigación de la UJMD (\(N\) pequeño).
  4. Desarrollar un script autónomo en R para calcular métricas de validez (\(S\), \(E\)) y seguridad (\(VPP\), \(VPN\)) seleccionando dos variables de su propio proyecto de investigación.

2. Fundamentos de Probabilidad Condicional y Notación Matemática

La probabilidad condicional mide la frecuencia relativa con la que ocurre un evento \(A\), sabiendo de antemano que ha ocurrido el evento \(B\) (donde \(P(B) > 0\)).

\[\mathbf{P(A \mid B) = \frac{P(A \cap B)}{P(B)}}\]

El Concepto Clave: Reducción del Espacio Muestral

Al evaluar \(P(A \mid B)\), el universo original de observación (\(\Omega\)) se contrae exclusivamente al subgrupo de individuos que cumplen la condición \(B\). El denominador ya no es el total poblacional \(N\), sino el número de personas que presentan la característica \(B\).


3. El Ejemplo Histórico: Tamizaje de VIH con Prueba ELISA en Reclutas Militares (EE.UU.)

Durante la década de 1980, en los inicios de la epidemia del VIH, las Fuerzas Armadas de los Estados Unidos implementaron el tamizaje masivo en personal reclutado utilizando la prueba inmunoabsorbente ligada a enzimas (ELISA).

Parámetros Epidemiológicos de la Prueba en la Época:

  • Sensibilidad (\(S\)): \(P(ELISA+ \mid VIH+) = 0.93\) (\(93\%\)).
  • Especificidad (\(E\)): \(P(ELISA- \mid VIH-) = 0.99\) (\(99\%\)).
  • Prevalencia a priori (\(P(VIH+)\)): En la población general de reclutas militares, la prevalencia era muy baja, aproximadamente \(1.48\) por cada 1,000 individuos (\(P = 0.00148\) o \(0.148\%\)).

Demostración con Simulación de Frecuencias Naturales en R (\(N = 100,000\))

Simulemos lo que ocurre al aplicar este test a una cohorte de \(100,000\) reclutas militares:

# Parámetros de entrada
N <- 100000
prev <- 0.00148
sens <- 0.93
espec <- 0.99

# 1. Total de enfermos y sanos en la cohorte
enfermos <- round(N * prev)       # VIH+
sanos <- N - enfermos             # VIH-

# 2. Celdas de la Matriz 2x2
VP <- round(enfermos * sens)      # Verdaderos Positivos
FN <- enfermos - VP               # Falsos Negativos
VN <- round(sanos * espec)        # Verdaderos Negativos
FP <- sanos - VN                  # Falsos Positivos

# 3. Construcción de la Tabla de Contingencia en R
matriz_vih <- matrix(
  c(VP, FP, VP + FP,
    FN, VN, FN + VN,
    enfermos, sanos, N),
  nrow = 3, byrow = TRUE,
  dimnames = list(
    "Resultado ELISA" = c("ELISA Positivo (+)", "ELISA Negativo (-)", "Total Marginal"),
    "Estado Real VIH" = c("Infectado (VIH+)", "Sano (VIH-)", "Total Poblacional")
  )
)

kable(matriz_vih, caption = "Tabla 2x2: Tamizaje de VIH en 100,000 Reclutas Militares")
Tabla 2x2: Tamizaje de VIH en 100,000 Reclutas Militares
Infectado (VIH+) Sano (VIH-) Total Poblacional
ELISA Positivo (+) 138 999 1137
ELISA Negativo (-) 10 98853 98863
Total Marginal 148 99852 100000

Aplicación del Teorema de Bayes

Si un recluta obtiene un resultado ELISA Positivo (+), ¿cuál es la probabilidad real de que esté verdaderamente infectado por VIH (\(P(VIH+ \mid ELISA+)\))?

\[\mathbf{P(VIH+ \mid +) = \frac{P(+ \mid VIH+) \cdot P(VIH+)}{P(+ \mid VIH+) \cdot P(VIH+) + P(+ \mid VIH-) \cdot P(VIH-)}}\]

Calculémoslo directamente en R:

# Cálculo por fórmula Bayesiana
numerador <- sens * prev
denominador <- (sens * prev) + ((1 - espec) * (1 - prev))
vpp_vih <- (numerador / denominador) * 100

cat("Resultado del VPP mediante Bayes:\n")
## Resultado del VPP mediante Bayes:
cat("Probabilidad real de estar infectado tras un primer ELISA (+):", round(vpp_vih, 2), "%\n")
## Probabilidad real de estar infectado tras un primer ELISA (+): 12.11 %

💡 Análisis del Resultado e Impacto Clínico

A pesar de que la prueba posee una sensibilidad del \(93\%\) y una especificidad del \(99\%\), un recluta con ELISA positivo solo tiene un \(12.1\%\) de probabilidad real de tener VIH.

  • ¿Por qué ocurre esta paradoja? Porque en los \(99,852\) reclutas sanos, el \(1\%\) de error de especificidad genera \(999\) Falsos Positivos, mientras que en los \(148\) enfermos reales solo se generan \(138\) Verdaderos Positivos.
  • Solución Clínica (Actualización Secuencial): Por esta razón, un primer ELISA positivo nunca se notificaba como diagnóstico definitivo; se requería una prueba confirmatoria más específica ( Western Blot) antes de emitir un dictamen.

4. Aplicación Práctica con Datos Piloto de Estudiantes UJMD

Ahora aplicaremos el Teorema de Bayes a un escenario clínico real utilizando los datos recolectados por estudiantes de la UJMD en sus pruebas piloto (\(N\) pequeño).

Ejemplo: Actividad Física y Prehipertensión Arterial (Informe_g3.pdf)

En el estudio del Subgrupo 3 sobre prehipertensión en estudiantes de Medicina (\(N = 36\)), evaluamos el nivel de actividad física inactiva/moderada como un marcador o factor de riesgo para la presencia de prehipertensión arterial.

Datos Empíricos Extraídos del Estudio Piloto:

  • Total de participantes analizados: \(N = 36\).
  • Estudiantes con Prehipertensión (\(PreHTN+\)): \(27\) (\(P(PreHTN+) = 27/36 = 0.75\) o \(75\%\)).
  • Estudiantes Normotensos (\(PreHTN-\)): \(9\) (\(P(PreHTN-) = 9/36 = 0.25\) o \(25\%\)).
  • Entre los \(27\) prehipertenso: \(15\) tenían actividad física Baja/Moderada (\(VP = 15, FN = 12\)).
  • Entre los \(9\) normotensos: \(4\) tenían actividad física Baja/Moderada (\(FP = 4, VN = 5\)).

Código en R para el Análisis Bayesiano de Datos Piloto:

# 1. Definición de la matriz de contingencia piloto
datos_piloto <- matrix(
  c(15, 4,
    12, 5),
  nrow = 2, byrow = TRUE,
  dimnames = list(
    "Marcador (Actividad Física)" = c("Baja/Moderada (+)", "Alta (-)"),
    "Estado Clínico" = c("Prehipertenso (+)", "Normotenso (-)")
  )
)

print(datos_piloto)
##                            Estado Clínico
## Marcador (Actividad Física) Prehipertenso (+) Normotenso (-)
##           Baja/Moderada (+)                15              4
##           Alta (-)                         12              5
# 2. Extracción de métricas de la prueba piloto
VP <- datos_piloto[1, 1]
FP <- datos_piloto[1, 2]
FN <- datos_piloto[2, 1]
VN <- datos_piloto[2, 2]

sens_piloto <- VP / (VP + FN)   # Sensibilidad = 15/27
espec_piloto <- VN / (VN + FP)  # Especificidad = 5/9
prev_piloto <- (VP + FN) / sum(datos_piloto) # Prevalencia = 27/36

# 3. Aplicación de la Ecuación de Bayes
vpp_piloto <- (sens_piloto * prev_piloto) / 
  ((sens_piloto * prev_piloto) + ((1 - espec_piloto) * (1 - prev_piloto)))

vpn_piloto <- (espec_piloto * (1 - prev_piloto)) / 
  ((espec_piloto * (1 - prev_piloto)) + ((1 - sens_piloto) * prev_piloto))

# 4. Impresión de Resultados
cat("--- RESULTADOS DEL ANÁLISIS BAYESIANO CON DATOS PILOTO ---\n")
## --- RESULTADOS DEL ANÁLISIS BAYESIANO CON DATOS PILOTO ---
cat("Prevalencia basal de Prehipertensión:", round(prev_piloto * 100, 1), "%\n")
## Prevalencia basal de Prehipertensión: 75 %
cat("Sensibilidad del marcador (Inactividad):", round(sens_piloto * 100, 1), "%\n")
## Sensibilidad del marcador (Inactividad): 55.6 %
cat("Especificidad del marcador:", round(espec_piloto * 100, 1), "%\n")
## Especificidad del marcador: 55.6 %
cat("Valor Predictivo Positivo (VPP por Bayes):", round(vpp_piloto * 100, 1), "%\n")
## Valor Predictivo Positivo (VPP por Bayes): 78.9 %
cat("Valor Predictivo Negativo (VPN por Bayes):", round(vpn_piloto * 100, 1), "%\n")
## Valor Predictivo Negativo (VPN por Bayes): 29.4 %

Conclusión para los Estudiantes:

Aunque el tamaño muestral de la prueba piloto es pequeño (\(N = 36\)), la lógica condicional y la estructura matemática del Teorema de Bayes funcionan de manera idéntica. Saber que un estudiante es inactivo físicamente actualiza la probabilidad de prehipertensión del \(75.0\%\) (prevalencia a priori) al \(78.9\%\) (probabilidad a posteriori).


5. Guía de Trabajo Autónomo — Desafío Estudiantil en R

Cada subgrupo de investigación deberá elaborar un script en RStudio aplicando la metodología Bayesiana a su propia base de datos piloto.

📋 Consigna de la Actividad:

  1. Cargar la base de datos de su prueba piloto en R (formato .csv o .xlsx).
  2. Seleccionar 2 variables categóricas de su estudio:
    • Variable Estado (\(D\)): La condición clínica o variable dependiente de interés (ej. Exceso de peso, Nivel de estrés alto, Prehipertensión).
    • Variable Marcador (\(T\)): El factor de riesgo, hábito o síntoma evaluado (ej. Consumo de comida rápida, Sedentarismo, Sexo masculino, Insomnio).
  3. Construir la tabla de contingencia \(2 \times 2\) utilizando la función table() en R.
  4. Calcular programáticamente:
    • Prevalencia a priori \(P(D+)\).
    • Sensibilidad \(P(T+ \mid D+)\) y Especificidad \(P(T- \mid D-)\).
    • Valor Predictivo Positivo (\(VPP\)) utilizando la Ecuación de Bayes.
    • Valor Predictivo Negativo (\(VPN\)) utilizando la Ecuación de Bayes.
  5. Redactar un breve párrafo de interpretación clínica respondiendo: ¿Cómo actualiza la presencia del marcador la probabilidad inicial del estudiante de presentar la condición clínica?

💻 Plantilla de Código R para los Estudiantes:

# ==============================================================================
# PLANTILLA DE TRABAJO AUTÓNOMO: ANÁLISIS BAYESIANO DE DATOS PILOTO
# Subgrupo N°: _____ | Integrantes: ____________________________________
# ==============================================================================

# 1. Cargar datos (Reemplazar con el nombre de su archivo)
# mis_datos <- read.csv("mi_base_piloto.csv")

# 2. Crear la tabla 2x2 con sus dos variables elegidas
# mi_tabla <- table(mis_datos$variable_marcador, mis_datos$variable_estado)
# print(mi_tabla)

# 3. Asignar celdas (Adaptar según el orden de sus categorías)
# VP <- mi_tabla[2, 2]
# FP <- mi_tabla[2, 1]
# FN <- mi_tabla[1, 2]
# VN <- mi_tabla[1, 1]

# 4. Calcular Bayes
# prev <- (VP + FN) / (VP + FP + FN + VN)
# sens <- VP / (VP + FN)
# espec <- VN / (VN + FP)

# vpp_bayes <- (sens * prev) / ((sens * prev) + ((1 - espec) * (1 - prev)))

# cat("La probabilidad a posteriori (VPP) es de:", round(vpp_bayes * 100, 2), "%\n")

Cátedra de Bioestadística — Escuela de Medicina, UJMD 2026