Pakiet Metafor: diagnostyka stronniczości i czułości

9

Prowadzę wielopoziomową metaanalizę, która obejmuje niektóre artykuły z wieloma wynikami. Dlatego używam tej rma.mv()funkcji. Przykładowy kod:

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

Mam dwa pytania:

  1. Czytałem w poprzedniej kwerendy , które podczas używania rma.mv(), ranktest()nie jest wiarygodnym testem funnel plot asymetrii. Jeśli jednak wariancja próbki zostałaby dodana do oryginalnego modelu jako moderator, wówczas model ten byłby podobny do testu Eggera:

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

    Czy ten kod jest poprawną interpretacją tych wskazówek? Czy wykresy lejkowe są również (mniej więcej) bezużyteczne jako narzędzie w rma.mv()modelach?

  2. Ani leave1out()nie trimfill()pracuj, rma.mv()aby ocenić czułość wyników modelu. Czy obecnie dostępne są inne narzędzia analizy wrażliwości dla rma.mv()modeli, które nie wymagają mistrzowskiego zrozumienia R?

chabeck
źródło

Odpowiedzi:

8

Odnośnie 1: Tak, dodanie vijako moderatora jest rzeczywiście logicznym sposobem rozszerzenia testu Eggera na bardziej złożone modele.

W rzeczywistości użycie wariancji próbkowania jako moderatora jest tylko jedną z możliwości przeprowadzenia „testu regresji asymetrii wykresu lejkowego”. Inni sugerowali użycie odwrotności wariancji próbkowania lub błędów standardowych (pierwiastek kwadratowy wariancji próbkowania) lub ich odwrotności lub całkowitych wielkości próby (lub niektórych ich funkcji) jako moderatorów. Nie jest do końca jasne, który predyktor jest „najlepszym” wyborem (i może to zależeć od tego, jakiej miary wyniku używasz do metaanalizy). Na przykład w przypadku niektórych miar równanie, którego używamy do przybliżania / szacowania wariancji próbkowania, jest w rzeczywistości funkcją obserwowanego wyniku, który automatycznie tworzy związek między nimi, nawet przy braku stronniczości publikacji (lub „stronniczości z małych badań” lub jakkolwiek to nazwiemy). W tym wypadku,

Ale najważniejsze jest: Tak, test regresji można łatwo zastosować podczas pracy z bardziej złożonymi modelami, dodając do niego odpowiedniego moderatora.

To, czy wykresy lejek są przydatne, czy nie, gdy istnieją struktury wielopoziomowe / wielowymiarowe leżące u podstaw danych, jest dyskusyjne. Na przykład zestawy punktów mogą się grupować ze względu na zależności statystyczne (które są uwzględniane przy stosowaniu odpowiedniego modelu wielopoziomowego / wielowymiarowego), ale na wykresie lejkowym punkty są po prostu takie: kilka punktów. Utrudnia to interpretację wykresów lejkowych, ponieważ (chyba że wykonasz dodatkowe kroki przy użyciu różnych kolorów lub symboli) nie zobaczysz tych nieodłącznych zależności - nie to, że większość osób (w tym mnie) jest dobra w interpretowaniu wykresów lejkowych, nawet w najprostszych przypadki (istnieją badania empiryczne, które to potwierdzają!).

Odnośnie 2: Tak, kilka funkcji dopasowania modelu post obecnie nie działa z rma.mvobiektami modelu. Po prostu nie udało mi się wdrożyć tego, a niektóre z nich będą wymagać myślenia. Na przykład leave1out()usuwa jedno badanie na raz - w kontekście jednowymiarowym jest to równoważne z usuwaniem każdego zaobserwowanego wyniku na raz, ale co z danymi wielopoziomowymi / wielowymiarowymi? Czy usunąć również każdy zaobserwowany wynik na raz? Czy usunąć zestawy punktów? Lub udostępnić różne opcje? W odniesieniu do przycinania i wypełniania (pomijając pytanie o to, jak użyteczna jest ta metoda): warto rozszerzyć tę metodę na dane wielopoziomowe / wielowymiarowe.

To wspaniale, że chcesz wykonywać analizy wrażliwości, ale od teraz będziesz musiał zrobić to częściowo ręcznie. Analizy typu „pominięcie jednego” można łatwo wykonać za pomocą prostej pętli „for-loop” i dokładnie przemyśleć, czym jest „jeden” (np. Każdy obserwowany wynik, każdy klaster / badanie). Możesz zrobić test regresji i być może na razie pozostawić przycinanie i wypełnianie. Standaryzowane wartości resztkowe są dostępne za pośrednictwem rstandard(), dzięki czemu można sprawdzić dane pod kątem potencjalnych wartości odstających. Możesz uzyskać wartości kapelusza za pomocą hatvalues()(tylko dźwigni wzdłuż przekątnej lub całej matrycy kapelusza ), co daje wskazanie, które punkty mają silny wpływ na wyniki. Innym bardzo przydatnym miernikiem w tym kontekście jest odległość Cooka , którą można uzyskać za pomocą cooks.distance(), także dla rma.mvobiektów.

Wolfgang
źródło
2
Łał! Dziękuję za przemyślane i dokładne odpowiedzi. Spróbuję wymyślić, jak korzystać z kodu pętli for, jak sugerujesz.
chabeck,
1
Cieszę się, że znalazłeś to przydatne. Poszczególne funkcje w tym modelu sylwetkę rma.mv()mieć subsetargument, że można łatwo używać razem z pętli for spadać (zestawy) obserwowane efekty.
Wolfgang,
5
Wolfgang, produkt twoich sugestii można zobaczyć tutaj: aobpla.oxfordjournals.org/content/7/… Jeszcze raz dziękuję!
chabeck,