'||'
notation into separate '|'
termsexpandDoubleVerts.Rd
From the right hand side of a formula for a mixed-effects model, expand terms with the double vertical bar operator into separate, independent random effect terms.
expandDoubleVerts(term)
the modified term
Because ||
works at the level of formula parsing, it
has no way of knowing whether a variable is a factor. It
just takes the terms within a random-effects term and literally splits them
into the intercept and separate no-intercept terms,
e.g. (1+x+y|f)
would be split into (1|f) + (0+x|f) + (0+y|f)
.
However, ||
will fail to break up factors into separate terms;
the dummy
function can be useful in this case, although
it is not as convenient as ||
.
formula
, model.frame
,
model.matrix
, dummy
.
Other utilities: mkRespMod
,
mkReTrms
, nlformula
,
nobars
, subbars
m <- ~ x + (x || g)
expandDoubleVerts(m)
#> ~x + ((1 | g) + (0 + x | g))
#> <environment: 0x55a2f90f25a8>
set.seed(101)
dd <- expand.grid(f=factor(letters[1:3]),g=factor(1:200),rep=1:3)
dd$y <- simulate(~f + (1|g) + (0+dummy(f,"b")|g) + (0+dummy(f,"c")|g),
newdata=dd,
newparams=list(beta=rep(0,3),
theta=c(1,2,1),
sigma=1),
family=gaussian)[[1]]
m1 <- lmer(y~f+(f|g),data=dd)
VarCorr(m1)
#> Groups Name Std.Dev. Corr
#> g (Intercept) 0.95687
#> fb 1.97293 0.106
#> fc 0.96425 0.109 -0.086
#> Residual 1.02172
m2 <- lmer(y~f+(1|g) + (0+dummy(f,"b")|g) + (0+dummy(f,"c")|g),
data=dd)
VarCorr(m2)
#> Groups Name Std.Dev.
#> g (Intercept) 0.98657
#> g.1 dummy(f, "b") 2.00636
#> g.2 dummy(f, "c") 0.99616
#> Residual 1.01771