使用add_global_p的anova_fun参数遇错,需适配clm模型ANOVA方法
问题描述
在使用gtsummary::tbl_uvregression()或tbl_regression()生成统计表格时,尝试通过add_global_p()的anova_fun参数传入car::Anova()或RVAideMemoire::Anova.clm()计算ANOVA全局p值,却报错提示“mod(模型)参数未指定且无默认值”。即使直接传入car::Anova()也会触发该错误,同时需要找到为clmm模型的tbl_uvregression对象添加ANOVA全局p值的简便方法。
解决方案
1. 解决glm模型的car::Anova()报错问题
add_global_p()要求anova_fun返回的结果必须包含p.value列,且函数需仅接收模型作为参数。直接传入car::Anova()会因参数传递方式不符合要求报错,需用匿名函数包装,同时指定ANOVA类型(如type="III",可根据需求调整):
# 加载依赖包 library(survival) library(gtsummary) library(car) # 构建tbl_uvregression表格 tab <- trial %>% select(response, age, trt) %>% tbl_uvregression(method = glm, method.args = list(family = binomial), y = response, exponentiate = TRUE) # 添加全局p值:用匿名函数包装car::Anova tab %>% add_global_p(anova_fun = function(x) car::Anova(x, type = "III")) # tbl_regression示例 trial %>% glm(response ~ age + trt, data = ., family = binomial("logit")) %>% tbl_regression(exponentiate = TRUE) %>% add_global_p(anova_fun = function(x) car::Anova(x, type = "III"))
2. 为clmm模型的tbl_uvregression添加ANOVA全局p值
针对ordinal::clmm模型,使用RVAideMemoire::Anova.clm()时,同样用匿名函数包装,确保函数仅接收模型参数并返回符合要求的结果:
# 加载依赖包 library(gtsummary) library(ordinal) library(RVAideMemoire) # 构建clmm模型的tbl_uvregression表格 clmm_tab <- trial %>% # 将因变量转为有序因子(clmm模型要求) mutate(response = factor(response, ordered = TRUE)) %>% select(response, age, trt) %>% tbl_uvregression(method = clmm, y = response, exponentiate = TRUE) # 添加全局p值:用匿名函数包装Anova.clm clmm_tab %>% add_global_p(anova_fun = function(x) RVAideMemoire::Anova.clm(x))
原理说明
匿名函数的作用是统一参数传递逻辑:让anova_fun仅接收模型作为唯一输入参数,同时为car::Anova()或Anova.clm()传递必要的额外参数,确保返回结果包含add_global_p()所需的p.value列,避免参数不匹配的报错。
内容的提问来源于stack exchange,提问作者Clément Mertens
相关产品推荐
相关产品推荐

