Esta versión prepara el paquete para CRAN. El cambio
de mayor a 2.0.0 es por la retirada de update_censosbo();
el resto es infraestructura que no altera ningún resultado.
update_censosbo() se retira. Una
función que reinstala el propio paquete desde GitHub no puede convivir
con la distribución por CRAN: evita el canal oficial y modifica la
instalación del usuario sin pasar por él.
Para actualizar, ahora: install.packages("censosbo") (o
remotes::install_github("lab-tecnosocial/censosbo") para la
versión en desarrollo). Y si la nueva versión corrige
datos y no solo código, borrar el caché para que se
vuelvan a descargar:
censosbo_cache_clear()Nada de esto cambia lo que devuelven las funciones. Se documenta porque explica por qué se movieron archivos que parecían estar bien donde estaban.
Las tablas internas con texto en español pasan a
R/sysdata.rda (etiquetas de los códigos
armonizados, textos de universo, nombres de departamento). CRAN exige
que el código de R sea ASCII puro, y escribir
"Sin instrucción" como "Sin instrucci\u00f3n"
habría vuelto ilegible un dato que hay que poder leer y editar. Ahora se
editan en data-raw/build_sysdata.R, con un test que compara
byte a byte contra una referencia para que ninguna máquina con otra
codificación pueda corromper las tildes en silencio.
Los mensajes de error y aviso se escriben con escapes
\uXXXX en el código. El texto que ve el usuario es
idéntico.
El primer uso del caché pide confirmación en
sesión interactiva, como pide la política de CRAN para escribir fuera
del directorio temporal. En scripts, CI o contenedores —cualquier sesión
no interactiva— no pregunta y descarga igual. Para autorizarlo de
antemano: options(censosbo.consent = TRUE).
Siete viñetas pasan a ser artículos solo-web: siguen publicadas en https://lab-tecnosocial.github.io/censosbo/ y no cambian de contenido, pero no viajan dentro del paquete. Las tres que sí lo hacen (Introducción, Diccionario, Temas) vienen precompiladas, así que instalar el paquete ya no descarga nada.
duckdb y DBI pasan de dependencias
obligatorias a opcionales: solo hacen falta para
as = "duckdb", y el paquete avisa de cómo instalarlos si se
pide ese backend sin tenerlos. Quien no use SQL se ahorra compilarlos.
sf sigue siendo obligatorio, porque las capas
geo_* que trae el paquete son objetos sf y sin
él no se podrían ni imprimir.
Title y Description pasan a inglés,
como pide CRAN. La documentación, las viñetas y los mensajes siguen
íntegramente en español.
El requisito de versión de R pasa a
>= 4.2, que es el mínimo real: lo impone
arrow. El >= 4.1.0 que se declaraba antes
era una promesa falsa — con R 4.1 la instalación falla al resolver esa
dependencia.
⚠️ Esta versión cambia el número de filas que devuelven las funciones
get_viviendas_*(), así que rompe cualquier código que dependiera del conteo anterior. Si necesitas el comportamiento de la 1.6.0, pasauniverso = "todos". Los consumidores que leenvivienda.parquetdirectamente (sin pasar por las funciones de R) no heredan la corrección y hay que arreglarlos aparte:censos-exploreryq-censosboestán en ese caso.
get_viviendas_2024() ya cuenta como
el INECambio de comportamiento.
get_viviendas_2024() devolvía 4.490.488 filas y las llamaba
viviendas. 10.287 de ellas no lo son: son personas censadas fuera de una
vivienda, marcadas en v01_tipoviv como persona que vive
en la calle (código 15, 3.311 registros) o en tránsito:
terminal, aeropuerto, puerto u otro (código 16, 6.976). El INE no
las cuenta como viviendas en ningún tabulado.
Ahora el defecto es el universo oficial: 4.480.201 viviendas, la cifra de los tabulados del CPV-2024. También cuadra por área (2.898.140 urbanas, 1.582.061 rurales) y, agregando por municipio, coincide al registro con las viviendas del geoportal en los 343 municipios —con la entidad cruda solo coincidían 20.
Argumento universo nuevo en
get_viviendas_2024(),
get_censo(anio, "vivienda") y los atajos
get_viviendas_1976()/_1992()/_2001()/_2012():
universo |
2024 | Qué es |
|---|---|---|
"viviendas" |
4.480.201 | El universo oficial del INE (defecto) |
"particulares" |
4.463.773 | Casas, departamentos, chozas, cuartos sueltos… |
"colectivas" |
16.428 | Hoteles, hospitales, cuarteles, penitenciarías… |
"todos" |
4.490.488 | La entidad cruda de REDATAM, como antes |
Si necesitas el comportamiento anterior, usa
universo = "todos".
Los censos anteriores tienen el mismo problema y el mismo arreglo. Cada uno nombra la categoría a su manera: 1992 Ambulante (4.939 registros), 2001 Transeúntes (9.392), 2012 En tránsito y Persona que vive en la calle (12.971). Los totales por defecto pasan a 1.701.168, 2.281.022 y 3.159.350. El censo 1976 no preguntó por calle ni tránsito: ahí no cambia nada.
tipos_vivienda(), función nueva:
los códigos de tipo de vivienda de un censo con su etiqueta, su grupo
(particular, colectiva,
no_vivienda, sin_clasificar) y si entran en el
universo oficial. Sirve para auditar qué descarta cada valor de
universo en vez de tener que confiar en la
documentación.
Los códigos que aparecen en los microdatos pero no en el
diccionario del censo (el 88 de 1976, el 0 de 1992) se
conservan en "viviendas": no consta que sean calle
ni tránsito, así que descartarlos sería una decisión sin respaldo.
tipos_vivienda() los muestra como
sin_clasificar en vez de esconderlos.
get_unidades_2024() decía algo
falso. Afirmaba que la diferencia del 0,23% entre las viviendas
del geoportal y las de los microdatos «procede del propio INE, que
cuenta las viviendas de forma distinta en el geoportal y en los
microdatos», y recomendaba get_viviendas_2024() para el
total de un territorio —justo la cifra inflada. No eran dos formas de
contar: eran los registros de calle y tránsito. Con el universo oficial
las dos fuentes cuadran exactamente. Lo mismo estaba escrito en
dev-docs/fuentes-ine-geoportal.md.
El universo todas_viviendas del diccionario
induce a error y ahora se describe como lo que es: todos los
registros de la entidad vivienda, incluidas las personas en
la calle o en tránsito.
Una tasa oficial no es dividir una categoría entre todas
las filas. La viñeta de análisis demográfico calculaba el
alfabetismo de 15+ años sobre toda la población de esa edad y daba
94,94%; el tabulado oficial publica 95,8633%. La diferencia son los
80.297 registros con p40_lee = 9 (Sin
especificar), que el INE deja fuera del denominador: excluirlos da
95,8630% y explica la brecha salvo 0,0003 puntos. La viñeta ahora enseña
la receta y por qué hace falta.
tests/testthat/test-reconciliacion-oficial.R, suite
nueva. Que la suite pasara demostraba consistencia interna, no que las
cifras coincidieran con lo publicado —que es lo que se cita. Ahora
quedan fijadas: población total y por sexo, los cuatro universos de
vivienda, viviendas por área, el cuadre municipio a municipio con el
geoportal, los totales de los censos históricos y el denominador del
alfabetismo.
Necesita los microdatos completos en caché (~1 GB), así que se salta por defecto:
CENSOSBO_TEST_RECONCILIACION=true Rscript -e 'devtools::test(filter = "reconciliacion")'geo_municipios pasa a los 343 municipios del
CPV-2024, sobre límites nuevos de SDSN Bolivia cruzados con los
códigos y nombres del INE. Antes eran 339 polígonos de cartografía
electoral. La procedencia de cada columna está en la viñeta Mapas
coropléticos.
Los cuatro GAIOC creados desde 2016 ya se dibujan: TIOC-Raqaypampa (Cochabamba), San Pedro de Macha y TIOC-Jatun Ayllu Yura (Potosí), y TIOC-Territorio Indígena Multiétnico (Beni). No eran huecos en el mapa: su territorio aparecía dentro del municipio madre —Mizque, Colquechaca, Tomave, San Ignacio y Santa Ana—, así que sus datos salían mal atribuidos sin que se notara. Son 7.599 km² que estaban asignados al municipio equivocado.
Desaparecen las franjas blancas entre
municipios. La capa anterior se simplificó sin preservar la
topología y quedaban 1.126 huecos espurios (461 km²) entre vecinos,
visibles en cualquier zoom. La nueva se simplifica con
rmapshaper::ms_simplify(), que respeta los arcos
compartidos: los únicos huecos que quedan son reales (Salar de Uyuni,
lagos Poopó y Uru Uru).
Dos columnas nuevas: capital
(capital municipal) y superficie_km2, con la que se
calculan densidades sin recalcular áreas.
geo_departamentos ahora se deriva por disolución de
geo_municipios, de modo que los bordes departamentales caen
exactamente sobre los municipales.
Los códigos
idep/iprov/imun de cada polígono
no se leen de la fuente cartográfica, que los trae
desalineados en 7 municipios de Omasuyos (La Paz) y Ñuflo de Chávez
(Santa Cruz). Se deducen por voto espacial mayoritario contra los
~21.000 puntos de comunidades del CPV-2024, que llevan el código usado
en los microdatos. Con eso, la población municipal de la fuente coincide
exacta en los 343 municipios con el conteo de los microdatos, y el 97,3%
de los puntos del CPV-2024 cae en su municipio (antes, 95,9%).
mapa_mun() ya no avisa de «municipios sin cobertura
cartográfica»: la advertencia queda solo para códigos que no existen en
la división actual, lo típico al mapear censos anteriores a 2012.
get_temporal() daba un consejo
que no se podía seguir. Decía «Filtra edad >= 6», pero
la función solo devuelve las variables pedidas, así que sin
"edad" entre ellas el filtro fallaba con
object 'edad' not found. Ahora, cuando la columna no está,
el aviso dice cómo conseguirla: «Añade “edad” a variables y
filtra edad >= 6». Los grupos predefinidos
(grupo = "educacion") ya la incluían, así que esto solo
afectaba a quien pedía variables sueltas.@format de codebook_meta y
codebook_historico_meta describían cinco columnas de las
quince, y los roxygen de censo_temas_meta,
codebook_docs_meta, censo_temas(),
vars_tema() y codebook_docs() seguían diciendo
20 temas y tres censos, junto con las viñetas diccionario y
censos-historicos.Los cinco censos tienen 809 variables entre todos, y el diccionario solo decía nombre, etiqueta, tabla y tipo. No había forma de preguntar «¿qué variables hay de educación?» ni —lo que más importa— a quién se le preguntó cada cosa. Esta versión añade las dos cosas, a partir de dos fuentes oficiales del INE: los cuestionarios censales y los diccionarios DDI del catálogo ANDA (estudios 132, 8, 10, 47 y 46, es decir los cinco censos).
codebook() devuelve diez columnas más. Van al
final, después de las cinco originales, cuyo nombre y orden se
conservan:
tema — uno de 21 temas. Diecisiete son los que el
propio INE declara en su catálogo; los otros cuatro los añade el paquete
(ubicacion_geografica, identificacion,
materiales_construccion y religion, esta
última porque solo el censo de 1992 preguntó por pertenencia
religiosa).universo — a quién se aplicó la pregunta:
personas_5_mas, mujeres_12_mas,
viviendas_presentes… Es la columna que evita el
error más frecuente en análisis censal: calcular un porcentaje
sobre el denominador equivocado. Por ejemplo, nivel_edu
está construida sobre personas de 19 años o más, no sobre toda la
población.capitulo — los siete capítulos (A–G) del cuestionario
del CPV-2024.pregunta y pregunta_num — el número de
pregunta del formulario, para recorrer el censo en el mismo orden en que
se aplicó.origen — distingue una pregunta directa
(cuestionario) de una variable que el INE o REDATAM
construyeron (derivada), de las claves geográficas y los
identificadores.grupo_ine — la agrupación oficial de cada censo
anterior, que 2024 no trae.bloque y denominador — para los 194
indicadores de manzano y comunidad.valores_fuente — si las etiquetas de valor vienen de
REDATAM o del DDI.Los 21 temas se aplican a los cinco censos, así que
codebook(tema = "educacion", anio = ...) es comparable
entre ellos. Los capítulos son solo de 2024: los cuestionarios
anteriores tienen otra estructura y varios numeran las secciones de
vivienda y de persona en paralelo.
censo_temas() — el catálogo de temas con el número
de variables de cada uno, contado en vivo y filtrable por tabla y
año.
vars_tema() — los nombres de las variables de un
tema, en el orden del cuestionario, listos para pasar a
variables:
get_personas_2024(
departamento = "Cochabamba",
variables = vars_tema("educacion", tabla = "persona")
)codebook_docs() — la documentación conceptual
oficial del INE: qué mide la variable, la pregunta tal como se leyó en
campo, las instrucciones al censista y, para las derivadas, la regla con
que se calcularon. Cubre 445 variables de los cinco censos.
codebook() acepta tema,
capitulo y origen, añadidos
después de anio para no romper las
llamadas posicionales.
get_temporal()
avisa cuando el universo cambia entre censosArmonizar los códigos no iguala la población a la que se preguntó, y el INE movió el filtro de edad de varias preguntas entre censos. Ahora el paquete lo detecta y avisa:
! `sabe_leer` no se preguntó a la misma población en todos los censos:
1992: personas de 6 años o más
2001: personas de 4 años o más
2024: personas de 5 años o más
i Añade "edad" a `variables` y filtra `edad >= 6` antes de comparar.
Siete variables armonizadas están afectadas. nivel_edu
es la más extrema: 6 años en 1992, 4 en 2001 y 19 en
2024. Antes esto estaba escrito en la documentación para dos variables;
ahora salta en el punto de uso para todas, con el dato del propio
INE.
get_temporal(grupo = ) también acepta ya los slugs de
censo_temas(), para no tener que recordar cuál de los dos
vocabularios usa cada función. Los seis grupos originales siguen siendo
válidos.
censo_temas_meta (21 temas),
censo_bloques_meta (los 15 bloques de las fichas) y
codebook_docs_meta (445 filas de documentación conceptual,
con la procedencia de los cinco DDI en el atributo "ddi").
variable_temporal_map gana una columna tema
que conecta los nombres armonizados con la taxonomía.
Con quince columnas, imprimir el codebook en consola se había vuelto
ilegible. Ahora print() oculta las columnas que no aplican
al subconjunto consultado —y dice cuáles son— y resume
valores_codigos por su número de categorías en vez de
volcar todas. El objeto sigue siendo un data.frame con
todas las columnas.
etiquetar_valores() elegía la tabla
equivocada. Cuando una variable existe en varias tablas y solo
algunas traen las categorías —idep en el censo 2001 las
tiene en persona y no en vivienda—, se cogía
la primera fila del diccionario y la columna se quedaba sin etiquetar.
Ahora se usa la primera que sí las tiene.
i00 ya está documentada. El número
de vivienda dentro del predio se devolvía en todas las consultas pero no
estaba en el diccionario, así que etiquetar_variables() no
la etiquetaba.
Cuando se piden columnas que no existen en la tabla consultada
pero sí en otra, el aviso ahora lo dice:
"v07_aguapro existe en la tabla vivienda; usa get_viviendas_2024()".
Dos gráficos de las viñetas declaraban un universo que no era el que mostraban. El de nivel educativo decía «15+ años» cuando en realidad era 19+, y el mapa de alfabetismo no aclaraba su umbral; ahora usa 15+, el de las tasas oficiales.
codebook(buscar = ) ahora busca también en el tema, así
que codebook(buscar = "salud") devuelve el tema completo y
puede dar más filas que antes.etiquetar_valores() devolverá un factor donde antes
devolvía el código: puede afectar a gráficos o tablas ya hechos.Los DDI de los cuatro censos anteriores traen categorías que el
diccionario de microdatos no tiene, y se usaron para rellenar los
huecos. No se sobrescribió nada preexistente, y con
razón: el contraste reveló que el DDI del INE tiene errores puntuales —
en el CPV-2012, la variable de estado civil viene con las categorías de
otra pregunta. Las discrepancias quedan registradas para revisión en
data-raw/ddi/reporte_valores.md, clasificadas por
severidad.
Las columnas nuevas también viajan a los
diccionario_variables.parquet publicados en los GitHub
Releases. Los consumidores que cacheen ese archivo por nombre —el plugin
de QGIS lo hace— tienen que vaciar la caché una vez para verlas. Ver
dev-docs/consumidores-taxonomia.md.
.download_parquet(), .download_ficha() y
.download_censo()) comparten un solo helper en vez de
repetir la misma lógica de descarga atómica.get_censo()
ahora cubre también el CPV-2024get_censo() se presentaba como la API genérica por año,
pero rechazaba anio = 2024 — y la propia documentación de
get_personas_2024() ofrecía
get_censo(2024, "persona", ...) como equivalente, un
ejemplo que no funcionaba. Ahora acepta los cinco censos: con
anio = 2024 delega en get_personas_2024(),
get_viviendas_2024(), get_emigracion_2024() o
get_mortalidad_2024() según tabla, con
resultado idéntico al de esas funciones.
get_censo(2024, "persona", departamento = "07") # = get_personas_2024()sf estaba en Imports: del DESCRIPTION pero
nada lo importaba en NAMESPACE, así que
library(censosbo) no cargaba su namespace ni registraba sus
métodos S3. Sin ellos, filtrar un objeto sf caía en
[.data.frame, que degrada la columna de geometría a una
lista corriente, y mapa_mun(..., departamento = ...)
abortaba con
attr(obj, "sf_column") does not point to a geometry column.
Afectaba también a geo_municipios y
geo_departamentos manipulados por el usuario.etiquetar_variables() dejaba columnas sin
nombre. Las 11 variables derivadas del censo 1976 que no traen
descripción en el diccionario del INE (nivela,
pea, pet, anioes1, …) se
renombraban a "". Ahora conservan su nombre original.mapa_dep() y mapa_mun() ignoraban
los códigos geográficos numéricos. Un idep entero
(1, 2, …) no emparejaba con "01",
"02", … del catálogo y el mapa salía entero en gris, sin
ningún aviso. Ahora se normalizan a 2 dígitos, igual que en
etiquetar_geografia().get_temporal() perdía nivel_edu en
1992 en las filas donde P11 era NA:
la condición del ifelse() propagaba el NA al
resultado.censosbo_cache_clear() ya limpia también el
subdirectorio fichas/ cuando queda vacío (antes solo lo
hacía con historico/).mapa_dep(mostrar_nombres = TRUE) y
mapa_mun(mostrar_nombres = TRUE) ya no emiten los avisos de
sf sobre centroides en coordenadas geográficas, que eran
irrelevantes para posicionar una etiqueta.citation("censosbo") reportaba siempre la versión
1.0.0; ahora lee la versión y el año del paquete instalado.Se revisaron todas las cifras de la documentación contra los datos publicados y se corrigieron las que no cuadraban:
geo_municipios tiene 339 municipios, no
336, y los que faltan son 4, no 7 (los TIOC Raqaypampa, Jatun
Ayllu Yura y Territorio Indígena Multiétnico, más San Pedro de
Macha).get_personas_2024() completo
ocupa ~5,6 GB al hacer collect(), no ~490 MB. El número de
columnas de los censos históricos tampoco incluía las columnas
geográficas denormalizadas.p02 como sexo y p03 como edad, cuando
p02 es parentesco, p03 sexo y p04
edad.servicio_sanitario no está disponible en 2012 (sí lo está,
es P09) y usaba el código "05" para Santa Cruz
(es "07"; "05" es Potosí). La de censos
históricos daba 344 municipios para 2024 (son 343) y afirmaba que sin
departamento no se añaden las columnas geográficas, cuando
se añaden siempre.haven/readr + arrow).nivel_edu y estado_civil cambian de población
de referencia entre censos, así que sus distribuciones no son
comparables sin filtrar por edad. Queda documentado en
variables_armonizadas()$notas, en
?get_temporal y en la viñeta, que ahora aplica el filtro
correcto en el gráfico de nivel educativo.eval = FALSE y salidas escritas a mano. Ahora se ejecutan
al construir la documentación (con departamentos pequeños, para que la
descarga sea liviana), así que las salidas que se ven son reales.unidad y ficha (los 194 indicadores por
manzano y comunidad), que faltaban.El paquete llegaba hasta el municipio: 343 unidades. Ahora también da acceso al nivel más fino que publica el INE, 268.604 unidades censales —manzanos urbanos y comunidades rurales— con 194 indicadores cada una.
get_unidades_2024(): universo completo
de unidades con su población, viviendas y si tienen ficha disponible.
Filtra por departamento, provincia, municipio y area.get_fichas_2024(): los 194 indicadores
de la ficha resumen del INE — población por edad y sexo, educación,
salud, migración, empleo, actividad económica, vivienda, servicios
básicos, TIC, materiales de construcción, hacinamiento y tipo de
hogar.get_geo_manzanos() y
get_geo_comunidades(): geometrías en
sf (EPSG:4326). Los manzanos están partidos por
departamento; las comunidades rurales son en su mayoría puntos, no
polígonos.mapa_man(): mapas de un municipio a
nivel de manzano y comunidad.Notas sobre estos datos:
ficha de
get_unidades_2024() marca cuáles la tienen.salud_lugar_* y tic_* son de
respuesta múltiple: sus categorías suman más que el
total. Cada bloque incluye su propio total, que es el denominador
correcto.area reutiliza el dominio de los microdatos (1 =
Urbana, 2 = Rural), así que etiquetar_valores() se comporta
igual en ambas fuentes. Las funciones aceptan además
"urbano" y "rural" por legibilidad.data-fichas-v1.0.0) y se cachean bajo
fichas/, separados de los microdatos.codebook(tabla = "unidad") y
codebook(tabla = "ficha") documentan las variables
nuevas.
Una advertencia sobre los totales: la población agregada por
municipio coincide exactamente con
get_personas_2024() en los 343 municipios, pero las
viviendas dan un 0,23% menos que get_viviendas_2024(). El
déficit es sistemático (323 municipios por debajo, ninguno por encima) y
viene del propio INE, que cuenta las viviendas de forma distinta en el
geoportal y en los microdatos. Para el total de viviendas de un
territorio, usa get_viviendas_2024().
get_temporal(variables = "grupo_edad"):
los grupos de edad quinquenales ahora se calculan desde la edad
individual en todos los censos y son comparables entre
años. Antes, 1976 y 1992 tomaban variables ya agrupadas
(edad5/GEDAD), cuyos códigos no eran
quinquenios: 1992 producía bins sin sentido y 1976 devolvía códigos
crudos. (grupo_edad está en el grupo
demografico, así que afectaba al análisis por
defecto.)municipio con código sin
provincia: el código de municipio se repite entre
provincias, por lo que municipio = "01" emparejaba un
municipio por provincia (p.ej. 16 en Cochabamba) en silencio. Ahora se
emite un error pidiendo indicar provincia
para desambiguar (igual que ya ocurría con nombres repetidos entre
departamentos). La comprobación de ambigüedad ahora cubre también los
códigos, no solo los nombres.get_censo(): la
advertencia de filtro geográfico sin filas y el retorno
NULL ahora ocurren con cualquier as
("arrow", "duckdb", "tibble");
antes solo con "tibble", contradiciendo la
documentación..part y solo se renombran al completar.
Una interrupción ya no deja un archivo truncado en caché que se
reutilizaría indefinidamente.censosbo_cache_clear() borra
únicamente los archivos .parquet (y el subdirectorio
historico/ si queda vacío), en lugar de eliminar todo el
directorio de caché. Evita perder otros archivos cuando el caché se
redirige a una carpeta del proyecto con
options(censosbo.cache_dir = ...).codebook() y variables_armonizadas()
validan el argumento tabla y abortan con
la lista de tablas disponibles ante un valor no reconocido (antes
devolvían 0 filas en silencio).codebook_valores() avisa cuando la variable existe en
varias tablas e indica de cuál muestra los valores.DBI::dbDisconnect(con, shutdown = TRUE) para liberar la
instancia.mapa_mun()
usaba una variable inexistente (v10_agua →
v07_aguapro); tamaños de descarga de
get_personas_2024() sincronizados con el README;
get_mortalidad_2024() añadida a la tabla de censos del
README; NEWS.md se incluye ahora en el paquete
instalado.provincia y municipio ahora aceptan
nombres además de códigos en
get_personas_2024(), get_viviendas_2024(),
get_emigracion_2024(), get_mortalidad_2024() y
en los censos históricos 1992/2001/2012 vía get_censo().
Ejemplo:
get_personas_2024(departamento = "Cochabamba", municipio = "Cochabamba").
(El censo 1976 mantiene solo códigos: usó cantones.)"Totora",
"Cercado") pide indicar departamento para
desambiguar.provincia/municipio
sin departamento, este se
infiere del catálogo, de modo que
get_personas_2024(municipio = "Cochabamba") solo descarga
el departamento correspondiente en vez de todo el país.(idep, iprov, imun), corrigiendo un sobre-emparejamiento
latente (el código de municipio se repite entre provincias y hay nombres
de municipio repetidos entre departamentos).etiquetar_geografia():
agrega nombre_dep, nombre_prov y
nombre_mun a un data frame de microdatos a partir de sus
códigos geográficos, eliminando el left_join manual con
municipios(). Es el equivalente geográfico de
etiquetar_valores().etiquetar_valores() etiqueta
area (Urbana/Rural de la tabla persona) de
forma determinista. Antes dependía de qué otras columnas acompañaran a
area (la variable solo figuraba en el diccionario de 1976),
por lo que a veces la dejaba como entero sin aviso.etiquetar_valores() ahora avisa cuando
la detección automática del censo parece equivocada: si los valores de
una columna reconocida no coinciden con los códigos del censo detectado,
la deja cruda y sugiere usar anio = (en vez de devolver una
columna toda-NA en silencio).codebook() / codebook_valores() documentan
la variable derivada area (persona) con
sus valores 1 = Urbana, 2 = Rural, equivalente
a urbrur (vivienda).departamentos(), provincias() y
municipios() devuelven tibble
(antes data.frame), por lo que print(x, n = )
y la exploración funcionan como en el resto del tidyverse.persona,
vivienda, mortalidad, emigracion,
discapacidad) ahora incluyen las columnas geográficas
idep, iprov e
imun pre-unidas, idénticas en formato al CPV-2024
(string de 2 dígitos, "01"–"09"). El censo
1976 (poblacion, vivienda) expone
idep e iprov (no imun: usó
cantones, no municipios comparables).get_censo() filtra ahora por geografía
directamente sobre estas columnas, sin reconstruir la
jerarquía REDATAM (persona → vivienda → municipio). Esto
elimina el join estrella vía DuckDB y la descarga de
depto/provin/munic, y hace que
los Parquet sean usables tal cual desde otras herramientas (QGIS,
Python, DuckDB) sin joins.codebook() documenta
idep/iprov/imun (tipo
categorica) en todos los censos.Actualización de datos: esta versión cambia los Parquet publicados. Si ya tenías datos en caché, ejecuta
update_censosbo()(ocensosbo_cache_clear()) para descargar la versión con las columnas geográficas.
get_censo() ahora muestra un mensaje claro al recibir
un año no válido (antes fallaba con un error interno de cli
por nombres de variable con punto). Mismo arreglo en los mensajes de
error de descarga.etiquetar_valores() ahora usa las etiquetas
armonizadas correctas con los datos de
get_temporal()/get_temporal_vivienda() (antes
aplicaba por error el diccionario del CPV-2024, produciendo etiquetas
incorrectas en nivel_edu y otras).departamentos(), provincias() y
municipios() reinician los nombres de fila
(1:n) en lugar de arrastrar los del filtrado interno.estado_civil ahora se armoniza a 4
categorías comparables entre censos (1=Soltero/a, 2=Casado/a o
conviviente, 3=Separado/a o divorciado/a, 4=Viudo/a), limitadas por la
granularidad del censo 1992.pea y
pet corregidas: el mapeo apuntaba a
columnas equivocadas del CPV-2024
(fft_19/ft_19). Ahora usan pea_13
(1=Ocupado, 2=Cesante, 3=Aspirante) y pet_13 (1=Sí, 2=No),
consistentes con los censos previos.variable_temporal_map y
variables_armonizadas() incluyen una nueva columna
armonizada que indica si los códigos son comparables entre
censos.get_temporal() advierte cuando se solicita una variable
no armonizada (parentesco), cuyos códigos crudos no son
comparables entre años.Primera versión de lanzamiento. censosbo proporciona
acceso programático a los microdatos de los cinco censos de Bolivia
(1976, 1992, 2001, 2012 y CPV-2024) y herramientas integradas para
análisis demográfico, temporal y visualización geográfica.
get_personas_2024(), get_viviendas_2024(),
get_emigracion_2024(), get_mortalidad_2024():
acceso al CPV-2024 (11.4 M personas, 4.5 M viviendas). Los datos del
CPV-2024 se descargan por departamento en archivos Parquet particionados
(~4–77 MB cada uno).get_censo(anio, tabla, ...): API unificada para censos
históricos (1976, 1992, 2001, 2012). Atajos por año:
get_poblacion_1976(), get_personas_1992(),
get_personas_2001(), get_personas_2012(), y
demás funciones por tabla y año.dplyr, Apache Arrow (carga
diferida) y DuckDB (consultas SQL). El formato de retorno se controla
con as = c("arrow", "tibble", "duckdb").get_temporal(): datos comparables entre todos los
censos (1976–2024) para 11 variables armonizadas: sexo,
edad, grupo_edad, parentesco,
estado_civil, sabe_leer,
nivel_edu, pea, pet,
area, departamento.get_temporal_vivienda(): equivalente para la tabla de
vivienda.variables_armonizadas() y
grupos_variables(): exploración del mapa de armonización y
los grupos temáticos predefinidos (demografico,
educacion, economia, cultural,
migracion, fertilidad).codebook(), codebook_valores(): búsqueda
en el diccionario de las 168 variables del CPV-2024.codebook_1976(), codebook_1992(),
codebook_2001(), codebook_2012(),
codebook_2024(): atajos por año para censos
históricos.etiquetar_valores(),
etiquetar_variables(): convierte códigos numéricos a
etiquetas legibles y renombra columnas con las descripciones del
INE.mapa_dep(): mapa coroplético a nivel departamental.
Geometrías de los 9 departamentos incluidas en el paquete
(geo_departamentos).mapa_mun(): mapa coroplético a nivel municipal.
Geometrías de 336 de los 343 municipios incluidas en el paquete
(geo_municipios).ggplot
modificables con capas y temas adicionales de ggplot2.departamentos(), provincias(),
municipios(): navegación de la división
político-administrativa de Bolivia.geo_bolivia (343 municipios con
nombres y códigos), geo_departamentos (9 objetos sf),
geo_municipios (336 objetos sf).censosbo_cache_dir(),
censosbo_cache_info(), censosbo_cache_clear():
los archivos Parquet se descargan una sola vez y se almacenan en caché
local (~/Library/Caches/org.R-project.R/R/censosbo/ por
defecto).censosbo.cache_dir para redirigir el caché al
directorio del proyecto.