如何修改R代码将GLM模型汇总结果保存为独立数据框
问题:将GLM模型汇总结果保存为独立数据框
我在R中构建Gamma族GLM模型,想要为每个模型生成包含**估计值(Estimate)、标准误(Std. Error)和p值(Pr(>|t|))**的汇总表,并将每个模型的结果保存为独立的数据框,而非仅打印列表结果。
以下是我的示例数据、模型代码及当前实现:
speed<-c(0.5,0.1,0.3,0.4,0.9,0.2) sex<-c(rep(c("F","M"),times=c(3,3))) mass<-c(500,400,600,800,700,500) year<-c(2000,2000,2001,2001,2002,2002) temp.c<-c(0,2,3,1,3,0) data<-data.frame(speed,sex,mass,year,temp.c) full<-glm(formula = speed ~ sex + mass + year + temp.c, data=data,family=Gamma) bio<-glm(formula = speed ~ sex + mass, data=data,family=Gamma) clim<-glm(formula = speed ~ year + temp.c, data=data,family=Gamma) table.sum<-function(x) { table.x<-summary(x) table.x<-as.data.frame(table.x$coefficients) # 修正mutate语句中的多余逗号 table.x<-table.x %>% mutate(Estimate=signif(Estimate,2), `Std. Error`= signif(`Std. Error`,2), `t value` = NULL, `Pr(>|t|)`=signif(`Pr(>|t|)`,digits=2)) } mods<-list(full,bio,clim) lapply(mods,FUN=table.sum)
当前代码仅打印列表格式的结果,无法直接得到独立的数据框。
解决方案
方法1:命名列表后用list2env批量生成独立数据框
这种方法可以一次性将列表中的每个元素转换为全局环境中的独立数据框,且命名与模型对应:
# 给模型列表添加对应名称 mods_named <- list(full_sum = full, bio_sum = bio, clim_sum = clim) # 生成带命名的汇总表列表 sum_tables <- lapply(mods_named, table.sum) # 将列表元素转为全局环境的独立数据框 list2env(sum_tables, .GlobalEnv)
执行后,你会得到三个独立的数据框:full_sum、bio_sum、clim_sum,直接调用名称即可查看对应模型的汇总结果。
方法2:手动提取列表元素赋值
如果需要自定义数据框名称,可直接从lapply返回的列表中提取元素赋值:
sum_tables <- lapply(mods, table.sum) # 分别赋值为独立数据框 full_table <- sum_tables[[1]] bio_table <- sum_tables[[2]] clim_table <- sum_tables[[3]]
这样就生成了三个独立的数据框,可单独进行后续操作。
额外修正:修复模型汇总结果异常问题
注意到你当前输出中bio和clim模型的汇总表错误包含了所有变量(比如bio模型不该有year和temp.c),这是因为原代码中mutate语句存在多余逗号导致的语法问题,修正后的table.sum函数会生成对应模型的正确变量汇总。
内容的提问来源于stack exchange,提问作者Cam
相关产品推荐
相关产品推荐

