Introducción a las Pruebas de Asociación de Variables Categóricas

Las pruebas de asociación son un conjunto de técnicas estadísticas que permiten determinar si existe una relación entre dos variables categóricas. En este documento se presenta las prueba de asociación más común, la prueba de Chi-cuadrado.

Tablas de Contingencia

Las tablas de contingencia son una herramienta para visualizar la relación entre dos variables categóricas. A continuación se presenta un ejemplo de una tabla de contingencia.

# Crear una tabla de contingencia
tabla <- matrix(c(10, 20, 30, 40), nrow = 2, byrow = TRUE)
rownames(tabla) <- c("Hombres", "Mujeres")
colnames(tabla) <- c("Bajo Peso", "Peso Normal")
tabla
##         Bajo Peso Peso Normal
## Hombres        10          20
## Mujeres        30          40

El estadístico de Chi-cuadrado

El estadístico de Chi-cuadrado se utiliza para determinar si existe una relación entre dos variables categóricas. A continuación se presenta un ejemplo de cómo calcular el estadístico de Chi-cuadrado.

La fórmula para el estadístico de Chi-cuadrado es la siguiente:

\[\chi^2 = \sum \frac{(O - E)^2}{E}\]

Donde:

El cálculo del valor esperado a partir de la tabla de contingencia es el siguiente:

\[E = \frac{(\text{Total de la fila} \times \text{Total de la columna})}{\text{Total de la tabla}}\]

Cálculos paso a paso

  1. Calcular el total de la tabla.
total_tabla <- sum(tabla)
total_tabla
## [1] 100
  1. Calcular el total de cada fila y columna.
total_filas <- apply(tabla, 1, sum)
total_columnas <- apply(tabla, 2, sum)
total_filas
## Hombres Mujeres 
##      30      70
total_columnas
##   Bajo Peso Peso Normal 
##          40          60
  1. Calcular el valor esperado para cada celda de la tabla.
# calcular usando índice y %*%
valores_esperados <- total_filas %*% t(total_columnas) / total_tabla
# nombre de las filas
rownames(valores_esperados) <- rownames(tabla)
# nombre de las columnas
colnames(valores_esperados) <- colnames(tabla)
valores_esperados
##         Bajo Peso Peso Normal
## Hombres        12          18
## Mujeres        28          42
  1. Calcular el estadístico de Chi-cuadrado.
chi_cuadrado <- sum((tabla - valores_esperados)^2 / valores_esperados)
chi_cuadrado
## [1] 0.7936508
  1. Valor crítico de la distribución de Chi-cuadrado.
# Grados de libertad
grados_libertad <- (nrow(tabla) - 1) * (ncol(tabla) - 1)

# Valor crítico de la distribución de Chi-cuadrado
valor_critico <- qchisq(0.95, df = grados_libertad)
valor_critico
## [1] 3.841459

Interpretación del Estadístico de Chi-cuadrado

El estadístico de Chi-cuadrado se compara con el valor crítico de la distribución de Chi-cuadrado (\(\chi2_{\alpha=0.05}\)) para determinar si existe una relación significativa entre las variables categóricas. Si el estadístico de Chi-cuadrado es mayor que el valor crítico, se rechaza la hipótesis nula de independencia entre las variables.

Prueba de Chi-cuadrado en R

En R, se puede realizar una prueba de Chi-cuadrado utilizando la función chisq.test(). A continuación se presenta un ejemplo de cómo realizar una prueba de Chi-cuadrado con R.

# Realizar una prueba de Chi-cuadrado
resultado_chi_cuadrado <- chisq.test(tabla)
resultado_chi_cuadrado
## 
##  Pearson's Chi-squared test with Yates' continuity correction
## 
## data:  tabla
## X-squared = 0.44643, df = 1, p-value = 0.504

Usando el paquete vcd para tablas de contingencia

El paquete vcd es una herramienta útil para realizar análisis de tablas de contingencia en R. A continuación se presenta un ejemplo de cómo utilizar el paquete vcd para analizar tablas de contingencia.

# Instalar y cargar el paquete vcd
library(vcd)
## Loading required package: grid
# Example data
datos <- data.frame(
  Sexo = c("Hombres", "Hombres", "Mujeres", "Mujeres"),
  Peso = c("Bajo Peso", "Peso Normal", "Bajo Peso", "Peso Normal"),
  Count = c(5, 60, 35, 40)
)

# Create contingency table
contingency_table <- xtabs(Count ~ Sexo + Peso, data = datos)
contingency_table
##          Peso
## Sexo      Bajo Peso Peso Normal
##   Hombres         5          60
##   Mujeres        35          40

Prueba de Chi-cuadrado con el paquete vcd

# Perform chi-squared test
chi_test <- chisq.test(contingency_table)

# Observed values
observed <- chi_test$observed

# Expected values
expected <- chi_test$expected

# Print results
print(observed)
##          Peso
## Sexo      Bajo Peso Peso Normal
##   Hombres         5          60
##   Mujeres        35          40
addmargins(observed)
##          Peso
## Sexo      Bajo Peso Peso Normal Sum
##   Hombres         5          60  65
##   Mujeres        35          40  75
##   Sum            40         100 140
print(expected)
##          Peso
## Sexo      Bajo Peso Peso Normal
##   Hombres  18.57143    46.42857
##   Mujeres  21.42857    53.57143
print(chi_test)
## 
##  Pearson's Chi-squared test with Yates' continuity correction
## 
## data:  contingency_table
## X-squared = 24.043, df = 1, p-value = 9.419e-07

