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