Presentación del tema y pregunta de estudio

En Argentina existen marcadas inequidades en salud que pueden suponerse relacionadas, en gran parte, a una desigual distribución de los recursos y facilidades para la atención dentro del sistema de salud. En este marco, seleccionando dicho país como recorte geográfico, este trabajo propone responder a las siguientes preguntas de investigación:

¿Cómo es la distribución geográfica (a escala departamental) de los establecimientos de salud con internación (del 2do o 3er nivel de atención)? ¿Cómo se distribuyen dichos establecimientos si consideramos su sector (público o privado) y/o su tipología de prestación principal?

¿Cómo es la densidad de estos establecimientos (cantidad por cada 10.000 habitantes) en 2022? ¿Existe una distribución desigual en el territorio nacional de este indicador?

Preparación del ambiente de trabajo

Cargado de librerías

library(tidyverse)
library(sf)
library(ggmap)
library(ggplot2)
library(haven)
library(leaflet)
library(leaflet.extras)
library(dplyr)

Datasets a utilizar, carga y exploración preliminar de datos

1) Capa de departamentos

Este dataset, en formato vectorial (geometría de polígonos), se descargó del sitio web oficial del Instituto Geográfico Nacional (IGN). Según esta fuente, los Departamentos se definen como una división político administrativa de Argentina de segundo orden, que incluye partido y comuna.

Cargo entonces la capa en mi ambiente de trabajo:

deptos_shp <- st_read("data/departamentoPolygon.shp",
                      stringsAsFactors = TRUE, 
                      options = "ENCODING=UTF-8") 
## options:        ENCODING=UTF-8 
## Reading layer `departamentoPolygon' from data source 
##   `C:\Proyecto_FLACSO_CienciaDeDatos_II\data\departamentoPolygon.shp' 
##   using driver `ESRI Shapefile'
## Simple feature collection with 529 features and 8 fields
## Geometry type: MULTIPOLYGON
## Dimension:     XY
## Bounding box:  xmin: -74 ymin: -90 xmax: -25 ymax: -21.78086
## Geodetic CRS:  WGS 84

Confirmo a continuación que se trata de un dataset geográfico y reviso su sistema de coordenadas:

class(deptos_shp)
## [1] "sf"         "data.frame"
st_crs(deptos_shp)
## Coordinate Reference System:
##   User input: WGS 84 
##   wkt:
## GEOGCRS["WGS 84",
##     DATUM["World Geodetic System 1984",
##         ELLIPSOID["WGS 84",6378137,298.257223563,
##             LENGTHUNIT["metre",1]]],
##     PRIMEM["Greenwich",0,
##         ANGLEUNIT["degree",0.0174532925199433]],
##     CS[ellipsoidal,2],
##         AXIS["latitude",north,
##             ORDER[1],
##             ANGLEUNIT["degree",0.0174532925199433]],
##         AXIS["longitude",east,
##             ORDER[2],
##             ANGLEUNIT["degree",0.0174532925199433]],
##     ID["EPSG",4326]]

Exploro a continuación las características generales de mi dataset, comenzando por su visualización en un mapa (cuya estética será ajustada mas adelante):

ggplot()+
  geom_sf(data=deptos_shp)

Reviso las dimensiones del dataset y sus variables:

dim(deptos_shp)
## [1] 529   9
head(deptos_shp)
## Simple feature collection with 6 features and 8 fields
## Geometry type: MULTIPOLYGON
## Dimension:     XY
## Bounding box:  xmin: -61.12208 ymin: -36.37492 xmax: -58.64951 ymax: -33.88293
## Geodetic CRS:  WGS 84
##   gid       objeto                             fna     gna                  nam
## 1 531 Departamento            Partido de Saladillo Partido            Saladillo
## 2 532 Departamento           Partido de Las Flores Partido           Las Flores
## 3 533 Departamento                Partido de Rojas Partido                Rojas
## 4 534 Departamento              Partido de Escobar Partido              Escobar
## 5 535 Departamento       Partido de Jos\xe9 C. Paz Partido       Jos\xe9 C. Paz
## 6 536 Departamento Partido de San Antonio de Areco Partido San Antonio de Areco
##     in1                                      fdc sag
## 1 06707 ARBA - Gerencia de Servicios Catastrales IGN
## 2 06455 ARBA - Gerencia de Servicios Catastrales IGN
## 3 06686 ARBA - Gerencia de Servicios Catastrales IGN
## 4 06252 ARBA - Gerencia de Servicios Catastrales IGN
## 5 06412 ARBA - Gerencia de Servicios Catastrales IGN
## 6 06735 ARBA - Gerencia de Servicios Catastrales IGN
##                         geometry
## 1 MULTIPOLYGON (((-59.61517 -...
## 2 MULTIPOLYGON (((-59.11058 -...
## 3 MULTIPOLYGON (((-60.89525 -...
## 4 MULTIPOLYGON (((-58.71215 -...
## 5 MULTIPOLYGON (((-58.78948 -...
## 6 MULTIPOLYGON (((-59.32196 -...

