Skip to contents

Convierte un indicador de encuesta ya agregado por ubicación subnacional y edición (la tabla proxies_crudos) en las filas subnacionales de la tabla covariables para el año que se estima: cada ubicación conserva su posición relativa en la encuesta y el promedio ponderado por la población cierra exactamente en el valor nacional de la covariable, que sigue en covariables.

Usage

dl_calibrar_proxies(
  crudos,
  covariables,
  poblacion,
  anio,
  metodo = c("paseo_aleatorio", "edicion"),
  transformacion = NULL,
  excluir = NULL,
  anio_nacional = anio,
  ubicacion_gbd = NULL,
  valor_nacional_de = NULL
)

Arguments

crudos

Tabla proxies_crudos (ver dl_tablas): data.frame o ruta de un CSV o una carpeta.

covariables

Tabla covariables, con el valor nacional de cada covariable de los crudos (o de la que nombra valor_nacional_de).

poblacion

Tabla poblacion de las ubicaciones de los crudos; sus bandas de edad (y sus sexos, para «ambos») deben poder sumarse en las de los crudos. Una fila de los crudos sin edades (o sin las columnas de edad, o con la banda de 0 y más) es de todas las edades: su población es la de todas las bandas de poblacion, empiecen donde empiecen.

anio

Año que se estima: el de las filas que salen.

metodo

Método temporal: "paseo_aleatorio" (por defecto) o "edicion".

transformacion

Vector (o lista) con nombres, covariable = "cociente" o "diferencia". Las covariables que no nombra usan "cociente".

excluir

data.frame con anio y motivo: ediciones que no entran. Cada una necesita su motivo.

anio_nacional

Año del valor nacional que cierra las filas. Por defecto, anio.

ubicacion_gbd

location_id de GBD del país, para leer covariables cuando es una carpeta (o un CSV) de descargas del GHDx con varias ubicaciones, como la carpeta covariables/ de un proyecto (ver dl_tabla()). No hace falta si covariables ya es una tabla leída.

valor_nacional_de

Vector (o lista) con nombres, covariable de los crudos = la covariable de covariables cuyo valor nacional cierra sus filas. Las covariables que no nombra cierran en su propio valor nacional.

Value

Una dl_tabla() covariables con las filas subnacionales del año: ubicacion, anio, sexo, las edades (si los crudos las traen; vacías en las de todas las edades), covariable, valor, error_estandar y fuente (el indicador, el método, q y las ediciones de la serie). Tres atributos:

  • calibracion: un data.table por covariable con metodo, transformacion, q, q_en_borde (el borde de su intervalo de búsqueda en que quedó q, "inferior" o "superior"; NA si no quedó en ninguno o no hay q), ediciones (las usadas: con el paseo aleatorio, todas las no excluidas; con edicion, las elegidas en alguna serie), excluidas (en texto, con su motivo), anios_poblacion (el año de la población de cada edición y del cierre) y valor_nacional_de (la covariable que dio el valor nacional, si es otra; si no, vacío).

  • series: un data.table por serie y edición con g, se_g, g_suavizado y S (el gradiente suavizado y su varianza en el año de la edición; con edicion, g y se_g²) y usada (la edición que tomó edicion; con el paseo aleatorio entran todas). Sin edades en los crudos, la banda es 0-125 (todas las edades).

  • excluidas: un data.table con covariable, anio y motivo, una fila por edición excluida de cada covariable (sin filas si no se excluyó ninguna).

Details

Gradiente de cada edición. Por covariable, sexo, banda de edad y edición t, el gradiente de la ubicación d compara su valor con \(\bar p_t\), el promedio de esa edición ponderado por la población del año de poblacion más cercano a t (con dos igual de cerca, el anterior). \(\bar p_t\) se toma sobre las ubicaciones comunes, las que están en todas las ediciones: así la referencia no se mueve cuando una edición no trae todas las ubicaciones. Si las ediciones no traen las mismas ubicaciones, la función avisa cuáles faltan; si menos de dos están en todas, es un error (excluye las ediciones con menos ubicaciones).

  • cociente: \(g = \log(p / \bar p_t)\), con error se / p (aproximación delta de la escala log). Para indicadores positivos que se comparan en proporción (prevalencias, tasas); exige valores mayores que 0.

  • diferencia: \(g = p - \bar p_t\), con error se. Para índices en los que importa la distancia en puntos (como un índice de 0 a 100) o indicadores que pueden valer 0.

Gradiente del año que se estima.

  • edicion: el de la edición del año o, si no hay, el de la más cercana (con dos igual de cerca, la anterior), con su varianza se_g².

  • paseo_aleatorio: cada serie (covariable, ubicación, sexo y banda) sigue un paseo aleatorio, \(g_t = g_{t-1} + \eta_t\) con \(\eta_t \sim N(0, q \Delta t)\), observado con su error. Un filtro de Kalman y un suavizador RTS dan el gradiente en el año que se estima, haya o no edición ese año, usando todas las ediciones de la serie. q, la varianza por año del gradiente, se estima por máxima verosimilitud, una por covariable con todas sus series.

