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

如何从填补数据集的GAM提取EDF及从合并GAM提取合并edf

提取多重填补GAM模型的有效自由度(EDF)

1. 从单个填补数据集的GAM中提取EDF

micegam$analyses存储了每个填补数据集上拟合的GAM模型实例,可通过遍历这些模型提取平滑项的有效自由度:

library(purrr)

# 方法1:直接提取模型的edf属性(单个值,对应唯一平滑项)
individual_edfs <- map_dbl(micegam$analyses, ~ .x$edf)

# 方法2:从模型摘要中提取带平滑项名称的EDF表格
individual_summaries <- map(micegam$analyses, summary)
individual_edf_table <- map_dfr(individual_summaries, 
                                ~ .x$s.table[, "edf", drop=FALSE], 
                                .id = "imputation_id")
  • individual_edfs是一个向量,包含每个填补模型的平滑项EDF
  • individual_edf_table是数据框,展示每个填补编号对应的平滑项EDF,更便于查看明细

2. 提取合并后的估计自由度(EDF)

pool()函数默认仅处理线性回归系数,无法直接输出GAM平滑项的合并EDF,需手动用Rubin规则完成合并:

# 计算合并EDF的均值
m <- length(individual_edfs)
pooled_edf <- mean(individual_edfs)

# 用Rubin规则计算合并方差与标准误
within_var <- var(individual_edfs)
between_var <- (1/(m-1)) * sum((individual_edfs - pooled_edf)^2)
total_var <- within_var + between_var + between_var/m
pooled_edf_se <- sqrt(total_var)

# 输出合并结果
cat("合并后的EDF:", round(pooled_edf, 3), "\n")
cat("合并EDF的标准误:", round(pooled_edf_se, 3), "\n")

# 整理为带置信区间的结果表格
pooled_edf_result <- data.frame(
  term = "s(exposure)",
  pooled_edf = round(pooled_edf, 3),
  se = round(pooled_edf_se, 3),
  lower_95ci = round(pooled_edf - 1.96*pooled_edf_se, 3),
  upper_95ci = round(pooled_edf + 1.96*pooled_edf_se, 3)
)
print(pooled_edf_result)

该方法通过合并各填补模型EDF的均值与方差,得到符合多重填补规则的合并EDF估计值。

内容的提问来源于stack exchange,提问作者Katherine Drummond

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 12:22:43