Skip to contents

Objetivo

Al final de este tutorial usted será capaz de importar microdatos de los Sistemas de Información en Salud del DATASUS con una única función — sus_data_import() — y de controlar sus principales recursos: la elección del sistema (SIM, SIH, SINAN, SINASC, CNES, SIA) y sus subsistemas, el recorte espacial (por UF, por región predefinida o por municipio), la diferencia entre sistemas anuales y mensuales, la elección del backend de procesamiento y — fundamental para trabajos reproducibles y de gran volumen — la caché inteligente y el procesamiento paralelo.

La importación es la primera etapa del pipeline de climasus4r. Todo lo que viene después (estandarización, filtrado, creación de variables, agregación, unión espacial, vínculo socioeconómico, integración climática y modelado) parte de la base bruta construida aquí.

Contexto científico

La investigación en clima y salud en Brasil se apoya en los Sistemas de Información en Salud (SIS) mantenidos por el Ministerio de Salud y puestos a disposición por el DATASUS. Cada sistema registra un tipo de evento, con cobertura nacional y granularidad municipal:

  • SIM — Sistema de Información sobre Mortalidad (declaraciones de defunción);
  • SIH — Sistema de Información Hospitalaria (hospitalizaciones/AIH);
  • SINAN — Sistema de Información de Agravios de Notificación (enfermedades de notificación obligatoria, como dengue, zika y chikungunya);
  • SINASC — Sistema de Información sobre Nacidos Vivos;
  • CNES — Registro Nacional de Establecimientos de Salud;
  • SIA — Sistema de Información Ambulatoria.

El acceso programático a esos archivos .dbc está mediado por el paquete microdatasus (Saldanha, Bastos & Barcellos, 2019). climasus4r encapsula ese acceso en sus_data_import(), añadiendo caché (para no volver a descargar los mismos datos en cada ejecución), paralelismo (para acelerar descargas de muchas UF/años) y mensajes multilingües. Importar de forma reproducible — registrando sistema, año y recorte espacial — es lo que hace que un estudio sea auditable y replicable.

Caso guía. A lo largo de toda la serie de tutoriales investigamos la temperatura y los desenlaces de salud en personas mayores (60+) en la Región Metropolitana de São Paulo, 2014–2019. En este primer tutorial armamos la base bruta multisistema: defunciones (SIM-DO), hospitalizaciones (SIH-RD) y, como caso secundario de clima × arbovirosis, dengue (SINAN-DENGUE). Los objetos importados aquí se guardan y servirán de entrada para el Tutorial 2 (Encoding y Estandarización).

Datos utilizados

Sistema system = Periodicidad Papel en el caso
SIM-DO (defunciones) "SIM-DO" Anual Desenlace principal (mortalidad)
SIH-RD (hospitalizaciones) "SIH-RD" Mensual (exige month) Morbilidad hospitalaria
SINAN-DENGUE "SINAN-DENGUE" Anual Caso secundario (clima × dengue)

Recorte espacial: estado de São Paulo (uf = "SP"), 2014–2019. Todos los datos son públicos y reales, obtenidos del DATASUS mediante microdatasus.

Pipeline completo

Los bloques a continuación reproducen lo que ejecuta el script scripts/tutorial_01_importacao.R. Comience cargando el paquete:

library(climasus4r)

Importar un sistema anual (SIM-DO)

El SIM es anual: el argumento month se ignora. Pedimos los seis años de una vez y dejamos activados la caché y el paralelismo.

obitos <- sus_data_import(
  uf        = "SP",
  year      = 2014:2019,
  system    = "SIM-DO",
  backend   = "arrow",   # "arrow" (lazy, padrão) ou "tibble" (em memória)
  use_cache = TRUE,        # reaproveita downloads anteriores
  parallel  = TRUE,        # baixa anos em paralelo
  workers   = 4,
  lang      = "pt"
)

Visualizar datos

dplyr::glimpse(obitos)

Importar un sistema mensual (SIH-RD)

El SIH es mensual: el argumento month es obligatorio. Aquí pedimos solo los meses de invierno (junio a agosto), cuando la mortalidad respiratoria en personas mayores tiende a ser más alta.

internacoes <- sus_data_import(
  uf        = "SP",
  year      = 2014:2019,
  month     = 6:8,         # obrigatório para SIH, CNES e SIA
  system    = "SIH-RD",
  use_cache = TRUE,
  parallel  = TRUE,
  workers   = 4,
  lang      = "pt"
)

Visualizar datos

dplyr::glimpse(internacoes)

