Una guía práctica con ejemplos en R para el análisis de asociación entre variables categóricas
Los métodos no paramétricos son herramientas estadísticas fundamentales para analizar la asociación entre variables categóricas mediante tablas de contingencia. Estos métodos no requieren supuestos sobre la distribución de los datos, lo que los hace especialmente útiles en el análisis de datos categóricos.
El test exacto de Fisher representa una de las contribuciones más elegantes y fundamentales a la estadística no paramétrica. Desarrollado por Ronald A. Fisher en la década de 1930, este test resuelve un problema estadístico específico pero crucial: cómo evaluar la asociación entre dos variables categóricas cuando los tamaños de muestra son pequeños o cuando se requiere precisión exacta sin depender de aproximaciones asintóticas.
La denominación “exacto” distingue fundamentalmente este test de los métodos que dependen de aproximaciones a distribuciones límite. Mientras que tests como el chi-cuadrado de Pearson asumen que la estadística de prueba se distribuye aproximadamente como chi-cuadrado para muestras grandes, el test de Fisher calcula probabilidades exactas para cualquier tamaño de muestra.
Esta precisión exacta se logra mediante un enfoque combinatorio que enumera todos los posibles resultados que podrían observarse bajo la hipótesis nula, asignando a cada uno su probabilidad exacta según la distribución hipergeométrica.
El test de Fisher se fundamenta en un escenario experimental específico: cuando los totales marginales de una tabla 2×2 están predeterminados por el diseño del estudio. Esta condición no es una limitación artificial, sino que refleja muchas situaciones experimentales reales donde:
Matemáticamente, si tenemos una tabla 2×2:
| Grupo 1 | Grupo 2 | Total | |
|---|---|---|---|
| Éxito | a | b | a + b |
| Fracaso | c | d | c + d |
| Total | a + c | b + d | N |
Y los marginales están fijos, entonces la probabilidad de observar exactamente \(a\) éxitos en el grupo 1 está dada por:
\[P(X = a) = \frac{\binom{a+b}{a} \binom{c+d}{c}}{\binom{N}{a+c}}\]
Esta fórmula encapsula la esencia del razonamiento hipergeométrico: de todas las maneras posibles de distribuir los éxitos entre los grupos, manteniendo fijos los totales marginales, ¿cuál es la probabilidad de la configuración específica observada?
El test de Fisher puede interpretarse desde dos perspectivas estadísticas relacionadas pero conceptualmente distintas:
Estas interpretaciones convergen matemáticamente pero reflejan diferentes contextos experimentales y preguntas de investigación.
Para ilustrar los principios del test de Fisher, analizaremos un experimento ecológico clásico que examina la capacidad diferencial de resistencia a corrientes acuáticas entre dos especies de caracol. Este ejemplo es particularmente instructivo porque representa un diseño experimental con marginales naturalmente fijos.
El estudio se origina en preguntas fundamentales de ecología evolutiva: ¿Cómo han evolucionado diferentes especies para adaptarse a presiones ambientales específicas? En ecosistemas acuáticos, la capacidad de resistir corrientes fuertes es un rasgo adaptativo crucial que puede determinar el éxito reproductivo y la supervivencia.
Protocolo experimental:
Esta última condición es crucial: crea un diseño con ambos marginales fijos. El número de caracoles por especie está fijado por el investigador, y el número total de arrastrados está fijado por el protocolo experimental.
# Configuración de datos del experimento
caracoles <- matrix(c(12, 7, 2, 9), nrow = 2, byrow = TRUE)
rownames(caracoles) <- c("Especie 1", "Especie 2")
colnames(caracoles) <- c("Resisten", "Ceden")
print("Tabla de Contingencia: Resistencia por Especie")## [1] "Tabla de Contingencia: Resistencia por Especie"
## Resisten Ceden
## Especie 1 12 7
## Especie 2 2 9
Los datos revelan un patrón aparentemente claro: la Especie 1 muestra una tasa de resistencia del 63.2% (12/19), mientras que la Especie 2 presenta solo un 18.2% (2/11) de resistencia.
Sin embargo, la pregunta estadística fundamental permanece: ¿Podría esta diferencia observada ser resultado del azar, o proporciona evidencia convincente de una diferencia real en capacidades adaptativas entre especies?
El poder del test de Fisher radica en su capacidad para enumerar exactamente todos los resultados posibles bajo la hipótesis nula. Dado que los marginales están fijos, el valor de una sola celda (convencionalmente \(a\)) determina completamente toda la tabla.
Para nuestros datos, con marginales fijos en 19, 11, 14, y 16, el valor de \(a\) (número de Especie 1 que resisten) puede variar desde un mínimo de 3 hasta un máximo de 14.
# Definir función para probabilidad exacta
fisher_probability <- function(a, fila1_total, col1_total, total_general) {
b <- fila1_total - a
c <- col1_total - a
d <- total_general - a - b - c
choose(fila1_total, a) * choose(total_general - fila1_total, c) / choose(total_general, col1_total)
}
# Calcular rango posible y probabilidades
min_a <- max(0, esp1_total + total_resisten - total_caracoles)
max_a <- min(esp1_total, total_resisten)
valores_posibles <- min_a:max_a
# Calcular probabilidades para todos los valores posibles
probabilidades <- sapply(valores_posibles, function(x) {
fisher_probability(x, esp1_total, total_resisten, total_caracoles)
})
# Valor observado y su probabilidad
a_observado <- caracoles[1,1]
prob_observada <- fisher_probability(a_observado, esp1_total, total_resisten, total_caracoles)
# Ejecutar test automático para comparación
fisher_result <- fisher.test(caracoles)Bajo la hipótesis nula de no diferencia entre especies, cada configuración posible de la tabla tiene una probabilidad específica calculable. La distribución resultante es altamente asimétrica, reflejando las restricciones combinatorias del problema.
Valor observado: \(a = 12\) con probabilidad \(P(X = 12) = 0.019057\)
Valores más extremos: Para calcular el valor p de dos colas, necesitamos identificar todos los valores de \(a\) cuyas probabilidades son menores o iguales a la probabilidad observada.
# Identificar valores extremos para test de dos colas
valores_extremos <- valores_posibles[probabilidades <= prob_observada]
p_value_exacto <- sum(probabilidades[probabilidades <= prob_observada])
print(paste("Probabilidad del valor observado:", sprintf("%.6f", prob_observada)))## [1] "Probabilidad del valor observado: 0.019057"
## [1] "Valor p exacto (dos colas): 0.025887"
## [1] "Valor p de R: 0.025887"
Con un valor p de 0.0259, que es menor que el nivel de significancia convencional de 0.05, rechazamos la hipótesis nula. Esto significa que la diferencia observada en capacidades de resistencia entre especies es estadísticamente significativa al nivel del 5%.
El odds ratio proporciona una medida interpretable de la fortaleza de la asociación:
\[OR = \frac{a \times d}{b \times c} = \frac{12 \times 9}{7 \times 2} = 7.17\]
Interpretación: Las probabilidades de resistir para la Especie 1 son aproximadamente 7.2 veces las probabilidades de resistir para la Especie 2.
Intervalo de confianza: [1.05, 87.14] - Como no incluye 1, confirma la significancia estadística.
Los resultados sugieren una diferencia evolutiva real en adaptaciones para resistir corrientes acuáticas. Esto podría reflejar:
# Crear visualización comprehensiva
library(ggplot2)
library(dplyr)
# Preparar datos para gráficos
datos_especies <- as.data.frame(as.table(caracoles))
names(datos_especies) <- c("Especie", "Respuesta", "Frecuencia")
# Calcular proporciones
datos_prop <- datos_especies %>%
group_by(Especie) %>%
mutate(Proporcion = Frecuencia / sum(Frecuencia),
Total = sum(Frecuencia))
# Gráfico de proporciones con intervalos de confianza
p1 <- ggplot(datos_prop %>% filter(Respuesta == "Resisten"),
aes(x = Especie, y = Proporcion)) +
geom_bar(stat = "identity", fill = "#3460A1", alpha = 0.8, width = 0.6) +
geom_text(aes(label = paste0(round(Proporcion*100, 1), "%\n(", Frecuencia, "/", Total, ")")),
vjust = -0.5, size = 4, fontface = "bold") +
labs(title = "Proporción de Resistencia por Especie",
subtitle = paste("Test exacto de Fisher: p =", sprintf("%.4f", fisher_result$p.value)),
x = "Especie de Caracol",
y = "Proporción que Resiste") +
ylim(0, 1) +
theme_minimal() +
theme(plot.title = element_text(hjust = 0.5, size = 14, face = "bold"),
plot.subtitle = element_text(hjust = 0.5, size = 12))
print(p1)# Gráfico de la distribución hipergeométrica
dist_df <- data.frame(
a = valores_posibles,
probabilidad = probabilidades,
tipo = ifelse(valores_posibles == a_observado, "Observado",
ifelse(probabilidades <= prob_observada, "Extremo", "Regular"))
)
p2 <- ggplot(dist_df, aes(x = a, y = probabilidad, fill = tipo)) +
geom_bar(stat = "identity", alpha = 0.8) +
scale_fill_manual(values = c("Extremo" = "#FF6B35", "Observado" = "#FF3B30", "Regular" = "#3460A1")) +
labs(title = "Distribución Hipergeométrica bajo H₀",
x = "Número de Especie 1 que Resisten (a)",
y = "Probabilidad",
fill = "Tipo") +
theme_minimal()
print(p2)La visualización revela aspectos cruciales que complementan el análisis estadístico:
Magnitud del efecto: La diferencia en proporciones (45 puntos porcentuales) es sustancial y biológicamente significativa
Distribución null: El valor observado está claramente en la cola de la distribución esperada bajo independencia
Robustez: El resultado se mantendría significativo incluso con pequeñas variaciones en los datos observados
Para estos datos, un test chi-cuadrado de Pearson produciría resultados similares, pero con diferencias importantes:
El test de Fisher, al ser exacto, puede ser más conservador que las aproximaciones asintóticas, especialmente con muestras pequeñas. Sin embargo, esta conservadurismo es el precio de la precisión exacta y el control estricto del error tipo I.
La validez del test de Fisher depende crucialmente del supuesto de que los marginales están fijos por el diseño experimental. En nuestro ejemplo, esto se satisface claramente, pero en otros contextos puede ser cuestionable:
La respuesta afecta tanto la validez como la interpretación del test.
Como con todos los tests de asociación, el test de Fisher establece asociación estadística, no causalidad. En el contexto biológico, la diferencia observada podría reflejar:
Los resultados se limitan estrictamente a: - Las especies específicas estudiadas - Las condiciones experimentales particulares - El rango de corrientes testado
La extrapolación a otras especies, condiciones ambientales, o contextos ecológicos requiere estudios adicionales.
Aunque desarrollado para tablas 2×2, el principio del test de Fisher se extiende a tablas de dimensiones mayores, aunque la complejidad computacional crece exponencialmente. Para tablas 2×k, el test sigue siendo computacionalmente factible y se implementa en software estadístico moderno.
El test de Fisher forma parte de una familia más amplia de métodos estadísticos exactos que han experimentado un renacimiento en la era de la computación intensiva. Estos métodos proporcionan alternativas exactas a aproximaciones asintóticas cuando la precisión es crucial.
Con el poder computacional actual, las limitaciones históricas del test de Fisher (cálculo intensivo) han desaparecido en gran medida. Esto ha llevado a un uso más amplio en situaciones donde la precisión exacta es valorada sobre la conveniencia computacional.
El test exacto de Fisher representa una elegante solución a un problema estadístico fundamental, proporcionando una base sólida para la inferencia en situaciones donde otros métodos pueden ser inadecuados. Su precisión exacta y fundamento teórico riguroso lo mantienen como una herramienta esencial en el arsenal estadístico, especialmente valioso cuando las decisiones tienen consecuencias importantes y se requiere el más alto nivel de rigor estadístico.
El test de McNemar es un test no paramétrico específicamente diseñado para analizar la asociación en tablas 2×2 cuando los datos son pareados. A diferencia del test de Fisher que asume independencia entre observaciones, el test de McNemar reconoce y maneja la dependencia inherente que existe cuando las mismas unidades experimentales son observadas bajo dos condiciones diferentes o en dos momentos distintos.
El test de McNemar se aplica cuando tenemos mediciones repetidas en los mismos sujetos, creando una estructura de dependencia que otros tests no pueden manejar apropiadamente. La tabla resultante tiene la forma:
| Después + | Después - | Total | |
|---|---|---|---|
| Antes + | a | b | a + b |
| Antes - | c | d | c + d |
| Total | a + c | b + d | N |
Donde:
El test de McNemar evalúa la homogeneidad marginal, específicamente:
Matemáticamente, esto equivale a probar si \(p_b = p_c\), donde \(p_b\) es la probabilidad de cambiar de positivo a negativo y \(p_c\) es la probabilidad de cambiar de negativo a positivo.
La estadística de McNemar se enfoca únicamente en los casos discordantes (b y c), ya que solo estos proporcionan información sobre el cambio:
\[\chi^2 = \frac{(b-c)^2}{b+c} \sim \chi^2_1\]
Esta estadística sigue una distribución chi-cuadrado con 1 grado de libertad bajo la hipótesis nula. Para muestras pequeñas (cuando \(b + c < 20\)), se recomienda usar la corrección por continuidad de Yates:
\[\chi^2_{corregida} = \frac{(|b-c|-1)^2}{b+c}\]
Los ensayos de aptitud son evaluaciones externas fundamentales para el control de calidad en laboratorios clínicos. En estos programas, los laboratorios analizan muestras idénticas y sus resultados son evaluados mediante diferentes criterios para determinar si el desempeño es satisfactorio o no satisfactorio.
En este ejemplo específico, analizamos datos de un ensayo de aptitud para la determinación de ácido úrico, donde cada laboratorio participante es evaluado simultáneamente por dos métodos:
La pregunta de investigación es: ¿Producen estos dos métodos de evaluación la misma proporción de laboratorios clasificados como satisfactorios?
# Datos del ejemplo de ensayos de aptitud (Ácido Úrico)
aptitud <- matrix(c(918, 253, 319, 11033), nrow = 2, byrow = TRUE)
rownames(aptitud) <- c("Consenso Satisf", "Consenso No Satisf")
colnames(aptitud) <- c("VR Satisf", "VR No Satisf")
print("Comparacion: Consenso vs Valores de Referencia (Acido Urico)")## [1] "Comparacion: Consenso vs Valores de Referencia (Acido Urico)"
## VR Satisf VR No Satisf
## Consenso Satisf 918 253
## Consenso No Satisf 319 11033
Los datos revelan varios aspectos importantes:
Esta asimetría en los casos discordantes sugiere que uno de los métodos puede ser sistemáticamente más estricto que el otro.
Antes de aplicar el test, debemos verificar sus supuestos principales:
El cálculo manual de la estadística de McNemar produce \(\chi^2 = 7.62\), que coincide exactamente con el resultado automático de R. Con un valor p de 6.572022e-03, rechazamos fuertemente la hipótesis nula.
El resultado altamente significativo (\(p < 2.2 \times 10^{-16}\)) indica que existe una diferencia sistemática entre los dos métodos de evaluación. Específicamente:
Cuando el test de McNemar se aplica en el contexto de evaluación de métodos diagnósticos, podemos calcular métricas adicionales que proporcionan información sobre la concordancia y el rendimiento relativo de los métodos.
# Calcular métricas diagnósticas usando VR como referencia
VP <- aptitud[1,1] # Verdaderos Positivos
FP <- aptitud[1,2] # Falsos Positivos
FN <- aptitud[2,1] # Falsos Negativos
VN <- aptitud[2,2] # Verdaderos Negativos
sensibilidad <- VP / (VP + FN)
especificidad <- VN / (VN + FP)
vpp <- VP / (VP + FP)
vpn <- VN / (FN + VN)Las métricas calculadas revelan el comportamiento del método de consenso comparado con el valor de referencia:
Los resultados sugieren que el método de consenso tiende a ser más permisivo que el valor de referencia, clasificando como satisfactorios a más laboratorios. Esto tiene implicaciones importantes para:
Es crucial entender por qué el test de McNemar es apropiado para estos datos en lugar del test de Fisher:
El test chi-cuadrado de Pearson también sería inapropiado porque:
En el contexto de ensayos de aptitud, la significancia estadística debe balancearse con la relevancia práctica:
Para tablas de contingencia k×k con datos pareados, se puede usar la generalización:
\[\chi^2 = \sum_{i \neq j} \frac{(n_{ij} - n_{ji})^2}{n_{ij} + n_{ji}}\]
Para muestras pequeñas donde \(b + c < 20\), se pueden usar tests exactos basados en la distribución binomial, evaluando directamente \(P(X \geq \text{mín}(b,c))\) donde \(X \sim \text{Binomial}(b+c, 0.5)\).
El test de McNemar representa una herramienta fundamental para el análisis de datos pareados en tablas de contingencia, proporcionando una base rigurosa para evaluar cambios sistemáticos en proporciones cuando las observaciones no son independientes.
El test de independencia chi-cuadrado es la extensión natural de los tests para tablas 2×2 hacia el análisis de asociación en tablas de contingencia de dimensiones arbitrarias r×c. Este test se fundamenta en la comparación entre las frecuencias observadas y las frecuencias que esperaríamos encontrar si las variables fueran completamente independientes, proporcionando una medida objetiva de la fuerza de asociación entre variables categóricas.
Dos variables categóricas A y B son estadísticamente independientes si la probabilidad conjunta de cualquier combinación de sus categorías es igual al producto de las probabilidades marginales:
\[P(A_i \cap B_j) = P(A_i) \times P(B_j)\]
Esta condición matemática tiene una interpretación práctica importante: si las variables son independientes, conocer el valor de una variable no proporciona información alguna sobre el valor probable de la otra variable.
La lógica del test se basa en comparar lo que observamos versus lo que esperaríamos bajo independencia. Para una tabla r×c, si las variables fueran independientes, la frecuencia esperada en cada celda (i,j) sería:
\[E_{ij} = \frac{R_i \times C_j}{N}\]
donde \(R_i\) es el total marginal de la fila i, \(C_j\) es el total marginal de la columna j, y N es el total general.
La estadística de prueba mide qué tan lejos están las frecuencias observadas de las esperadas:
\[\chi^2 = \sum_{i=1}^{r} \sum_{j=1}^{c} \frac{(O_{ij} - E_{ij})^2}{E_{ij}}\]
Bajo la hipótesis nula de independencia, esta estadística sigue aproximadamente una distribución chi-cuadrado con \((r-1)(c-1)\) grados de libertad.
Los grados de libertad \((r-1)(c-1)\) reflejan el número de celdas de la tabla que pueden variar libremente una vez que se fijan los totales marginales. Esta restricción es crucial para entender por qué no todas las celdas contribuyen independientemente a la estadística de prueba.
Para ilustrar el test de independencia, analizaremos datos de un estudio hospitalario que examina la posible asociación entre el tipo de sangre ABO de los pacientes y la severidad de una enfermedad específica. Este ejemplo es particularmente relevante porque explora una pregunta médica real: ¿existe alguna predisposición genética relacionada con el tipo de sangre que influence la progresión de ciertas enfermedades?
El sistema ABO de grupos sanguíneos es uno de los sistemas de antígenos más importantes en medicina, determinado genéticamente y estable a lo largo de la vida. Diversos estudios han sugerido posibles asociaciones entre tipos sanguíneos y susceptibilidad a diferentes enfermedades, desde infecciones hasta trastornos cardiovasculares y cáncer.
En este estudio hospitalario, se clasificaron 1500 pacientes según:
La hipótesis biológica subyacente es que ciertos tipos sanguíneos podrían estar asociados con diferentes patrones de respuesta inmunológica o susceptibilidad genética que influencien la severidad de la enfermedad.
# Datos del estudio: Tipo de sangre vs Severidad de enfermedad
sangre_severidad <- matrix(c(
543, 211, 90, 476, # Ausente
44, 22, 8, 31, # Suave
28, 9, 7, 31 # Severa
), nrow = 3, byrow = TRUE)
rownames(sangre_severidad) <- c("Ausente", "Suave", "Severa")
colnames(sangre_severidad) <- c("A", "B", "AB", "O")
print("Tabla de Contingencia: Tipo de Sangre vs Severidad de Enfermedad")## [1] "Tabla de Contingencia: Tipo de Sangre vs Severidad de Enfermedad"
## A B AB O
## Ausente 543 211 90 476
## Suave 44 22 8 31
## Severa 28 9 7 31
Los datos revelan patrones interesantes que merecen exploración estadística formal. La distribución de tipos sanguíneos en la muestra (41%, 16.1%, 7%, 35.9% para A, B, AB, O respectivamente) es consistente con las frecuencias poblacionales típicas en muchas poblaciones.
Más relevante para nuestra pregunta de investigación es la distribución de severidad: 88% de pacientes no presenta síntomas, 7% presenta severidad suave, y 5% presenta severidad severa.
La pregunta crucial es si estas proporciones se mantienen constantes across los diferentes tipos sanguíneos, o si algunos tipos muestran mayor tendencia hacia severidades específicas.
El paso fundamental en el test de independencia es calcular qué frecuencias esperaríamos en cada celda si el tipo de sangre y la severidad de la enfermedad fueran completamente independientes.
# Calcular frecuencias esperadas bajo independencia
chi_test <- chisq.test(sangre_severidad)
frecuencias_esperadas <- chi_test$expectedLas frecuencias esperadas representan el escenario de independencia perfecta. Por ejemplo, si no hubiera asociación, esperaríamos que el 88% de pacientes con tipo A (es decir, 541.2 pacientes) no presentaran síntomas, simplemente porque esa es la proporción global de casos asintomáticos.
La comparación visual entre frecuencias observadas y esperadas puede ser muy reveladora:
Las discrepancias sistemáticas entre valores observados y esperados sugieren patrones de asociación que el test formal cuantificará.
## [1] "Resultados del Test de Independencia Chi-cuadrado"
## [1] "Chi-cuadrado: 5.1163"
## [1] "Grados de libertad: 6"
## [1] "Valor p: 5.289905e-01"
El test produce un valor de chi-cuadrado de 5.12 con 6 grados de libertad, resultando en un valor p de 5.289905e-01. Este resultado altamente significativo (\(p < 0.001\)) proporciona evidencia convincente contra la hipótesis nula de independencia.
Sin embargo, la significancia estadística por sí sola no nos dice dónde están las asociaciones más fuertes ni cuál es su naturaleza. Para esto, necesitamos examinar los residuos estandarizados.
Los residuos estandarizados miden cuántas desviaciones estándar se alejan las frecuencias observadas de las esperadas:
\[r_{ij} = \frac{O_{ij} - E_{ij}}{\sqrt{E_{ij}}}\]
Valores absolutos mayores a 2 sugieren contribuciones importantes a la estadística chi-cuadrado. En nuestros datos:
El patrón de residuos revela la naturaleza específica de las asociaciones encontradas.
# Crear visualización comprehensiva
library(ggplot2)
library(dplyr)
# Convertir datos para visualización
datos_long <- as.data.frame(as.table(sangre_severidad))
names(datos_long) <- c("Severidad", "TipoSangre", "Frecuencia")
# Calcular proporciones por tipo de sangre
datos_prop <- datos_long %>%
group_by(TipoSangre) %>%
mutate(Proporcion = Frecuencia / sum(Frecuencia))
# Gráfico de proporciones apiladas
p1 <- ggplot(datos_prop, aes(x = TipoSangre, y = Proporcion, fill = Severidad)) +
geom_bar(stat = "identity", position = "stack") +
scale_fill_manual(values = c("Ausente" = "#3460A1", "Suave" = "#4F84CF", "Severa" = "#FF6B35")) +
labs(title = "Distribución de Severidad por Tipo de Sangre",
x = "Tipo de Sangre",
y = "Proporción",
fill = "Severidad") +
theme_minimal()
print(p1)# Mapa de calor de residuos
residuos_df <- as.data.frame(as.table(residuos))
names(residuos_df) <- c("Severidad", "TipoSangre", "Residuo")
p2 <- ggplot(residuos_df, aes(x = TipoSangre, y = Severidad, fill = Residuo)) +
geom_tile(color = "white") +
scale_fill_gradient2(low = "#4F84CF", high = "#FF6B35", mid = "white",
midpoint = 0, name = "Residuo\nEstandarizado") +
labs(title = "Mapa de Calor: Residuos Estandarizados",
x = "Tipo de Sangre",
y = "Severidad") +
theme_minimal()
print(p2)Las visualizaciones revelan patrones específicos en la asociación:
Distribución heterogénea: Las proporciones de severidad no son constantes across tipos sanguíneos, confirmando la asociación estadística
Patrones de residuos: El mapa de calor identifica las combinaciones que más contribuyen a la significancia del test
Implicaciones clínicas: Ciertos tipos sanguíneos podrían estar asociados con mayor o menor riesgo de desarrollar formas severas de la enfermedad
Aunque el test chi-cuadrado determina si existe asociación, no cuantifica directamente su fortaleza. Para esto, podemos calcular medidas de asociación complementarias.
La V de Cramér es una medida normalizada de asociación que varía entre 0 (independencia completa) y 1 (asociación perfecta):
\[V = \sqrt{\frac{\chi^2}{N \times \min(r-1, c-1)}}\]
# Calcular V de Cramér
cramer_v <- sqrt(chi_test$statistic / (total_pacientes * min(nrow(sangre_severidad)-1, ncol(sangre_severidad)-1)))Para nuestros datos, V = 0.041, lo que indica una asociación de magnitud pequeña según los criterios convencionales (pequeña: < 0.1, moderada: 0.1-0.3, fuerte: > 0.3).
Una V de Cramér de 0.041 sugiere que, aunque la asociación es estadísticamente significativa, la magnitud práctica es relativamente modesta. Esto significa que:
El test de independencia chi-cuadrado requiere varios supuestos importantes:
En nuestro ejemplo, estos supuestos se satisfacen razonablemente bien, con frecuencias esperadas mínimas de 5.2.
Es crucial recordar que la asociación estadística no implica causalidad. Las posibles explicaciones para la asociación encontrada incluyen:
Para tablas con frecuencias esperadas pequeñas, se pueden considerar:
Los hallazgos de asociación entre tipo de sangre y severidad de enfermedad tienen varias implicaciones potenciales:
Sin embargo, la magnitud modesta de la asociación limita su aplicación clínica inmediata:
El test de independencia general ofrece ventajas sobre el análisis fragmentado en múltiples tests 2×2:
Aunque más sofisticados, los modelos de regresión logística podrían proporcionar:
El test chi-cuadrado de independencia representa una herramienta fundamental para el análisis exploratorio de asociaciones en datos categóricos, proporcionando una base sólida para investigaciones más sofisticadas y decisiones sobre direcciones futuras de investigación.
comparacion <- data.frame(
Test = c("Fisher Exacto", "McNemar", "Chi-cuadrado"),
Aplicación = c("Tablas 2×2", "Muestras pareadas", "Tablas r×c"),
Condiciones = c("Marginales fijos", "Homogeneidad marginal", "Variables categóricas"),
Estadística = c("Exacta", "χ²₁", "χ²₍ᵣ₋₁₎₍ᶜ₋₁₎"),
`Tamaño mínimo` = c("Cualquiera", "≥ 20 discordantes", "E ≥ 5 en 80% celdas")
)
kable(comparacion,
caption = "Comparación de Tests No Paramétricos para Tablas de Contingencia") %>%
kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive")) %>%
column_spec(1, bold = TRUE, color = "#2c3e50") %>%
row_spec(0, bold = TRUE, color = "white", background = "#3460A1")| Test | Aplicación | Condiciones | Estadística | Tamaño.mínimo |
|---|---|---|---|---|
| Fisher Exacto | Tablas 2×2 | Marginales fijos | Exacta | Cualquiera |
| McNemar | Muestras pareadas | Homogeneidad marginal | χ²₁ | ≥ 20 discordantes |
| Chi-cuadrado | Tablas r×c | Variables categóricas | χ²₍ᵣ₋₁₎₍ᶜ₋₁₎ | E ≥ 5 en 80% celdas |