如何从填补数据集的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是一个向量,包含每个填补模型的平滑项EDFindividual_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
相关产品推荐
相关产品推荐

