使用 multcomp::glht()、missRanger() 和 mouse::pool() 时出现新错误

问题描述 投票:0回答:1

我正在重新审视涉及使用 missRanger::missRanger()、multcomp::glht()(导出效果的线性组合)、mice::pool() 和 broom.mixed::tidy( 进行多重插补的旧代码)。虽然它以前有效,但现在当我尝试创建整洁的表或以其他方式提取结果时,它会失败。我使用下面的 mtcars 重现了该错误。

# 0. PACKAGES

library(tidyverse)
library(mice)
library(broom.mixed)
library(missRanger)
# 1. DATA
# set 20% of the mtcars dataset missing
mtcars_miss <-
  generateNA(mtcars, 
             p = 0.2, 
             seed = 2024)

# generate 5 imputations
mtcars_i <- 
  replicate(9, 
            missRanger(mtcars_miss, 
                       num.tree = 500, 
                       pmm.k = 3, 
                       verbose = 0, 
                       seed = 2024), 
            simplify = FALSE)
# 2. ANALYSIS WITHOUT LINEAR COMBINATIONS
mtcars_mod <- 
  lapply(mtcars_i, 
         function(x)
           glm(mpg ~ hp * wt + am, 
                              data = x))

pool(mtcars_mod)

pool(mtcars_mod) |> 
  tidy(conf.int = TRUE)
# 3. ANALYSIS WITH LINEAR COMBINATIONS
mtcars_lin <- 
  lapply(mtcars_i, 
         function(x)
           multcomp::glht(glm(mpg ~ hp * wt + am, 
                              data = x), 
                          linfct = c("hp = 0", 
                                     "`hp:wt` = 0", 
                                     "hp + `hp:wt` = 0")) |> 
           summary())

pool(mtcars_lin)

pool(mtcars_lin) |> 
  tidy(conf.int = TRUE)

最后一个块会生成以下错误消息。正如我在上面指出的,这是一个新错误,当我在 2024 年 10 月运行代码时,该错误并未出现。我不知道原因是什么,因为 pool() 参数的输出为标准模型和具有线性组合效果的一种。

data.frame(..., check.names = FALSE) 中的错误: 参数意味着不同的行数:0, 3

对于哪个包导致问题有什么想法吗?或者我该如何解决这个问题? glm() 和 glmmTMB() 模型函数都会发生这种情况。

interaction
1个回答
0
投票

我自己的问题的部分答案。正如怀疑的那样,这是一个版本控制问题。我向 Bluesky 发布了我的挫败感,有人提供了一个解决方法,那就是 Groundhog 包。代码如下

# 0. PACKAGES
knitr::opts_chunk$set(echo = TRUE)

# load ground first
library(groundhog)

# load other packages
groundhog.library(
  c("mice", "broom.mixed", 
    "multcomp", "missRanger"), 
  "2024-10-15")

library(tidyverse)
# 1. SETUP DATA
# set 20% of the mtcars dataset missing
mtcars_miss <-
  generateNA(mtcars, 
             p = 0.2, 
             seed = 2024)

# generate 5 imputations
mtcars_i <- 
  replicate(9, 
            missRanger(mtcars_miss, 
                       num.tree = 500, 
                       pmm.k = 3, 
                       verbose = 0, 
                       seed = 2024), 
            simplify = FALSE)
# 2. ANALYSIS WITHOUT LINEAR COMBINATIONS
mtcars_mod <- 
  lapply(mtcars_i, 
         function(x)
           glm(mpg ~ hp * wt + am, 
                              data = x))

pool(mtcars_mod)

pool(mtcars_mod) |> 
  tidy()
# 3. ANALYSIS WITHOUT LINEAR COMBINATIONS
mtcars_lin <- 
  lapply(mtcars_i, 
         function(x)
           multcomp::glht(glm(mpg ~ hp * wt + am, 
                              data = x), 
                          linfct = c("hp = 0", 
                                     "`hp:wt` = 0", 
                                     "hp + `hp:wt` = 0")))

pool(mtcars_lin)

pool(mtcars_lin) |> 
  tidy()

模型结果不太好,但错误消失了,所有包再次一起正常工作!

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.