Пользовательская функция для вычисления контрастов в emmeans - PullRequest
0 голосов
/ 24 апреля 2018

Я хочу создать собственную функцию контраста в emmeans, которая могла бы удалить заданный список уровней из входного вектора и применить встроенный метод контраста ("trt.vs.ctrl") к оставшимся уровням. Пример набора данных доступен здесь . Я использую следующий код R для вычисления ANOVA и сравнительных вычислений:

options(contrasts=c("contr.sum", "contr.poly"))
my_lm <- lm(D1 ~ C*R, data=df)
Anova(my_lm, type = "III")
#show Interaction effects using emmeans
emmip(my_lm, C ~ R )
emm = emmeans(my_lm, ~ C * R)
emm
contrast(emmeans(my_lm, ~ C * R), "consec", by = "C")
#compare 1st with next 3 groups (how to remove other three levels?)
contrast(emmeans(my_lm, ~ C * R), "trt.vs.ctrl", by = "R")

Встроенная опция контрастности ("trt.vs.ctrl") сравнивает первый уровень со всем, что следует за ним (в C есть 7 факторных уровней, и я хочу удалить последние 3 из них и вычислить контрасты для остальные 4). Пример приведен в официальной документации для написания пользовательской функции контрастности.

skip_comp.emmc <- function(levels, skip = 1, reverse = FALSE) {
    if((k <- length(levels)) < skip + 1)
        stop("Need at least ", skip + 1, " levels")
    coef <- data.frame()
    coef <- as.data.frame(lapply(seq_len(k - skip - 1), function(i) {
        sgn <- ifelse(reverse, -1, 1)
        sgn * c(rep(0, i - 1), 1, rep(0, skip), -1, rep(0, k - i - skip - 1))
    }))
    names(coef) <- sapply(coef, function(x)
        paste(which(x == 1), "-", which(x == -1)))
    attr(coef, "adjust") = "fdr"   # default adjustment method
    coef
}

Однако из-за моего ограниченного понимания, я не очень уверен, где применить изменения, которые мне нужны, чтобы настроить пример. Есть идеи?

1 Ответ

0 голосов
/ 25 апреля 2018

Это то, что вы собираетесь делать много раз в будущем? Я не думаю, что вы хотите сделать это только один раз или максимум несколько раз; в этом случае слишком сложно написать собственную функцию контраста. Просто получите нужные вам коэффициенты контрастности и используйте их в качестве второго аргумента в contrast.

Теперь рассмотрим эти результаты:

> con <- emmeans:::trt.vs.ctrl.emmc(1:7)
> con
  2 - 1 3 - 1 4 - 1 5 - 1 6 - 1 7 - 1
1    -1    -1    -1    -1    -1    -1
2     1     0     0     0     0     0
3     0     1     0     0     0     0
4     0     0     1     0     0     0
5     0     0     0     1     0     0
6     0     0     0     0     1     0
7     0     0     0     0     0     1

Из описания, я думаю, вы просто хотите первые 3 набора коэффициентов контрастности. Так что используйте эти столбцы:

contrast(emm, con[, 1:3], by = "R")

Обновление

StackOverflow может иногда вдохновлять разработчиков на добавление программных функций. В этом случае я решил, что было бы полезно добавить аргумент exclude к большинству встроенных .emmc функций в emmeans (все, кроме poly.emmc()). Это было довольно просто сделать, и эти функции теперь включены в последнюю версию github - https://github.com/rvlenth/emmeans. Эти функции также будут включены в следующее обновление CRAN.

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