Carguemos la data:
folder='data'
fileName='idePeru2012.csv'
fileToRead=file.path(folder,fileName)
ide12=read.csv(fileToRead,strip.white = T,stringsAsFactors = F)
Veámos cuáles son las categóricas:
str(ide12)
## 'data.frame': 195 obs. of 14 variables:
## $ ubiProv : int 10100 10200 10300 10400 10500 10600 10700 20100 20200 20300 ...
## $ ubiReg : int 10000 10000 10000 10000 10000 10000 10000 20000 20000 20000 ...
## $ DEPARTAMENTO : chr "AMAZONAS" "AMAZONAS" "AMAZONAS" "AMAZONAS" ...
## $ PROVINCIA : chr "Chachapoyas" "Bagua" "Bongara" "Condorcanqui" ...
## $ IDE : num 0.774 0.662 0.632 0.46 0.605 ...
## $ IDENTIDAD : num 98.6 94.6 97.5 86.2 96.2 ...
## $ SALUD : num 25.45 14.61 9.01 8.56 12.42 ...
## $ EDUCACION : num 91.5 79.8 76.4 52.2 74.7 ...
## $ SANEAMIENTO : num 70.3 64.5 54.8 37.7 43.3 ...
## $ ELECTRIFICACION: num 84 67.9 72.2 39.5 67.4 ...
## $ POBLACION : int 54783 77438 32317 51802 52185 30236 118747 161003 7974 16879 ...
## $ COSTA : chr "NO" "NO" "NO" "NO" ...
## $ CAPITAL : chr "SI" "NO" "NO" "NO" ...
## $ TAMANO : int 2 2 1 2 2 1 3 3 1 1 ...
La variable TAMANO debe ser ordinal:
ide12$TAMANO=as.ordered(ide12$TAMANO)
Cambiemos los compnentes del IDE a ordinal (5 niveles). Para ello, primero creemos cinco nuevas variables (estarán vacías):
ide12$elcOrd=ide12$sanOrd=ide12$eduOrd=ide12$salOrd=ide12$idOrd=NA
Ahora démosle valores a las variables recién creadas. Se crearán tres niveles en cada una, pero les daremos diferentes nombres para que se note el propósito de la técnica:
gruposCantidad=3
etiquetas1=c('bajo','medio','alto')
ide12[,c(15:17)]=lapply(ide12[,c(6:8)],cut,
breaks = gruposCantidad,
labels = etiquetas1,
ordered_result = T)
###
etiquetas2=c('malo','regular','bueno') # usando otra etiqueta
ide12[,c(18:19)]=lapply(ide12[,c(9:10)],cut,
breaks = gruposCantidad,
labels = etiquetas2,
ordered_result = T)
Una mirada:
summary(ide12[,c(15:19)])
## idOrd salOrd eduOrd sanOrd elcOrd
## bajo : 3 bajo :156 bajo : 18 malo : 25 malo :32
## medio: 7 medio: 35 medio: 67 regular:108 regular:89
## alto :185 alto : 4 alto :110 bueno : 62 bueno :74
La tabla de frecuencias de una variable categórica es el punto de partida. Hallemos la tabla de frecuencias para la variable TAMANO, que asigna a la provincias a una categoria segun su población, siendo 1 el grupo de población menor, y el cinco el de mayor poblacion:
tablaT=table(ide12$TAMANO)
tablaT
##
## 1 2 3 4 5
## 69 64 46 15 1
Siendo los porcentajes:
prop.table(tablaT)
##
## 1 2 3 4 5
## 0.353846154 0.328205128 0.235897436 0.076923077 0.005128205
Lo interesante es cuando queremos hacer inferencias. En este caso puede resultar obvio, pero veamos como R responde: “¿Es probable que los grupos sean del mismo tamaño?”
chisq.test(tablaT)
##
## Chi-squared test for given probabilities
##
## data: tablaT
## X-squared = 92.154, df = 4, p-value < 2.2e-16
La prueba chi-cuadrado acaba de testear si esos valores de la tabla de frecuencias provienen de una distribución uniforme (todos iguales). El p-value sugiere el nivel de esa probabilidad. Como el valor es muy pequeño se concluye que los datos no se distribuyen por igual.
Pero podriamos tener una hipotesis más exigente:
chisq.test(tablaT, p=c(.35,.35,.21,.07,.02))
## Warning in chisq.test(tablaT, p = c(0.35, 0.35, 0.21, 0.07, 0.02)): Chi-
## squared approximation may be incorrect
##
## Chi-squared test for given probabilities
##
## data: tablaT
## X-squared = 3.1856, df = 4, p-value = 0.5273
Hay más de 50% de probabilidad que la tabla de frecuencias se distribuya con esos procentajes, por lo que eso se aceptaría. Pero R informa que el Chi-cuadrado calculado de manera convencional puede presentar problemas.
Para verificar lo hayado, podemos calcularlo con apoyo computacional:
chisq.test(tablaT, p=c(.35,.35,.21,.07,.02),simulate.p.value = T)
##
## Chi-squared test for given probabilities with simulated p-value
## (based on 2000 replicates)
##
## data: tablaT
## X-squared = 3.1856, df = NA, p-value = 0.5347
Podemos ver graficamente por que decidimos lo anterior.
par(mfrow=c(2,1))
barplot(c(.35,.35,.21,.07,.02), col="red", main='supuesto')
barplot(prop.table(tablaT),col="yellow", main='real')
Aqui necesitamos la tabla de contingencias:
tablaTE=table(ide12$TAMANO,ide12$eduOrd)
prop.table(tablaTE)
##
## bajo medio alto
## 1 0.020512821 0.138461538 0.194871795
## 2 0.056410256 0.128205128 0.143589744
## 3 0.015384615 0.071794872 0.148717949
## 4 0.000000000 0.005128205 0.071794872
## 5 0.000000000 0.000000000 0.005128205
Luego, con la prueba Chi-Cuadrado se pregunta si el comportamiento conjunto expresa asoción:
chisq.test(tablaTE)
## Warning in chisq.test(tablaTE): Chi-squared approximation may be incorrect
##
## Pearson's Chi-squared test
##
## data: tablaTE
## X-squared = 18.042, df = 8, p-value = 0.02092
Se ha obtenido un resultado no confiable, pues algun requisito de la prueba no se puede sostener (hay celdas menores que 5, y hasta un cero). Lo bueno es que R alerta que podria ser incorrecto, y nos da una salida no paramétrica:
chisq.test(tablaTE,simulate.p.value = T)
##
## Pearson's Chi-squared test with simulated p-value (based on 2000
## replicates)
##
## data: tablaTE
## X-squared = 18.042, df = NA, p-value = 0.02649
Si el valor del p-value es menor a 0.05, se asume que hay asociación (formalmente estamos rechanzando la hipotesis nula: “la variables son independientes”).
Hasta aqui sabemos que las variables están relacionadas, pero no tenemos mayor detalle de cómo es esa relación. Es aquí donde aparece el análisis de correspondencias. Éste es un análisis gráfico que permite conocer como se están asociando las categorías.
Se comienza por calcular la tabla de correspondencias, a partir de la tabla de contingencia:
library(ca)
tablaCA_te=ca(tablaTE)
Este objeto tiene información interesante:
tablaCA_te
##
## Principal inertias (eigenvalues):
## 1 2
## Value 0.078998 0.013523
## Percentage 85.38% 14.62%
##
##
## Rows:
## 1 2 3 4 5
## Mass 0.353846 0.328205 0.235897 0.076923 0.005128
## ChiDist 0.140414 0.321618 0.142240 0.746443 0.879049
## Inertia 0.006976 0.033949 0.004773 0.042860 0.003963
## Dim. 1 -0.063547 1.081488 -0.505903 -2.572733 -2.967917
## Dim. 2 1.197668 -0.903582 0.031782 -1.592507 -2.384260
##
##
## Columns:
## bajo medio alto
## Mass 0.092308 0.343590 0.564103
## ChiDist 0.628641 0.266736 0.236666
## Inertia 0.036479 0.024446 0.031596
## Dim. 1 2.001206 0.831911 -0.834179
## Dim. 2 -2.414230 1.103799 -0.277258
Si revisamos los eigenvalues vemos que la tabla se ha descompuesto en dos dimensiones, y que la primera recoge la mayor información:
plot.ca(tablaCA_te, col=c("red","blue"))
Queremos entender la relación entre las categorias de ambas variables. Para ello: 1. Debemos descartar las categorias cercanas al origen:
Para ver los angulos podemos pedir:
plot.ca(tablaCA_te, col=c("red","blue"), arrows = c(T,T))