representar resultados de anĂ¡lisis de correspondencias en un mapa
1 datos
1.1 municipios
- https://obsaludasturias.com/obsa/niveles-covid-19/
- pulsar en DATOS
- pulsar en CAPAS DE MAPAS (FORMATO SP PARA USAR EN R)
- descargar y descomprimir el fichero
capas_mapas_sp.zip
en R
install.packages("sp") library(sp) load("~/Descargas/mapa_municipios.sp") # datos de toda espaNa ls() # aparece un dataframe "mapa_municipios"
1.2 elecciones de 2004
- descargar del Moodle el fichero Elecciones
eusqadi04.rda
en R
load("~/Descargas/eusqadi04.rda") ls() # aparece un dataframe "N" con municipios y partidos library(ca) # anAlisis de correspondencias a <- ca(N) N$d1 <- a$rowcoord[,"Dim1"] # aNadimos la 1a componente N$D1 <- (N$d1-min(N$d1))/(max(N$d1)-min(N$d1)) # la normalizamos N$d2 <- a$rowcoord[,"Dim2"] # aNadimos la 2a componente N$D2 <- (N$d2-min(N$d2))/(max(N$d2)-min(N$d2)) # la normalizamos
2 objetos S4
hasta ahora, hemos trabajado con objetos de tipo S3, que se comportan como listas:
regre <- lm (mpg ~ wt, mtcars) class (regre) # "lm" names (regre) # zOcalos (apartados) regre$coefficients # extraer uno
los objetos "sp" (spatial point) son de tipo S4:
class (mapa_municipios) # "SpatialPolygonsDataFrame" slotNames (mapa_municipios) # zOcalos (apartados) mapa_municipios@data # dafaframe con nombres de municipios
en objetos "sp" se puede acceder directamente al dataframe:
names (mapa_municipios) # variables en el dataframe head (mapa_municipios$NAMEUNIT) # nombres de municipios table (mapa_municipios$CODNUT2) # comunidades autOnomas mapa_vasco <- mapa_municipios[mapa_municipios$CODNUT2=="ES21",]
3 cruzar los datos
muni.N <- rownames (N) # tenemos datos de 31 municipios muni.M <- mapa_vasco$NAMEUNIT ## de primeras, podemos asociar solo 21: sum (!is.na (match (muni.N, muni.M))) ## realizamos una bUsqueda matizada para encontrar los 31: encontrados <- sapply ( gsub("c","k",muni.N), # sustituimos "c" por "k" function (muni) agrep (muni, # bUsqueda difusa iconv (muni.M, to="ASCII//TRANSLIT"), # quitamos tildes max = list (ins=0, # no admitimos inserciones sub=0), # ni sustituciones value=TRUE, # que devuelva cadena, no posiciOn fixed=TRUE, # cadena fija, no expresiOn regular ignore.case=TRUE)) # sin distinguir may/minUsculas table (sapply (encontrados, length)) # Irun aparece dos veces disponibles <- sapply (1:length(encontrados), function (i) { e <- encontrados[[i]] if (length(e)==1) e else # escogemos el que diste menos del original e [which.min (adist (e, names(encontrados)[i]))] })
4 mapa
mapa <- function (componente, etiquetas, titulo) { colprov <- rgb (0.8, 0.8, # para distinguir provincias: as.numeric(factor(mapa_vasco$CODNUT3))/6+.5) plot (mapa_vasco, # primero, el mapa completo col = colprov, ## coordinates debe de funcionar como ## sapply (mapa_vasco@polygons, function (i) i@labpt) main = titulo, xlim = range (coordinates(mapa_vasco)[,1]) - c(.5,0)) # evita solapar con leyenda legend ("topleft", c("Araba/Álava","Gipuzkoa/Guipúzcoa","Bizkaia/Vizcaya"), fill = unique(colprov)) representados <- # parte del mapa de los municipios con datos mapa_vasco [na.omit (match (disponibles, iconv (muni.M, to="ASCII//TRANSLIT"))),] d <- paste0 ("D", componente) plot (representados, col = rgb (1-N[[d]], N[[d]], 0), # color segUn componente add=TRUE) # no borra el mapa completo legend ("bottomright", etiquetas, # verde, mezcla, rojo fill = c(rgb(1,0,0), rgb(.5,.5,0), rgb(0,1,0))) text (coordinates (representados), # nombres de municipios breves <- abbreviate (disponibles, 3), # abreviados col = "white") legend ("bottomleft", sort (paste (breves, disponibles))) destacar <- function (muni, posx, posy, izqder) { xy <- coordinates(representados)[representados$NAMEUNIT==muni,] text (posx, posy, muni, pos=izqder) arrows (xy[1],xy[2], posx,posy, lwd=2) } destacar ("Bilbao", -3.2, 43.4, 2) destacar ("Donostia/San Sebastián", -2.1, 43.4, 3) destacar ("Vitoria-Gasteiz", -2, 42.7, 4) } mapa (1, c("LOCAL","50%","ESTATAL"), paste ("Elecciones 2004: orientación del voto", "según implantación de los partidos")) savePlot ("mapa1.png")
mapa (2, c("IZQUIERDA","50%","DERECHA"), paste ("Elecciones 2004: orientación del voto", "según espectro político")) savePlot ("mapa2.png")