Muestrea con MCMC la posterior de la incidencia y la mortalidad en exceso por edad (en los nudos) de cada sexo,
anclada en la prevalencia de referencia y, si la configuración lo declara (datos_en_ajuste), en los datos
locales. Resuelve la ecuación diferencial del modelo para cada simulación. Los ajustes se guardan en una caché de
la sesión.
Usage
dl_ajustar(insumos, opciones = dl_opciones_mcmc(), semilla, cache = TRUE)Arguments
- insumos
Insumos de
dl_insumos().- opciones
Opciones de
dl_opciones_mcmc(): simulaciones, cadenas, iteraciones, calentamiento, adelgazamiento, núcleos y motor. Por defecto, las de producción.- semilla
Semilla (entero), obligatoria: el resultado es reproducible con la misma semilla.
- cache
TRUE(por defecto) reutiliza un ajuste idéntico (los mismos insumos, opciones y semilla) ya calculado en la sesión;FALSEvuelve a muestrear.
Value
Objeto de clase dl_fit, una lista con:
draws_par: lista con una matriz por sexo (nombres"1"y"2"): una fila por simulación y una columna por parámetro (logi_<nudo>ylogf_<nudo>: log i y log f en cada nudo; con la mortalidad en exceso fija en 0, solologi_<nudo>).draws_q: tabla (data.table) con una fila por ubicación, sexo, simulación y edad entera:location_id,sex_id,draw,edad,p(prevalencia),i(incidencia),f(mortalidad en exceso) eipop(incidencia poblacional, i (1 - p): casos nuevos por persona-año de toda la población). Las tasas son por persona-año.grid: lista conedades(las edades enteras dedraws_q) ynudos.mcmc: tabla con el R-hat (rhat) y el tamaño efectivo de muestra (ess) de cadaparametroy sexo.aceptacion: tabla con la tasa de aceptación (tasa) de cada sexo,cadenaybloque(1: log i; 2: log f, que no existe con la mortalidad en exceso fija en 0).bundle_hash: el hash de los insumos.seed: la semilla.prior_only:FALSE(TRUEendl_ajustar_solo_prior()).params: las opciones del muestreo (el objeto dedl_opciones_mcmc()).ctxs: el contexto de cada sexo (mallas, interpolación, ancla y datos), que el paquete no vuelve a leer; se conserva por compatibilidad del objeto.
Details
Los parámetros son theta = (log i en los nudos, log f en los nudos), con i la incidencia y f la mortalidad en
exceso, por persona-año; entre los nudos, log i y log f se interpolan linealmente. La log-posterior suma el
prior de suavidad de log i (incidencia.suavidad), el prior de log f (dl_prior_emr(), o plano bajo el techo
con mortalidad_exceso.prior: plano), la verosimilitud del ancla (con su peso ancla.peso y su correlación entre
edades ancla.correlacion_edad) y la de los datos locales que entran al ajuste. La notación y las ecuaciones están
en vignette("el-modelo", package = "dismodlite").
Con mortalidad_exceso.prior: cero la mortalidad en exceso queda fija en 0 y no se estima: los parámetros son
solo log i en los nudos (un bloque del muestreador), la ecuación se resuelve con f = 0 y la log-posterior no tiene
término de mortalidad en exceso. Sirve para una causa sin muertes: sin esta opción, log f no tendría información
y sus cadenas no convergerían.
Cada sexo se muestrea con cadenas de Metropolis-Hastings adaptativo por bloques (dl_mh()), con log i y log f
en bloques separados. La semilla de un sexo es semilla + sex_id y la de cada cadena se deriva de ella: el
resultado no depende de nucleos. De todas las cadenas juntas se guardan simulaciones equiespaciadas
y con cada una se resuelve la ecuación de la prevalencia en las edades enteras.
Con cadenas cortas (como en los ejemplos) el ajuste es una prueba: el R-hat y el ESS de mcmc dicen si las
cadenas convergieron (R-hat < 1.01 y ESS >= 400, las compuertas de dl_exportar_corrida()).
See also
dl_opciones_mcmc() (las cadenas), dl_estimaciones() (la tabla de estimaciones), dl_cascada() (el
paso siguiente), dl_limpiar_cache() (vaciar la caché) y dl_correr() (todas las etapas en una llamada).
Ajuste nacional:
dl_ajustar_solo_prior(),
dl_estimaciones(),
dl_opciones_mcmc()
Examples
# \donttest{
b <- dl_insumos(dl_proyecto(dl_ejemplo(), causa = 9100))
#> dl_insumos(): 25 fila(s) nacionales de la tabla datos quedan fuera del ajuste porque datos_en_ajuste está vacío en la configuración; las filas subnacionales se usan solo para validar la cascada
# cadenas cortas, las de dl_correr(rapido = TRUE): una prueba, no una estimación para publicar
op <- dl_opciones_mcmc(simulaciones = 100, cadenas = 2, iteraciones = 2000, calentamiento = 1000)
f <- dl_ajustar(b, op, semilla = 1)
f
#> <dl_fit> insumos 0e52c7277b9a | semilla 1 | motor mh
#> sexos: 1, 2 | simulaciones por sexo: 100 | edades 30-99
#> R-hat máximo 2.306 | ESS mínimo 11 | aceptación 0.26-1.00
head(f$draws_q)
#> location_id sex_id draw edad p i f
#> <char> <int> <int> <int> <num> <num> <num>
#> 1: 123 1 1 30 0.0000000000 0.0007058096 0.01632175
#> 2: 123 1 1 31 0.0007238575 0.0007546207 0.01618020
#> 3: 123 1 1 32 0.0014857019 0.0008068073 0.01603987
#> 4: 123 1 1 33 0.0022885067 0.0008626029 0.01590077
#> 5: 123 1 1 34 0.0031354361 0.0009222571 0.01576286
#> 6: 123 1 1 35 0.0040298588 0.0009860368 0.01562616
#> ipop
#> <num>
#> 1: 0.0007058096
#> 2: 0.0007540744
#> 3: 0.0008056086
#> 4: 0.0008606288
#> 5: 0.0009193655
#> 6: 0.0009820632
f$mcmc
#> sex_id parametro rhat ess
#> <int> <char> <num> <num>
#> 1: 1 logi_30 1.0690290 44.50687
#> 2: 1 logi_40 1.0042025 41.03979
#> 3: 1 logi_50 1.1327666 23.87362
#> 4: 1 logi_60 1.0534729 44.06014
#> 5: 1 logi_70 1.1870340 43.68415
#> 6: 1 logi_80 1.1092947 60.39460
#> 7: 1 logi_95 1.1343767 72.21737
#> 8: 1 logf_30 2.3057039 23.92538
#> 9: 1 logf_40 1.0042028 14.51337
#> 10: 1 logf_50 1.1738625 31.40592
#> 11: 1 logf_60 1.0950296 18.03284
#> 12: 1 logf_70 1.0908017 12.19845
#> 13: 1 logf_80 1.4409048 11.35988
#> 14: 1 logf_95 1.3127094 30.91072
#> 15: 2 logi_30 1.1415853 17.99116
#> 16: 2 logi_40 1.0466695 53.41071
#> 17: 2 logi_50 1.0977376 18.37083
#> 18: 2 logi_60 1.0364980 42.75768
#> 19: 2 logi_70 1.0786529 52.24691
#> 20: 2 logi_80 1.1046384 64.30760
#> 21: 2 logi_95 1.2121370 45.76681
#> 22: 2 logf_30 1.2340040 55.26341
#> 23: 2 logf_40 1.1058805 71.29543
#> 24: 2 logf_50 0.9935457 58.44995
#> 25: 2 logf_60 1.0308891 68.33437
#> 26: 2 logf_70 1.0931405 36.10918
#> 27: 2 logf_80 1.1825740 45.52480
#> 28: 2 logf_95 1.3946752 55.03543
#> sex_id parametro rhat ess
#> <int> <char> <num> <num>
# prevalencia por edad, con su intervalo del 95 %
prev <- dl_estimaciones(f)
head(prev)
#> location_id sex_id edad medida media inferior superior
#> <char> <int> <int> <char> <num> <num> <num>
#> 1: 123 1 30 prevalencia 0.0000000000 0.0000000000 0.000000000
#> 2: 123 1 31 prevalencia 0.0009713892 0.0004834718 0.001674911
#> 3: 123 1 32 prevalencia 0.0019514261 0.0010106230 0.003300012
#> 4: 123 1 33 prevalencia 0.0029423464 0.0015789707 0.004877413
#> 5: 123 1 34 prevalencia 0.0039464232 0.0021877604 0.006410696
#> 6: 123 1 35 prevalencia 0.0049659840 0.0028435334 0.007903400
# }