修改 R 中的混合效应公式

Modify a mixed-effects formula in R

我有一个公式:

my_formula <- a ~ b + (1|d) + e

我想以编程方式从此公式中删除 e 变量。

我为固定效果公式所做的是:

drop_es <- function(f) {
    e_idxs <- grep(pattern = 'e',
                   x = all.vars(f[[3]]))

    stats::formula(stats::drop.terms(termobj = stats::terms(f),
                                     dropx = e_idxs,
                                     keep.response = TRUE))
}

这仅适用于固定效应公式:

drop_es(f = a ~ b + e)

a ~ b

但在具有随机效应的公式上,它会删除括号:

drop_es(f = a ~ b + (1|d) + e)

a ~ b + 1 | d

这是一个非常重要的区别——没有括号,它被解释为:

a ~ b|d

如何在不丢失括号的情况下删除 e 项?

update 函数用于修改公式。使用

update(my_formula, ~.-e)
# a ~ b + (1 | d)

-e 表示从公式中删除 "e" 项,而 . 表示保留其他所有项。