datos |>
as_survey_design(ids = ...,
strata = ...,
variables = ...,
fpc = ...,
nest = F,
weights = ...)Intervalos de confianza en muestras complejas
Introducción
En los estudios epidemiológicos de corte transversal, es común el uso de encuestas poblacionales para estimar la frecuencia de determinadas condiciones de salud o la presencia de factores de riesgo en la población.
Sin embargo, la implementación de estas encuestas enfrenta restricciones prácticas que hacen inviable o poco conveniente el muestreo aleatorio simple (MAS). En su lugar, se recurre a otras alternativas de muestreo, como la estratificación, la selección en etapas, la formación de conglomerados o el empleo de probabilidades de selección desiguales.
Los diseños muestrales que incorporan combinaciones de estas estrategias se denominan muestreos complejos, por contraste con el MAS, en el que las unidades muestrales se seleccionan independientemente unas de otras y todas tienen igual probabilidad de selección y distribución.
El análisis de los datos obtenidos mediante diseños muestrales complejos presenta desafíos adicionales debido a la posible correlación entre observaciones dentro de un mismo conglomerado. Esta correlación impide asumir independencia de las observaciones, condición necesaria para sostener el supuesto de normalidad. Si no se considera el efecto del diseño muestral al realizar estimaciones e intervalos de confianza (IC), los resultados pueden ser erróneos. Aspectos clave como el efecto del diseño, los dominios de estimación y los factores de expansión deben ser incorporados en el análisis para obtener inferencias válidas.
Algunas definiciones necesarias
Estratos
Subpoblaciones “naturales” que, a priori, son homogéneos en su interior pero heterogéneos entre sí. El diseño de la encuesta se hace de modo que se garantiza cubrir adecuadamente todos los estratos de interés. Algunas variables de estratos habituales son: sexo, edad (como grupo etario), nivel de educación, urbano/rural, etc.
Conglomerados
Unidades definidas dentro de cada estrato (si es muestreo polietápico), cuyo tamaño es conocido. Lo ideal es que la población dentro de un conglomerado sea lo más heterogénea posible, pero debe haber homogeneidad entre los conglomerados. Cada grupo debe ser una representación a pequeña escala de la población total. Los grupos deben ser mutuamente excluyentes y colectivamente exhaustivos.
Probabilidad de inclusión
Es la probabilidad que cada unidad tiene de estar incluida en la muestra. En los muestreos complejos polietápicos se obtiene, en general, multiplicando las probabilidades asociadas al estrato, a cada Unidad Primaria de Muestreo (UPM o PSU en inglés) dentro del estrato, y a la unidad de segunda etapa dentro cada UPM.
Dominios de estimación
Subconjuntos de la población objetivo cuyos elementos pueden ser identificados en el marco muestral sin ambigüedad, y en los que se permite desagregar los resultados de la encuesta. Es aconsejable respetar estos dominios de estimación y no realizar inferencia de parámetros de interés para otros dominios no previstos que conlleva estimaciones inválidas.
Factor de expansión
Es el valor asociado a cada unidad elegible y que responde a la muestra, que se construye a partir de la inversa de la probabilidad de inclusión de cada unidad o peso muestral inicial. Puede incluir distintos tipos de ajustes, para disminuir en lo posible los errores de cobertura y de no respuesta que afectan a la encuesta, y ser tratados por un proceso de calibración que lleva en general a ganar eficiencia y precisión en las estimaciones. Los factores de expansión finales son los que se emplean tanto para generar todas las estimaciones de una encuesta, como en los cálculos del error muestral al determinar la precisión alcanzada.
Efecto de diseño (DEFF por sus siglas en inglés)
Mide la pérdida en precisión al utilizar un diseño muestral complejo en lugar de un diseño aleatorio simple, por ejemplo, un efecto de diseño de 1,5 indica que la varianza del diseño complejo es 1,5 veces más grande que la varianza de un diseño aleatorio simple, en otras palabras se dio un aumento en la varianza de un 50%.
Paquetes survey y srvyr
El paquete más conocido y utilizado del lenguaje R para trabajar con datos provenientes de muestreos complejos es survey (Lumley 2024). Desarrollado por Thomas Lumley que a su vez es autor del libro Complex Surveys - A Guide to Analysis Using R (2010).
Las funciones que lo integran utilizan en sus argumentos la sintaxis fórmula preferentemente y no son compatibles con el universo “ordenado” de tidyverse. Con el objetivo de hacer compatible estas funciones crearon un paquete “wrapper” (envoltorio) llamado srvyr (Freedman Ellis y Schneider 2024), que incorpora sintaxis tidy, haciendo uso de tuberías y funciones tales como group_by(), summarise(), entre otras.
El primer paso para trabajar con las funciones de srvyr es crear un objeto con la información relacionada con el diseño muestral. Esta tarea se realiza con la función as_survey_design() que tiene estos argumentos principales:
donde:
ids: Variables que especifican identificadores de conglomerados desde el nivel más grande hasta el nivel más pequeño (dejar el argumento vacío,NULL, 1 o 0 indica que no hay conglomerados).strata: Variables que identifican a los estratos. Si no hay estratos, se ignora esta especificación.
Usualmente, se declara a partir de una variable. Por ejemplo, si la variable estrato define los estratos, sería,
datos |>
as_survey_design(...,
strata = estrato,
...)variables: Variables que se incluirán en el diseño. El valor predeterminado es todas las variables de datos.fpc: Variables con el factor de corrección por población finita.nest:Si esTRUE, re-etiqueta los conglomerados considerando anidamiento dentro de los estratos. Necesario activar cuando las etiquetas de las categorías de los conglomerados en los distintos estratos se llaman igual.weights: Variables de ponderación de cada observación (inverso a la probabilidad).
Los argumentos mínimos que debemos definir dependerá de la estructura muestral de la base de datos que estemos analizando y de las variables que tengamos a disposición. Habitualmente se tiene referencia de estratos, conglomerados y ponderaciones. También podemos encontrarnos con situaciones donde están definidos los tamaños poblacionales (variable fpc).
Ejemplo práctico en R
Para ejemplificar vamos a tomar a la Encuesta Mundial de Salud Escolar (EMSE) en su tercera edición que en la Argentina se realizó en 2018. Fue llevada a cabo por el Ministerio de Salud y Desarrollo Social de la Nación, contó con la colaboración de los Ministerios de Educación Nacional y Provinciales, la OPS/OMS Argentina, OPS/OMS Washington y el CDC.
El diseño de muestreo tuvo dos etapas (selección de escuelas y luego de divisiones al azar) para producir una muestra representativa de alumnos de 1º a 5º año de educación media a nivel nacional (8º EGB a 3º polimodal en el caso de la provincia de Buenos Aires) y provincial. Se relevaron 523 escuelas en todo el país y se encuestaron 57.095 alumnos de los cuales se analizaron 56.981 cuestionarios correspondientes a las edades de 13 a 17 años, con una tasa de respuesta global de 63%. Se puede acceder a sus datos abiertos en EMSE 2018
Activamos los paquetes necesarios:
Leemos el archivo de datos “EMSE.txt” con:
Rows: 56,981
Columns: 14
$ record <dbl> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, …
$ q2 <dbl> 2, 2, 1, 1, 2, 1, 2, 2, 1, 2, 1, 2, 2, 2, 2, 2, 1, 1, 2, 1,…
$ texto_q2 <chr> "Femenino", "Femenino", "Masculino", "Masculino", "Femenino…
$ q3 <dbl> 2, 2, 4, 2, 2, 2, 4, 4, 4, 2, 2, 4, 2, 4, 4, 4, 4, 2, 2, 2,…
$ texto_q3 <chr> "9no grado nivel Primario/Polimodal o 2do año nivel Secunda…
$ q4 <dbl> NA, NA, 1.67, 1.73, NA, 1.72, NA, NA, NA, NA, 1.64, NA, NA,…
$ q5 <dbl> NA, NA, 56, 70, NA, 48, NA, NA, NA, NA, 45, NA, NA, 40, 52,…
$ q6 <dbl> 2, 1, 1, 1, 1, 1, 3, 1, 4, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,…
$ texto_q6 <chr> "Rara vez", "Nunca", "Nunca", "Nunca", "Nunca", "Nunca", "A…
$ qn24 <dbl> 1, 2, NA, 2, 2, 2, 2, 2, 2, 1, 2, 1, 2, NA, 1, 2, 2, 2, 2, …
$ texto_qn24 <chr> "Si", "No", "Dato perdido", "No", "No", "No", "No", "No", "…
$ psu <dbl> 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,…
$ stratum <dbl> 201801010, 201801010, 201801010, 201801010, 201801010, 2018…
$ weight <dbl> 457.09, 457.09, 261.44, 550.90, 457.09, 550.90, 274.43, 274…
El dataframe importado consta de 14 variables y 56.981 observaciones.
Calculamos el total de la muestra expandida:
Las variables relevantes para el diseño muestral que el documento de usuario define son:
psu: Unidades primarias de muestreo (conglomerados)stratum: Estratos del muestreoweight: Ponderación
Además, nuestras variables de interés son:
record: Nro. de registroq2: Sexotexto_q2: Sexo categorizadoq3: Grado / año en el que se encuentra el estudiantetexto_q3: Grado / año en el que se encuentra el estudiante categorizadoq4: Estatura sin zapatos (medido en metros)q5: Peso sin zapatos (medido en kilogramos)q6: Pregunta sobre hambretexto_q6: Pregunta sobre hambre categorizadaqn24: Pregunta sobre idea suicidatexto_qn24: Pregunta sobre idea suicida categorizada
Para facilitar el análisis, vamos a renombrar nuestras variables de interés usando la función rename() de tidyverse:
datos <- datos |>
rename(sexo = texto_q2,
grado = texto_q3,
estatura_m = q4,
peso_kg = q5,
hambre = texto_q6,
idea_suicida = texto_qn24)A partir de las variables cuantitativas estatura_m y peso_kg vamos a construir una nueva variable llamada imc (Índice de Masa Corporal) :
datos <- datos |>
# IMC: peso sobre talla al cuadrado
mutate(imc = peso_kg/(estatura_m)^2)Ahora podemos comenzar a definir el objeto de diseño muestral:
d <- datos |>
as_survey_design(ids = psu, # conglomerados
variables = c(record, psu, stratum, weight,
q2, sexo, q3, grado,
peso_kg, estatura_m, imc, q6, hambre,
qn24, idea_suicida), # variables
strata = stratum, # estratos
weights = weight, # ponderación
nest = T) # anidaciónUna vez que tenemos creado el objeto “survey.design”, que en nuestro ejemplo se denomina d, podemos avanzar en el calculo de las estimaciones.
Si bien podemos manipular datos dentro de este formato de diseño utilizando algunas de las funciones de tidyverse como select(), mutate(), filter() y rename(), lo conveniente es modificar previamente la estructura de la tabla de datos, ya sea para crear una nueva variable, como hicimos recién con IMC o cambiar una existente y luego generar el objeto con el diseño muestral para poder hacer uso de esos cambios en las estimaciones.
Estimaciones
En primer lugar tomaremos la variable imc, variable cuantitativa continua que construimos.
La función survey_mean() computa estimaciones de medias en diseños complejos usando la sintaxis de tidyverse.
Los siguientes son los argumentos comunes de la función:
x: Variable o expresión o vacía.na.rm: Si esTRUE, omite los valoresNAde la variablevartype: Obtiene la variabilidad como uno o más estimadores: error estándar ("se", predeterminado), intervalo de confianza ("ci"), varianza ("var") o coeficiente de variación ("cv").level: Nivel de confianza (solo se usa si el anterior es"ci")deff: Si esTRUE, calcula el efecto de diseño para la estimación
Aplicamos la función con todas las posibles salidas de varianza sobre la variable de imc dentro de summarise() de tidyverse:
d |>
summarise(imc = survey_mean(x = imc,
na.rm = T,
vartype = c("se", "ci", "var", "cv"),
level = 0.95))# A tibble: 1 × 6
imc imc_se imc_low imc_upp imc_var imc_cv
<dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 22.1 0.0869 22.0 22.3 0.00755 0.00392
El resultado muestra una media de IMC de 22,1, un error estándar de 0,09, un intervalo de confianza al 95% de (22,0-22,3), una varianza de 0,007 y un coeficiente de variación de 0,4 %.
Como nos informan que hubo no respuesta en la encuesta y las faltantes de información en altura y/o peso provoca observaciones perdidas en la variable IMC, vamos a ver cuantos de estos valores perdidos tenemos en la variable.
Si deseamos calcular totales, es decir a cuantos estudiantes representa estos valores perdidos podemos usar la función survey_total():
d |>
filter(is.na(imc)) %>% # filtramos los NA en IMC
summarise(imc_na = survey_total(vartype = "ci"))# A tibble: 1 × 3
imc_na imc_na_low imc_na_upp
<dbl> <dbl> <dbl>
1 976104. 878120. 1074088.
Hay aproximadamente 976.104 IC 95% (87.820-1.074.088) estudiantes sin valor en la variable imc del total de la población de 2.637.546 (un 37 %).
Si en lugar de la media quisiéramos la mediana podemos cambiar la función y usar survey_median():
d |>
summarise(imc = survey_median(x = imc,
na.rm = T,
vartype = c("se", "ci", "var", "cv"),
level = 0.95))# A tibble: 1 × 6
imc imc_se imc_low imc_upp imc_var imc_cv
<dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 21.5 0.0772 21.4 21.7 0.00596 0.00359
Podemos estratificar estas estimaciones haciendo uso del group_by(), por ejemplo con la variable sexo del estudiante:
d |>
group_by(sexo) |>
summarise(media_imc = survey_mean(imc,
vartype = "ci",
na.rm = T))# A tibble: 3 × 4
sexo media_imc media_imc_low media_imc_upp
<chr> <dbl> <dbl> <dbl>
1 Dato perdido 0 0 0
2 Femenino 22.0 21.8 22.2
3 Masculino 22.3 22.1 22.5
Como hay datos perdidos en la variable sexo nos aparece una categoría más en los grupos de los resultados. Al estar vacía en las estimaciones (evidentemente son “no respuestas” completas) podemos deshacernos de esa línea con un filter():
d |>
filter(sexo != "Dato perdido") |> # o filter(!is.na(q2))
group_by(sexo) |>
summarise(media_imc = survey_mean(imc,
vartype = "ci",
na.rm = T))# A tibble: 2 × 4
sexo media_imc media_imc_low media_imc_upp
<chr> <dbl> <dbl> <dbl>
1 Femenino 22.0 21.8 22.2
2 Masculino 22.3 22.1 22.5
Esta tabla muestra las estimaciones de imc según sexo con sus intervalos de confianza.
Otra variable de la encuesta es la respuesta a la pregunta “Durante los últimos 30 días ¿con qué frecuencia te quedaste con hambre porque no había suficiente comida en tu hogar?”. Las categorías válidas fueron: Nunca, Rara vez, Algunas veces, Casi siempre, Siempre y Dato perdido si no hubo respuesta.
Para abordar estas variables cualitativas donde queremos obtener proporciones el paquete tiene la función survey_prop() que se utiliza declarando la variable de interés en un group_by() previo:
d |>
group_by(hambre) %>% # variable para la estimación
summarise(prop_hambre = survey_prop(vartype = "ci")*100) # usamos 100 para %# A tibble: 6 × 4
hambre prop_hambre prop_hambre_low prop_hambre_upp
<chr> <dbl> <dbl> <dbl>
1 Algunas veces 9.34 8.49 10.3
2 Casi siempre 1.36 1.18 1.56
3 Dato perdido 0.804 0.678 0.952
4 Nunca 67.8 66.6 69.0
5 Rara vez 20.1 19.2 20.9
6 Siempre 0.627 0.487 0.807
El resultado muestra las categorías desordenadas en relación a lo que significa cada una respecto a la definición de la pregunta, es decir a la ordinalidad de la variable, aunque si está ordenada respecto a la forma en que lo hace el lenguaje R (alfabético).
Para darle el orden adecuado, deberíamos convertir la variable hambre a factor y declarar correctamente sus niveles. Conviene hacer esto previo a la creación del objeto de diseño pero el paquete también lo permite una vez creado:
Repetimos el código anterior:
d |>
group_by(hambre) |>
summarise(prop_hambre = survey_prop(vartype = "ci")*100)# A tibble: 6 × 4
hambre prop_hambre prop_hambre_low prop_hambre_upp
<fct> <dbl> <dbl> <dbl>
1 Nunca 67.8 66.6 69.0
2 Rara vez 20.1 19.2 20.9
3 Algunas veces 9.34 8.49 10.3
4 Casi siempre 1.36 1.18 1.56
5 Siempre 0.627 0.487 0.807
6 Dato perdido 0.804 0.678 0.952
El ordenamiento de las categorías ahora es el correcto producto de la transformación a factor.
Para estratificar estas proporciones lo único que debemos hacer es incorporar la variable de agrupamiento dentro del group_by():
d |>
group_by(sexo, hambre) |>
summarise(prop_hambre = survey_prop(vartype = "ci")*100) # A tibble: 18 × 5
# Groups: sexo [3]
sexo hambre prop_hambre prop_hambre_low prop_hambre_upp
<chr> <fct> <dbl> <dbl> <dbl>
1 Dato perdido Nunca 54.3 43.9 64.3
2 Dato perdido Rara vez 23.5 17.3 31.2
3 Dato perdido Algunas veces 14.2 8.18 23.5
4 Dato perdido Casi siempre 1.07 0.459 2.49
5 Dato perdido Siempre 1.18 0.589 2.36
6 Dato perdido Dato perdido 5.74 3.45 9.41
7 Femenino Nunca 68.1 66.7 69.4
8 Femenino Rara vez 19.7 18.7 20.8
9 Femenino Algunas veces 9.78 8.96 10.7
10 Femenino Casi siempre 1.18 0.933 1.49
11 Femenino Siempre 0.549 0.389 0.775
12 Femenino Dato perdido 0.673 0.530 0.854
13 Masculino Nunca 67.8 66.2 69.4
14 Masculino Rara vez 20.3 19.2 21.5
15 Masculino Algunas veces 8.75 7.69 9.94
16 Masculino Casi siempre 1.56 1.20 2.01
17 Masculino Siempre 0.700 0.518 0.946
18 Masculino Dato perdido 0.842 0.624 1.13
Este esquema de agrupamientos o estratificaciones se anidan en el orden en que se declaran dentro del group_by() siendo la última variable la de estimación. Por ende, los porcentajes también salen anidados, tomando como denominador para el calculo del 100 % al total de cada categoría de sexo en el ejemplo anterior.
También podemos hacer que para el calculo de los porcentajes se tome como denominador el total general de la siguiente forma:
d |>
group_by(interact(sexo, hambre)) |>
summarise(prop_hambre = survey_prop(vartype = "ci")*100)# A tibble: 18 × 5
sexo hambre prop_hambre prop_hambre_low prop_hambre_upp
<chr> <fct> <dbl> <dbl> <dbl>
1 Dato perdido Nunca 0.539 0.429 0.677
2 Dato perdido Rara vez 0.234 0.160 0.342
3 Dato perdido Algunas veces 0.141 0.0755 0.263
4 Dato perdido Casi siempre 0.0107 0.00464 0.0245
5 Dato perdido Siempre 0.0117 0.00594 0.0232
6 Dato perdido Dato perdido 0.0570 0.0328 0.0990
7 Femenino Nunca 35.0 33.7 36.4
8 Femenino Rara vez 10.2 9.58 10.8
9 Femenino Algunas veces 5.03 4.63 5.47
10 Femenino Casi siempre 0.608 0.481 0.768
11 Femenino Siempre 0.283 0.200 0.400
12 Femenino Dato perdido 0.346 0.270 0.443
13 Masculino Nunca 32.2 31.1 33.4
14 Masculino Rara vez 9.66 9.11 10.2
15 Masculino Algunas veces 4.16 3.63 4.76
16 Masculino Casi siempre 0.741 0.569 0.965
17 Masculino Siempre 0.333 0.246 0.450
18 Masculino Dato perdido 0.400 0.295 0.543
Un argumento incluido dentro de las posibilidades de survey_prop() es el método para su calculo (prop_method). En este documento no vamos a profundizar en los métodos que la función ofrece, solo mencionaremos las posibilidades permitidas según la ayuda del paquete:
"likelihood": utiliza la distribución de chi-cuadrado escalada (Rao-Scott) para la log-likelihood de una distribución binomial."asin": usa la transformación estabilizadora de la varianza para la distribución binomial, la raíz cuadrada del arcoseno, y luego transforma el intervalo a la escala de probabilidad."beta": usa la función beta incompleta como enbinom.test, con una tamaño de muestra efectivo basado en la varianza estimada de la proporción. (Korn y Graubard, 1998)."mean": utiliza un intervalo tipo Wald en la escala de probabilidad, igual queconfint()."logit": ajusta un modelo de regresión logística y calcula un intervalo tipo Wald en la escala logarítmica de probabilidades, que luego se transforma a la escala de probabilidad. Es el método predeterminado de la función.
Otra función útil es survey_count() que estima el conteo poblacional de las observaciones según categoría:
d |>
survey_count(hambre,
vartype = "ci") # A tibble: 6 × 4
hambre n n_low n_upp
<fct> <dbl> <dbl> <dbl>
1 Nunca 1788701. 1683670. 1893733.
2 Rara vez 529025. 498681. 559370.
3 Algunas veces 246227. 213940. 278513.
4 Casi siempre 35857. 30276. 41438.
5 Siempre 16542. 12251. 20832.
6 Dato perdido 21194. 16920. 25468.
Aquí lo usamos acompañando con el intervalo de confianza del 95% (predeterminado).
Ahora tomaremos otra variable de la EMSE2018 llamada idea_suicida que refiere a la pregunta: “Durante los últimos 12 meses, ¿alguna vez consideraste seriamente la posibilidad de intentar suicidarte?”. Sus posibles respuestas son "Si", "No" y el habitual "Dato perdido". Estimaremos su proporción para toda la población pero también para una subpoblación en particular, por ejemplo para “3er año/12vo grado nivel Polimodal o 5to año nivel Secundario”.
Como es habitual que necesitemos obtener estimaciones en subgrupos o subpoblaciones determinados por categorías definidas de una variable, debemos tener cuidado al interpretar los elementos del muestro para que esas subpoblaciones hayan sido consideradas y por lo tanto estén incluídas como dominio de estimación.
Estos subgrupos requeridos pueden no coincidir con los estratos de la muestra compleja generando un inconveniente para las estimaciones, dado que las ponderaciones muestrales serían correctas pero la probabilidad de muestreo seguramente no, lo que produce estimaciones puntuales correctas con errores estándar incorrectos.
Las funciones del paquete srvyr maneja estos detalles sin ningún esfuerzo especial por parte del analista siempre y cuando utilice la muestra completa para definir el objeto de diseño de la encuesta pero no asegura que los resultados tengan la calidad necesaria.
Mostremos el código entonces:
d |>
group_by(idea_suicida) |>
summarise(prop_suicidio = survey_prop(vartype = c("ci", "cv"))*100) # A tibble: 3 × 5
idea_suicida prop_suicidio prop_suicidio_low prop_suicidio_upp
<chr> <dbl> <dbl> <dbl>
1 Dato perdido 2.16 1.90 2.45
2 No 76.8 76.1 77.6
3 Si 21.0 20.3 21.7
# ℹ 1 more variable: prop_suicidio_cv <dbl>
Seleccionamos una subpoblación correspondiente a los estudiantes de “3er año/12vo grado nivel Polimodal o 5to año nivel Secundario” (código 5 de q3):
d |>
filter(q3 == 5) |>
group_by(idea_suicida) |>
summarise(prop_suicidio = survey_prop(vartype = c("ci", "cv"))*100)# A tibble: 3 × 5
idea_suicida prop_suicidio prop_suicidio_low prop_suicidio_upp
<chr> <dbl> <dbl> <dbl>
1 Dato perdido 1.71 1.27 2.30
2 No 79.3 77.6 81.0
3 Si 18.9 17.5 20.4
# ℹ 1 more variable: prop_suicidio_cv <dbl>
Un 21,0% (95% IC: 20,3-21,7%) del total de estudiantes dicen haber considerado un intento de suicidio en el último año, mientras que un 18,9% (95% IC: 17,5-20,4%) dice lo mismo en el grupo de “3er año/12vo grado nivel Polimodal o 5to año nivel Secundario”.
Agregamos a los resultados algo importante, que va a garantizar la calidad de la estimaciones y evitar estar informando valores poco confiables para los cuales el muestreo quizás no esté preparado. Este es el coeficiente de variación (CV). Comparativamente vamos a encontrar valores más elevados de CV, en la medida que se agreguen filtros o agrupamientos anidados que reduzcan la muestra de la estimación.
Que pasa si filtramos y nos quedamos además solo con las mujeres que respondieron que se quedaron con hambre “algunas veces” en los últimos 30 días:
d |>
filter(q3 == 5, sexo == "Femenino", hambre == "Algunas veces") |>
group_by(idea_suicida) |>
summarise(prop_suicidio = survey_prop(vartype = c("ci", "cv"))*100)# A tibble: 3 × 5
idea_suicida prop_suicidio prop_suicidio_low prop_suicidio_upp
<chr> <dbl> <dbl> <dbl>
1 Dato perdido 3.15 0.941 10.0
2 No 63.5 53.7 72.3
3 Si 33.4 25.6 42.2
# ℹ 1 more variable: prop_suicidio_cv <dbl>
Los CV de las estimaciones siguen creciendo, por ejemplo en el caso de la respuesta Si a un 12,6 % en comparación de la población completa que era de 1,6 %. Este aumento tiene que ver sobre todo con el tamaño muestral que nos queda luego de tantos filtros:
# Total muestra
d |>
survey_count(idea_suicida)# A tibble: 3 × 3
idea_suicida n n_se
<chr> <dbl> <dbl>
1 Dato perdido 56885. 4176.
2 No 2026726. 56584.
3 Si 553935. 21644.
# Subgrupo seleccionado
d |>
filter(q3 == 5, sexo == "Femenino", hambre == "Algunas veces") |>
survey_count(idea_suicida)# A tibble: 3 × 3
idea_suicida n n_se
<chr> <dbl> <dbl>
1 Dato perdido 600. 356.
2 No 12084. 1695.
3 Si 6348. 808.
Solo 6.347 estudiantes expandidos que respondieron que Si sobre los 553.934 totales que lo hicieron. Y cuantos respecto a la muestra sin expandir?
Podemos verlo así:
# Total muestra
d |>
group_by(idea_suicida) |>
summarise(n = unweighted(n()))# A tibble: 3 × 2
idea_suicida n
<chr> <int>
1 Dato perdido 1353
2 No 43666
3 Si 11962
# Subgrupo seleccionado
d |>
filter(q3 == 5, sexo == "Femenino", hambre == "Algunas veces") |>
group_by(idea_suicida) |>
summarise(n = unweighted(n()))# A tibble: 3 × 2
idea_suicida n
<chr> <int>
1 Dato perdido 9
2 No 287
3 Si 194
194 estudiantes de la muestra sin expandir respondieron que Si sobre 11.962 sin aplicar los filtros.
Errores estándar según efecto del diseño
En este punto vamos a comparar estimaciones en función de construir objetos de diseños muestrales diferentes sobre la misma base de datos.
Diseño complejo y pesos (igual al ejemplo anterior):
d_complejo <- datos |>
as_survey_design(ids = psu, # conglomerados
variables = c(record, psu, stratum, weight,
q2, sexo, q3, grado,
peso_kg, estatura_m, imc, q6, hambre,
qn24, idea_suicida), # variables
strata = stratum, # estratos
weights = weight, # ponderación
nest = T) # anidaciónDiseño sin pesos ni estratos:
d_simple <- datos |>
as_survey_design(ids = psu, # conglomerados
variables = c(record, psu, stratum, weight,
q2, sexo, q3, grado,
peso_kg, estatura_m, imc, q6, hambre,
qn24, idea_suicida), # variables
strata = NULL, # estratos
weights = NULL, # ponderación
nest = T) # anidaciónDiseño con pesos y sin estratos:
d_ponde <- datos |>
as_survey_design(ids = psu, # conglomerados
variables = c(record, psu, stratum, weight,
q2, sexo, q3, grado,
peso_kg, estatura_m, imc, q6, hambre,
qn24, idea_suicida), # variables
strata = NULL, # estratos
weights = weight, # ponderación
nest = T) # anidaciónTenemos tres diseños distintos: un diseño complejo basado en conglomerados, estratos y pesos, un diseño sólo con pesos y un diseño simple sin estratos ni ponderación. Sabemos que el primero es el diseño “real” con el que se llevó a cabo la recolección de los datos.
Ahora volvamos a la variable imc para estimar su media en cada diseño:
d_complejo |>
summarise(media_IMC = survey_mean(x = imc,
na.rm = T,
vartype = c("ci", "cv")))# A tibble: 1 × 4
media_IMC media_IMC_low media_IMC_upp media_IMC_cv
<dbl> <dbl> <dbl> <dbl>
1 22.13994 21.96900 22.31089 0.003923691
d_simple |>
summarise(media_IMC = survey_mean(x = imc,
na.rm = T,
vartype = c("ci", "cv")))# A tibble: 1 × 4
media_IMC media_IMC_low media_IMC_upp media_IMC_cv
<dbl> <dbl> <dbl> <dbl>
1 22.23472 22.16037 22.30906 0.001669130
d_ponde |>
summarise(media_IMC = survey_mean(x = imc,
na.rm = T,
vartype = c("ci", "cv")))# A tibble: 1 × 4
media_IMC media_IMC_low media_IMC_upp media_IMC_cv
<dbl> <dbl> <dbl> <dbl>
1 22.13994 21.98614 22.29375 0.003467962
La estimación puntual (imc = 22,14) es la misma para los análisis que usan el diseño complejo y los que usan sólo pesos. A su vez es diferente si las estimaciones se llevan a cabo sin considerar el factor de expansión (muestreo simple - imc = 22,23). Los intervalos de confianza estimados son diferentes para todos los casos porque la varianza se vincula con la estructura del muestreo (estratos y conglomerados). Si no se utilizan pesos en las estimaciones, los estimadores no serán representativos de la población muestreada.
Si solo se utilizan pesos sin considerar el diseño complejo, en general, se infravalorará la dispersión de los estimadores, llevando a intervalos de confianza excesivamente estrechos y a niveles de significación reales mayores que los nominales (como si se tratase de un MAS). Basta comparar el resultado correcto IMC 22,14 (95% IC: 21,97-22,31) frente al producido con el diseño simple IMC 22,23 (95% IC: 22,16-22,30).
Como vemos, el lenguaje R permite que construyamos el objeto de diseño de la muestra compleja con la forma que indiquemos pero esto no siempre es correcto. Debemos conocer previamente la forma en que se diseño el muestreo y como se expresa en las variables de la tabla de datos para hacerlo adecuadamente. Es fundamental leer detenidamente los documentos de utilización de los datos de toda encuesta donde se hayan recolectado datos mediante muestreos complejos.
Criterios de calidad en las estimaciones
Todas las estimaciones elaboradas a partir de datos obtenidos por encuestas poblacionales con muestreos complejos están sujetas al error muestral, lo que hace necesario evaluar su validez estadística mediante diversos indicadores de precisión y confiabilidad.
Veamos algunos de estos indicadores de calidad:
Coeficiente de variación
Es el principal indicador de calidad de una estimación. Esta medida configura un acercamiento al error de muestreo que permite verificar si la inferencia es válida. Se caracteriza por ser proporcional a la amplitud del intervalo de confianza, que provee una versión estandarizada y relativa de la precisión alrededor de la estimación puntual.
Un umbral aproximado de CV mayor a 20%-30% puede asumirse como un valor de referencia útil a nivel regional para señalar una cifra de poco confiable, Gutiérrez y otros (2020). Para calcular el coeficiente de variación de las estimaciones en estas estimaciones basta con incluirlo dentro del argumento vartype.
Tamaño de muestra
Este criterio se encuentra generalmente relacionado al anterior y es relevante a la hora de decidir la calidad de la estimación. La cobertura de los intervalos de confianza y la distribución de los estimadores dependen de que, tanto el tamaño de la subpoblación como su tamaño de muestra asociado, no sean pequeños. Con este espíritu, Gutiérrez y otros (2020) proponen que todas las estimaciones basadas en un tamaño de muestra expandida menor a 100 unidades deberían ser marcadas como no confiables.
Conteo de casos no ponderado
Cuando la incidencia de un fenómeno es muy baja y el diseño de la encuesta no lo tuvo en cuenta, entonces es posible que las estimaciones asociadas a tamaños, totales y proporciones sobre este fenómeno no sean confiables. Por ejemplo, National Research Council (2015) plantea que si el número de casos no ponderados es menor a 50 unidades entonces la estimación no sería publicable.