Visualización de datos de la tabla de contingencia

Las tablas de contingencia se pueden visualizar de diferentes maneras para facilitar la interpretación de los resultados. A continuación se presenta un ejemplo de cómo visualizar una tabla de contingencia con el paquete ggplot2 usando barras.

# Load necessary libraries
library(ggplot2)

# Convert contingency table to data frame
contingency_df <- as.data.frame.table(contingency_table)

# Plot using ggplot2
ggplot(contingency_df, aes(x = Sexo, y = Freq, fill = Peso)) +
  geom_bar(stat = "identity", position = "dodge") +
  labs(title = NULL, x = "Sexo", y = "Frecuencia", fill = "Peso")

Figura 1. Gráfico de barras a partir de los datos de la tabla de contingencia.

Visualización de mosaico usando mosaic en vcd

El paquete vcd también proporciona una función para visualizar tablas de contingencia en forma de mosaico. A continuación se presenta un ejemplo de cómo visualizar una tabla de contingencia en forma de mosaico.

# Load necessary libraries
library(vcd)

# Mosaic plot
mosaic(contingency_table, shade = TRUE)

Figura 2. Gráfico de mosaico de la tabla de contingencia. Muestra los residuales estandarizados en cada celda.

Supuestos de la Prueba de Chi-cuadrado

La prueba de Chi-cuadrado tiene varios supuestos que deben cumplirse para que los resultados sean válidos. Algunos de los supuestos más importantes son:

  1. Independencia de las observaciones: Las observaciones deben ser independientes entre sí.
  2. Tamaño de la muestra: El tamaño de la muestra debe ser lo suficientemente grande para que la distribución de Chi-cuadrado sea válida.
  3. Frecuencias esperadas: Las frecuencias esperadas deben ser mayores que 5 para que la prueba sea válida.

Conclusión

Las pruebas de asociación, como la prueba de Chi-cuadrado, son una herramienta útil para determinar si existe una relación significativa entre dos variables categóricas. Estas pruebas nos permiten evaluar la independencia entre las variables y determinar si una supuesta asociación observada es estadísticamente significativa.

Ejercicio Práctico

Vamos a considerar un estudio clínico en el que se evalúa la eficacia de dos tratamientos para una enfermedad. Se registraron los resultados de los pacientes tratados con los dos tratamientos y se desea determinar si hay una asociación entre el tratamiento y la recuperación de los pacientes.

Los datos se presentan en la siguiente tabla de contingencia:

# Instalar y cargar el paquete vcd
library(vcd)

# Example data
datos2 <- data.frame(
  Tratamiento = c("Droga", "Droga", "Droga", "Placebo", "Placebo", "Placebo"),
  Respuesta = c("Mejoría", "Igual", "Empeora", "Mejoría", "Igual", "Empeora"),
  Count = c(30, 5, 5, 20, 10, 10)
)

# Create contingency table
contingency_table2 <- xtabs(Count ~ Tratamiento + Respuesta, data = datos2)
contingency_table2
##            Respuesta
## Tratamiento Empeora Igual Mejoría
##     Droga         5     5      30
##     Placebo      10    10      20

Realiza una prueba de Chi-cuadrado para determinar si hay una asociación significativa entre el tratamiento y la recuperación de los pacientes. Interpreta los resultados obtenidos.

# Perform chi-squared test
chi_test2 <- chisq.test(contingency_table2)

# Observed values
observed2 <- chi_test2$observed

# Expected values
expected2 <- chi_test2$expected

# Print results
observed2
##            Respuesta
## Tratamiento Empeora Igual Mejoría
##     Droga         5     5      30
##     Placebo      10    10      20
addmargins(expected2)
##            Respuesta
## Tratamiento Empeora Igual Mejoría Sum
##     Droga       7.5   7.5      25  40
##     Placebo     7.5   7.5      25  40
##     Sum        15.0  15.0      50  80
expected2
##            Respuesta
## Tratamiento Empeora Igual Mejoría
##     Droga       7.5   7.5      25
##     Placebo     7.5   7.5      25
chi_test2
## 
##  Pearson's Chi-squared test
## 
## data:  contingency_table2
## X-squared = 5.3333, df = 2, p-value = 0.06948

Crear una gráfica de barras a partir de los datos de la tabla de contingencia.

# Load necessary libraries
library(ggplot2)

# Convert contingency table to data frame
contingency_df2 <- as.data.frame.table(contingency_table2)

# Plot using ggplot2
ggplot(contingency_df2, aes(x = Tratamiento, y = Freq, fill = Respuesta)) +
  geom_bar(stat = "identity", position = "dodge") +
  labs(title = NULL, x = "Tratamiento", y = "Frecuencia", fill = "Respuesta")

Figura 3. Gráfico de barras a partir de los datos de la tabla de contingencia.

Ahora una gráfica de mosaico para la tabla de contingencia:

# Load necessary libraries
library(vcd)

# Mosaic plot
mosaic(contingency_table2, shade = TRUE)

Interpretación de los resultados y conclusiones finales