Cómo leer q. Su raíz es cuánto se mueve el gradiente en un año (en log con cociente, en las unidades del indicador con diferencia). Con q muy chico el gradiente es casi constante y el resultado es la media de las ediciones ponderada por 1/se²; con q grande cada edición manda y el resultado se acerca al de edicion. q se busca entre \(10^{-6}\bar\sigma^2\) y \(10^{3}\bar\sigma^2\), con \(\bar\sigma^2\) la mediana de se_g² de la covariable: un intervalo relativo al error de las ediciones, así que el resultado no depende de las unidades del indicador (con diferencia, el mismo índice multiplicado por 100 da los mismos valores por 100 y q por \(10^4\)). Si q queda en un borde de ese intervalo, calibracion dice cuál (q_en_borde: "inferior" o "superior"): en el inferior (gradiente estable) la función lo informa con un mensaje; en el superior (cada edición manda) avisa. Con pocas ediciones la verosimilitud de q es plana: q puede moverse órdenes de magnitud con una edición más o menos. Es el grado de suavizado que eligen estos datos, no una propiedad estable del indicador: no lo compares entre encuestas ni lo leas por sí solo. Si todas las series de una covariable tienen una sola edición, q no se puede estimar: se usa la edición de cada serie, con un aviso, y q es NA. Una serie con una sola edición entre otras que sí estiman q coincide con edicion solo en el año de esa edición; en otro año su varianza suma \(q |\Delta t|\).

Cierre. Por sexo y banda, con w_d la población de cada ubicación en el año de poblacion más cercano a anio y X el valor nacional:

  • cociente: \(X_d = X e^{\hat g_d} / \sum_d w_d e^{\hat g_d}\) (con los w_d normalizados para sumar 1), con error \(X_d \sqrt{S_d}\);

  • diferencia: \(X_d = X + \hat g_d - \sum_d w_d \hat g_d\), con error \(\sqrt{S_d}\).

\(\sum_d w_d X_d / \sum_d w_d = X\) por construcción. El valor nacional es la fila de covariables de la covariable sin ubicacion (o con una que no está en los crudos), del año anio_nacional, del mismo sexo o de ambos y de la misma banda o de todas las edades; gana la que coincide en más.

El valor nacional de otra covariable. A veces el valor nacional con que se compara una covariable es el de otra: una beta estimada por edad cuyos valores subnacionales se comparan con la versión estandarizada por edad de la misma covariable. valor_nacional_de lo dice, covariable de los crudos = covariable de covariables: X es entonces el valor nacional de la covariable nombrada, que se busca con las mismas reglas, y la propia no necesita fila nacional. Las filas que salen llevan el nombre de la covariable de los crudos. En un proyecto es la columna valor_nacional_de de la tabla betas (dl_tablas), y dl_proyecto() la pasa a la calibración (en un proyecto, la beta queda eximida de su fila nacional solo si su covariable tiene valores subnacionales, en covariables o en proxies_crudos).

Aproximaciones declaradas. El error de X_d no incluye la incertidumbre de la normalización ni la del valor nacional; se/p es la aproximación delta; la población de cada edición (y la del cierre) es la del año más cercano de poblacion, también fuera de sus años (calibracion$anios_poblacion dice cuál se usó). Una ubicación que falta en una edición se interpola con sus otras ediciones (con edicion, se usa su edición más cercana).

Examples

pob <- data.frame(ubicacion = rep(c("R01", "R02", "R03"), each = 2),
                  anio = rep(c(2019, 2023), 3),
                  sexo = "ambos", edad_inicio = 0, edad_fin = NA,
                  poblacion = c(100, 110, 300, 290, 200, 210))
crudos <- data.frame(ubicacion = rep(c("R01", "R02", "R03"), 3),
                     anio = rep(c(2019, 2021, 2023), each = 3),
                     covariable = "haqi", indicador = "índice de acceso (encuesta)",
                     valor = c(40, 60, 52, 45, 58, 50, 41, 63, 55), error_estandar = 1.5)
nacional <- data.frame(anio = 2023, covariable = "haqi", valor = 56.4)
cal <- dl_calibrar_proxies(crudos, nacional, pob, anio = 2023,
                           transformacion = c(haqi = "diferencia"))