Importar notificaciones (SINAN-DENGUE)

dengue <- sus_data_import(
  uf        = "SP",
  year      = 2014:2019,
  system    = "SINAN-DENGUE",
  use_cache = TRUE,
  lang      = "pt"
)

Visualizar datos

dplyr::glimpse(dengue)

Recorte espacial: por región o por municipio

En lugar de listar UF, puede usar un grupo predefinido en region (macrorregiones, biomas o cuencas) — útil para estudios regionales:

# Toda a macrorregião Sudeste (ES, MG, RJ, SP) de uma vez:
obitos_sudeste <- sus_data_import(
  region = "sudeste",
  year   = 2019,
  system = "SIM-DO",
  lang   = "pt"
)

Visualizar datos

dplyr::glimpse(obitos_sudeste)

O bien restringir a un municipio por código IBGE (o nombre en city). El filtro se resuelve al código IBGE antes de la descarga:

# Apenas o município de São Paulo (código IBGE 3550308):
obitos_muni_sp <- sus_data_import(
  uf                = "SP",
  year              = 2014:2019,
  system            = "SIM-DO",
  municipality_code = "3550308",
  lang              = "pt"
)

Visualizar datos

dplyr::glimpse(obitos_muni_sp)

(Opcional) Releer datos ya exportados

Después de exportar la base (con sus_data_export()), puede releerla en sesiones futuras sin volver a descargarla, con sus_data_read() — que detecta el formato automáticamente:

obitos <- sus_data_read("output/sim_sp_2014_2019.parquet")

Al final de esta etapa tenemos obitos, internacoes y dengue — la base bruta multisistema que alimentará los próximos tutoriales.

Características de las funciones

sus_data_import()

La única puerta de entrada de la etapa de importación. Encapsula microdatasus::fetch_datasus (Saldanha, Bastos & Barcellos, 2019) con caché y paralelismo.

Argumento ¿Esencial? Descripción
uf / region sí (uno de ellos) UF(s) ("SP", c("SP","RJ"), "all") o grupo predefinido ("sudeste", "amazonia_legal", …)
year sí Año(s) con 4 dígitos (ej.: 2014:2019)
system sí Sistema/subsistema (ver tabla de sistemas abajo)
month solo mensuales Mes(es) 1–12; obligatorio para SIH, CNES y SIA; se ignora en SIM, SINAN y SINASC
backend opcional "arrow" (lazy, por defecto, muy rápido) o "tibble" (en memoria)
city / municipality_code opcional Restringe a municipios (nombre o código IBGE de 6/7 dígitos)
use_cache recomendado TRUE reutiliza descargas; cache_dir define la carpeta
force_redownload opcional TRUE ignora la caché y vuelve a descargar todo
parallel / workers opcional Paraleliza combinaciones UF/año; respeta el future::plan() del usuario
lang / verbose opcional Idioma ("pt", "en", "es") y nivel de mensajes

Retorno: un tibble/data.frame (u objeto Arrow, si backend = "arrow") con las variables originales del sistema, más source_system y download_timestamp, fechas como objetos Date y texto en UTF-8.

Caché inteligente. Las llamadas se identifican mediante una clave SHA-256 de los parámetros (UF, año, mes, sistema). Los resultados quedan en cache_dir (~/.climasus4r_cache/data por defecto) como RDS comprimido y se reutilizan automáticamente. La caché expira en ~30 días para sistemas dinámicos (CNES, SIA, SIH) y ~365 días para los estáticos (SIM, SINAN, SINASC).

sus_data_read()

Relee archivos ya exportados, sin volver a la fuente. Autodetecta el formato.

Argumento Descripción
path Ruta de un archivo, vector de archivos, o una carpeta
format NULL (autodetecta) o "parquet", "csv", "dbc", "rds", "shapefile", …
parallel / workers Lectura paralela de muchos archivos
read_metadata Recupera metadatos asociados como atributos

Retorno: la tabla leída (u objeto sf, para datos espaciales); las lecturas en lote se combinan con dplyr::bind_rows().

Sistemas y subsistemas soportados

