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

使用mice包为GAM做多重插补后样条项丢失的问题求助

问题原因与解决方案

为什么样条项消失了

mice包的pool()函数仅默认处理线性模型的参数化系数(比如截距、分类变量的哑变量系数),而GAM中的s(x1)、s(x2)属于非参数化的平滑项,不在pool()的默认处理范围内,所以你看到的汇总结果里只有参数化项。但每个插补数据集的GAM模型其实都包含了平滑项,只是没被合并输出。

解决方法

1. 查看单个插补数据集的GAM结果

你可以直接查看某一个插补数据集的完整GAM输出,确认平滑项的存在:

# 查看第1个插补数据集的GAM结果
summary(fit$analyses[[1]])
# 查看第5个插补数据集的结果,替换数字即可
summary(fit$analyses[[5]])

输出里会包含平滑项的有效自由度(edf)、F统计量、p值等信息。

2. 用miceadds包合并平滑项与参数化项

miceadds包专门实现了GAM多重插补结果的合并,能同时输出参数化项和平滑项的汇总:

# 安装并加载包(首次使用需安装)
# install.packages("miceadds")
library(miceadds)

# 合并GAM的所有结果
pooled_gam <- pool.gam(fit)

# 查看完整汇总
summary(pooled_gam)

这个输出会包含:

  • 参数化项的合并系数、标准误、p值(和你之前的结果一致)
  • 平滑项的合并F统计量、p值、有效自由度等关键信息

3. 手动提取平滑项信息(不推荐)

如果不想安装额外包,可以手动提取每个模型的平滑项统计量,再按Rubin规则合并:

# 提取所有插补模型的平滑项p值
smooth_pvals <- lapply(fit$analyses, function(model) summary(model)$s.pv)
# 转换为数据框并计算平均p值
smooth_pvals_df <- do.call(rbind, smooth_pvals)
colMeans(smooth_pvals_df)

# 提取平滑项的有效自由度
smooth_edf <- lapply(fit$analyses, function(model) summary(model)$edf)
smooth_edf_df <- do.call(rbind, smooth_edf)
colMeans(smooth_edf_df)

注意:手动合并没有考虑多重插补的方差调整,结果的严谨性不如pool.gam(),仅作临时查看用。

额外注意事项

  • 拟合GAM时,确保所有插补数据集的样条设置一致(比如指定s(x1, k=10)固定节点数),避免不同模型的平滑项结构差异影响合并结果。
  • Rubin规则对非参数化项的合并逻辑和参数化项略有不同,pool.gam()已经实现了针对GAM的适配逻辑,是最优选择。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 09:13:20