Se observa que la capa incluye 529 departamentos, con información referida a 9 variables, siendo la de mi interés el código departamental (variable in1), el cual me permitirá realizar las uniones entre capas. Renombro esta variable como codigo y controlo que se renombró correctamente:

deptos_shp <- deptos_shp %>%
  rename(codigo = in1)

names(deptos_shp)
## [1] "gid"      "objeto"   "fna"      "gna"      "nam"      "codigo"   "fdc"     
## [8] "sag"      "geometry"

2) Base de datos con poblaciones departamentales

Esta base de datos, en formato .dta, recopila información del total de población por depto. a partir del Censo Nacional de Población, Hogares y Viviendas 2022, del INDEC (Argentina). Procedo a la carga de estos datos en mi ambiente de trabajo:

censo2022 <- read_dta("data/censo_2022.dta")

Exploro este dataset:

class(censo2022)
## [1] "tbl_df"     "tbl"        "data.frame"
dim(censo2022)
## [1] 528  11

Se observa que es una base de datos tabular, conformada por 528 líneas (departamentos). Debe notarse que en este dataset, a diferencia del anterior, se excluye a las Islas del Atlántico Sur (código 91021), de allí la diferencia en el total de deptos de ambas bases de datos. Las variables que se incluyen son 11, correspondientes a las que se despliegan a continuación:

names(censo2022)
##  [1] "codigo"       "provincia"    "departamento" "pob_2022"     "viv_total"   
##  [6] "viv_partic"   "viv_presen"   "viv_ausent"   "viv_colect"   "Depto"       
## [11] "IN1"

Para este trabajo me interesa la variable pob_2022, correspondiente al total de personas o habitantes en cada departamento.

Realizo una exploración general del dataset, con foco en la variable pob_2022:

censo2022 %>%
  arrange(pob_2022) %>%
  head()
## # A tibble: 6 × 11
##   codigo provincia        departamento  pob_2022 viv_total viv_partic viv_presen
##   <chr>  <chr>            <chr>            <dbl>     <dbl>      <dbl>      <dbl>
## 1 94028  Tierra del Fuego Antártida A…       81         3          0          0
## 2 42091  La Pampa         Limay Mahuida      423       293        291        187
## 3 42084  La Pampa         Lihuel Calel       443       437        436        178
## 4 26063  Chubut           Mártires          754       405        403        337
## 5 42042  La Pampa         Curacó           1116       713        708        459
## 6 26049  Chubut           Gastre            1195       766        763        531
## # ℹ 4 more variables: viv_ausent <dbl>, viv_colect <dbl>, Depto <chr>,
## #   IN1 <chr>
censo2022 %>%
   arrange(desc(pob_2022)) %>%
  head()
## # A tibble: 6 × 11
##   codigo provincia    departamento      pob_2022 viv_total viv_partic viv_presen
##   <chr>  <chr>        <chr>                <dbl>     <dbl>      <dbl>      <dbl>
## 1 6427   Buenos Aires La Matanza         1841247    605680     605557     568103
## 2 14014  Córdoba     Capital            1505250    613263     612979     545786
## 3 82084  Santa Fe     Rosario            1348725    570554     570188     496443
## 4 6441   Buenos Aires La Plata            768470    332177     331998     295518
## 5 6490   Buenos Aires Lomas de Zamora     690323    245763     245682     231233
## 6 6357   Buenos Aires General Pueyrred…   667082    343188     342942     256657
## # ℹ 4 more variables: viv_ausent <dbl>, viv_colect <dbl>, Depto <chr>,
## #   IN1 <chr>

Se observa que los departamentos con menor tamaño poblacional pertenecen a las provincias de Tierra del Fuego, La Pampa y Chubut, mientras que los más poblados corresponden a departamentos de Buenos Aires, Córdoba y Santa Fe.

Exploro también si existen datos faltantes para la variable de población 2022, y calculo sus medidas resumen:

sum(is.na(censo2022$pob_2022))
## [1] 0
summary(censo2022$pob_2022)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##      81   12802   32124   86917   87541 1841247

Los resultados anteriores me confirman que no hay datos faltantes para esta variable. Las medidas resumen nos muestran que en promedio los deptos. tienen una población de 86917 habitantes, aunque con un valor mediano de 32124 habitantes (rango intercuartílico de 74739), y un mínimo y máximo de 81 y 1841247 habitantes, respectivamente. Esto da cuenta de las notables diferencias entre tamaños poblacionales departamentales dentro del territorio nacional.

Controlo y confirmo que están todas las provincias argentinas en el dataset:

unique(censo2022$provincia)
##  [1] "Tierra del Fuego"                 "Buenos Aires"                    
##  [3] "Ciudad Autónoma de Buenos Aires" "Salta"                           
##  [5] "Río Negro"                       "San Luis"                        
##  [7] "Chaco"                            "La Rioja"                        
##  [9] "Córdoba"                         "Santiago del Estero"             
## [11] "Chubut"                           "Catamarca"                       
## [13] "Corrientes"                       "Misiones"                        
## [15] "Santa Fe"                         "Entre Ríos"                     
## [17] "Neuquén"                         "San Juan"                        
## [19] "Tucumán"                         "Mendoza"                         
## [21] "Jujuy"                            "La Pampa"                        
## [23] "Formosa"                          "Santa Cruz"

3) Base de Establecimientos de salud con internación

Se descarga la base Establecimientos de salud con internación, en formato vectorial (geometría de puntos), de la Plataforma abierta de datos espaciales de la Argentina. La misma se encuentra disponible en: https://poblaciones.org/cartografias/

Cargo la capa en mi ambiente de trabajo, y verifico que se trata de un dataset espacial y su sistema de coordenadas:

ptos_est_salud <- st_read("data/Establecimientos de salud con internación - Argentina.shp")
## Reading layer `Establecimientos de salud con internación - Argentina' from data source `C:\Proyecto_FLACSO_CienciaDeDatos_II\data\Establecimientos de salud con internación - Argentina.shp' 
##   using driver `ESRI Shapefile'
## Simple feature collection with 6532 features and 23 fields
## Geometry type: POINT
## Dimension:     XY
## Bounding box:  xmin: -72.88607 ymin: -54.82676 xmax: -53.64927 ymax: -22.05423
## Geodetic CRS:  WGS 84
class(ptos_est_salud)
## [1] "sf"         "data.frame"
st_crs(deptos_shp)
## Coordinate Reference System:
##   User input: WGS 84 
##   wkt:
## GEOGCRS["WGS 84",
##     DATUM["World Geodetic System 1984",
##         ELLIPSOID["WGS 84",6378137,298.257223563,
##             LENGTHUNIT["metre",1]]],
##     PRIMEM["Greenwich",0,
##         ANGLEUNIT["degree",0.0174532925199433]],
##     CS[ellipsoidal,2],
##         AXIS["latitude",north,
##             ORDER[1],
##             ANGLEUNIT["degree",0.0174532925199433]],
##         AXIS["longitude",east,
##             ORDER[2],
##             ANGLEUNIT["degree",0.0174532925199433]],
##     ID["EPSG",4326]]

Observo que el sistema de coordenadas es el mismo que la capa departamental, lo cual va a permitir su correcta unión.

A modo exploratorio, mapeo los puntos del dataset, correspondientes a cada establecimiento de salud con internación en Argentina, para el año 2022. Para una mejor visualización, superpongo el polígono del país como marco (esta capa en formato .shp se descargó también de la web del IGN).

Arg_shp <- st_read("data/paisPolygon.shp")  
## Reading layer `paisPolygon' from data source 
##   `C:\Proyecto_FLACSO_CienciaDeDatos_II\data\paisPolygon.shp' 
##   using driver `ESRI Shapefile'
## Simple feature collection with 1 feature and 8 fields
## Geometry type: MULTIPOLYGON
## Dimension:     XY
## Bounding box:  xmin: -74 ymin: -89 xmax: -25 ymax: -21.78086
## Geodetic CRS:  WGS 84

Construyo un mapa preliminar con los puntos de establecimientos (cuya estética será mejorada en la etapa de análisis). Como el bbox del mapa de Argentina es muy amplio (porque, como en el caso de la capa de deptos, incluye a la Antártida), se ajustan los márgenes del mapa al bbox de la capa de puntos (dataset de establecimientos de salud)

bbox_ptos_salud <- st_bbox(ptos_est_salud)
margen <- 1.5
ggplot()+
  geom_sf(data=Arg_shp, size = 1, inherit.aes = FALSE)+
  geom_sf(data=ptos_est_salud, fill=NA, size = 0.4, inherit.aes = FALSE)+
    coord_sf(
    xlim = c(bbox_ptos_salud["xmin"] - margen, bbox_ptos_salud["xmax"] + margen),
    ylim = c(bbox_ptos_salud["ymin"] - margen, bbox_ptos_salud["ymax"] + margen),
    expand = FALSE
  )

Exploro las dimensiones y variables del dataset de puntos:

