如果我有一个公式
formula <- mpg ~ wt | cyl + am
如何以安全的方式提取固定效果(即|右侧的内容)?我试过了
|
fe <- unlist(strsplit(as.character(formula[[3]][[3]]), split = " + ")) fe <- fe[fe != "+"]
这似乎不是很可靠我只需要得到一个向量或者c("cyl", "am")
c("cyl", "am")
w46czmvw1#
使用公式包。之后的部分|是右手边的第二部分,因此指定参数rhs = 2。
library(Formula) all.vars(formula(Formula(formula), lhs = 0, rhs = 2)) ## [1] "cyl" "am"
ifsvaxew2#
嗯,你的问题让我有点困惑。根据vignette("lmer", package = "lme4"):
vignette("lmer", package = "lme4")
也就是说,右侧的变量表示的不是固定效应,而是随机效应的分组变量。在分组表达式中使用+运算符也是不标准的,如在cyl + am中所使用的。该表达式应采用g1/.../gn或g1:...:gn的形式。如果你的混合效应公式真的是ff <- mpg ~ wt | cyl + am,那么我想我们会这样说:
+
cyl + am
g1/.../gn
g1:...: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
> 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,那么上面的最后一行将给予:
ff
ff <- mpg ~ wt | am/cyl
> labels(terms(reformulate(deparse(bar[[3L]])))) [1] "cyl" "am:cyl"
表示关于wt的随机斜率在am的能级之间以及在am内的cyl的能级之间变化。
wt
am
cyl
2条答案
按热度按时间w46czmvw1#
使用公式包。之后的部分|是右手边的第二部分,因此指定参数rhs = 2。
ifsvaxew2#
嗯,你的问题让我有点困惑。根据
vignette("lmer", package = "lme4")
:|
的左手定义随机效应公式。|
的右手侧定义分组结构。也就是说,右侧的变量表示的不是固定效应,而是随机效应的分组变量。在分组表达式中使用
+
运算符也是不标准的,如在cyl + am
中所使用的。该表达式应采用g1/.../gn
或g1:...:gn
的形式。如果你的混合效应公式真的是
ff <- mpg ~ wt | cyl + am
,那么我想我们会这样说:mpg ~ 1
,未指定固定效应项。wt | cyl + am
,对应的公式为~wt
,分组为cyl + am
。但是,分组可能没有意义,至少对lme4没有意义。如果我们把
ff
更合理地定义为ff <- mpg ~ wt | am/cyl
,那么上面的最后一行将给予:表示关于
wt
的随机斜率在am
的能级之间以及在am
内的cyl
的能级之间变化。