cal
#>    ubicacion  anio   sexo covariable    valor error_estandar
#>       <char> <int> <char>     <char>    <num>          <num>
#> 1:       R01  2023  ambos       haqi 42.52542       1.316869
#> 2:       R02  2023  ambos       haqi 62.81241       1.316869
#> 3:       R03  2023  ambos       haqi 54.81241       1.316869
#>                                                                                           fuente
#>                                                                                           <char>
#> 1: índice de acceso (encuesta): calibrado (paseo_aleatorio, q = 2.9, ediciones 2019, 2021, 2023)
#> 2: índice de acceso (encuesta): calibrado (paseo_aleatorio, q = 2.9, ediciones 2019, 2021, 2023)
#> 3: índice de acceso (encuesta): calibrado (paseo_aleatorio, q = 2.9, ediciones 2019, 2021, 2023)
attr(cal, "calibracion")
#>    covariable          metodo transformacion        q q_en_borde
#>        <char>          <char>         <char>    <num>     <char>
#> 1:       haqi paseo_aleatorio     diferencia 2.902516       <NA>
#>           ediciones excluidas
#>              <char>    <char>
#> 1: 2019, 2021, 2023          
#>                                                          anios_poblacion
#>                                                                   <char>
#> 1: ediciones: 2019 → 2019, 2021 → 2019, 2023 → 2023; cierre: 2023 → 2023
#>    valor_nacional_de
#>               <char>
#> 1:              <NA>
# las series: gradiente observado (puntos) y suavizado (líneas), por ubicación
s <- attr(cal, "series")
plot(g ~ anio, s, col = factor(ubicacion), pch = 19, ylab = "gradiente")
for (u in unique(s$ubicacion)) lines(g_suavizado ~ anio, s[s$ubicacion == u, ])


# el valor nacional de otra covariable: las filas de haqi cierran en el de haqi_estandarizado
otra <- data.frame(anio = 2023, covariable = "haqi_estandarizado", valor = 54.1)
cal2 <- dl_calibrar_proxies(crudos, otra, pob, anio = 2023,
                            transformacion = c(haqi = "diferencia"),
                            valor_nacional_de = c(haqi = "haqi_estandarizado"))
weighted.mean(cal2$valor, c(110, 290, 210))   # 54.1
#> [1] 54.1
attr(cal2, "calibracion")$valor_nacional_de
#> [1] "haqi_estandarizado"

# el proyecto de ejemplo trae una encuesta de tres ediciones: dl_proyecto() la calibra
p <- dl_proyecto(dl_ejemplo(), causa = 9100)
attr(p$calibracion, "calibracion")[, c("covariable", "transformacion", "q", "ediciones")]
#>                   covariable transformacion            q        ediciones
#>                       <char>         <char>        <num>           <char>
#> 1: SEV_scalar_agestd_cvd_pvd       cociente 2.255044e-05 2019, 2021, 2023
#> 2:                    LDI_pc       cociente 3.734479e-04 2019, 2021, 2023
#> 3:                      haqi     diferencia 4.055032e-01 2019, 2021, 2023
# la misma calibración a mano, para otro año, con el método de la edición más cercana
t <- p$tablas
cal19 <- dl_calibrar_proxies(t$proxies_crudos, t$covariables, t$poblacion, anio = 2019,
                             metodo = "edicion", transformacion = c(haqi = "diferencia"))
head(cal19)
#>    ubicacion  anio    sexo edad_inicio edad_fin                covariable
#>       <char> <int>  <char>       <num>    <num>                    <char>
#> 1:        01  2019 hombres          40       45 SEV_scalar_agestd_cvd_pvd
#> 2:        02  2019 hombres          40       45 SEV_scalar_agestd_cvd_pvd
#> 3:        03  2019 hombres          40       45 SEV_scalar_agestd_cvd_pvd
#> 4:        04  2019 hombres          40       45 SEV_scalar_agestd_cvd_pvd
#> 5:        05  2019 hombres          40       45 SEV_scalar_agestd_cvd_pvd
#> 6:        06  2019 hombres          40       45 SEV_scalar_agestd_cvd_pvd
#>       valor error_estandar
#>       <num>          <num>
#> 1: 1.188649     0.03139827
#> 2: 1.152765     0.02790957
#> 3: 1.214565     0.03239504
#> 4: 1.256927     0.02940473
#> 5: 1.214066     0.03139827
#> 6: 1.102926     0.02591603
#>                                                                                      fuente
#>                                                                                      <char>
#> 1: indicador sintético de riesgo vascular (proporción): calibrado (edicion, ediciones 2019)
#> 2: indicador sintético de riesgo vascular (proporción): calibrado (edicion, ediciones 2019)
#> 3: indicador sintético de riesgo vascular (proporción): calibrado (edicion, ediciones 2019)
#> 4: indicador sintético de riesgo vascular (proporción): calibrado (edicion, ediciones 2019)
#> 5: indicador sintético de riesgo vascular (proporción): calibrado (edicion, ediciones 2019)
#> 6: indicador sintético de riesgo vascular (proporción): calibrado (edicion, ediciones 2019)