【问题标题】:R, Getting the error message 'x' must be an array of at least two dimensions when using tbl_regression with glmerR,将 tbl_regression 与 glmer 一起使用时,获取错误消息“x”必须是至少二维的数组
【发布时间】:2021-06-23 18:41:50
【问题描述】:

我在运行以下代码时收到错误消息Error in colSums(tcm * y * w) : 'x' must be an array of at least two dimensions

glmer(outcome ~ predictor + (1|id), 
      data = df, 
      family = binomial) %>% 
  tbl_regression()

就上下文而言,我希望查看结果(患者对就诊的满意度,1 = 满意,0 = 不满意)是否会根据医生是否完成研讨会而发生变化。之所以使用 GLMER 而不是 GLM,是因为每个医生有多个患者。因此,它是重复测量。

重现错误信息:

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()

【问题讨论】:

    标签: r lme4 gtsummary


    【解决方案1】:

    tl;dr gtsummary() 不知道如何处理作为因素的响应(base-R 以及扩展 glmer,对于它接受的方式几乎是病态的灵活二项式回归的响应值,但通常最好使用数值)。

    gtsummary issues list 发布问题将是一项公共服务。

    避免使用cbind(),因为这会自动将所有向量强制为同一类型。

    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)
    

    保存glmer 拟合而不是将其直接传递给tbl_regression() 可能更有意义,因为您可能想用它做其他事情(诊断图、系数/点须图、预测、模型比较...... .)

    【讨论】:

    • 非常感谢!这完全有道理,我可以将其添加到 gtsummary 问题列表中!
    【解决方案2】:

    tbl_regression() 依赖于broom.helpers 包来准备和改进tidy() 返回的小标题。您可以使用broom.helpers::tidy_plus_plus() 查看broom.helpers 所做的不同增强。

    您提到的错误已在broom.helpers 的当前开发版本中识别并修复。参照。 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

    reprex package (v2.0.0) 于 2021 年 6 月 24 日创建

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-02-28
      • 2021-10-03
      • 2018-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多