You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 04:42:46