Reputation: 27
I am getting the error message Error in colSums(tcm * y * w) : 'x' must be an array of at least two dimensions
when I run the code below:
glmer(outcome ~ predictor + (1|id),
data = df,
family = binomial) %>%
tbl_regression()
For context, I am looking to see whether the outcome (Patient satisfaction of encounter, 1 = Satisfied, 0 = Not-Satisfied) changes based on whether the physician completes a workshop. The reason why GLMER is used instead of GLM is because there are multiple patients for each physician. Therefore, it is a repeated measurement.
To reproduce error message:
outcome <- c(1,1,1,1,1,1,1,1,1,1,1,NA,1,1,1,1,1,1,1,1,1,1,1,1,1,NA,NA,1,1,1,1,1,1,1,1,1,1,1,1,1,0,NA,1,1,1,1,1,1,NA,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,NA,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,NA,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,NA,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,NA,1,1,1,1,1,1,NA,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,NA,1,1,0,1,1,0,1,1,1,1,1,1,1,1,0,1,0,1,1,1,1,1,1,NA,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,NA,1,1,1,NA ,1,1,1,1,1,1,1,1,1,NA,1,NA,NA,1,1,1,NA,0,1,1,1,1,NA,1,1,1,1,1,1,1,1,1,1,1,1)
predictor <- c("91 Days Before", "91 Days After", "91 Days After", "91 Days After", "91 Days After ", "91 Days Before",
"91 Days After", "91 Days Before", "91 Days Before", "91 Days Before", "91 Days Before", "91 Days Before",
"91 Days After", "91 Days Before", "91 Days After", "91 Days After", "91 Days After ", "91 Days Before",
"91 Days After", "91 Days After", "91 Days Before", "91 Days After", "91 Days After ", "91 Days After",
"91 Days After", "91 Days Before", "91 Days Before", "91 Days After", "91 Days Before", "91 Days Before",
"91 Days After", "91 Days Before", "91 Days Before", "91 Days Before", "91 Days After ", "91 Days After",
"91 Days Before", "91 Days Before", "91 Days After", "91 Days Before", "91 Days Before", "91 Days After",
"91 Days After", "91 Days After", "91 Days Before", "91 Days Before", "91 Days After ", "91 Days After",
"91 Days After", "91 Days After", "91 Days After", "91 Days After", "91 Days After ", "91 Days Before",
"91 Days After", "91 Days After", "91 Days After", "91 Days After", "91 Days Before", "91 Days After",
"91 Days Before", "91 Days Before", "91 Days Before", "91 Days After", "91 Days After ", "91 Days After",
"91 Days Before", "91 Days After", "91 Days Before", "91 Days Before", "91 Days Before", "91 Days Before",
"91 Days Before", "91 Days Before", "91 Days Before", "91 Days Before", "91 Days Before", "91 Days After",
"91 Days After", "91 Days Before", "91 Days Before", "91 Days Before", "91 Days Before", "91 Days Before",
"91 Days After", "91 Days After", "91 Days After", "91 Days After", "91 Days After ", "91 Days After",
"91 Days After", "91 Days After", "91 Days After", "91 Days After", "91 Days After ", "91 Days After",
"91 Days After", "91 Days After", "91 Days After", "91 Days After", "91 Days After ", "91 Days After",
"91 Days After", "91 Days After", "91 Days After", "91 Days Before", "91 Days Before", "91 Days Before",
"91 Days Before", "91 Days After", "91 Days Before", "91 Days Before", "91 Days Before", "91 Days After",
"91 Days Before", "91 Days Before", "91 Days Before", "91 Days Before", "91 Days Before", "91 Days Before",
"91 Days Before", "91 Days Before", "91 Days Before", "91 Days Before", "91 Days Before", "91 Days Before",
"91 Days Before", "91 Days Before", "91 Days Before", "91 Days Before", "91 Days Before", "91 Days Before",
"91 Days Before", "91 Days Before", "91 Days Before", "91 Days Before", "91 Days Before", "91 Days Before",
"91 Days Before", "91 Days After", "91 Days After", "91 Days Before", "91 Days After ", "91 Days After",
"91 Days After", "91 Days After", "91 Days Before", "91 Days Before", "91 Days Before", "91 Days Before",
"91 Days Before", "91 Days Before", "91 Days Before", "91 Days Before", "91 Days Before", "91 Days After",
"91 Days After", "91 Days After", "91 Days After", "91 Days After", "91 Days After ", "91 Days After",
"91 Days After", "91 Days Before", "91 Days After", "91 Days After", "91 Days After ", "91 Days Before",
"91 Days After", "91 Days Before", "91 Days Before", "91 Days Before", "91 Days Before", "91 Days Before",
"91 Days Before", "91 Days Before", "91 Days Before", "91 Days Before", "91 Days Before", "91 Days Before",
"91 Days Before", "91 Days After", "91 Days After", "91 Days After", "91 Days After ", "91 Days After",
"91 Days After", "91 Days After", "91 Days Before", "91 Days After", "91 Days After ", "91 Days Before",
"91 Days Before", "91 Days Before", "91 Days Before", "91 Days Before", "91 Days Before", "91 Days Before",
"91 Days Before", "91 Days Before", "91 Days After", "91 Days After", "91 Days Before", "91 Days Before",
"91 Days Before", "91 Days After", "91 Days Before", "91 Days Before", "91 Days Before", "91 Days Before",
"91 Days After", "91 Days After", "91 Days After", "91 Days After", "91 Days After ", "91 Days After",
"91 Days After", "91 Days Before", "91 Days After", "91 Days After", "91 Days After ", "91 Days After",
"91 Days After", "91 Days Before", "91 Days Before", "91 Days Before", "91 Days Before", "91 Days Before",
"91 Days Before", "91 Days After", "91 Days After", "91 Days After", "91 Days After ", "91 Days After",
"91 Days After", "91 Days Before", "91 Days Before", "91 Days Before", "91 Days Before", "91 Days After",
"91 Days After", "91 Days After", "91 Days After", "91 Days Before", "91 Days Before", "91 Days After",
"91 Days After", "91 Days After", "91 Days After", "91 Days Before", "91 Days Before", "91 Days Before",
"91 Days After", "91 Days After", "91 Days After", "91 Days After", "91 Days After ", "91 Days Before",
"91 Days After", "91 Days After", "91 Days Before", "91 Days Before", "91 Days Before", "91 Days After",
"91 Days After", "91 Days After", "91 Days Before", "91 Days Before", "91 Days Before", "91 Days Before",
"91 Days Before", "91 Days After", "91 Days Before", "91 Days Before", "91 Days After ", "91 Days Before",
"91 Days After", "91 Days After", "91 Days After", "91 Days After", "91 Days After ", "91 Days After",
"91 Days After", "91 Days After", "91 Days After", "91 Days After", "91 Days After ", "91 Days After",
"91 Days Before")
id <- c(46, 109, 82, 98, 98, 104, 98, 82, 27, 27, 25, 104, 44, 77, 102,44, 25, 104, 82, 66, 25, 66, 66, 66, 66, 111, 25, 111, 111, 46, 111, 46, 25, 25, 32, 25, 25, 25, 46, 25, 46, 25, 111, 32, 104, 111, 32, 111, 109,51, 32, 36, 4, 104, 32, 44, 34, 34, 19, 102, 65, 65, 65, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 43, 43, 43, 43, 43, 43,43, 68, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49,49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53,53, 53, 97, 97, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 29, 29, 29, 29,29, 29, 29, 13, 13, 13, 13, 13, 13, 13, 13, 13, 34, 34, 34, 24, 24, 24, 24, 24, 32, 32, 32, 32, 32, 76, 17, 17, 14, 14, 93, 85, 85, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 88, 88, 88, 88, 88, 88, 51, 51, 51, 51, 51, 51, 51, 92,92, 92, 45, 45, 45, 90, 90, 90, 90, 90, 58, 58, 58, 58, 58, 58, 58, 58, 83, 4, 4, 39, 81, 94, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,64, 64)
ex_data <- cbind(id, predictor, outcome) %>%
as.data.frame() %>%
mutate(id = factor(id),
predictor = factor(predictor),
outcome = factor(outcome))
glmer(outcome ~ predictor + (1|id),
data = ex_data,
family = binomial) %>%
tbl_regression()
Upvotes: 0
Views: 83
Reputation: 116
tbl_regression()
relies on broom.helpers
package for preparing and improving the tibble returned by tidy()
. You can use broom.helpers::tidy_plus_plus()
to see the different enhancements made by broom.helpers
.
The bug you mentioned has been identified and fixed in the current dev version of broom.helpers
. Cf. https://github.com/larmarange/broom.helpers/issues/116
outcome <- c(1,1,1,1,1,1,1,1,1,1,1,NA,1,1,1,1,1,1,1,1,1,1,1,1,1,NA,NA,1,1,1,1,1,1,1,1,1,1,1,1,1,0,NA,1,1,1,1,1,1,NA,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,NA,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,NA,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,NA,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,NA,1,1,1,1,1,1,NA,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,NA,1,1,0,1,1,0,1,1,1,1,1,1,1,1,0,1,0,1,1,1,1,1,1,NA,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,NA,1,1,1,NA ,1,1,1,1,1,1,1,1,1,NA,1,NA,NA,1,1,1,NA,0,1,1,1,1,NA,1,1,1,1,1,1,1,1,1,1,1,1)
predictor <- c("91 Days Before", "91 Days After", "91 Days After", "91 Days After", "91 Days After", "91 Days Before",
"91 Days After", "91 Days Before", "91 Days Before", "91 Days Before", "91 Days Before", "91 Days Before",
"91 Days After", "91 Days Before", "91 Days After", "91 Days After", "91 Days After", "91 Days Before",
"91 Days After", "91 Days After", "91 Days Before", "91 Days After", "91 Days After", "91 Days After",
"91 Days After", "91 Days Before", "91 Days Before", "91 Days After", "91 Days Before", "91 Days Before",
"91 Days After", "91 Days Before", "91 Days Before", "91 Days Before", "91 Days After", "91 Days After",
"91 Days Before", "91 Days Before", "91 Days After", "91 Days Before", "91 Days Before", "91 Days After",
"91 Days After", "91 Days After", "91 Days Before", "91 Days Before", "91 Days After", "91 Days After",
"91 Days After", "91 Days After", "91 Days After", "91 Days After", "91 Days After", "91 Days Before",
"91 Days After", "91 Days After", "91 Days After", "91 Days After", "91 Days Before", "91 Days After",
"91 Days Before", "91 Days Before", "91 Days Before", "91 Days After", "91 Days After", "91 Days After",
"91 Days Before", "91 Days After", "91 Days Before", "91 Days Before", "91 Days Before", "91 Days Before",
"91 Days Before", "91 Days Before", "91 Days Before", "91 Days Before", "91 Days Before", "91 Days After",
"91 Days After", "91 Days Before", "91 Days Before", "91 Days Before", "91 Days Before", "91 Days Before",
"91 Days After", "91 Days After", "91 Days After", "91 Days After", "91 Days After", "91 Days After",
"91 Days After", "91 Days After", "91 Days After", "91 Days After", "91 Days After", "91 Days After",
"91 Days After", "91 Days After", "91 Days After", "91 Days After", "91 Days After", "91 Days After",
"91 Days After", "91 Days After", "91 Days After", "91 Days Before", "91 Days Before", "91 Days Before",
"91 Days Before", "91 Days After", "91 Days Before", "91 Days Before", "91 Days Before", "91 Days After",
"91 Days Before", "91 Days Before", "91 Days Before", "91 Days Before", "91 Days Before", "91 Days Before",
"91 Days Before", "91 Days Before", "91 Days Before", "91 Days Before", "91 Days Before", "91 Days Before",
"91 Days Before", "91 Days Before", "91 Days Before", "91 Days Before", "91 Days Before", "91 Days Before",
"91 Days Before", "91 Days Before", "91 Days Before", "91 Days Before", "91 Days Before", "91 Days Before",
"91 Days Before", "91 Days After", "91 Days After", "91 Days Before", "91 Days After", "91 Days After",
"91 Days After", "91 Days After", "91 Days Before", "91 Days Before", "91 Days Before", "91 Days Before",
"91 Days Before", "91 Days Before", "91 Days Before", "91 Days Before", "91 Days Before", "91 Days After",
"91 Days After", "91 Days After", "91 Days After", "91 Days After", "91 Days After", "91 Days After",
"91 Days After", "91 Days Before", "91 Days After", "91 Days After", "91 Days After", "91 Days Before",
"91 Days After", "91 Days Before", "91 Days Before", "91 Days Before", "91 Days Before", "91 Days Before",
"91 Days Before", "91 Days Before", "91 Days Before", "91 Days Before", "91 Days Before", "91 Days Before",
"91 Days Before", "91 Days After", "91 Days After", "91 Days After", "91 Days After", "91 Days After",
"91 Days After", "91 Days After", "91 Days Before", "91 Days After", "91 Days After", "91 Days Before",
"91 Days Before", "91 Days Before", "91 Days Before", "91 Days Before", "91 Days Before", "91 Days Before",
"91 Days Before", "91 Days Before", "91 Days After", "91 Days After", "91 Days Before", "91 Days Before",
"91 Days Before", "91 Days After", "91 Days Before", "91 Days Before", "91 Days Before", "91 Days Before",
"91 Days After", "91 Days After", "91 Days After", "91 Days After", "91 Days After", "91 Days After",
"91 Days After", "91 Days Before", "91 Days After", "91 Days After", "91 Days After", "91 Days After",
"91 Days After", "91 Days Before", "91 Days Before", "91 Days Before", "91 Days Before", "91 Days Before",
"91 Days Before", "91 Days After", "91 Days After", "91 Days After", "91 Days After", "91 Days After",
"91 Days After", "91 Days Before", "91 Days Before", "91 Days Before", "91 Days Before", "91 Days After",
"91 Days After", "91 Days After", "91 Days After", "91 Days Before", "91 Days Before", "91 Days After",
"91 Days After", "91 Days After", "91 Days After", "91 Days Before", "91 Days Before", "91 Days Before",
"91 Days After", "91 Days After", "91 Days After", "91 Days After", "91 Days After", "91 Days Before",
"91 Days After", "91 Days After", "91 Days Before", "91 Days Before", "91 Days Before", "91 Days After",
"91 Days After", "91 Days After", "91 Days Before", "91 Days Before", "91 Days Before", "91 Days Before",
"91 Days Before", "91 Days After", "91 Days Before", "91 Days Before", "91 Days After", "91 Days Before",
"91 Days After", "91 Days After", "91 Days After", "91 Days After", "91 Days After", "91 Days After",
"91 Days After", "91 Days After", "91 Days After", "91 Days After", "91 Days After", "91 Days After",
"91 Days Before")
id <- c(46, 109, 82, 98, 98, 104, 98, 82, 27, 27, 25, 104, 44, 77, 102,44, 25, 104, 82, 66, 25, 66, 66, 66, 66, 111, 25, 111, 111, 46, 111, 46, 25, 25, 32, 25, 25, 25, 46, 25, 46, 25, 111, 32, 104, 111, 32, 111, 109,51, 32, 36, 4, 104, 32, 44, 34, 34, 19, 102, 65, 65, 65, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 43, 43, 43, 43, 43, 43,43, 68, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49,49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53,53, 53, 97, 97, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 29, 29, 29, 29,29, 29, 29, 13, 13, 13, 13, 13, 13, 13, 13, 13, 34, 34, 34, 24, 24, 24, 24, 24, 32, 32, 32, 32, 32, 76, 17, 17, 14, 14, 93, 85, 85, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 88, 88, 88, 88, 88, 88, 51, 51, 51, 51, 51, 51, 51, 92,92, 92, 45, 45, 45, 90, 90, 90, 90, 90, 58, 58, 58, 58, 58, 58, 58, 58, 83, 4, 4, 39, 81, 94, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,64, 64)
library(tidyverse)
library(broom.mixed)
ex_data <- cbind(id, predictor, outcome) %>%
as.data.frame() %>%
dplyr::mutate(id = factor(id),
predictor = factor(predictor),
outcome = factor(outcome))
lme4::glmer(outcome ~ predictor + (1|id),
data = ex_data,
family = binomial) %>%
broom.helpers::tidy_plus_plus(exponentiate = TRUE, intercept = TRUE) %>%
knitr::kable()
term | original_term | variable | var_label | var_class | var_type | var_nlevels | contrasts | contrasts_type | reference_row | label | n_obs | n_event | effect | group | estimate | std.error | statistic | p.value | conf.low | conf.high |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
(Intercept) | (Intercept) | (Intercept) | (Intercept) | NA | intercept | NA | NA | NA | NA | (Intercept) | 270 | 264 | fixed | NA | 2.056839e+04 | 5.618032e+04 | 3.6360619 | 0.0002768 | 97.3273899 | 4.346757e+06 |
predictor91 Days After | NA | predictor | predictor | factor | dichotomous | 2 | contr.treatment | treatment | TRUE | 91 Days After | 137 | 134 | NA | NA | 1.000000e+00 | NA | NA | NA | NA | NA |
predictor91 Days Before | predictor91 Days Before | predictor | predictor | factor | dichotomous | 2 | contr.treatment | treatment | FALSE | 91 Days Before | 133 | 130 | fixed | NA | 6.825077e-01 | 7.266704e-01 | -0.3587669 | 0.7197695 | 0.0846892 | 5.500312e+00 |
id.sd__(Intercept) | id.sd__(Intercept) | id.sd__(Intercept) | id.sd__(Intercept) | NA | ran_pars | NA | NA | NA | NA | id.sd__(Intercept) | NA | NA | ran_pars | id | 8.898623e+00 | NA | NA | NA | NA | NA |
Created on 2021-06-24 by the reprex package (v2.0.0)
Upvotes: 1
Reputation: 226597
tl;dr gtsummary()
doesn't know to handle responses that are factors (base-R, and by extension glmer
, is almost pathologically flexible about the ways in which it will accept the response values for a binomial-type regression, but you're generally better off using a numeric value).
It would be a public service to post an issue at the gtsummary issues list.
Avoid cbind()
, because that will automatically coerce all vectors to the same type.
library(tidyverse)
library(gtsummary)
ex_data <- tibble(id, predictor, outcome) %>%
mutate(across(c(id, predictor), factor)
g1 <- glmer(outcome ~ predictor + (1|id),
data = ex_data,
family = binomial)
tbl_regression(g1)
It probably makes sense to save the glmer
fit rather than piping it directly to tbl_regression()
because you might want to do other things with it (diagnostic plots, coefficient/dot-whisker plots, predictions, model comparison ...)
Upvotes: 3