dim(ptos_est_salud)
## [1] 6532   24
names(ptos_est_salud)
##  [1] "C__DIGO"    "NOMBRE"     "TIPOLOGIA"  "CATEGORIA"  "SECTOR"    
##  [6] "DEPENDENCI" "LOCALIDAD"  "DEPARTAMEN" "BARRIO"     "DOMICILIO" 
## [11] "CP"         "TEL__FONO"  "CORREOELEC" "WEB"        "RESPONSABL"
## [16] "ORIGENGEOR" "LATITUD"    "LONGITUD"   "IDPROV"     "PROV"      
## [21] "IDDPTO"     "DPTO"       "REDCODE"    "geometry"

Vemos que el dataset incluye 6532 establecimientos de salud, y contiene 24 variables. En este caso me interesan las variables TIPOLOGIA y SECTOR, además del código departamental para las uniones de capas. Exploramos las categorías de las variables mencionadas:

unique(ptos_est_salud$SECTOR)
## [1] 1 2
unique(ptos_est_salud$TIPOLOGIA)
## [1] 6 4 5 2 3 1

Los códigos anteriores corresponden a las siguientes clasificaciones de Sector: 1-Público y 2-Privado; y de Tipología: 1-Con internación especializada en maternidad/materno infantil; 2-Con internación especializada en otras especialidades; 3-Con internación especializada en especialidades en TE (Tercera Edad); 4-Con internación especializada en pediatría; 5-Con internación especializada en salud mental; 6-Con internación general.

Análisis de datos

Preparación de los datos

Para poder realizar los análisis, primero asigno los datos geográficos del mapa base departamental a la base de datos tradicional del censo 2022.

deptos_pop2022 <- left_join(deptos_shp, censo2022, by=c("codigo" = "IN1"))

Controlo y verifico la unión:

class(deptos_shp)
## [1] "sf"         "data.frame"
dim(deptos_pop2022)
## [1] 529  19
names(deptos_pop2022)
##  [1] "gid"          "objeto"       "fna"          "gna"          "nam"         
##  [6] "codigo"       "fdc"          "sag"          "codigo.y"     "provincia"   
## [11] "departamento" "pob_2022"     "viv_total"    "viv_partic"   "viv_presen"  
## [16] "viv_ausent"   "viv_colect"   "Depto"        "geometry"
sum(is.na(deptos_pop2022$pob_2022))
## [1] 1

Se observa que en la base deptos_pop2022, de tipo geográfica, se unieron las variables del dataset con datos censales. Y que solo hay 1 dato faltante de población, correspondiente al depto. mencionado de Antartida Argentina.

Distribución de establecimientos de salud con internación

Contruyo un mapa con la distribución de todos los establecimientos de salud con internación sobre la capa de departamentos, mejorando su estética general:

ggplot()+
  geom_sf(data=deptos_pop2022, color="white") +
  geom_sf(data=ptos_est_salud, fill=NA, color = "blue", size = 0.5, alpha=0.4, inherit.aes = FALSE) +
  labs(title="Establecimientos de salud con internación",
       subtitle="Argentina, 2022",
       caption="Fuente: REFES, Ministerio de Salud de la Nación")+
  theme_void()+
  theme(title=element_text(size=10, face = "bold"), 
        plot.caption=element_text(face = "italic", colour = "gray35",size=7)) +
coord_sf(
    xlim = c(bbox_ptos_salud["xmin"] - margen, bbox_ptos_salud["xmax"] + margen),
    ylim = c(bbox_ptos_salud["ymin"] - margen, bbox_ptos_salud["ymax"] + margen),
    expand = FALSE
  )

En este mapa, cada establecimiento de salud con internación es representado por un punto. En términos generales, y sin distinción por sector o tipología, se observa una mayor concentración de establecimientos en los departamentos de la región pampeana de Argentina, siendo la región patagónica y algunos sectores del norte del país los que parecen ubicar a los departamentos con menor cantidad de establecimientos. Para una mejor visualización, construyo un mapa de calor, como sigue.

leaflet(ptos_est_salud) %>%
  addTiles() %>%
  addHeatmap(radius = 15,
             max = 0.05) %>%
  addMiniMap()

El mapa de calor obtenido confirma en gran parte lo antes descripto, a lo que se puede agregar un punto caliente en torno a la ciudad de Mendoza.

A continuación, exploro la distribución de los establecimientos de salud considerando el Sector al que pertenece (1:Público; 2:Privado). Para proceder con los análisis convierto la variable SECTOR a factor y le asigno las etiquetas correspondientes:

ptos_est_salud$SECTOR <- factor(ptos_est_salud$SECTOR,
                             levels = c(1, 2),
                             labels = c("Público", "Privado"))

Mapeo los establecimientos (puntos) por sector, como sigue:

ggplot()+
  geom_sf(data=deptos_shp) +
  geom_sf(data=ptos_est_salud, aes(color=SECTOR), size = 0.5, alpha=0.4, inherit.aes = FALSE) +
  labs(title="Establecimientos de salud con internación por sector",
       subtitle="Argentina, 2022",
       caption="Fuente: REFES, Ministerio de Salud de la Nación")+
  scale_color_manual(values=c("deeppink", "blue"))+
  theme_void()+
  theme(title=element_text(size=10, face = "bold"), 
        plot.caption=element_text(face = "italic", colour = "gray35",size=7)) +
