Pacchetto Metafor: diagnostica di bias e sensibilità


9

Sto conducendo una meta-analisi multi-livello che include alcuni articoli con risultati multipli. Pertanto sto usando la rma.mv()funzione. Codice di esempio:

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

Ho due domande:

  1. Ho letto in una precedente interrogazione che quando si usa rma.mv(), ranktest()non è un test affidabile di funnel plot asimmetria. Tuttavia, se la varianza del campione fosse aggiunta al modello originale come moderatore, questo modello sarebbe simile al test di Egger:

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

    Questo codice è un'interpretazione corretta di quella guida? Inoltre, i grafici a imbuto sono anche (più o meno) inutili come strumento con i rma.mv()modelli?

  2. leave1out()trimfill()lavoro con rma.mv()per valutare la sensibilità dei risultati del modello. Sono attualmente disponibili altri strumenti di analisi della sensibilità per i rma.mv()modelli che non comportano una conoscenza approfondita di R?

Risposte:


8

Riguardo a 1: Sì, l'aggiunta vicome moderatore è davvero il modo logico di estendere il test di Egger a modelli più complessi.

In realtà, l'uso delle varianze di campionamento come moderatore è solo una delle possibilità di condurre il "test di regressione per l'asimmetria del diagramma a imbuto". Altri hanno suggerito di usare l'inverso delle varianze di campionamento o gli errori standard (radice quadrata delle varianze di campionamento) o i loro inversi o le dimensioni totali del campione (o alcune sue funzioni) come moderatori. Non è del tutto chiaro quale predittore sia la scelta "migliore" (e questo può dipendere dalla misura del risultato che usi per la tua meta-analisi). Ad esempio, per alcune misure, l'equazione che utilizziamo per approssimare / stimare la varianza di campionamento è in realtà una funzione del risultato osservato, che crea automaticamente una relazione tra i due anche in assenza di distorsioni della pubblicazione (o "distorsioni di piccoli studi" o come vogliamo chiamarlo). In quel caso,

Ma il punto principale è: Sì, il test di regressione può essere facilmente applicato quando si lavora con modelli più complessi aggiungendo un moderatore appropriato al modello.

È discutibile se i grafici a imbuto siano utili o meno quando ci sono strutture multilivello / multivariate alla base dei dati. Ad esempio, gruppi di punti possono raggrupparsi insieme a causa di dipendenze statistiche (che sono spiegate quando si utilizza un modello multilivello / multivariato appropriato), ma nel diagramma a imbuto, i punti sono proprio questo: un mucchio di punti. Ciò rende più difficile l'interpretazione dei grafici a imbuto perché (a meno che non si facciano passi aggiuntivi utilizzando colori o simboli diversi) non è possibile vedere quelle dipendenze intrinseche - non che la maggior parte delle persone (me compreso) sia brava a interpretare i grafici a imbuto anche nel modo più semplice casi (c'è una ricerca empirica che lo dimostra!).

Riguardo a 2: Sì, un sacco di funzioni di adattamento post modello non funzionano attualmente con rma.mvoggetti modello. Non mi sono ancora dato da fare per implementare questo e alcuni di questi in realtà richiederanno qualche riflessione. Ad esempio, leave1out()rimuove uno studio alla volta: nel contesto univariato, ciò equivale a rimuovere ogni risultato osservato alla volta, ma che dire dei dati multilivello / multivariato? Rimuovere anche ogni risultato osservato alla volta? O rimuovere set di punti? O rendere disponibili diverse opzioni? Per quanto riguarda il trim-and-fill (lasciando da parte la questione di quanto sia veramente utile questo metodo): estendere il metodo a dati multilivello / multivariato varrebbe la pena di scrivere un intero articolo.

Quindi, è grandioso che tu voglia fare analisi di sensibilità, ma fin d'ora dovrai farlo manualmente. Le analisi di esclusione vengono eseguite facilmente con un semplice ciclo continuo e riflettendo attentamente su ciò che è "uno" (ad esempio, ogni risultato osservato, ogni gruppo / studio). Puoi fare il test di regressione e forse lasciare per ora il trim-and-fill. I residui standardizzati sono disponibili tramite rstandard(), quindi è possibile esaminare i dati per potenziali valori anomali. Puoi ottenere i valori del cappello tramite hatvalues()(solo le leve lungo la diagonale o l'intera matrice del cappello ) che ti dà un'indicazione su quali punti hanno una forte influenza sui risultati. Un'altra misura davvero utile in questo contesto è la distanza di Cook , che puoi ottenere cooks.distance()anche per gli rma.mvoggetti.


2
Wow! Grazie per le tue risposte ponderate e approfondite. Cercherò di capire come utilizzare il codice for-loop, come suggerisci.
Chabeck,

1
Sono contento di sentire che l'hai trovato utile. Le varie funzioni di adattamento del modello tra cui rma.mv()hanno un subsetargomento che può essere facilmente utilizzato insieme a un ciclo for per eliminare (serie di) risultati osservati.
Wolfgang,

5
Wolfgang, il prodotto dei tuoi suggerimenti può essere osservato qui: aobpla.oxfordjournals.org/content/7/… Grazie ancora!
Chabeck,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.