我正在重新审视涉及使用 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() 模型函数都会发生这种情况。
我自己的问题的部分答案。正如怀疑的那样,这是一个版本控制问题。我向 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()
模型结果不太好,但错误消失了,所有包再次一起正常工作!