coord_sf(
    xlim = c(bbox_ptos_salud["xmin"] - margen, bbox_ptos_salud["xmax"] + margen),
    ylim = c(bbox_ptos_salud["ymin"] - margen, bbox_ptos_salud["ymax"] + margen),
    expand = FALSE
  )

La distribución de establecimientos es heterogénea a lo largo del territorio nacional, para ambos sectores. Para poder apreciar mejor su distribución diferencial por sector, construyo un mapeo facetado por dicha variable (SECTOR):

ggplot()+
  geom_sf(data=deptos_shp) +
  geom_sf(data=ptos_est_salud, aes(color=SECTOR), size = 0.8, alpha=0.4, inherit.aes = FALSE) +
  labs(title="Establecimientos de salud con internación por sector",
       subtitle="Argentina, 2022",
       caption="Fuente: REFES, Ministerio de Salud de la Nación")+
  scale_color_manual(values=c("deeppink", "blue"))+
  theme_void()+
  theme(title=element_text(size=10, face = "bold"), 
        plot.caption=element_text(face = "italic", colour = "gray35",size=7)) +
coord_sf(
    xlim = c(bbox_ptos_salud["xmin"] - margen, bbox_ptos_salud["xmax"] + margen),
    ylim = c(bbox_ptos_salud["ymin"] - margen, bbox_ptos_salud["ymax"] + margen),
    expand = FALSE
  ) +
facet_wrap(~SECTOR)

Esto mapas muestran que los establecimientos del sector público se encuentran más distribuidos a lo largo del territorio nacional, en comparación a aquellos del sector privado, aunque con fuerte concentración en departamentos de la región centro-este. Los establecimientos del sector privado parecen concentrarse mayormente en departamentos de la región pampeana, aunque con menor presencia en los deptos. del noreste y sur de Argentina.

A continuación, para explorar la distribución de departamentos dentro de cada sector, a nivel país, se realizó el siguiente cálculo:

bysector <- ptos_est_salud %>%
  group_by(SECTOR) %>%
  summarise(cantidad = n()) %>%
  mutate(porcentaje = cantidad / sum(cantidad) * 100)

bysector
## Simple feature collection with 2 features and 3 fields
## Geometry type: MULTIPOINT
## Dimension:     XY
## Bounding box:  xmin: -72.88607 ymin: -54.82676 xmax: -53.64927 ymax: -22.05423
## Geodetic CRS:  WGS 84
## # A tibble: 2 × 4
##   SECTOR  cantidad                                           geometry porcentaje
## * <fct>      <int>                                   <MULTIPOINT [°]>      <dbl>
## 1 Público     1710 ((-66.36646 -23.39953), (-66.36746 -23.40147), (-…       26.2
## 2 Privado     4822 ((-65.70179 -23.19446), (-65.59858 -22.10262), (-…       73.8

Se observa que un 73% de los establecimientos de salud con internación de Argentina (n=4822) pertenecen al sector privado, y solo un 26% al ámbito público.

Se considera ahora la distribución de establecimientos según tipología de prestación, como sigue:

ptos_est_salud$TIPOLOGIA <- factor(
  ptos_est_salud$TIPOLOGIA,
  levels = c(1, 2, 3, 4, 5, 6),
  labels = c("Maternidad/materno infantil",
             "Otras especialidades",   
             "Tercera edad",
             "Pediatría",
             "Salud mental",
             "Internación general")
)
bytipologia <- ptos_est_salud %>%
  group_by(TIPOLOGIA) %>%
  summarise(cantidad=n())%>%
  mutate(porcentaje = cantidad / sum(cantidad) * 100)

bytipologia
## Simple feature collection with 6 features and 3 fields
## Geometry type: MULTIPOINT
## Dimension:     XY
## Bounding box:  xmin: -72.88607 ymin: -54.82676 xmax: -53.64927 ymax: -22.05423
## Geodetic CRS:  WGS 84
## # A tibble: 6 × 4
##   TIPOLOGIA                   cantidad                       geometry porcentaje
## * <fct>                          <int>               <MULTIPOINT [°]>      <dbl>
## 1 Maternidad/materno infantil       64 ((-65.20541 -24.2542), (-65.3…      0.980
## 2 Otras especialidades             628 ((-64.79597 -23.8194), (-65.2…      9.61 
## 3 Tercera edad                    3060 ((-65.279 -24.17929), (-65.33…     46.8  
## 4 Pediatría                         47 ((-65.21112 -26.84068), (-65.…      0.720
## 5 Salud mental                     414 ((-63.79709 -22.53031), (-65.…      6.34 
## 6 Internación general             2319 ((-66.36646 -23.39953), (-66.…     35.5
ggplot(bytipologia, aes(x = reorder(TIPOLOGIA, porcentaje), y = porcentaje, fill = TIPOLOGIA)) +
  geom_col(show.legend = FALSE) +
  coord_flip() +
  labs(
    title = "Distribución de establecimientos de salud por tipología",
    x = "Tipología",
    y = "% del total"
  ) +
  scale_fill_brewer(palette = "Set2") +
  theme_minimal()

