Lee un proyecto y devuelve, para una causa, su configuración, sus tablas del contrato de insumos y las rutas de sus
insumos: todo lo que dl_insumos() necesita (dl_insumos(dl_proyecto(carpeta))). Es la forma recomendada de
empezar.
Arguments
- carpeta
Carpeta del proyecto: la que tiene
config.yamloconfig/(opcional si se danconfiguraciony las tablas).- causa
Causa (
cause_id, un entero);NULLsi el proyecto tiene una sola o la configuración la declara.- ...
Tablas del contrato por su nombre (ver dl_tablas:
ubicaciones,poblacion,ancla,covariables,betas,datos,severidad,fuentes_gbd,poblacion_detalle,proxies_crudos,razones,prior_mortalidad_exceso): undata.frameo la ruta de un CSV o de una carpeta. Reemplazan a las de la carpeta.- configuracion
Ruta del YAML de la configuración o una lista con sus claves (opcional; por defecto, la de la carpeta).
- anio
Año que se estima (un entero), en lugar del
aniode la configuración;NULL(por defecto) deja el de la configuración. Ver Detalles para el año del ancla.
Value
Objeto de clase dl_proyecto: una lista con
configuracion: la configuración de la causa, de clasedl_config, como la dedl_configuracion(). Traeorigen$por_defecto: las claves tomadas por defecto, con su valor.rutas: las rutas de los insumos, de clasedl_paths, como las dedl_rutas(). Apuntan a la traducción, en la carpeta temporal de la sesión: en otra sesión, o después de cambiar la configuración o una tabla (la traducción anterior del mismo año se borra), vuelve a llamar adl_proyecto().carpeta: la carpeta del proyecto (NULLsin carpeta).formato:"simple"(un proyecto con las tablas del contrato) o"completo"(el formato de la 0.2.2).tablas: las tablas del contrato, una lista nombrada dedl_tabla()(NULLen el formato completo), tal como vinieron (covariablessin las filas calibradas). De una suma de subtipos, soloubicacionesypoblacion.calibracion: solo si el proyecto traeproxies_crudos, el resultado dedl_calibrar_proxies()(las filas calibradas, con los atributoscalibracion,seriesyexcluidas).configuracion_dada: solo siconfiguracionse dio como lista, esa lista tal como se dio.tablas_dadas: solo si se dieron tablas en..., esas tablas tal como se dieron (undata.frameo una ruta). Con las dos,dl_correr()vuelve a leer el mismo proyecto para cada año deanios.
Details
Un proyecto es una configuración corta (sus claves en dl_configuracion()) y las tablas del contrato de insumos
(ver dl_tablas). Hay dos puertas, en una sola función: las tablas se leen de la carpeta del proyecto por su nombre,
o se pasan como argumentos (un data.frame o la ruta de un CSV o de una carpeta), y las dos se pueden mezclar: lo
que se pasa reemplaza a lo de la carpeta.
p <- dl_proyecto("mi_proyecto") # todo desde la carpeta
p <- dl_proyecto("mi_proyecto", poblacion = mi_pob) # la carpeta + una tabla de R
p <- dl_proyecto(configuracion = "config.yaml", ubicaciones = ubic,
poblacion = mi_pob, ancla = "descargas/gbd_2023.csv") # sin carpetaCada tabla pasa por su lector (las descargas de GBD Results y del GHDx se reconocen por sus columnas y se convierten
solas) y se valida sola; un problema de una tabla detiene dl_proyecto() con la tabla, la columna y las filas.
Después, dl_proyecto() comprueba las reglas que cruzan tablas (que haya una sola ubicación nacional y que las
ubicaciones de las demás tablas estén en ubicaciones, que la población y el ancla cubran el año, los sexos y las
edades del modelo, que cada beta tenga su valor nacional, que la severidad sume 1...): se detiene con todos sus
problemas juntos (en el campo problemas del error) y avisa de sus sospechas (una mortalidad de datos que parece
por 100 000, una ubicación subnacional sin proxies...). dl_revisar_proyecto() comprueba lo mismo sin detenerse en
el primer problema, y dl_insumos() lo que necesita las tablas ya traducidas (la población nacional suma las
subnacionales, los proxies cierran en el valor nacional, los datos tienen valores posibles).
El proyecto se traduce al formato completo de la versión 0.2.2, el que usa el resto del paquete: la configuración y
las tablas a una carpeta temporal de la sesión, que se reutiliza mientras no cambien. Los números leídos pasan tal
cual; solo se calcula lo que sale de la población (el total nacional, si no viene) y la agrupación del ancla en las
bandas de la población (con poblacion_detalle, si el ancla es más fina; sus filas de ambos sexos, que el modelo no
usa, no piden ese detalle y se dejan fuera si no lo traen).
print() muestra la causa, el año, las tablas que encontró, el modo subnacional, la calibración de
proxies_crudos (por covariable: el método, q y las ediciones) y las claves de la configuración que tomaron su
valor por defecto.
anio lee el proyecto para otro año que el de su configuración, sin editarla: es como escribir ese anio en el
archivo (los proxies de proxies_crudos se calibran para ese año). Las lecturas de años distintos del mismo
proyecto conviven en la sesión. El año del ancla, el de la estimación de referencia que se usa, sale de una sola
regla:
sin
ancla.anioen la configuración, es el año que se estima si la tablaanclatrae la prevalencia de la causa en ese año; si no la trae, el último año anterior que trae, y un mensaje lo anuncia («el ancla no trae 2024: se proyecta desde 2023»). La proyección queda en la procedencia del año del ancla (years.ancla) y en las limitaciones del manifiesto de la corrida, ydl_revisar_proyecto()la muestra como aviso;con
ancla.anio, ese año, que no puede ser posterior alaniode la configuración. Con el argumentoanioes el menor entre los dos: una configuración conanio: 2024yancla: {anio: 2023}sirve para 2024 (proyectado desde 2023) y, conanio = 2023o un año anterior, para ese año con su propia ancla. El argumentoaniosolo baja el año del ancla declarado conancla.anio: uno declarado enavanzado(o enyears.ancladel formato completo) no se ajusta solo, y para un año anterior hay que cambiarlo en la configuración;el ancla es, a lo sumo, de un año antes del que se estima: mantiene el nivel nacional, no lo extrapola. Si el ancla no trae el año ni ninguno anterior, las reglas entre tablas dicen qué falta.
Sin carpeta, las rutas relativas de la configuración (severidad.particion) se resuelven contra el directorio de
trabajo; con carpeta, contra la carpeta del proyecto. Las secuelas y los estados de salud de una partición de
severidad deben estar en los catálogos de GBD 2023 del paquete: una partición con secuelas propias todavía no se
puede leer en un proyecto (sí en el formato completo, con sus catálogos).
La carpeta del proyecto
mi_proyecto/
config.yaml # una causa; o config/<causa>.yaml, una por causa
ubicaciones.csv
poblacion.csv
ancla/ # cualquier CSV: descargas de GBD tal cual o tablas del contrato
covariables/ # descargas del GHDx y/o la tabla del contrato con los proxies ya calibrados
betas.csv
datos.csv
severidad.csv
fuentes_gbd/
poblacion_detalle.csv
proxies_crudos.csv # un indicador de encuesta por ubicación y edición: se calibra al leer
razones.csv # la razón de cada ubicación subnacional respecto de la nacional (subnacional.modo: razon)
prior_mortalidad_exceso.csv # el prior de la mortalidad en exceso por sexo y edad (mortalidad_exceso.prior: tabla)
particion/<corrida>/ # opcional: la partición de severidad que nombra severidad.particionCada tabla es <tabla>.csv o una carpeta <tabla>/ cuyos CSV se juntan (cada uno pasa por su lector), como
poblacion_detalle/ con un CSV por fuente. Las rutas no se declaran, salvo la de la partición de severidad
(severidad.particion, relativa a la carpeta). Los demás archivos de la carpeta (un LEEME.md, la carpeta
resultados/ que escribe dl_correr()) no se leen. Una tabla opcional ausente, o con solo el encabezado, no
existe (así quedan las plantillas de dl_nuevo_proyecto()). Las obligatorias son ubicaciones, poblacion y
ancla (una causa que es la suma de sus subtipos solo usa las dos primeras: ver «Subtipos y la causa que es su
suma»): con ellas se estima la causa en el país y, si hay ubicaciones subnacionales, en cada una con las tasas
nacionales. dl_correr(), que calcula los años vividos con discapacidad (AVD), necesita también severidad (o
severidad.particion en la configuración).
covariables y betas agregan las diferencias entre ubicaciones subnacionales y datos, los datos locales. Las
columnas de cada tabla, sus unidades y sus valores están en dl_tablas. Con proxies_crudos, dl_proyecto()
calibra los valores subnacionales de sus covariables para el año que se estima (dl_calibrar_proxies(), con las
claves proxies.* de la configuración) y los agrega a covariables; los de cada covariable vienen de una sola de
las dos tablas.
Con varias causas, cada una tiene su configuración en config/<causa>.yaml y comparten las tablas, que traen las
filas de todas en la columna causa (sin ella, una fila vale para todas).
Subtipos y la causa que es su suma
Una causa que es la suma de otras las declara en subtipos; un subtipo sin betas propias usa las de su causa padre.
El subtipo encuentra a su padre por esa clave, en otra configuración del mismo proyecto; leído solo (en su propia
carpeta), lo declara con subtipo_de: <padre> y, sin betas propias, usa las de esa causa; si las dos
configuraciones dicen su padre, deben decir la misma causa. Un subtipo tiene una sola causa padre: que dos
configuraciones del proyecto lo declaren en subtipos es un error.
Si la causa padre no se ajusta, sino que se reporta como la suma de las corridas de sus subtipos, su configuración
lo dice con suma_de_subtipos: sí:
causa: 1010
nombre: Enfermedad de ejemplo
anio: 2023
subtipos: [1011, 1012, 1013]
suma_de_subtipos: sí
subtipos_omitidos: # opcional: los subtipos que no se modelan, con su motivo
- {causa: 1013, motivo: sin datos suficientes}El proyecto de una suma solo usa las tablas ubicaciones y poblacion (dan los catálogos de su corrida), que son
sus dos tablas obligatorias: no necesita edad_inicio, ancla, severidad ni betas, y las demás tablas de la carpeta,
que son de las otras causas, no se leen. Exige nombre (el de la causa en las tablas de su corrida). Puede ser una
configuración más de un proyecto con varias causas o vivir en su propia carpeta. print() dice qué suma («suma de
los subtipos 1011 + 1012 (omitido: 1013)»), dl_revisar_proyecto() revisa sus dos tablas, su configuración y qué
subtipos tienen configuración en el proyecto, y dl_insumos() la rechaza: no hay nada que ajustar. Cada subtipo
se corre por separado y dl_correr() de la causa las suma, con las corridas que encuentra en la carpeta de las
corridas:
Una causa padre con subtipos y sin suma_de_subtipos se ajusta como cualquier otra, con su ancla. Para sumar
corridas elegidas a mano (de otras carpetas, o que no son las más recientes), dl_sumar_hijas().
Formato completo
Un proyecto es del formato completo de la versión 0.2.2 si su configuración trae schema: dismod_lite/v1. Tiene
config/<causa>.yaml, ancla/ con un CSV por medida (prevalencia.csv, mortalidad.csv, incidencia.csv y
avd.csv, en el formato de las estimaciones), covariables/, extraccion.yaml (las betas), poblacion.csv,
pesos_80mas.csv, datos.csv, proxies_departamentales.csv, severidad/<causa>.csv, evidencia/, registro/,
catalogos/ y, si hay una, la partición de severidad en particion/<corrida>/. Cada tabla sigue el contrato
dismod_lite/v1 (ver dl_esquema()); no recibe tablas en .... El ejemplo en este formato:
system.file("extdata", "acs_peru_completo", package = "dismodlite").
See also
dl_tablas (las tablas), dl_configuracion() (las claves de la configuración), dl_insumos() (el paso
siguiente), dl_ejemplo() (el proyecto de ejemplo), dl_nuevo_proyecto() (crear la carpeta de un proyecto),
dl_revisar_proyecto() (revisarla antes de correr) y dl_correr() (la corrida completa en una llamada).
Funciones del proyecto:
dl_calibrar_proxies(),
dl_correr(),
dl_ejemplo(),
dl_nuevo_proyecto(),
dl_plantilla(),
dl_revisar_proyecto(),
dl_tabla(),
dl_tablas
Examples
# el proyecto de ejemplo
p <- dl_proyecto(dl_ejemplo(), causa = 9100)
p
#> <dl_proyecto> Arteriopatía crónica sintética, causa 9100 | año 2023 | tablas del contrato
#> carpeta: /home/runner/work/_temp/Library/dismodlite/extdata/acs_peru
#> tablas:
#> ubicaciones 26 fila(s), de ubicaciones.csv
#> poblacion 2100 fila(s), de poblacion.csv
#> ancla 768 fila(s), de ancla
#> covariables 8 fila(s), de covariables
#> betas 3 fila(s), de betas.csv
#> datos 185 fila(s), de datos.csv
#> severidad 12 fila(s), de severidad.csv
#> fuentes_gbd no
#> poblacion_detalle no
#> proxies_crudos 1500 fila(s), de proxies_crudos.csv
#> razones no
#> prior_mortalidad_exceso no
#> subnacional: covariables
#> proxies calibrados de proxies_crudos (año 2023):
#> SEV_scalar_agestd_cvd_pvd: paseo_aleatorio, q = 2.26e-05, ediciones 2019, 2021, 2023
#> LDI_pc: paseo_aleatorio, q = 0.000373, ediciones 2019, 2021, 2023
#> haqi: paseo_aleatorio, q = 0.406, ediciones 2019, 2021, 2023
#> tomado por defecto (14):
#> sexos = [hombres, mujeres]
#> ubicacion_gbd = 123
#> ancla.peso (λ) = 1
#> ancla.correlacion_edad (ρ) = 0.5
#> ancla.anio = 2023
#> nudos = [30, 40, 50, 60, 70, 80, 95]
#> incidencia.suavidad (σ) = 0.5
#> mortalidad_exceso.prior = desde_ancla
#> remision = 0
#> datos_en_ajuste = ninguno: las nacionales no se usan; las subnacionales de mortalidad validan
#> subnacional.modo = covariables
#> subnacional.kappa (κ) = 1
#> sensibilidad.correlacion_edad (ρ) = [0, 0.5, 0.9]
#> sensibilidad.kappa (κ) = [0.5, 1]
p$configuracion$origen$por_defecto
#> sexos
#> "[hombres, mujeres]"
#> ubicacion_gbd
#> "123"
#> ancla.peso
#> "1"
#> ancla.correlacion_edad
#> "0.5"
#> ancla.anio
#> "2023"
#> nudos
#> "[30, 40, 50, 60, 70, 80, 95]"
#> incidencia.suavidad
#> "0.5"
#> mortalidad_exceso.prior
#> "desde_ancla"
#> remision
#> "0"
#> datos_en_ajuste
#> "ninguno: las nacionales no se usan; las subnacionales de mortalidad validan"
#> subnacional.modo
#> "covariables"
#> subnacional.kappa
#> "1"
#> sensibilidad.correlacion_edad
#> "[0, 0.5, 0.9]"
#> sensibilidad.kappa
#> "[0.5, 1]"
p$tablas$poblacion
#> ubicacion anio sexo edad_inicio edad_fin poblacion
#> <char> <int> <char> <num> <num> <num>
#> 1: 01 2019 hombres 30 35 16573
#> 2: 01 2019 hombres 35 40 13924
#> 3: 01 2019 hombres 40 45 11698
#> 4: 01 2019 hombres 45 50 9829
#> 5: 01 2019 hombres 50 55 8257
#> ---
#> 2096: 25 2024 mujeres 75 80 5385
#> 2097: 25 2024 mujeres 80 85 3712
#> 2098: 25 2024 mujeres 85 90 2375
#> 2099: 25 2024 mujeres 90 95 1285
#> 2100: 25 2024 mujeres 95 125 505
# el mismo proyecto leído para otro año, sin editar la configuración
dl_proyecto(dl_ejemplo(), 9101, anio = 2019)
#> <dl_proyecto> ACS de miembros inferiores, causa 9101 | año 2019 | tablas del contrato
#> carpeta: /home/runner/work/_temp/Library/dismodlite/extdata/acs_peru
#> tablas:
#> ubicaciones 26 fila(s), de ubicaciones.csv
#> poblacion 2100 fila(s), de poblacion.csv
#> ancla 768 fila(s), de ancla
#> covariables 8 fila(s), de covariables
#> betas 3 fila(s), de betas.csv
#> datos 185 fila(s), de datos.csv
#> severidad 12 fila(s), de severidad.csv
#> fuentes_gbd no
#> poblacion_detalle no
#> proxies_crudos 1500 fila(s), de proxies_crudos.csv
#> razones no
#> prior_mortalidad_exceso no
#> subnacional: covariables
#> proxies calibrados de proxies_crudos (año 2019):
#> SEV_scalar_agestd_cvd_pvd: paseo_aleatorio, q = 2.26e-05, ediciones 2019, 2021, 2023
#> LDI_pc: paseo_aleatorio, q = 0.000373, ediciones 2019, 2021, 2023
#> haqi: paseo_aleatorio, q = 0.406, ediciones 2019, 2021, 2023
#> tomado por defecto (14):
#> sexos = [hombres, mujeres]
#> ubicacion_gbd = 123
#> ancla.peso (λ) = 1
#> ancla.correlacion_edad (ρ) = 0.5
#> ancla.anio = 2019
#> nudos = [30, 40, 50, 60, 70, 80, 95]
#> incidencia.suavidad (σ) = 0.5
#> mortalidad_exceso.prior = desde_ancla
#> remision = 0
#> datos_en_ajuste = ninguno: las nacionales no se usan; las subnacionales de mortalidad validan
#> subnacional.modo = covariables
#> subnacional.kappa (κ) = 1
#> sensibilidad.correlacion_edad (ρ) = [0, 0.5, 0.9]
#> sensibilidad.kappa (κ) = [0.5, 1]
# un proyecto mínimo sin carpeta: la configuración y las tablas obligatorias como argumentos
p <- dl_proyecto(configuracion = list(causa = 9101, anio = 2023, edad_inicio = 30),
ubicaciones = dl_ejemplo("ubicaciones.csv"),
poblacion = dl_ejemplo("poblacion.csv"), ancla = dl_ejemplo("ancla"))
# una causa que es la suma de sus subtipos: solo su configuración, las ubicaciones y la población
suma <- dl_proyecto(configuracion = list(causa = 9200, nombre = "Suma de ejemplo", anio = 2023,
subtipos = c(9101, 9102, 9103), suma_de_subtipos = "sí"),
ubicaciones = dl_ejemplo("ubicaciones.csv"),
poblacion = dl_ejemplo("poblacion.csv"))
suma
#> <dl_proyecto> Suma de ejemplo, causa 9200 | año 2023 | tablas del contrato
#> carpeta: (ninguna: las tablas vienen como argumentos)
#> suma de los subtipos 9101 + 9102 + 9103: no se ajusta; dl_correr() suma las corridas de sus subtipos
#> tablas:
#> ubicaciones 26 fila(s), de ubicaciones.csv
#> poblacion 2100 fila(s), de poblacion.csv
# \donttest{
# el paso siguiente: los insumos
b <- dl_insumos(p)
# }