representar resultados de anĂ¡lisis de correspondencias en un mapa

Índice

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")

mapa1.png

mapa (2, c("IZQUIERDA","50%","DERECHA"),
      paste ("Elecciones 2004: orientación del voto",
             "según espectro político"))
savePlot ("mapa2.png")

mapa2.png

Autor: Carlos

Created: 2021-03-25 jue 07:29

Validate