Tabla 1. Sistemas del DATASUS accesibles mediante sus_data_import().
Sistema Descricao Exemplos_system Periodicidade
SIM Mortalidade (declaracoes de obito) SIM-DO, SIM-DOFET, SIM-DOINF, SIM-DOMAT, SIM-DOEXT Anual (month ignorado)
SIH Internacoes hospitalares (AIH) SIH-RD, SIH-RJ, SIH-SP, SIH-ER Mensal (exige month)
SINASC Nascidos vivos SINASC Anual (month ignorado)
SINAN Agravos de notificacao (doencas notificaveis) SINAN-DENGUE, SINAN-ZIKA, SINAN-CHIKUNGUNYA, SINAN-MALARIA, … Anual (month ignorado)
CNES Estabelecimentos de saude CNES-LT, CNES-ST, CNES-EQ, CNES-PF, … Mensal (exige month)
SIA Atendimentos ambulatoriais SIA-PA, SIA-AB, SIA-AD, … Mensal (exige month)

Atajos de region (descargan varias UF de una vez):

Tabla 2. Ejemplos de grupos predefinidos aceptados en region.
Grupo Tipo UFs
sudeste Macrorregiao IBGE ES, MG, RJ, SP
sul Macrorregiao IBGE PR, RS, SC
nordeste Macrorregiao IBGE AL, BA, CE, MA, PB, PE, PI, RN, SE
norte Macrorregiao IBGE AC, AP, AM, PA, RO, RR, TO
centro_oeste Macrorregiao IBGE DF, GO, MT, MS
amazonia_legal Bioma/fronteira ecologica AC, AP, AM, PA, RO, RR, MT, MA, TO
mata_atlantica Bioma AL, BA, CE, ES, GO, MA, MG, MS, PB, PE, PI, PR, RJ, RN, RS, SC, SE, SP
cerrado Bioma BA, DF, GO, MA, MG, MS, MT, PA, PI, PR, RO, SP, TO
bacia_sao_francisco Bacia hidrografica AL, BA, DF, GO, MG, PE, SE
semi_arido Recorte climatico AL, BA, CE, MA, PB, PE, PI, RN, SE, MG

Estructura típica del SIM-DO justo después de la importación (causa básica en CAUSABAS, edad codificada en IDADE, municipio de residencia en CODMUNRES):

Tabla 3. Muestra de las columnas clave del SIM-DO importado.
DTOBITO DTNASC SEXO IDADE RACACOR CAUSABAS CODMUNRES CODMUNOCOR
08072017 17071962 2 454 1 C383 352230 352230
13062017 02091986 2 430 4 C099 353870 353870
05072017 14051971 2 446 4 C710 351170 353870
23062017 24081940 1 476 4 R960 351030 351030
07062017 21041928 1 489 1 R960 351030 351030
13052017 04091945 1 471 1 I119 351030 351030
28052017 02031949 2 468 4 I110 351030 351030
24062017 03101950 2 466 1 I120 351030 351030
13032017 28051917 2 499 1 I500 351040 351040
13032017 01031953 2 464 1 C538 351040 351040

Rendimiento: caché y paralelismo

Dos recursos de sus_data_import() hacen que la importación sea reproducible y rápida. La ganancia relativa (speedup) es la razón entre el tiempo sin el recurso y el tiempo con él:

speedup=tsem recursotcom recurso \text{speedup} = \frac{t_{\text{sem recurso}}}{t_{\text{com recurso}}}

Valores de speedup superiores a 1 indican aceleración. Las figuras a continuación presentan mediciones reales hechas por el script de generación.

Figura 1. Benchmark de caché. La primera llamada descarga los datos de la red; la segunda lee de la caché local, típicamente órdenes de magnitud más rápida — sin ningún cambio en el código de análisis.

Figura 2. Benchmark de paralelismo. Importar los seis años con workers = 4 es más rápido que en serie (workers = 1). La ganancia depende del número de núcleos disponibles; sus_data_import() avisa si workers excede los núcleos de la máquina.

Resultados ilustrados

Figura 3. Número de registros importados por sistema para São Paulo, 2014–2019 (el SIH-RD se restringió al invierno, junio–agosto, para mantener el ejemplo liviano). El orden de magnitud muy diferente entre sistemas ayuda a dimensionar memoria y tiempo de descarga.

Figura 4. Serie mensual de defunciones (todas las causas) del SIM-DO en São Paulo, 2014–2019. La estacionalidad de invierno ya es visible en la base bruta y será el punto de partida para los recortes (personas mayores, causas respiratorias) de los próximos tutoriales.

Referencias

  • Saldanha, R. de F., Bastos, R. R., & Barcellos, C. (2019). Microdatasus: pacote para download e pré-processamento de microdados do Departamento de Informática do SUS (DATASUS). Cadernos de Saúde Pública, 35(9), e00032419.
  • Ministério da Saúde (Brasil). DATASUS — Departamento de Informática do SUS. Disponible en: http://datasus.saude.gov.br.