Paquete Metafor: diagnóstico de sesgo y sensibilidad

9

Estoy realizando un metanálisis multinivel que incluye algunos artículos con múltiples resultados. Por lo tanto, estoy usando la rma.mv()función. Código de ejemplo:

test.main = rma.mv(yi,vi,random = ~1|ID, data = data) 

Tengo dos preguntas:

  1. Leí en una consulta anterior que cuando se usa rma.mv(), ranktest()no es una prueba confiable de asimetría de gráfico en embudo. Sin embargo, si se agregó la varianza de la muestra al modelo original como moderador, entonces este modelo sería similar a la prueba de Egger:

    test.egger = rma.mv(yi,vi, mod = vi, random = ~1|ID, data = data)
    

    ¿Es este código una interpretación correcta de esa guía? Además, ¿los gráficos en embudo también son (más o menos) inútiles como herramienta con rma.mv()modelos?

  2. Ni leave1out()tampoco trimfill()trabajamos rma.mv()para evaluar la sensibilidad de los resultados del modelo. ¿Hay otras herramientas de análisis de sensibilidad disponibles actualmente para rma.mv()modelos que no impliquen una comprensión magistral de R?

chabeck
fuente

Respuestas:

8

Con respecto a 1: Sí, agregar vicomo moderador es, de hecho, la forma lógica de extender la prueba de Egger a modelos más complejos.

En realidad, el uso de las variaciones de muestreo como moderador es solo una posibilidad de realizar la "prueba de regresión para la asimetría del gráfico en embudo". Otros han sugerido utilizar el inverso de las variaciones de muestreo o los errores estándar (raíz cuadrada de las variaciones de muestreo) o sus inversas o los tamaños de muestra totales (o alguna función de los mismos) como moderadores. No está del todo claro qué predictor es la "mejor" opción (y esto puede depender de qué medida de resultado utilice para su metanálisis). Por ejemplo, para algunas medidas, la ecuación que usamos para aproximar / estimar la varianza muestral es en realidad una función del resultado observado, que crea automáticamente una relación entre los dos incluso en ausencia de sesgo de publicación (o "sesgo de estudio pequeño" o como queramos llamarlo). En ese caso,

Pero el punto principal es: Sí, la prueba de regresión se puede aplicar fácilmente cuando se trabaja con modelos más complejos agregando un moderador apropiado al modelo.

Es discutible si los gráficos en embudo son útiles o no cuando existen estructuras multinivel / multivariadas subyacentes a los datos. Por ejemplo, los conjuntos de puntos pueden agruparse debido a dependencias estadísticas (que se tienen en cuenta cuando se utiliza un modelo multinivel / multivariado apropiado), pero en el diagrama de embudo, los puntos son solo eso: un montón de puntos. Eso hace que la interpretación de los gráficos en embudo sea más difícil porque (a menos que tome pasos adicionales usando diferentes colores o símbolos) no puede ver esas dependencias inherentes; no es que la mayoría de las personas (incluido yo mismo) sean buenas para interpretar los gráficos en embudo, incluso en los más simples casos (¡hay investigaciones empíricas que lo demuestran!).

Con respecto a 2: Sí, un montón de funciones de ajuste de modelo posterior no funcionan actualmente con rma.mvobjetos de modelo. Simplemente no he podido implementar esto y algo de esto requerirá pensar un poco. Por ejemplo, leave1out()elimina un estudio a la vez; en el contexto univariante, esto es equivalente a eliminar cada resultado observado a la vez, pero ¿qué pasa con los datos multinivel / multivariante? ¿Eliminar también cada resultado observado a la vez? ¿O eliminar conjuntos de puntos? ¿O poner a disposición diferentes opciones? Con respecto al recorte y el relleno (dejando de lado la cuestión de cuán útil es realmente este método): Merecería la pena escribir un artículo completo acerca de extender el método a datos multinivel / multivariante.

Por lo tanto, es genial que desee hacer análisis de sensibilidad, pero a partir de ahora, tendrá que hacer algo de esto manualmente. Los análisis de dejar uno afuera se realizan fácilmente con un ciclo for simple y pensando cuidadosamente en qué es "uno" (por ejemplo, cada resultado observado, cada grupo / estudio). Puede hacer la prueba de regresión y tal vez dejar recortar y llenar por ahora. Los residuos estandarizados están disponibles a través de rstandard(), por lo que puede examinar los datos de posibles valores atípicos. Puede obtener los valores del sombrero a través de hatvalues()(solo los apalancamientos a lo largo de la diagonal o toda la matriz del sombrero ) que le da una indicación de qué puntos tienen una fuerte influencia en los resultados. Otra medida realmente útil en este contexto es la distancia de Cook , que puede obtener a través de cooks.distance(), también para los rma.mvobjetos.

Wolfgang
fuente
2
¡Guauu! Gracias por sus reflexivas y exhaustivas respuestas. Intentaré descubrir cómo usar el código for-loop, como sugieres.
chabeck
1
Me alegra saber que encontraste esto útil. Las diversas funciones de ajuste del modelo incluyen rma.mv()un subsetargumento que puede usar fácilmente junto con un ciclo for para descartar (conjuntos de) resultados observados.
Wolfgang
44
Wolfgang, el producto de sus sugerencias se puede observar aquí: aobpla.oxfordjournals.org/content/7/… ¡ Gracias de nuevo!
chabeck