TEST χ2 y ANÁLISIS DE CORRESPONDENCIA - TRABAJO DE FIN DE MÁSTER DE LA UNED.

TFM - Test chi-cuadrado y análisis de correspondencia

Creación de una tabla con los datos

Antes de nada, necesitamos nuestros datos en un formato adecuado para los test Chi-cuadrado. Crearemos una tabla con la información del problema:

tab <- matrix(c(0, 0, 2, 10,
                12, 20, 36, 16, 
                6, 12, 16, 6,
                12, 6, 4, 2), nrow=4,ncol=4, byrow=TRUE)
colnames(tab) <- c('nulo','bajo','medio','alto')
rownames(tab) <- c('telefonia','viajes','bancos','grandes_almacenes')
tabla_contingencia <- as.table(tab)
tabla_contingencia
##                   nulo bajo medio alto
## telefonia            0    0     2   10
## viajes              12   20    36   16
## bancos               6   12    16    6
## grandes_almacenes   12    6     4    2

Ahora sí, podemos pedirle a R que haga cálculos sobre la tabla.

Las filas de la tabla son los distintos conceptos (actividad económica) y las columnas las denuncias (nivel de denuncias). Así, por ejemplo, vemos que para la actividad económica telefonía tenemos 10 denuncias de nivel alto y 0 de nivel bajo. Etcétera.

Independencia de las variables

Para contrastar la independencia de las variables vamos a plantear un test chi-cuadrado. La hipótesis nula, H0, será que la actividad económica y el nivel de denuncias son independientes. La alternativa será que no lo son.

CHISQ<-chisq.test(tabla_contingencia)
## Warning in chisq.test(tabla_contingencia): Chi-squared approximation may be
## incorrect
CHISQ
## 
##  Pearson's Chi-squared test
## 
## data:  tabla_contingencia
## X-squared = 49.019, df = 9, p-value = 1.646e-07

Antes de concluir que tenemos dependencia de las variables debemos ver si si cumplen los requisitos para aplicar con garantías el test chi-cuadrado. Por algo nos ha salido ese warning.

Asumiendo la independencia de las observaciones, que no podemos contrastar pero aceptamos dado que así lo plantea el problema, debemos verificar que las frecuencias esperadas son >=5:

CHISQ$expected
##                    nulo  bajo medio  alto
## telefonia          2.25  2.85  4.35  2.55
## viajes            15.75 19.95 30.45 17.85
## bancos             7.50  9.50 14.50  8.50
## grandes_almacenes  4.50  5.70  8.70  5.10

Y vemos que no. En concreto, (telefonia, nulo) tiene frecuencia esperada 2.25. Y no es el único caso. Por lo tanto, el test chi-cuadrado, pese a su p-valor muy pequeño, no puede usarse.

CHISQ$p.value
## [1] 1.646211e-07

Prueba exacta de Fisher

La alternativa al test chi-cuadrado cuando alguna de las frecuencias esperadas es <5 es la prueba exacta de Fisher. En el caso que nos ocupa, al ser el número de observaciones bastante grande y al calcularse el p-valor de la prueba de Fisher en base a factoriales, deberemos ampliar el workspace (memoria) de la prueba de Fisher para que pueda funcionar correctamente.

# número de observaciones totales
sum(tabla_contingencia)
## [1] 160
# necesitamos ampliar el workspace a 10^6 porque los números son algo grandes
fisher.test(tabla_contingencia,simulate.p.value = TRUE, B = 1e6)
## 
##  Fisher's Exact Test for Count Data with simulated p-value (based on
##  1e+06 replicates)
## 
## data:  tabla_contingencia
## p-value = 8e-06
## alternative hypothesis: two.sided

Ahora sí, rechazaremos la hipótesis nula de independencia entre las variables.

Análisis de correspondencia

Una vez rechazada la hipótesis nula, la siguiente pregunta lógica a hacerse es ¿qué filas/columnas tienen más relación entre sí? Para averiguarlo, haremos lo que se llama un “análisis de correspondencia”.

Necesitaremos esta librería:

#install.packages(c("FactoMineR", "factoextra"))
library("FactoMineR")
## Warning: package 'FactoMineR' was built under R version 4.1.3
library("factoextra")
## Warning: package 'factoextra' was built under R version 4.1.3
## Loading required package: ggplot2
## Warning: package 'ggplot2' was built under R version 4.1.3
## Welcome! Want to learn more? See two factoextra-related books at https://goo.gl/ve3WBa

Y ahora el analisis, que representaremos gráficamente para una más fácil comprensión:

res.ca <- CA(tabla_contingencia, graph = FALSE)

#Creamos un gráfico para el análisis de correspondencia
fviz_ca_biplot(res.ca, repel = TRUE)

Es muy sencillo interpretar este tipo de gráficos: filas/columnas cercanas en el gráfico tienen dependencia.

Notar que con una sola dimensión no explicamos lo suficiente (eje de abcisas, 70.4%), pero con dos nos acercamos al 100% (70.4% +28.8% ).

Como conclusión, podemos apreciar observa una gran relación entre Grandes Almacenes y un nivel nulo en el número de denuncias. También entre Agencias de viajes y Bancos con un número de denuncias medios o bajos.

Con lo que concluye nuestro ejercicio.

Comentarios

Entradas populares de este blog

UNA BREVE EXPLICACIÓN DE LA LEY DE LAS ESPERANZAS ITERADAS

UN EJEMPLO DETALLADO DE PRE-PROCESAMIENTO EN R - IMPUTACIÓN DE DATOS FALTANTES

Un mundo de sucesos imposibles - El "tongo" de la Bonoloto.