Пакет Metafor: диагностика смещения и чувствительности


9

Я провожу многоуровневый метаанализ, который включает несколько статей с несколькими результатами. Поэтому я использую rma.mv()функцию. Пример кода:

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

У меня есть два вопроса:

  1. Я прочитал в предыдущем запросе , что при использовании rma.mv(), ranktest()не является надежным тест воронки участка асимметрии. Однако, если образец дисперсии был добавлен в исходную модель в качестве модератора, то эта модель будет похожа на тест Эггера:

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

    Является ли этот код правильной интерпретацией этого руководства? Кроме того, являются ли графики воронки (более или менее) бесполезными в качестве инструмента для rma.mv()моделей?

  2. Ни, leave1out()ни trimfill()работать с, rma.mv()чтобы оценить чувствительность результатов модели. Доступны ли в настоящее время другие инструменты анализа чувствительности для rma.mv()моделей, которые не требуют мастерского понимания R?

Ответы:


8

Относительно 1: Да, добавление viв качестве модератора действительно является логическим способом распространения теста Эггера на более сложные модели.

На самом деле, использование дисперсии выборки в качестве модератора является лишь одной из возможностей проведения «регрессионного теста для асимметрии воронкообразного графика». Другие предложили использовать в качестве модераторов обратное отклонение выборки или стандартные ошибки (квадратный корень из отклонений выборки) или их инверсии или общий размер выборки (или некоторую их функцию). Не совсем ясно, какой предиктор является «лучшим» выбором (и это может зависеть от того, какой показатель результата вы используете для мета-анализа). Например, для некоторых показателей уравнение, которое мы используем для аппроксимации / оценки дисперсии выборки, на самом деле является функцией наблюдаемого результата, что автоматически создает взаимосвязь между ними даже в отсутствие систематической ошибки публикации (или «систематической ошибки в исследовании»). или как мы хотим это назвать). В таком случае,

Но главное: да, регрессионный тест можно легко применить при работе с более сложными моделями, добавив в модель подходящего модератора.

Полезны ли воронкообразные диаграммы или нет, когда в основе данных лежат многоуровневые / многомерные структуры, является спорным. Например, наборы точек могут объединяться в группы из-за статистических зависимостей (которые учитываются при использовании подходящей многоуровневой / многомерной модели), но на воронкообразном графике точки - это просто набор точек. Это затрудняет интерпретацию воронкообразных графиков, потому что (если вы не предпримете дополнительных шагов, используя разные цвета или символы), вы не сможете увидеть эти присущие зависимости - не то, чтобы большинство людей (включая меня) были хороши в интерпретации воронкообразных графиков даже в самых простых случаи (есть эмпирические исследования, демонстрирующие это!).

Относительно 2: Да, куча функций подгонки после модели в настоящее время не работает с rma.mvобъектами модели. Я просто не удосужился реализовать это, и некоторые из них на самом деле потребуют некоторых размышлений. Например, leave1out()удаляет одно исследование за раз - в одномерном контексте это эквивалентно удалению каждого наблюдаемого результата за раз, но как насчет многоуровневых / многомерных данных? Также удалить каждый наблюдаемый результат за раз? Или удалить наборы точек? Или сделать разные варианты доступными? Что касается обрезки и заполнения (оставим в стороне вопрос о том, насколько этот метод действительно полезен): расширение метода для многоуровневых / многомерных данных стоило бы написать целую статью.

Итак, это здорово, что вы хотите провести анализ чувствительности, но на данный момент вам придется делать это вручную. Анализ «один-один-один-один» легко выполнить с помощью простого цикла for и тщательно продумать, что такое «один» (например, каждый наблюдаемый результат, каждый кластер / исследование). Вы можете сделать регрессионный тест и, возможно, оставить на время обрезку и заполнение. Стандартизированные остатки доступны через rstandard(), так что вы можете проверить данные на наличие потенциальных выбросов. Вы можете получить значения шляп через hatvalues()(только рычаги вдоль диагонали или всю матрицу шляп ), что дает вам представление о том, какие точки сильно влияют на результаты. Другой действительно полезной мерой в этом контексте является расстояние Кука , которое вы можете получить cooks.distance(), также, для rma.mvобъектов.


2
Вот Это Да! Спасибо за ваши вдумчивые и подробные ответы. Я постараюсь выяснить, как использовать код цикла for, как вы предлагаете.
Чабек

1
Рад слышать, что вы нашли это полезным. Различные функции подбора моделей, в том числе rma.mv()имеют subsetаргумент, который вы можете легко использовать вместе с циклом for для отбрасывания (наборов) наблюдаемых результатов.
Вольфганг

5
Вольфганг, продукт ваших предложений можно увидеть здесь: aobpla.oxfordjournals.org/content/7/… Еще раз спасибо!
Chabeck
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.