-
-
Save bbolker/e6694fef9cdc1e509379faed5b5dc39d to your computer and use it in GitHub Desktop.
| library(lme4) | |
| library(sjPlot) | |
| set.seed(101) | |
| n <- 1e3 ## obs per group | |
| ns <- 4 ## groups | |
| dd <- data.frame(s = rep(1:ns, each= n), | |
| f = factor(sample(1:20, size = n*ns, replace = TRUE)), | |
| x = rnorm(n*ns)) | |
| sims <- lapply(1:ns, | |
| function(i) simulate(~x + (1|f), | |
| family = poisson, | |
| newdata = subset(dd, s==i), | |
| newparams = list(beta = c(1,1), theta = 1))[[1]]) | |
| dd$y <- unlist(sims) | |
| fits <- lapply(1:ns, | |
| function(i) glmer(y~x+(1|f), | |
| family = poisson, | |
| data = subset(dd, s==i))) | |
| plots <- lapply(fits, function(f) plot_model(f, type = "pred")$x) | |
| cowplot::plot_grid(plotlist = plots) |
Thanks. Changing it to a list and commenting out all of the options that I set produced a plot. I can try to figure the errors out from here. Thanks so much!!!
sort.est = TRUE or sort.est = FALSE causes the error "Warning: Could not access model information.Error in if (fam.info$is_linear) { : argument is of length zero"
Ok, I found the bug. sort.est is no valid argument for plot_models(), so it was captured by the ... and thereby considered as regression model object. I added a check for valid arguments and plot_models() now returns an informative message when this happens.
In short: plot_models(fits, sort.est = TRUE) is not intended to work.
There is a reason why there is no sort options, because estimates are grouped by models, and I'm assuming a case where you can also have more than 1 estimate. And I think you can't sort both by models/groups and within group by estimate in ggplot2.
library(lme4)
library(sjPlot)
library(parameters)
set.seed(101)
n <- 1e2 ## obs per group
ns <- 4 ## groups
dd <- data.frame(y = rpois(n*ns, 3),
f = factor(sample(1:20, size = n*ns, replace = TRUE)),
x1 = rnorm(n*ns),
x2 = runif(n*ns))
fits <- lapply(1:ns,
function(i) glmer(y~x1+x2+(1|f),
family = poisson,
data = dplyr::sample_frac(dd, .6)))
plot_models(fits)Created on 2022-12-17 with reprex v2.0.2
You can still use parameters::compare_parameters(fits) to get the raw data, but then probably need to build the plot from scratch.
Thank you so much for all your help here!!!

It's difficult to say without a reproducible example, but based on your code here and the error message you mentioned, can you try changing
into
I.e. replacing
c()bylist()?