Skip to contents

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; FALSE vuelve 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> y logf_<nudo>: log i y log f en cada nudo; con la mortalidad en exceso fija en 0, solo logi_<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) e ipop (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 con edades (las edades enteras de draws_q) y nudos.

  • mcmc: tabla con el R-hat (rhat) y el tamaño efectivo de muestra (ess) de cada parametro y sexo.

  • aceptacion: tabla con la tasa de aceptación (tasa) de cada sexo, cadena y bloque (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 (TRUE en dl_ajustar_solo_prior()).

  • params: las opciones del muestreo (el objeto de dl_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
# }