用于计算 emmeans 对比度的自定义函数

Posted

技术标签:

【中文标题】用于计算 emmeans 对比度的自定义函数【英文标题】:Custom function to compute contrasts in emmeans 【发布时间】:2018-10-05 03:41:19 【问题描述】:

我想在 emmeans 中创建一个自定义对比函数,它可以从输入向量中删除给定的级别列表,并在剩余级别上应用内置对比方法(“trt.vs.ctrl”)。 here 提供了一个示例数据集。我正在使用以下 R 代码来计算方差分析和事后比较:

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)。 An example is provided in the official documentation写自定义对比函数。

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】:

这是您将来想要做很多次的事情吗?我的猜测不是,您只想这样做一次,或者最多几次;在这种情况下,编写自定义对比函数太麻烦了。只需获取您需要的对比度系数,并将其用作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")

更新

*** 有时会激发开发人员添加软件功能。在这种情况下,我认为将exclude 参数添加到emmeans 中的大多数内置.emmc 函数(除poly.emmc() 之外的所有函数)会很有用。这很简单,这些功能现在被合并到最新的 github 推送中——https://github.com/rvlenth/emmeans。这些功能也将包含在下一次 CRAN 更新中。

【讨论】:

谢谢。它适用于重新排列组序列。 您可以通过为trt.vs.ctrl.emmc() 选择refreverse 参数并改变选择哪些列来涵盖所有可能性。 我希望它对某人有益。我现在对非参数比较感兴趣(意识到我的数据违反了正态性假设)。非参数检验的选择并不多(当然没有任何等效的 emmeans 来进行对照组比较)。因此,它在运行 post hoc (dunn.test) 后进行相关比较。

以上是关于用于计算 emmeans 对比度的自定义函数的主要内容,如果未能解决你的问题,请参考以下文章

OpenACC 计算构建内的自定义函数

计算不适用于 Handsontable 中使用 AJAX 的自定义单元格渲染

如何在 onlyoffice 中创建用于 .xlsx 的自定义函数

用于三元组损失训练的自定义精度函数

用于嘈杂的不可微损失函数的自定义 Tensorflow 优化器

csharp 一组用于App_code的自定义实用程序函数