Emmeans - контроль против лечения для более чем одного фактора - PullRequest
0 голосов
/ 30 марта 2020

Я использую для выполнения пользовательских сравнений с контрольной группой. Подход trt.vs.ctrl отлично работает для меня, если меня интересует только сравнение одного фактора, но он терпит неудачу (или мне не удается), когда я устанавливаю сравнение более сложным (т. Е. Контрольная группа описывается спецификацией * 1029). * комбинация 2+ переменных).

Пример кода ниже. Скажите, что, используя данные pigs, я хочу сравнить все диеты с диетой с низким процентом fi sh. Обратите внимание, что во фрейме данных nd «fi sh» ассоциируется только с 9%. Однако, когда я запускаю emmeans, функция не улавливает вложенность, и, хотя контроль корректен, группы обработки также включают различные значения fi sh и процентов. Это означает, что настройка неверна.

Итак, о двух подходах, которые я могу придумать:

  1. Как мне заставить emmeans подобрать вложенность в этом случае, или
  2. Как мне выполнить настройку dunnettx вручную (= я могу использовать настройку «none», затем вытащить те тесты, которые мне действительно нужны, и отрегулировать значение p самостоятельно?).
    library(emmeans)
    library(dplyr)

    pigs.lm <- lm(log(conc) ~ source + factor(percent), data = pigs)
    nd <- expand.grid(source = levels(pigs$source), percent = unique(pigs$percent)) %>%
        filter(percent == 9 | source != "fish")

    emmeans(pigs.lm, trt.vs.ctrl ~ source + percent, 
        data = nd, covnest = TRUE, cov.reduce = FALSE)

Оцените ваш help.

Предложение использовать include сработало отлично. Размещать здесь мой код на случай, если у кого-то возникнет такая же проблема в будущем.

library(emmeans)
library(dplyr)
library(tidyr)

pigs.lm <- lm(log(conc) ~ source + factor(percent), data = pigs)
nd <- expand.grid(source = levels(pigs$source), percent =     unique(pigs$percent)) %>%
    filter(percent == 9 | source != "fish")

ems <- emmeans(pigs.lm, trt.vs.ctrl ~ source + percent, 
    data = nd, covnest = TRUE, cov.reduce = FALSE)

# to identify which levels to exclude - in this case, 
# I only want the low-percent fish to remain as the ref level
aux <- as.data.frame(ems[[1]]) %>%
    mutate(ID = 1:n()) %>%
    filter(!grepl("fish", source) | ID == 1)

emmeans(pigs.lm, trt.vs.ctrl ~ source + percent, 
    data = nd, covnest = TRUE, cov.reduce = FALSE, include = aux$ID)

1 Ответ

0 голосов
/ 30 марта 2020

Мне не совсем понятно, чего вы пытаетесь достичь sh, но я не думаю, что фильтрация данных - это решение.

Если ваша цель состоит в том, чтобы сравнить предельные средние значения для source с комбинацией (fi sh, 9 процентов), вы можете сделать это, построив два набора emmeans, затем поднабор и объединение:

emm1 = emmeans(pigs.lm, "source")
emm2 = emmeans(pigs.lm, ~source*percent)
emm3 = emm2[1] + emm1      # or rbind(emm2[1], emm1)

Тогда вы получите

> confint(emm3, adjust ="none")
 source percent emmean     SE df lower.CL upper.CL
 fish   9         3.22 0.0536 23     3.11     3.33
 fish   .         3.39 0.0367 23     3.32     3.47
 soy    .         3.67 0.0374 23     3.59     3.74
 skim   .         3.80 0.0394 23     3.72     3.88

Results are averaged over some or all of the levels of: percent 
Results are given on the log (not the response) scale. 
Confidence level used: 0.95 

> contrast(emm3, "trt.vs.ctrl1")
 contrast        estimate     SE df t.ratio p.value
 fish,. - fish,9    0.174 0.0366 23 4.761   0.0002 
 soy,. - fish,9     0.447 0.0678 23 6.595   <.0001 
 skim,. - fish,9    0.576 0.0696 23 8.286   <.0001 

Results are averaged over some or all of the levels of: percent 
Results are given on the log (not the response) scale. 
P value adjustment: dunnettx method for 3 tests 

Другой (гораздо более утомительный, более подверженный ошибкам) ​​способ сделать то же самое - получить EMM для комбинаций факторов, а затем использовать пользовательские контрасты:

> contrast(emm2, list(con1 = c(-3,0,0, 1,0,0, 1,0,0, 1,0,0)/4,
+                     con2 = c(-4,1,0, 0,1,0, 0,1,0, 0,1,0)/4,
+                     con3 = c(-4,0,1, 0,0,1, 0,0,1, 0,0,1)/4),
+          adjust = "mvt")

 contrast estimate     SE df t.ratio p.value
 con1        0.174 0.0366 23  4.761  0.0002 
 con2        0.447 0.0678 23  6.595  <.0001 
 con3        0.576 0.0696 23  8.286  <.0001 

Results are given on the log (not the response) scale. 
P value adjustment: mvt method for 3 tests 

(Корректировка mvt - это точная поправка, для которой dunnettx является лишь приблизительным значением. По умолчанию она не равна mvt, потому что она сложна в вычислительном отношении для большого числа тестов.)

В ответ на последнюю часть вопроса вы можете использовать exclude (или include), чтобы сосредоточиться на подмножестве уровней; см ? pairwise.emmc.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...