Se observa que la tipología mas frecuente en Argentina es la de Establecimientos con especialidades para la tercera edad (46.8 % del total de establecimientos de salud con internación del país), seguido por aquellos de Internación General (35.5%). Por su parte, los establecimientos especializados en Pediatría y Maternidad/materno intantil representan, cada uno, menos del 1% del total. Solo un 6% de los establecimientos de salud con internación se especializan en Salud Mental.

Para describir de manera resumida la información sobre las dos variables hasta aquí analizadas, construyo ahora un gráfico de barras como sigue:

sector_tipologia <- ptos_est_salud %>%
  group_by(SECTOR, TIPOLOGIA) %>%          
  summarise(cantidad = n(), .groups = "drop_last") %>%
  group_by(SECTOR) %>%                     
  mutate(porcentaje = cantidad / sum(cantidad) * 100) %>%
  ungroup()

sector_tipologia
## Simple feature collection with 12 features and 4 fields
## Geometry type: MULTIPOINT
## Dimension:     XY
## Bounding box:  xmin: -72.88607 ymin: -54.82676 xmax: -53.64927 ymax: -22.05423
## Geodetic CRS:  WGS 84
## # A tibble: 12 × 5
##    SECTOR  TIPOLOGIA               cantidad                  geometry porcentaje
##    <fct>   <fct>                      <int>          <MULTIPOINT [°]>      <dbl>
##  1 Público Maternidad/materno inf…       34 ((-65.31475 -24.18148), …      1.99 
##  2 Público Otras especialidades          60 ((-65.15243 -24.40583), …      3.51 
##  3 Público Tercera edad                 293 ((-65.33747 -24.17995), …     17.1  
##  4 Público Pediatría                     22 ((-65.21112 -26.84068), …      1.29 
##  5 Público Salud mental                  47 ((-63.79709 -22.53031), …      2.75 
##  6 Público Internación general         1254 ((-66.36646 -23.39953), …     73.3  
##  7 Privado Maternidad/materno inf…       30 ((-65.20541 -24.2542), (…      0.622
##  8 Privado Otras especialidades         568 ((-64.79597 -23.8194), (…     11.8  
##  9 Privado Tercera edad                2767 ((-65.279 -24.17929), (-…     57.4  
## 10 Privado Pediatría                     25 ((-65.19789 -26.82323), …      0.518
## 11 Privado Salud mental                 367 ((-65.29533 -24.18614), …      7.61 
## 12 Privado Internación general         1065 ((-65.70179 -23.19446), …     22.1
 ggplot(sector_tipologia, aes(x = SECTOR, y = porcentaje, fill = TIPOLOGIA)) +
   geom_col(position = "fill") +   
   scale_y_continuous(labels = scales::percent_format(scale = 100)) +
   labs(title = "Distribución de establecimientos de salud con internación",
         subtitle="Tipologías dentro de cada secto. Argentina, 2022",
        y = "% de establecimientos",
        fill = "Tipología") +
   theme_minimal()

Como lo más destacado, se observa que la tipología de establecimiento de salud más frecuente dentro del sector público es la de internación general, la cual representa el 73% de los establecimientos en este sector versus solo el 22% del total de los establecimientos en el sector privado. En cambio, en este último, la categoría con mayor porcentaje fue la de tercera edad, correspondiente al 57% de los establecimientos del sector privado.

Ahora voy a contruir un mapa interactivo, para lo cual antes debo ajustar el encoding para evitar que tildes y “ñ” salgan mal. Me aseguro además que la latitud y longitud estén en formato numérico:

ptos_est_salud <- ptos_est_salud %>%
  mutate_if(is.character, iconv, from="UTF-8", to="latin1" )

ptos_est_salud$LONGITUD <- as.numeric(ptos_est_salud$LONGITUD)
ptos_est_salud$LATITUD  <- as.numeric(ptos_est_salud$LATITUD)

Armo luego una paleta de colores que diferencie cada establecimiento de salud por su tipología, y con ello, ejecuto el mapa interactivo:

factpal <- colorFactor(palette = "Set2", domain = ptos_est_salud$TIPOLOGIA)

