
Tutorial 6: Vínculo de Datos Socioeconómicos
Equipo climasus4r
17/10/2026
Source:vignettes/06-socioeconomico.Rmd
06-socioeconomico.RmdObjetivo
Al final de este tutorial usted será capaz de vincular variables del Censo Demográfico brasileño con los datos de salud ya espacializados y calcular indicadores socioeconómicos y epidemiológicos estandarizados. Aprenderá a:
-
descubrir qué variables del censo están disponibles
con
sus_census_select(); -
descargar y agregar microdatos (o sectores) del
censo a nivel municipal y unirlos a los datos de salud con
sus_census_join()(mediante el paquetecensobr); -
calcular indicadores como envejecimiento,
dependencia y cobertura de saneamiento — con intervalos de
confianza — usando
sus_socio_compute_indicators(); -
consultar el catálogo completo de indicadores con
sus_socio_list_indicators().
El vínculo socioeconómico es la sexta etapa del
pipeline de climasus4r. Exige que los datos ya hayan pasado
por la unión espacial (Tutorial 5), pues la clave del
vínculo es el código IBGE de 7 dígitos del municipio
(code_muni_7).
Contexto científico
Los estudios de clima y salud rara vez pueden tratar a la población como homogénea. La vulnerabilidad social — pobreza, baja escolaridad, saneamiento precario, estructura etaria envejecida — modula la relación entre la exposición ambiental (temperatura, contaminación) y los desenlaces de salud, actuando tanto como factor de confusión como modificador de efecto (Gouveia, Hajat & Armstrong, 2003; Hajat, O’Connor & Kosatsky, 2010). Los adultos mayores en domicilios sin infraestructura adecuada, por ejemplo, sufren más durante las olas de calor.
En Brasil, la fuente oficial de estas variables es el Censo
Demográfico del IBGE, accesible programáticamente mediante el
paquete censobr (Pereira & Barbosa, 2023).
climasus4r encapsula ese acceso en
sus_census_join(), descargando el dataset elegido,
filtrando solo los municipios presentes en los datos de salud
antes de cargarlos en memoria (optimización Arrow/Parquet),
agregando los microdatos al nivel municipal y realizando la unión por la
clave geográfica.
A partir de estas variables,
sus_socio_compute_indicators() calcula un conjunto de
indicadores estandarizados (demográficos,
socioeconómicos, de mortalidad, morbilidad, salud materno-infantil y
recursos de salud), cada uno con su fórmula,
multiplicador y método de
incertidumbre declarados en un catálogo interno.
Aviso metodológico (sesgo ecológico). Los indicadores municipales describen el agregado, no al individuo: las asociaciones observadas entre la vulnerabilidad promedio de un municipio y sus desenlaces de salud no se transfieren automáticamente a las personas (falacia ecológica). La escala de agregación también importa — el mismo fenómeno puede cambiar de signo según la unidad (problema de la unidad de área modificable, MAUP). Use estos indicadores como covariables de área, no como atributos individuales.
Caso conductor. Investigamos la temperatura y los desenlaces de salud en adultos mayores (60+) en la Región Metropolitana de São Paulo, 2014–2019. En el Tutorial 5 espacializamos las defunciones respiratorias (J00–J99) y cardiovasculares (I00–I99) por municipio. Aquí vinculamos variables del Censo 2010 y calculamos indicadores de vulnerabilidad (envejecimiento, dependencia, cobertura de alcantarillado y agua) que servirán como covariables/modificadores de efecto en el modelado clima–salud de los próximos tutoriales.
Datos utilizados
| Ítem | Valor | Papel en el caso |
|---|---|---|
| Entrada |
dados/caso_espacial.rds (Tutorial 5) |
Defunciones espacializadas por municipio (RMSP) |
| Dataset del censo |
"population" (Censo 2010) |
Población por municipio (adultos mayores, jóvenes, activos) |
| Clave de vínculo |
code_muni_7 (IBGE, 7 dígitos) |
Une salud × censo |
| Indicadores | envejecimiento, dependencia, alcantarillado, agua | Vulnerabilidad municipal |
| Salida | dados/caso_socio.rds |
Entrada del Tutorial 7 (clima INMET) |
Todos los datos son públicos y reales (IBGE/Censo
vía censobr).
Pipeline completo
Los bloques de abajo reproducen lo que ejecuta el script
scripts/tutorial_06_socioeconomico.R. Comience cargando el
paquete y la entrada encadenada:
library(climasus4r)
# Saída do Tutorial 5: óbitos espacializados por município (stage "spatial",
# com a coluna code_muni_7 — chave do vínculo).
caso_espacial <- readRDS("dados/caso_espacial.rds")Paso 1 — Descubrir variables del censo
(sus_census_select())
Antes de descargar el censo, conviene descubrir los
códigos de las variables. En uso interactivo,
output = "browser" abre una interfaz HTML navegable; en
scripts, prefiera output = "codes", que retorna un
vector de códigos sin abrir el navegador:
# Códigos das variáveis de população do Censo 2010 (uso programático):
vars_pop <- sus_census_select(
dataset = "population", # "all", "population", "households", "families", ...
year = 2010, # 2010 (padrão) ou 2000
output = "codes", # "browser" (padrão), "console" ou "codes"
lang = "pt",
verbose = FALSE
)
head(vars_pop)Paso 2 — Vincular el censo (sus_census_join())
sus_census_join() descarga el dataset elegido vía
censobr, filtra solo los municipios
presentes en code_muni_7, agrega los microdatos al
nivel municipal (aggregation_fun) y realiza el
left_join. Requiere que los datos estén en la etapa
>= "spatial":
caso_enriquecido <- sus_census_join(
df = caso_espacial,
dataset = "population", # "population"/"households"/"families"/
# "mortality"/"emigration"/"tracts"
year = 2010, # 2010 (padrão) ou 2000
census_vars = head(vars_pop, 6),# NULL = todas (não recomendado)
aggregation_fun = "sum", # "sum","mean","median","min","max","sd",
# "q25","q75","q95","q99"
use_cache = TRUE, # cache local do censobr
cache_dir = "~/.climasus4r_cache/census",
lang = "pt",
verbose = TRUE
)Cada variable numérica agregada recibe el sufijo del modo de
agregación (ej.: V0001 agregada por suma se
convierte en V0001_sum). Si la entrada es un objeto
sf, la geometría se conserva en la
salida.
Para usar datos de sectores censales en lugar de
microdatos, cambie a dataset = "tracts" y elija la tabla en
tracts_dataset (ej.: "Basico",
"DomicilioRenda", "Pessoa03"):
caso_setores <- sus_census_join(
df = caso_espacial,
dataset = "tracts",
tracts_dataset = "Basico", # "Basico","Domicilio01/02","DomicilioRenda",
# "Pessoa01"..."Pessoa13","ResponsavelRenda", ...
year = 2010,
lang = "pt"
)Paso 3 — Consultar el catálogo de indicadores
(sus_socio_list_indicators())
Antes de calcular, inspeccione lo disponible. Sin red, retorna un
tibble con id, name,
category, required_cols, formula,
multiplier, unit,
uncertainty_method y source:
catalogo <- sus_socio_list_indicators(lang = "pt")
# Filtrar por categoria, se desejar:
sus_socio_list_indicators(lang = "pt", category = "mortality")Paso 4 — Calcular indicadores
(sus_socio_compute_indicators())
Los indicadores se definen en espacio de fórmula
(nombres como pop_elderly, total_hh). Como las
columnas provenientes del censo tienen otros nombres (ej.:
V0001_sum), use col_mapping para
conectar nombres de fórmula → columnas reales:
caso_socio <- sus_socio_compute_indicators(
df = caso_enriquecido,
indicators = c("aging_index", "dependency_ratio",
"sewage_connection_rate", "water_connection_rate"),
col_mapping = list(
pop_elderly = "pop_65_plus_sum", # aponte para as colunas agregadas reais
pop_young = "pop_0_14_sum",
pop_working = "pop_15_64_sum",
pop_total = "V0001_sum",
total_hh = "V003_sum",
hh_sewage = "V0207_sum",
hh_water = "V0208_sum"
),
confidence_level = 0.95, # IC de Poisson (taxas) / Wilson (proporções)
add_ci = TRUE, # adiciona colunas ind_<id>_low / ind_<id>_high
lang = "pt",
verbose = TRUE
)Cada indicador calculado se convierte en una columna
ind_<id> (ej.: ind_aging_index), y —
cuando el método de incertidumbre no es "none" y
add_ci = TRUE — también ind_<id>_low y
ind_<id>_high. Si indicators = NULL, la
función detecta automáticamente todos los indicadores
cuyas columnas requeridas están presentes (después del
col_mapping); los indicadores sin las columnas necesarias
son omitidos con aviso, nunca interrumpen la
ejecución.
Al final, caso_socio se guarda (con
save_tbl() en el script) y alimenta el Tutorial 7 (Clima
basado en estaciones — INMET).
Características de las funciones
sus_census_select()
Explorador de las variables del censo. Ayuda a descubrir
códigos para usar en
sus_census_join(census_vars = ...).
| Argumento | ¿Esencial? | Descripción |
|---|---|---|
dataset |
recomendado |
"all" (predeterminado), "population",
"households", "families",
"mortality", "emigration",
"tracts"
|
year |
opcional |
2010 (predeterminado) o 2000
|
output |
recomendado |
"browser" (HTML interactivo, predeterminado),
"console" o "codes" (vector) |
lang |
opcional |
"pt" (predeterminado), "en",
"es"
|
verbose |
opcional | Mensajes informativos |
Retorno: con "codes", un vector de
caracteres con los códigos; con
"browser"/"console", retorna de forma
invisible un data.frame (y abre/imprime la interfaz).
sus_census_join()
Vincula variables del censo (microdatos o sectores) con los datos de
salud. Wrapper de censobr::read_population(),
read_households(), read_tracts(), etc.
| Argumento | ¿Esencial? | Descripción |
|---|---|---|
df |
sí |
climasus_df/sf en etapa
>= "spatial", con code_muni_7
|
dataset |
sí |
"population" (predeterminado),
"households", "families",
"mortality", "emigration",
"tracts"
|
tracts_dataset |
solo tracts
|
Tabla de sectores: "Basico" (predeterminado),
"DomicilioRenda", "Pessoa01..13", … |
year |
opcional |
2010 (predeterminado) o 2000
|
census_vars |
recomendado | Vector de códigos (use sus_census_select());
NULL = todas |
aggregation_fun |
opcional |
"sum" (predeterminado), "mean",
"median", "min", "max",
"sd", "q25", "q75",
"q95", "q99"
|
join_muni_col |
opcional | Columna del código IBGE; NULL detecta patrones SUS |
use_cache / cache_dir
|
recomendado | Caché de censobr
(~/.climasus4r_cache/census) |
translate_columns /
standardize_values
|
opcional | Traduce nombres y etiquetas (predeterminado TRUE) |
lang / verbose
|
opcional | Idioma y mensajes |
Retorno: el mismo df (o
sf) con columnas adicionales del censo (sufijadas por el
modo de agregación, ej.: _sum); los metadatos avanzan a
stage = "census".
sus_socio_compute_indicators()
Calcula indicadores estandarizados sobre las columnas presentes, con intervalos de confianza opcionales.
| Argumento | ¿Esencial? | Descripción |
|---|---|---|
df |
sí |
climasus_df en etapa >= "spatial"
(salida de sus_census_join()) |
indicators |
opcional | Vector de IDs; NULL = todos los calculables
(autodetección) |
col_mapping |
recomendado | Lista nombrada: nombre de fórmula → columna real (ej.:
list(total_hh = "V003_sum")) |
confidence_level |
opcional | Nivel de confianza (predeterminado 0.95) |
add_ci |
opcional |
TRUE (predeterminado) añade
ind_<id>_low/_high
|
lang / verbose
|
opcional | Idioma y mensajes |
Retorno: el climasus_df con columnas
ind_<id> (y _low/_high
cuando corresponda); sus_meta actualizado a
type = "indicators".
sus_socio_list_indicators()
Lista el catálogo completo de indicadores. No depende de la red.
| Argumento | Descripción |
|---|---|
lang |
Idioma de los nombres: "pt" (predeterminado),
"en", "es"
|
category |
Filtra por categoría (ej.: "demographic",
"mortality"); NULL = todas |
Retorno: un tibble con id,
name, category, required_cols,
formula, multiplier, unit,
uncertainty_method, source.
Fórmulas
Los indicadores se calculan como una razón (tasa/proporción) multiplicada por un factor de escala. De forma general:
donde
es el multiplier declarado en el catálogo. Ejemplos usados
en el caso conductor:
Intervalos de confianza. Para tasas basadas en conteo de eventos (mortalidad, incidencia, hospitalizaciones), se usa el intervalo exacto de Poisson (Garwood), basado en la distribución Gama:
Para proporciones (coberturas, %), se usa el intervalo de puntuación de Wilson:
con
,
el número de eventos y
el denominador. Las razones con numeradores complejos o índices directos
(ej.: Gini) no reciben IC
(uncertainty_method = "none").
Resultados ilustrados
| id | name | category | unit | uncertainty_method | source |
|---|---|---|---|---|---|
| dependency_ratio | Razao de Dependencia | demographic | % | none | census |
| aging_index | Indice de Envelhecimento | demographic | % | none | census |
| urbanization_rate | Taxa de Urbanizacao | demographic | % | binomial | census |
| illiteracy_rate | Taxa de Analfabetismo | socioeconomic | % | binomial | census |
| water_connection_rate | Cobertura de Agua Encanada | socioeconomic | % | binomial | census |
| sewage_connection_rate | Cobertura de Esgoto | socioeconomic | % | binomial | census |
| gini_index | Indice de Gini | socioeconomic | index (0-1) | none | census |
| infant_mortality_rate | Taxa de Mortalidade Infantil | mortality | per 1,000 live births | poisson | sim_sinasc |
| maternal_mortality_ratio | Razao de Mortalidade Materna | mortality | per 100,000 live births | poisson | sim_sinasc |
| premature_dcn_mortality | Mortalidade Prematura por DCNT | mortality | per 100,000 (30-69 years) | poisson | sim |
| homicide_rate | Taxa de Homicidios | mortality | per 100,000 | poisson | sim |
| traffic_mortality_rate | Taxa de Mortalidade por Transito | mortality | per 100,000 | poisson | sim |
| arbovirus_incidence_rate | Taxa de Incidencia de Arboviroses | morbidity | per 100,000 | poisson | sinan |
| tb_incidence_rate | Taxa de Incidencia de Tuberculose | morbidity | per 100,000 | poisson | sinan |
| icsap_hospitalization_rate | Taxa de Internacoes por ICSAP | morbidity | per 10,000 | poisson | sih |
| respiratory_hospitalization_rate | Taxa de Internacoes Respiratorias | morbidity | per 10,000 | poisson | sih |
| low_birth_weight_proportion | Proporcao de Baixo Peso ao Nascer | maternal_child | % | binomial | sinasc |
| general_fertility_rate | Taxa de Fecundidade Geral | maternal_child | per 1,000 women (15-49 years) | poisson | sinasc |
| cesarean_proportion | Proporcao de Partos Cesareos | maternal_child | % | binomial | sinasc |
| prenatal_early_coverage | Cobertura de Pre-natal Precoce | maternal_child | % | binomial | sinasc |
| beds_per_capita | Leitos por Mil Habitantes | health_resources | per 1,000 | none | cnes |
| doctors_per_capita | Medicos por Mil Habitantes | health_resources | per 1,000 | none | cnes |

