R语言 从公式中提取固定效应

lp0sw83n  于 2023-03-05  发布在  其他
关注(0)|答案(2)|浏览(222)

如果我有一个公式

formula <- mpg ~ wt | cyl + am

如何以安全的方式提取固定效果(即|右侧的内容)?
我试过了

fe <- unlist(strsplit(as.character(formula[[3]][[3]]), split = " + "))
fe <- fe[fe !=  "+"]

这似乎不是很可靠
我只需要得到一个向量或者c("cyl", "am")

w46czmvw

w46czmvw1#

使用公式包。之后的部分|是右手边的第二部分,因此指定参数rhs = 2。

library(Formula)

all.vars(formula(Formula(formula), lhs = 0, rhs = 2))
## [1] "cyl" "am"
ifsvaxew

ifsvaxew2#

嗯,你的问题让我有点困惑。根据vignette("lmer", package = "lme4")

  • 条形|的左手定义随机效应公式。
  • |的右手侧定义分组结构。

也就是说,右侧的变量表示的不是固定效应,而是随机效应的分组变量。在分组表达式中使用+运算符也是不标准的,如在cyl + am中所使用的。该表达式应采用g1/.../gng1:...:gn的形式。
如果你的混合效应公式真的是ff <- mpg ~ wt | cyl + am,那么我想我们会这样说:

  • 相应的固定效应公式为mpg ~ 1,未指定固定效应项。
> ff.nb <- lme4::nobars(ff)
> ff.nb
mpg ~ 1
> labels(terms(ff.nb))
character(0)
  • 有一个随机效应项wt | cyl + am,对应的公式为~wt,分组为cyl + am。但是,分组可能没有意义,至少对lme4没有意义。
> ff.fb <- lme4::findbars(ff)
[[1]]
wt | cyl + am
> bar <- ff.fb[[1L]]
> labels(terms(reformulate(deparse(bar[[2L]]))))
[1] "wt"
> labels(terms(reformulate(deparse(bar[[3L]]))))
[1] "cyl" "am"

如果我们把ff更合理地定义为ff <- mpg ~ wt | am/cyl,那么上面的最后一行将给予:

> labels(terms(reformulate(deparse(bar[[3L]]))))
[1] "cyl" "am:cyl"

表示关于wt的随机斜率在am的能级之间以及在am内的cyl的能级之间变化。

相关问题