leaflet(ptos_est_salud) %>%
  addTiles() %>%
  addCircleMarkers(
    ~LONGITUD, ~LATITUD,
    popup = paste("Tipología:", ptos_est_salud$TIPOLOGIA, "<br>",
                  "Sector:", ptos_est_salud$SECTOR),
    color = ~factpal(TIPOLOGIA),
    radius = 5,
    fillOpacity = 0.8
  ) %>%
  addLegend(
    "bottomright",
    pal = factpal,
    values = ~TIPOLOGIA,
    title = "Tipología",
    opacity = 1
  ) %>%
  addMiniMap()

Obtengo mi mapa, el cual permita visualizar la distribución de cada establecimiento de salud con internación de Argentina, y explorar de manera interactiva (con un click) su información conjunta de Sector y Tipología.

Respecto a las tipologías que resultaron las mas frecuente dentro de cada sector (Tercera edad en el privado e Internación General en el público), el mapa muestra claramente que los establecimientos especializados en la tercera edad se concentran principalmente en la región pampeana, mientras que los de internación general están mas distribuidos en todas las regiones del país.

Distribución de la densidad de establecimientos de salud con internación

Me interesa ahora explorar la distribución del indicador densidad de establecimientos de salud con internación a nivel de departamento, el cual representa la cantidad de establecimientos cada 10000 habitantes.

Para obtener este indicador, comienzo por calcular y explorar la cantidad de establecimientos por departamento:

ptos_salud_bydpto <- ptos_est_salud %>%
  group_by(IDDPTO) %>%
  summarise(cantidad=n())
ptos_salud_bydpto %>%
  arrange(desc(cantidad)) %>%
  head(3)
## Simple feature collection with 3 features and 2 fields
## Geometry type: MULTIPOINT
## Dimension:     XY
## Bounding box:  xmin: -64.3036 ymin: -38.10762 xmax: -57.53233 ymax: -31.32279
## Geodetic CRS:  WGS 84
## # A tibble: 3 × 3
##   IDDPTO cantidad                                                       geometry
##   <chr>     <int>                                               <MULTIPOINT [°]>
## 1 14014       284 ((-64.14628 -31.37923), (-64.14639 -31.37925), (-64.13586 -31…
## 2 06357       214 ((-57.61112 -37.94543), (-57.62046 -37.95981), (-57.61476 -37…
## 3 82084       208 ((-60.78169 -32.92801), (-60.77317 -32.90938), (-60.81368 -32…

Los departamentos 14014, 06357 y 82082 son los que presentan mayor cantidad de establecimientos de salud con internación (con valores por encima de 200). Los mismos pertenecen a las provincias de Córdoba, Buenos Aires y Santa Fe, respectivamente.

Ahora quiero unir mis dataset utilizando left_join(), por lo cual es necesario que al menos uno de los dos datasets no sea espacial. Por eso, el siguiente paso fue transformar el dataset espacial ptos_salud_bydpto en un dataset tradicional, quitándole la geometría con la función st_set_geometry().

ptos_salud_bydpto <- ptos_salud_bydpto %>%
  st_set_geometry(NULL)
head(ptos_salud_bydpto)
## # A tibble: 6 × 2
##   IDDPTO cantidad
##   <chr>     <int>
## 1 02001        26
## 2 02002        41
## 3 02003        49
## 4 02004        37
## 5 02005        59
## 6 02006        53
class(ptos_salud_bydpto)
## [1] "tbl_df"     "tbl"        "data.frame"

Verifico que el dataset ya no es geográfico y realizo entonces la unión con el dataset espacial de deptos utilizando left_join(). Luego controlo la unión:

dim(deptos_pop2022)
## [1] 529  19
deptos_pop2022 <- left_join(deptos_pop2022, ptos_salud_bydpto, by = c("codigo" = "IDDPTO"))

class(deptos_pop2022)
## [1] "sf"         "data.frame"
dim(deptos_pop2022)
## [1] 529  20
names(deptos_pop2022)
##  [1] "gid"          "objeto"       "fna"          "gna"          "nam"         
##  [6] "codigo"       "fdc"          "sag"          "codigo.y"     "provincia"   
## [11] "departamento" "pob_2022"     "viv_total"    "viv_partic"   "viv_presen"  
## [16] "viv_ausent"   "viv_colect"   "Depto"        "cantidad"     "geometry"
sum(is.na(deptos_pop2022$pob_2022))
## [1] 1

Compruebo que la unión se realizó correctamente, y que ahora en el dataset geográfico de deptos tengo la variable cantidad antes generada, correspondiente a la cantidad de establecimientos de salud con internación por cada departamento de Argentina. Esta me servirá para calcular el indicador densidad de establecimientos por población y mapearlo, como sigue.

Antes de proseguir, en la variable cantidad asigno valor 0 a los deptos que tienen valores NA, como sigue:

deptos_pop2022$cantidad <- ifelse(is.na(deptos_pop2022$cantidad), 0, deptos_pop2022$cantidad)

