modelsummary包gof_function失效,无法添加AICc等统计量
modelsummary中gof_function不生效的解决方法
问题根源
modelsummary的gof_function参数要求返回的数据框必须是长格式,且必须包含term(统计量名称)和value(统计量值)两列。你之前的自定义函数返回的是宽格式数据框(每个统计量单独占一列),官方示例的fun同样返回宽格式,因此无法被modelsummary识别,默认的拟合优度统计量会继续显示。
1. 修正官方示例函数(验证生效)
把返回的宽格式数据框改成符合要求的长格式,即可正常显示自定义统计量:
fun <- function(model) { data.frame( term = "DV", value = insight::find_response(model), stringsAsFactors = FALSE ) } modelsummary(lm_list, gof_function = fun)
此时表格会新增DV行,对应每个模型的因变量。
2. 自定义添加AICc统计量
方法1:仅显示AICc(替换默认拟合优度)
如果只需要展示AICc,不需要默认统计量:
new_gof <- function(model) { mp <- performance::model_performance(model) data.frame( term = "AICc", value = mp$AICc, stringsAsFactors = FALSE ) } modelsummary(lm_list, gof_function = new_gof)
方法2:保留默认统计量 + 添加AICc
如果想保留默认的拟合优度(如Num.Obs.、R²),同时新增AICc,需要合并默认统计量和自定义统计量:
new_gof_full <- function(model) { # 获取默认的拟合优度统计量 gof_default <- modelsummary::get_gof(model) # 提取并整理AICc mp <- performance::model_performance(model) gof_aicc <- data.frame( term = "AICc", value = mp$AICc, stringsAsFactors = FALSE ) # 合并两类统计量 rbind(gof_default, gof_aicc) } modelsummary(lm_list, gof_function = new_gof_full)
方法3:添加performance返回的所有统计量
如果想把performance::model_performance输出的所有指标都加入表格,可将宽格式结果转为长格式:
library(tidyr) new_gof_all <- function(model) { mp <- performance::model_performance(model) # 宽格式转长格式,匹配modelsummary要求的结构 pivot_longer(mp, cols = everything(), names_to = "term", values_to = "value") } modelsummary(lm_list, gof_function = new_gof_all)
内容的提问来源于stack exchange,提问作者Tom
相关产品推荐
相关产品推荐

