我有一个公式列表,我想使用函数将其放入循环中。其中一些公式是随机效应模型,而另一些则是直接的线性模型。我希望该函数检测模型是否包含随机效应,如果是,请使用 lmer()
来拟合模型。否则,它应该使用 lm()
。有关如何检查此条件的任何建议(除了将公式转换为字符串并检查括号)?在这个阶段,他们有相同的类(class),所以我不能只检查。我还可以使用错误处理来捕获 lmer()
从没有随机效应的模型返回错误并重新路由到常规 lm()
时,但这似乎也不必要地困惑.
下面的例子:
fit_models <- function(formula_list) {
models <- list()
for(ii in seq_along(formula_list)) {
if(formula_list[[ii]] is lmer) { # Enter condition here
print("lmer")
} else {
print("lm")
}
}
}
f1 <- formula(y ~ x)
f2 <- formula(y ~ 1 + x + (1 + x | z))
formulas <- c(f1, f2)
fit_models(formulas)
最佳答案
我会说
length(lme4::findbars(f))>0
应该可靠地检测包含随机效应组件的公式(在 lme4
意义上)。
From the right hand side of a formula for a mixed-effects model, determine the pairs of expressions that are separated by the vertical bar operator.
这是(隐含地)在 lme4
代码 here 中完成的测试...
关于r - 判断公式是否包含随机效应的最佳方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65204089/