Figura 1. Número de indicadores disponibles por
categoría en el catálogo de sus_socio_compute_indicators().
Las categorías cubren demografía, vulnerabilidad socioeconómica,
mortalidad, morbilidad, salud materno-infantil y recursos de salud.
| name_muni | ind_aging_index | ind_dependency_ratio | ind_sewage_connection_rate | ind_water_connection_rate |
|---|---|---|---|---|
| Campinas | 63.2 | 55.9 | 84.8 | 88.7 |
| Campinas | 72.6 | 44.2 | 88.5 | 88.4 |
| Campinas | 55.1 | 39.1 | 90.1 | 97.1 |
| Campinas | 47.3 | 52.1 | 89.8 | 96.8 |
| Campinas | 74.5 | 43.3 | 95.8 | 97.2 |
| Campinas | 44.1 | 42.9 | 92.8 | 97.6 |
| Campinas | 69.0 | 42.9 | 81.0 | 88.2 |
| Campinas | 66.0 | 60.7 | 93.1 | 88.4 |
| Campinas | NA | NA | NA | NA |
| Campinas | NA | NA | NA | NA |

Figura 2. Ranking municipal según el Índice de Envejecimiento (adultos mayores por 100 jóvenes, Censo 2010) en la RMSP. Los municipios más envejecidos tienden a concentrar mayor riesgo frente a extremos de temperatura.

