r - merTools predictInterval() for model with nested random effect -
does predictinterval()
mertools
package not nested random effects? example, using msleep
dataset ggplot2
package:
library("lme4") library("mertools") library("ggplot2") mod <- lmer(sleep_total ~ bodywt + (1|vore/order), data=msleep) predint <- predictinterval(mermod=mod, newdata=msleep)
returns error:
error in '[.data.frame'(newdata, , j) : undefined columns selected
this runs fine no problem:
mod <- lmer(sleep_total ~ bodywt + (1|vore) + (1|order), data=msleep) predint <- predictinterval(mermod=mod, newdata=msleep)
(well gives warning na
levels in random effect variables, i'm not concerned that)
update
as discussed in comments of ben bolker's answer below, new version of mertools
accounts nested random effects. however, when try predict data contains new levels of nested random effect, errors.
this works:
mod <- lmer(sleep_total ~ bodywt + (1|vore/order), data=msleep) predint <- predictinterval(mermod=mod, newdata=msleep)
and works, albeit couple of warnings (see below additional q warnings*):
mod <- lmer(sleep_total ~ bodywt + (1|vore) + (1|order), data=msleep) msleep2 <- msleep %>% mutate(vore = "omni") predint <- predictinterval(mermod=mod, newdata=msleep2)
but not work:
mod <- lmer(sleep_total ~ bodywt + (1|vore/order), data=msleep) msleep2 <- msleep %>% mutate(vore = "omni") predint <- predictinterval(mermod=mod, newdata=msleep2)
with following error:
error in `[.data.frame`(tmp, alllvl) : undefined columns selected in addition: warning message: in predictinterval(mermod = mod, newdata = msleep3) : newdata tbl_df or tbl object dplyr package , has been coerced data.frame
and here, "omni"
isn't new level of vore
, when combined order
, creates new nested combinations of variables.
if use "new"
or else isn't observed level of vore
, similar results: works non-nested version of model, not nested version.
*also, should concerned warning given second model chunk above:
> mod <- lmer(sleep_total ~ bodywt + (1|vore) + (1|order), data=msleep) > msleep2 <- msleep %>% mutate(vore = "omni") > predint <- predictinterval(mermod=mod, newdata=msleep2) warning messages: 1: in predictinterval(mermod = mod, newdata = msleep2) : newdata tbl_df or tbl object dplyr package , has been coerced data.frame 2: in chol.default(sigma, pivot = true) : matrix either rank-deficient or indefinite
i'm going guess second 1 result of vore
taking on same value each observation, shouldn't issue prediction, should it? see being issue if variable took on same value when fitting model, don't think should issue when predicting new observations?
one can (apparently) work around writing out interaction term explicitly. warning: haven't checked make sure resulting predictions correct, seen no error produced , resulting object approximately sensible ...
msleep <- transform(msleep,voreorder=interaction(vore,order,drop=true)) mod2 <- lmer(sleep_total ~ bodywt + (1|vore)+(1|voreorder), data=msleep) predint <- predictinterval(mermod=mod2, newdata=msleep)
this generate warning messages, apparently they're due <na>
values in vore
variable (i don't know data set ...)
Comments
Post a Comment