Construyo el mapa de distribución espacial del indicador de densidad de interés:

ggplot()+
  geom_sf(data=deptos_pop2022, aes(fill= (cantidad / pob_2022) * 10000)) +
  scale_fill_viridis_c(option = "plasma", 
                       name = "Cantidad/10000 habitantes", direction = -1, na.value = "white" ) +
  labs(title="Densidad de establecimientos de salud con internación",
       subtitle="Argentina, 2022",
       caption="Fuente: REFES, Ministerio de Salud de la Nación")+
  theme_minimal()+
  theme(title=element_text(size=10, face = "bold"), 
        plot.caption=element_text(face = "italic", colour = "gray35",size=7)) +
coord_sf(
    xlim = c(bbox_ptos_salud["xmin"] - margen, bbox_ptos_salud["xmax"] + margen),
    ylim = c(bbox_ptos_salud["ymin"] - margen, bbox_ptos_salud["ymax"] + margen),
    expand = FALSE
  )

Vemos que, al considera la cantidad de habitantes del departamento, el patrón geográfico difiere un poco del descripto anteriormente (basado solo en la cantidad total de establecimientos). La principal diferencia está en que, en la región patagónica, la densidad de establecimientos es alta en algunos departamentos, aunque estos datos deben interpretarse con cautela dada la baja densidad poblacional de la región. La región pampeana, en cambio, también concentra los mayores valores para este indicador, principalmente en los departamentos de la Provincia de Buenos Aires. La región del noreste y cuyana, por su parte, presenta niveles de densidad bajo en gran parte de sus departamentos.

Para aportar a la descripción de este indicador, se calcularon medidas resumen y se construyó un histograma, como sigue:

densidad <- (deptos_pop2022$cantidad / deptos_pop2022$pob_2022) * 10000
summary(densidad, na.rm = TRUE)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
##  0.0000  0.7261  1.3561  1.8044  2.3657 12.3229       1
sd(densidad, na.rm = TRUE)        
## [1] 1.638263
ggplot(deptos_pop2022, aes(x = (cantidad / pob_2022) * 10000)) +
  geom_histogram(binwidth = 1, fill = "pink", color = "red", alpha = 0.7) +
  geom_vline(
    xintercept = median((deptos_pop2022$cantidad / deptos_pop2022$pob_2022) * 10000, na.rm = TRUE),
    color = "red4",
    linetype = "dashed",
    size = 1) +
  labs(
    title = "Distribución de la densidad de establecimientos de salud",
    subtitle = "Por 10.000 habitantes, Argentina 2022",
    x = "Establecimientos por 10.000 habitantes",
    y = "Frecuencia de departamentos (cantidad)") +
  scale_x_continuous(breaks = seq(0, max((deptos_pop2022$cantidad / deptos_pop2022$pob_2022) * 10000, na.rm = TRUE), 1), expand = c(0, 0)) +
  scale_y_continuous(expand = c(0, 0)) +  
  theme_minimal(base_size = 12)

Esta figura ilustra la distribución del indicador densidad de establecimientos de salud con internación (cantidad/10.000 habitantes) en Argentina, marcando con una línea punteada el valor de la mediana para dicho indicador (igual a 1.3 establecimientos/10.000 hab.). Se observa que existe una distribución marcadamente asimétrica, con notables brechas entre los valores extremos de este indicador. Puede también observarse que el 50% de los deptos. tienen entre 1 y 2 establecimientos / 10.000 habitantes o menos, y el 50% se ubica por encima de ese valor, existiendo incluso un número pequeño de departamentos que tienen más de 6 establecimientos de salud/10.000 habitantes. De la interpretación de las medidas resumen calculadas puede agregarse que la media (desvío estándar) del indicador fue de 1.8 (1.6) establecimientos/10.000 hab., registrándose un valor mínimo de 0 y máximo de 12/10.000. Solo en un 25% de los departamentos de Argentina existen mas de 2 establecimientos cada 10.000 habitantes (Q3=2.36).

Conclusión final

En función de los resultados presentados, se concluye que la distribución geográfica, a escala departamental, de los establecimientos de salud con internación (del 2do o 3er nivel de atención) en Argentina es heterogénea a lo largo del territorio nacional, con diferenciales marcados entre regiones geográficas y según pertenezcan al sector público o privado. Las tipologías de prestaciones mas representadas dentro de cada sector también difieren en su porcentaje y distribución espacial, siendo los establecimientos para la tercera edad los mas frecuentes en el sector privado y los destinados a internación general en el sector público.

En término de la densidad de estos establecimientos (cantidad por cada 10.000 habitantes) en 2022, los mapas ilustran una distribución desigual en el territorio nacional, que parece evidenciar una situación de desventaja en los departamentos del noreste argentino y región de Cuyo.