1

modelsummary用来显示几个多项模型的结果,每个模型使用mice::pool function. 它工作得很好,但我想为错误发现率添加 q 值/调整后的 p 值。

我知道我需要创建一个tidy_custom.mipo函数来添加此统计信息,但我无法让它工作。

下面是获取 mipo 对象的“pool_univariate”列表的代码,然后我将其传递给模型摘要。效果很好,我只想添加 q 值统计量。

知道怎么做吗?

非常感谢!

# list of exposures 
exposures <- c(
    Cs(exposure1,exposure2,exposure3)

## model function
models <- function(x) {
    lapply(imputed_data, function(y)
        multinom(as.formula(
            paste0(
                "outcome ~ ",
                x
            )
        ), data = y, model = TRUE)
    )
}

## run models
models_univariate <- as.list(seq(1,length(exposures))) 
models_univariate <- pblapply(exposures, models)

## pool 

pool_univariate <- as.list(seq(1,length(exposures))) 

# run pool
for(j in seq_along(exposures)) {
    pool_univariate[[j]] <- pool(models_univariate[[j]])
}


4

1 回答 1

1

如果没有最小的工作示例,很难回答这个问题。这里我给出了一个比原来更简单的例子,用于线性回归上下文。

首先,加载包并估计一个回归模型:

library(modelsummary)
mod <- lm(mpg ~ hp + drat + vs + am, data = mtcars)

其次,既然我们要总结一个类的模型lm,我们定义一个新的方法叫做tidy_custom.lm。此函数将统计模型作为输入,并返回符合broom包规范的数据框,其中一列称为term,其他列包含匹配的统计信息。在当前示例中,数据框将包括三个新的统计信息(q.valuebonferroniholm。这些值是使用R'sp.adjust函数计算的,该函数调整 p 值以进行多重比较:

tidy_custom.lm <- function(x, ...) {
  out <- broom::tidy(x)
  out$q.value <- p.adjust(out$p.value, n = 10, method = "fdr")
  out$bonferroni <- p.adjust(out$p.value, n = 10, method = "bonferroni")
  out$holm <- p.adjust(out$p.value, n = 10, method = "holm")
  return(out)
}

现在,我们可以调用modelsummary我们的lm模型,并请求统计信息:

modelsummary(mod, statistic = "q.value")

在此处输入图像描述

我们还可以比较不同的 p 值并使用字符串很好地标记它们glue

modelsummary(mod,
  statistic = c(
    "p = {p.value}",
    "q = {q.value}",
    "p (Bonferroni) = {bonferroni}",
    "p (Holm) = {holm}"
  )
)

在此处输入图像描述

于 2021-08-10T00:15:12.713 回答