Análisis de correspondencia textual con factominer
Beatriz Valdez
2024-12-02
pacman::p_load(
tidyverse,
FactoMineR ,
factoextra,
tm
)
Preparo la data
df <- campo_social[, c(2:5, 7, 11:16, 25,27,28)]
# inspecciono el marco creado
glimpse(df)
## Rows: 302
## Columns: 14
## $ plantas <fct> dos plantas, una planta, dos plantas, una pla~
## $ viviends <fct> una vivienda, una vivienda, una vivienda, una~
## $ hogars <fct> un hogar, un hogar, un hogar, un hogar, un ho~
## $ habitaciones <fct> dos habitaciones, dos habitaciones, dos habit~
## $ ba_a_o <fct> un banio, un banio, un banio, un banio, un ba~
## $ paredes <fct> bloque o ladrillo sin frisar, bloque o ladril~
## $ techo <fct> bloque o ladrillo sin frisar, otro, otro, blo~
## $ piso <fct> marmol y similares, cemento, cemento, cemento~
## $ agua <fct> acueducto o tuberia, acueducto o tuberia, acu~
## $ aseo <fct> aseo urbano o camion, container o bajante, al~
## $ otros_serv <fct> poceta conectada a pozo septico, poceta conec~
## $ situacion_laboral_actual <fct> otra, otra, otra, quehaceres del hogar, otra,~
## $ otro_tipo_de_ingresos <fct> pension, cesta ticket, pension, otro, pension~
## $ ingreso_familiar <fct> 2001 y mas, 2001 y mas, 800 - 2000, menos de ~
Elimino palabras funcionales de la variable “debilidads” y agrego la variable al marco
#agrego la variable "debilidades" desde el marco campo_social y
# elimino las palabras vacias
df %>%
mutate(debilidades = removeWords(as.character(campo_social$debilidads),
stopwords("spanish"))) ->df
# inspecciono el marco
glimpse(df)
## Rows: 302
## Columns: 15
## $ plantas <fct> dos plantas, una planta, dos plantas, una pla~
## $ viviends <fct> una vivienda, una vivienda, una vivienda, una~
## $ hogars <fct> un hogar, un hogar, un hogar, un hogar, un ho~
## $ habitaciones <fct> dos habitaciones, dos habitaciones, dos habit~
## $ ba_a_o <fct> un banio, un banio, un banio, un banio, un ba~
## $ paredes <fct> bloque o ladrillo sin frisar, bloque o ladril~
## $ techo <fct> bloque o ladrillo sin frisar, otro, otro, blo~
## $ piso <fct> marmol y similares, cemento, cemento, cemento~
## $ agua <fct> acueducto o tuberia, acueducto o tuberia, acu~
## $ aseo <fct> aseo urbano o camion, container o bajante, al~
## $ otros_serv <fct> poceta conectada a pozo septico, poceta conec~
## $ situacion_laboral_actual <fct> otra, otra, otra, quehaceres del hogar, otra,~
## $ otro_tipo_de_ingresos <fct> pension, cesta ticket, pension, otro, pension~
## $ ingreso_familiar <fct> 2001 y mas, 2001 y mas, 800 - 2000, menos de ~
## $ debilidades <chr> "agua", "agua", "vialiad", "servicio agua ir~
# inspecciono las categorias de la variable "debilidades"
sort(table(df$debilidades), decreasing = TRUE)
##
## inseguridad agua
## 55 42
## transporte vialidad infraestructura
## 28 19
## basura aseo
## 18 15
## delincuencia escaleras
## 14 6
## cloacas
## 5 4
## falta agua servicios basicos
## 4 4
## aguas negras calles
## 3 3
## desunion drogas
## 3 3
## servicio agua agua escasa
## 3 2
## aguas blancas basurero
## 2 2
## consejo comunal desorganizacion
## 2 2
## gas irregularidad agua
## 2 2
## ruido seguridad
## 2 2
## hacen mejoras informacion fluye
## 1 1
## pasa aseo sabe
## 1 1
## acceso aguas servidas
## 1 1
## alcantarillado aseo irregular
## 1 1
## aseo urbano ausencia consenso
## 1 1
## ausencia escaleras calle incompleta
## 1 1
## calles malas calles rotas
## 1 1
## caminerias carretera
## 1 1
## debilidades servicios deficit agua
## 1 1
## desacuerdo comunidad desatencion
## 1 1
## desunion vecinal escases agua
## 1 1
## falta seguridad frecuencia aseo
## 1 1
## infraestructura inoperancia consejo comunal
## 1 1
## junta vecinos labor autoridades
## 1 1
## mal escaleras mas escaleras
## 1 1
## mejorar escaleras organizacion vecinal
## 1 1
## peleas consejo comunal problemas ambientales transporte
## 1 1
## promesas incumplidas racionamiento agua
## 1 1
## recoleccion basura reforzar escuela
## 1 1
## regularidad agua servicio agua aseo irregular
## 1 1
## servicio agua irregular servicio agua potable
## 1 1
## servicio aseo servicios
## 1 1
## sistema salud terreno inestable
## 1 1
## vandalismo venta drogas
## 1 1
## via trafico vialiad
## 1 1
## vialidad infraestructura mal vialidad infraestructura transporte
## 1 1
## vialidad infraestructura publica vias
## 1 1
## violencia
## 1
Hay que hacer alguna limpiezas y recodificar variables. Por ejemplo “agua”, “servicio agua”, “aguas escasa”, “aguas blancas”, “irregularidad agua”, etc., parecen dar cuenta de un mismo fenómeno. Estas categorías podrían reagruparse, por ejemplo, como “agua”. Es necesario reflexionar al tomar esta decisión. No es lo mismo que alguien exprese “falta agua” o “no llega el agua” a que diga “irregularidad…”. En el primer caso la opinión parece expresar la carencia del servicio de agua. En el segundo, el problema parece ser la frecuencia en el suministro del agua.
Otra limpieza que se debe hacer es reescribir las categorías que han sido mal tipeadas o que presenten errores ortográficos. Un ejemplo para el procedimiento de recodificación:
# una de las muchas formas posibles de recodificar
# categorías de variables en R
df %>% mutate(debilidades=recode(debilidades,
'aguas negras'='cloacas')) -> df
La sugerencia es, luego de hacer la inspección de las categorías, tomar reflexionar sobre aquellas que pueden y deben agruparse. Adicionalmente, se puede tomar también la decisión de crear la categoría “otros” para las frecuencias muy bajas. Tener en cuenta que si esa categoría “otros” resulta ser mucho más frecuentes que el resto, entonces se ha creado un problema. En ese caso puede ser útil crear varias categorías que comiencen con “otros”. Por ejemplo: “otros infraestructura”, “otros serv. bas”.
Empleo la función textual() de factoMineR
# aplico la funcion textual
texto <-textual(df, num.text=15, contingence.by = 1)
# inspecciono lo que se ha creado
texto
## $cont.table
## acceso agua aguas alcantarillado ambientales aseo ausencia
## dos plantas 0 22 0 0 0 7 1
## tres plantas 0 7 0 0 0 1 0
## una planta 1 31 3 1 1 13 1
## autoridades basicos basura basurero blancas calle calles
## dos plantas 0 1 5 1 0 0 1
## tres plantas 1 0 3 0 0 0 0
## una planta 0 3 11 1 2 1 4
## caminerias carretera cloacas comunal comunidad consejo consenso
## dos plantas 0 0 3 1 0 1 0
## tres plantas 0 0 1 0 0 0 0
## una planta 1 1 3 3 1 3 1
## debilidades deficit delincuencia desacuerdo desatencion
## dos plantas 0 0 2 0 0
## tres plantas 0 1 0 0 0
## una planta 1 0 12 1 1
## desorganizacion desunion drogas escaleras escasa escases escuela
## dos plantas 0 1 1 4 0 1 0
## tres plantas 0 0 1 0 0 0 0
## una planta 2 3 2 6 2 0 1
## falta fluye frecuencia gas hacen incompleta incumplidas inestable
## dos plantas 3 0 0 1 0 0 1 0
## tres plantas 0 0 0 1 0 0 0 0
## una planta 2 1 1 0 1 1 0 1
## informacion infraestructura inoperancia inseguridad irregular
## dos plantas 0 7 0 22 0
## tres plantas 0 1 0 6 0
## una planta 1 15 1 27 3
## irregularidad junta labor mal malas mas mejorar mejoras
## dos plantas 1 0 0 1 1 0 1 0
## tres plantas 0 0 1 0 0 0 0 0
## una planta 1 1 0 1 0 1 0 1
## organizacion pasa peleas potable problemas promesas publica
## dos plantas 1 1 0 1 0 1 1
## tres plantas 0 0 0 0 0 0 0
## una planta 0 0 1 0 1 0 0
## racionamiento recoleccion reforzar regularidad rotas ruido sabe
## dos plantas 1 0 0 1 0 0 1
## tres plantas 0 0 0 0 0 0 0
## una planta 0 1 1 0 1 2 0
## salud seguridad servicio servicios servidas sistema terreno
## dos plantas 1 2 3 1 0 1 0
## tres plantas 0 0 2 0 0 0 0
## una planta 0 1 2 5 1 0 1
## trafico transporte urbano vandalismo vecinal vecinos venta via
## dos plantas 0 6 1 0 1 0 0 0
## tres plantas 1 2 0 0 0 0 0 1
## una planta 0 22 0 1 1 1 1 0
## vialiad vialidad vias violencia
## dos plantas 1 6 1 0
## tres plantas 0 1 0 1
## una planta 0 15 0 0
##
## $nb.words
## words nb.list
## agua 60 60
## inseguridad 55 55
## transporte 30 30
## infraestructura 23 23
## vialidad 22 22
## aseo 21 21
## basura 19 19
## delincuencia 14 14
## escaleras 10 10
## servicio 7 7
## cloacas 7 7
## servicios 6 6
## falta 5 5
## calles 5 5
## drogas 4 4
## desunion 4 4
## consejo 4 4
## comunal 4 4
## basicos 4 4
## seguridad 3 3
## irregular 3 3
## aguas 3 3
## vecinal 2 2
## ruido 2 2
## mal 2 2
## irregularidad 2 2
## gas 2 2
## escasa 2 2
## desorganizacion 2 2
## blancas 2 2
## basurero 2 2
## ausencia 2 2
## violencia 1 1
## vias 1 1
## vialiad 1 1
## via 1 1
## venta 1 1
## vecinos 1 1
## vandalismo 1 1
## urbano 1 1
## trafico 1 1
## terreno 1 1
## sistema 1 1
## servidas 1 1
## salud 1 1
## sabe 1 1
## rotas 1 1
## regularidad 1 1
## reforzar 1 1
## recoleccion 1 1
## racionamiento 1 1
## publica 1 1
## promesas 1 1
## problemas 1 1
## potable 1 1
## peleas 1 1
## pasa 1 1
## organizacion 1 1
## mejoras 1 1
## mejorar 1 1
## mas 1 1
## malas 1 1
## labor 1 1
## junta 1 1
## inoperancia 1 1
## informacion 1 1
## inestable 1 1
## incumplidas 1 1
## incompleta 1 1
## hacen 1 1
## frecuencia 1 1
## fluye 1 1
## escuela 1 1
## escases 1 1
## desatencion 1 1
## desacuerdo 1 1
## deficit 1 1
## debilidades 1 1
## consenso 1 1
## comunidad 1 1
## carretera 1 1
## caminerias 1 1
## calle 1 1
## autoridades 1 1
## ambientales 1 1
## alcantarillado 1 1
## acceso 1 1
Para el análisis de correspondencia me interesa la porción cont.table. Hago ahora el análisis de correspondencia.
# poner cuidado como accedo a cont.table.
df_ca_plantas <- CA(texto$cont.table)
Si quiero que se haga el análisis con más de una variable (posiblemente no es una buena idea porque se producirá mucha “aglomeración”):
texto2 <-textual(df, num.text=15, contingence.by = list(c(1,2)))
# poner cuidado como accedo a cont.table
df_ca_dos <- CA(texto2$cont.table)