Introducción
El AC es un método que permite resumir la información presente en las filas y columnas, de manera que pueda proyectarse sobre un subespacio reducido y representarse simultáneamente los puntos fila y los puntos columna, pudiéndose obtener conclusiones acerca de las relaciones entre ellos.
Conocimientos previos
- Tablas de contingencias
- Test de hipótesis
Dataset
El dataset que vamos a trabajar contiene datos de clientes de una empresa de telecomunicaciones. En él veremos información básica sobre el tipo de contrato y las características del servicio que tiene cada cliente y por último una de las variables de mayor interes Churn, es decir, si el cliente se fue de la compañía o no.
dim(clientes)## [1] 7043 21
Variable Churn
Análisis previo
Es necesario convertir las variables que son de tipo character a factor, este paso es necesario para que el analisis de correspondencia pueda analizar cada una de las categorías de las variables categóricas.
Antes:
## # A tibble: 3 × 2
## # Groups: V1 [3]
## V1 n
## <chr> <int>
## 1 character 17
## 2 integer 2
## 3 numeric 2
Despues:
## # A tibble: 3 × 2
## # Groups: V1 [3]
## V1 n
## <chr> <int>
## 1 factor 17
## 2 integer 2
## 3 numeric 2
Chequeo de valores faltantes
## missing %
## TotalCharges 11 0
## customerID 0 0
## gender 0 0
## SeniorCitizen 0 0
## Partner 0 0
## Dependents 0 0
## tenure 0 0
## PhoneService 0 0
## MultipleLines 0 0
## InternetService 0 0
## OnlineSecurity 0 0
## OnlineBackup 0 0
## DeviceProtection 0 0
## TechSupport 0 0
## StreamingTV 0 0
## StreamingMovies 0 0
## Contract 0 0
## PaperlessBilling 0 0
## PaymentMethod 0 0
## MonthlyCharges 0 0
## Churn 0 0
Independencia entre variables
Una vez que se convirtieron las variables a tipo factor, tenemos que chequear si las variables son independientes o no, para ello creamos las tablas de contigencias de las variables a analizar. En este caso se seleccionaron 2 variables: contract y churn.
tabla <- with(clientes, table(Contract,Churn))| No | Posible | Yes | |
|---|---|---|---|
| Month-to-month | 2211 | 19 | 1645 |
| One year | 1301 | 6 | 166 |
| Two year | 1641 | 6 | 48 |
| Sum | 5153 | 31 | 1859 |
Tablas de contingencias (perfiles de filas)
A cotinuación veremos tablas cruzadas con las proporciones por fila y columnas:
| Contract | No | Posible | Yes |
|---|---|---|---|
| Month-to-month | 0.57 | 0 | 0.42 |
| One year | 0.88 | 0 | 0.11 |
| Two year | 0.97 | 0 | 0.03 |
| Perfil_Fila | 0.73 | 0 | 0.26 |
Cada fila corresponde a un perfil y estos perfiles pueden compararse entre sí. Por ejemplo se ve que Two Year y One Year son parecidos y tienen valores más próximos que Month to Month.
Gráfico perfiles de filas
Tablas de contingencias (perfiles de columnas)
| Contract | No | Posible | Yes | Perfil_Col |
|---|---|---|---|---|
| Month-to-month | 0.43 | 0.61 | 0.88 | 0.55 |
| One year | 0.25 | 0.19 | 0.09 | 0.21 |
| Two year | 0.32 | 0.19 | 0.03 | 0.24 |
Test Chi-Cuadrado
Para asociación de variables cualitativas contamos con el test chi
cuadrado de Pearson que nos permite evaluar la independencia entre
variables.
El test chi cuadrado compara las proporciones observadas
en la tabla contra valores esperados que calcula internamente.
Por medio de la función sjt.xtab() obtenemos la tabla
final de contingencias con los valores observados en
(negro), los valores en rojo representan los valores
esperados que se deben calcular para realizar el test, los
porcentajes azules son porcentajes de fila y los valores en verde son
porcentajes de columna.
1° Método:
| Contract | Churn | Total | ||
|---|---|---|---|---|
| No | Posible | Yes | ||
| Month-to-month |
2211 2835 57.1 % 42.9 % |
19 17 0.5 % 61.3 % |
1645 1023 42.5 % 88.5 % |
3875 3875 100 % 55 % |
| One year |
1301 1078 88.3 % 25.2 % |
6 6 0.4 % 19.4 % |
166 389 11.3 % 8.9 % |
1473 1473 100 % 20.9 % |
| Two year |
1641 1240 96.8 % 31.8 % |
6 7 0.4 % 19.4 % |
48 447 2.8 % 2.6 % |
1695 1695 100 % 24.1 % |
| Total |
5153 5153 73.2 % 100 % |
31 31 0.4 % 100 % |
1859 1859 26.4 % 100 % |
7043 7043 100 % 100 % |
χ2=1176.484 · df=4 · Cramer’s V=0.289 · p=0.000 |
Cálculos del test
El test chi cuadrado calcula los valores esperados de la siguiente forma:
\[V.Esperados=\frac{(Total_{columna} * Total_{fila})}{Total_{tabla}}\]
Una vez que contamos con todos los valores requeridos (observados y esperados) el test chi cuadrado realiza el siguiente procedimiento:
\[{\chi}^2=\frac{1}{d}\sum_{k=1}^{n}
\frac{(O_k - E_k)^2}{E_k}\]
Donde:
O =
valores observados
E = valores esperados
Análisis de resultados
Si observamos al final de la tabla que vimos previamente, podemos
ver el resultado de la prueba y el p-valor fisher.
Las
hipótesis que se plantean son las siguientes:
La hipótesis
nula en este caso es que las variables son independientes.
La hipotesis alternativa es que hay dependencia
entre las proporciones de las variables.
Si el p-valor es > 0.05 entonces las
variables son independientes.
Si el p-valor es <=
0.05 rechazamos la hipótesis nula entonces significa que existe
dependencia entre las proporciones de ambas variables.
2° Método:
Otra forma de calcular el test chi cuadrado es utilizando sólo el
test, como se muestra a continuación.
test <- chisq.test(x = clientes$Contract,y = clientes$Churn)
test##
## Pearson's Chi-squared test
##
## data: clientes$Contract and clientes$Churn
## X-squared = 1176.5, df = 4, p-value < 0.00000000000000022
Conclusiones:
Podemos afirmar que
existe dependencia entre las proporciones de las
variables ya que el p-value es menor a 0.05.
Comparación gráfica
Grafico ballon
El gráfico de ballon nos muestra la tabla de contingencias y en cada celda de la tabla grafica un circulo, cuanto más grande es el círculo mayor proporción tiene el cruce.
Análisis de Correspondencias Simple (CA)
Análisis de correspondencias, su objetivo es
resumir una gran cantidad de datos en un número reducido de dimensiones
con la menor pérdida de información posible. No requiere del
cumplimiento de ningún supuesto para poder aplicarla.
Si bien el
objetivo de esta técnica es similar al de otros métodos factoriales,
como componentes principales, en el caso del análisis de
correspondencias, el método se aplica sobre variables categóricas u
ordinales. Más específicamente, se busca una representación en
coordenadas de las filas y columnas de una tabla de contingencia, de modo
tal que los patrones de asociación presentes en la tabla se reflejen en
estas nuevas coordenadas.
Con este análisis se busca representar las
variables con sus categorías en un espacio de menor dimensión que
preserve en la medida de lo posible las distancias relativas entre los
perfiles.
ana_corresp <- CA(tabla, graph = FALSE)
ana_corresp## **Results of the Correspondence Analysis (CA)**
## The row variable has 3 categories; the column variable has 3 categories
## The chi square of independence between the two variables is equal to 1176.484 (p-value = 0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001995139 ).
## *The results are available in the following objects:
##
## name description
## 1 "$eig" "eigenvalues"
## 2 "$col" "results for the columns"
## 3 "$col$coord" "coord. for the columns"
## 4 "$col$cos2" "cos2 for the columns"
## 5 "$col$contrib" "contributions of the columns"
## 6 "$row" "results for the rows"
## 7 "$row$coord" "coord. for the rows"
## 8 "$row$cos2" "cos2 for the rows"
## 9 "$row$contrib" "contributions of the rows"
## 10 "$call" "summary called parameters"
## 11 "$call$marge.col" "weights of the columns"
## 12 "$call$marge.row" "weights of the rows"
Autovalores
Por medio del calculo de
los autovalores vemos que entre las 2 dimensiones creadas logramos
explicar la totalidad de las variables involucradas.
get_eigenvalue(ana_corresp)## eigenvalue variance.percent cumulative.variance.percent
## Dim.1 0.167041254687 99.998916519 99.99892
## Dim.2 0.000001809879 0.001083481 100.00000
Screeplot
Chequeo de manera gráfica de
los autovalores.
contribuciones de columnas
Contribución de columnas para dimensión 1
fviz_contrib(ana_corresp, choice ="col", axes = 1)contribuciones de filas
fviz_contrib(ana_corresp, choice ="row", axes = 1)Contribución en las dimensiones
Contribuciones de filas:
## Dim 1 Dim 2
## Month-to-month 43.86968 1.111147
## One year 14.78664 64.298979
## Two year 41.34368 34.589873
Contribuciones de columnas:
## Dim 1 Dim 2
## No 26.62448646 0.2106690
## Posible 0.04512651 99.5147201
## Yes 73.33038703 0.2746108
Correlaciones de Filas
Las siguientes correlaciones se basan en las contribuciones de filas con cada una de las dimensiones creadas.
Correlaciones de columnas
Las siguientes correlaciones se basan en las contribuciones de columnas con cada una de las dimensiones creadas.
Biplot
fviz_ca_biplot(ana_corresp, map ="colgreen", arrow = c(TRUE, FALSE),
repel = TRUE)Análisis de Correspondencias Múltiple (MCA)
El análisis de correspondencia multiple permite involucrar una mayor cantidad de variables al análisis, lo cual permite una mejor aplicación práctica.
cols <- c(16:18,21)
clientes.activo <- clientes[,cols]
summary(clientes.activo)## Contract PaperlessBilling PaymentMethod
## Month-to-month:3875 No :2872 Bank transfer (automatic):1544
## One year :1473 Yes:4171 Credit card (automatic) :1522
## Two year :1695 Electronic check :2365
## Mailed check :1612
## Churn
## No :5153
## Posible: 31
## Yes :1859
##
clientes.mca <- MCA(clientes.activo, graph = F)
print(clientes.mca)## **Results of the Multiple Correspondence Analysis (MCA)**
## The analysis was performed on 7043 individuals, described by 4 variables
## *The results are available in the following objects:
##
## name description
## 1 "$eig" "eigenvalues"
## 2 "$var" "results for the variables"
## 3 "$var$coord" "coord. of the categories"
## 4 "$var$cos2" "cos2 for the categories"
## 5 "$var$contrib" "contributions of the categories"
## 6 "$var$v.test" "v-test for the categories"
## 7 "$ind" "results for the individuals"
## 8 "$ind$coord" "coord. for the individuals"
## 9 "$ind$cos2" "cos2 for the individuals"
## 10 "$ind$contrib" "contributions of the individuals"
## 11 "$call" "intermediate results"
## 12 "$call$marge.col" "weights of columns"
## 13 "$call$marge.li" "weights of rows"
Autovalores
get_eigenvalue(clientes.mca)## eigenvalue variance.percent cumulative.variance.percent
## Dim.1 0.4598631 22.993156 22.99316
## Dim.2 0.2839921 14.199607 37.19276
## Dim.3 0.2546377 12.731885 49.92465
## Dim.4 0.2512267 12.561336 62.48598
## Dim.5 0.2450916 12.254582 74.74057
## Dim.6 0.1900630 9.503148 84.24371
## Dim.7 0.1746395 8.731973 92.97569
## Dim.8 0.1404862 7.024312 100.00000
Gráfico Autovalores
fviz_eig(clientes.mca)Contribuciones de variables en dim 1
fviz_contrib(clientes.mca, choice ="var", axes = 1)Contribuciones de variables en dim 2
fviz_contrib(clientes.mca, choice ="var", axes = 2)Biplots
Biplot de individuos:
Biplot de variables:
Biplot Final:
Recomendaciones finales
Una vez realizado el analisis de correspondencias, por medio de
las funciones fviz_mca_var() , fviz_mca_ind() puede accederse a los
resultados a nivel observaciones y a nivel variables. Estos datos
podemos agregarlos al dataset para continuar realizando otros análisis
posteriores.
Gracias!
Recursos:
-Libro
en Español de Análisis de Correspondencias (Abrir en otra
pestaña)