Analyzing Dichotomous Data in R
Markdown--- name: analyzing-dichotomous-data-in-r description: Realiza análisis descriptivo e inferencial de datos dicotómicos (binarios) usando R, incluyendo pruebas de proporciones, chi-cuadrado, regresión logística y verificación de supuestos estadísticos. Usar cuando se necesite analizar variables categóricas de dos niveles (sí/no, presente/ausente, éxito/fracaso) en el contexto de un plan de tesis, validar hipótesis de investigación, o generar reportes estadísticos rigurosos con visualizaciones e interpretación en español. --- # Análisis de Datos Dicotómicos en R
Rlibrary(dplyr) library(ggplot2) library(stats) # 1. Cargar y explorar datos <- read.csv("datos.csv") str(datos) table(datos$variable_dicotomica) prop.table(table(datos$variable_dicotomica)) # 2. Descriptivo básico resumen <- datos %>% summarise( n = n(), positivos = sum(variable_dicotomica == 1, na.rm = TRUE), proporcion = mean(variable_dicotomica == 1, na.rm = TRUE), ic_inf = prop.test(sum(variable_dicotomica == 1), n())$conf.int[1], ic_sup = prop.test(sum(variable_dicotomica == 1), n())$conf.int[2] ) print(resumen) # 3. Inferencial: comparación de proporciones entre dos grupos tabla <- table(datos$grupo, datos$variable_dicotomica) prueba <- chisq.test(tabla, correct = TRUE) print(prueba) # 4. Visualización ggplot(datos, aes(x = factor(grupo), fill = factor(variable_dicotomica))) + geom_bar(position = "fill") + labs(x = "Grupo", y = "Proporción", fill = "Resultado", title = "Distribución de la variable dicotómica por grupo") + theme_minimal()
Progress:
- Paso 1: Comprender el objetivo del plan de tesis y las hipótesis a probar
- Paso 2: Explorar y limpiar los datos con
dplyr - Paso 3: Verificar tamaño de muestra y condiciones de aplicabilidad
- Paso 4: Análisis descriptivo (frecuencias, proporciones, IC)
- Paso 5: Seleccionar la prueba inferencial adecuada
- Paso 6: Ejecutar la prueba y verificar supuestos
- Paso 7: Visualizar resultados con
ggplot2 - Paso 8: Reportar hallazgos con interpretación y límites claros
Paso 1-2: Preparación de datos
- Verificar que la variable esté codificada como factor binario (0/1, "Sí"/"No")
- Revisar valores perdidos (
NA) y decidir tratamiento (exclusión, imputación) de forma justificada - Usar
dplyr::mutate(),filter(),group_by()para limpiar y segmentar
Paso 3: Verificación de condiciones antes de elegir prueba
| Condición | Cómo verificar | Regla práctica |
|---|---|---|
| Tamaño muestral | nrow(datos) por grupo/celda | Chi-cuadrado requiere celdas esperadas ≥5; si no, usar Fisher exacto |
| Independencia | Diseño del estudio | Datos pareados → McNemar; independientes → Chi-cuadrado/prop.test |
| Número de grupos | table(datos$grupo) | 2 grupos → prop.test/chi-cuadrado; >2 grupos → chi-cuadrado de independencia |
| Variables predictoras múltiples | Diseño de hipótesis | Regresión logística (glm(family = binomial)) |
Paso 5: Selección de prueba estadística (árbol de decisión)
- Una proporción vs. valor esperado →
prop.test()obinom.test() - Dos proporciones independientes →
prop.test()ochisq.test() - Muestras pareadas (mismo sujeto, pre/post) →
mcnemar.test() - Tabla de contingencia >2x2 →
chisq.test(); si celdas esperadas <5,fisher.test() - Efecto de múltiples predictores sobre variable dicotómica →
glm(y ~ x1 + x2, family = binomial) - Tamaño de muestra pequeño (<30 o celdas esperadas <5) → siempre preferir
fisher.test()
Paso 6: Verificación de supuestos y buenas prácticas
- Reportar tamaño de efecto (odds ratio, riesgo relativo, diferencia de proporciones), no solo el p-valor
- Calcular intervalos de confianza al 95% siempre
- Verificar independencia de observaciones (crítico: no usar chi-cuadrado con datos pareados)
- Controlar error tipo I: si hay comparaciones múltiples, aplicar corrección (Bonferroni, Holm)
- Para regresión logística: verificar multicolinealidad (
car::vif()) y bondad de ajuste (anova(modelo, test="Chisq"))
Paso 7: Visualización recomendada
- Gráfico de barras apiladas o
position="fill"para proporciones entre grupos - Gráfico de barras de error con IC 95% para proporciones puntuales
- Curva ROC (
pROC::roc()) si se evalúa capacidad predictiva de un modelo logístico
Ejemplo 1: Comparación de dos proporciones independientes
Input: Plan de tesis pregunta si la proporción de pacientes que desarrollan complicación (Sí/No) difiere entre grupo tratamiento y grupo control. n=150 en cada grupo.
Output:
Rtabla <- table(datos$grupo, datos$complicacion) resultado <- prop.test(tabla)
Reporte: "La proporción de complicaciones fue 12% en el grupo tratamiento vs 22% en el grupo control (diferencia = -10 puntos porcentuales, IC 95% [-19.2%, -0.8%], χ²=4.51, p=0.034). Existe evidencia estadística de una diferencia significativa entre grupos al nivel α=0.05. Se recomienda considerar el tamaño de efecto clínico además del estadístico."
Ejemplo 2: Datos pareados (antes/después)
Input: Se evaluó si un mismo grupo de 80 estudiantes aprobó (Sí/No) un examen antes y después de una intervención educativa.
Output:
Rtabla_pareada <- table(datos$antes, datos$despues) mcnemar.test(tabla_pareada, correct = TRUE)
Reporte: "Usando la prueba de McNemar (apropiada para datos pareados), se encontró un cambio significativo en la tasa de aprobación (χ²=8.1, p=0.004). El 25% de estudiantes que no aprobaron inicialmente sí aprobaron tras la intervención, mientras que ningún estudiante empeoró."
Ejemplo 3: Muestra pequeña con celdas esperadas <5
Input: Estudio piloto con n=18, tabla 2x2 con una celda esperada de 3.
Output:
Rfisher.test(tabla)
Reporte: "Dado el tamaño muestral reducido (celda esperada <5), se utilizó la prueba exacta de Fisher en lugar de chi-cuadrado. No se encontró asociación significativa (p=0.21, OR=2.3, IC95%[0.4, 12.8]). Se recomienda cautela al interpretar por el tamaño muestral limitado."
- Siempre reportar n, proporciones, IC 95%, estadístico de prueba, y p-valor — nunca solo el p-valor
- Justificar la elección de la prueba explícitamente en el reporte (por qué chi-cuadrado y no Fisher, por qué McNemar y no chi-cuadrado)
- Usar
set.seed()si se realizan simulaciones o remuestreos (bootstrap) - Verificar supuestos ANTES de correr la prueba, no después
- Al usar regresión logística, reportar odds ratios exponenciando coeficientes:
exp(coef(modelo)) - Documentar el código con comentarios que expliquen el "por qué", no solo el "qué"
- Usar
theme_minimal()o similar enggplot2para gráficos profesionales y legibles
- No usar chi-cuadrado cuando hay celdas con frecuencia esperada <5 (usar Fisher)
- No aplicar chi-cuadrado a datos pareados/repetidos (usar McNemar)
- No interpretar "no significativo" como "no hay efecto" — puede ser falta de poder estadístico
- No omitir el tamaño de muestra al reportar resultados
- No hacer múltiples comparaciones sin corregir el nivel de significancia
- No confundir significancia estadística con relevancia clínica/práctica — siempre discutir ambas
- No extrapolar resultados más allá de la población/muestra estudiada
- No presentar solo el p-valor sin intervalos de confianza ni tamaño de efecto