Figura 3. Cobertura de alcantarillado por municipio
con intervalo de confianza del 95% (puntuación de Wilson), tal como se
produce con add_ci = TRUE. La barra de error comunica la
incertidumbre de la estimación de proporción.

Figura 4. Relación entre envejecimiento y cobertura de alcantarillado en los municipios de la RMSP. Cruzar la vulnerabilidad demográfica y de infraestructura ayuda a plantear hipótesis de confusión y modificación de efecto en la relación temperatura–salud de los próximos tutoriales.
Referencias
- Pereira, R. H. M., & Barbosa, R. J. (2023). censobr: Download Data from Brazil’s Population Census. R package version 0.4.0. https://CRAN.R-project.org/package=censobr. DOI: 10.32614/CRAN.package.censobr.
- Gouveia, N., Hajat, S., & Armstrong, B. (2003). Socioeconomic differentials in the temperature–mortality relationship in São Paulo, Brazil. International Journal of Epidemiology, 32(3), 390–397.
- Hajat, S., O’Connor, M., & Kosatsky, T. (2010). Health effects of hot weather: from awareness of risk factors to effective health protection. The Lancet, 375(9717), 856–863.
- IBGE — Instituto Brasileiro de Geografia e Estatística. Censo Demográfico 2010. Rio de Janeiro: IBGE.