gpt4 book ai didi

r - 如何从 lme4 中仅提取公式的随机效应部分

转载 作者:行者123 更新时间:2023-12-03 15:21:04 25 4
gpt4 key购买 nike

假设我已经安装了一个模型,例如

mymodel <- lmer(Y~X1+(1|fac1)+(1|fac2),mydata)
如何仅提取公式的随机效应部分( (1|fac1)+(1|fac2) )?
我知道我能做到
formula(mymodel)[-2]
但这只是返回 X1 + (1| fac1) + (1| fac2)我知道我可以用正则表达式做一些事情,但我希望有一种更简单的方法。

最佳答案

查找栏
lme4 包提供 findbars :

library(lme4)

fo <- Y~X1+(1|fac1)+(1|fac2)

findbars(fo)
## [[1]]
## 1 | fac1
##
## [[2]]
## 1 | fac2
如果需要字符串,我们可以使用以下方法。 deparse1将处理某些罕见的情况 deparse失败但 deparse如果有必要在 R 4.0.0 之前的 R 版本中使用此功能,则主要用作替代方案。
sapply(findbars(fo), deparse1)
## [1] "1 | fac1" "1 | fac2"
如果所需的结果是公式的 RHS 但没有固定效应项,那么我们可以通过加回括号并使用 reformulate 来重构上述结果。 .如果需要公式对象,则省略 [[2]]。以上关于 deparse1 的讨论这里也适用。
reformulate(sprintf("(%s)", sapply(findbars(fo), deparse1)))[[2]]
## (1 | fac1) + (1 | fac2)
术语/标签
另一种获取字符结果的方法是使用 labels这将从 terms 中提取它们.使用 reformulate ,如上所述,如果需要公式。这不使用任何包。
X <- grep("|", labels(terms(fo)), fixed = TRUE, value = TRUE)
X
## [1] "1 | fac1" "1 | fac2"
如上,公式及其右侧可以从 X 生成像这样:
reformulate(sprintf("(%s)", X))
reformulate(sprintf("(%s)", X))[[2]]
获取条款
另一种方法是使用 getTerms来自 Terms of a sum in a R expression这个简短的函数递归地遍历公式以提取术语。它不使用任何包。
XX <- grep("|", sapply(getTerms(fo[[3]]), deparse1), fixed = TRUE, value = TRUE)
XX
## [1] "(1 | fac1)" "(1 | fac2)"
公式及其右侧可以这样生成:
reformulate(XX)
reformulate(XX)[[2]]

关于r - 如何从 lme4 中仅提取公式的随机效应部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62966793/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com