如何解读MuMIn包model.avg对GAMs的输出结果?
关于MuMIn模型平均后GAM平滑项的解读与后缀问题
我有一系列广义可加模型(GAMs),希望使用MuMIn包的model.avg函数进行模型平均,请问该如何解读平均后的平滑项结果?为何每个平滑项后带有数字后缀?
示例代码
library(glmmTMB) library(mgcv) library(MuMIn) data("Salamanders") # glmmTMB data # mgcv gams gam1 <- gam(count ~ spp + s(cover) + s(DOP), data = Salamanders, family = tw, method = "ML") gam2 <- gam(count ~ mined + s(cover) + s(DOP), data = Salamanders, family = tw, method = "ML") gam3 <- gam(count ~ s(Wtemp), data = Salamanders, family = tw, method = "ML") gam4 <- gam(count ~ mined + s(DOY), data = Salamanders, family = tw, method = "ML") # MuMIn model average summary(model.avg(gam1, gam2, gam3, gam4))
结果片段
Model-averaged coefficients: (full average) Estimate Std. Error (Intercept) -1.32278368618846586812765053764451295137405 0.16027398202204409805027296442858641967177 minedno 2.22006553885311141982583649223670363426208 0.19680444996609294805445244946895400062203 s(cover).1 0.00096638939252485735100645092288118576107 0.05129736767981037115493592182247084565461 s(cover).2 0.00360413985630353601863351542533564497717 0.18864911049300209233692271482141222804785 s(cover).3 0.00034381902619062468381624930735540601745 0.01890820689958183642431777116144075989723 s(cover).4 -0.00248365164684107844403349041328965540743 0.12950622739175629560826052966149291023612 s(cover).5 -0.00089826079366626997504963192398008686723 0.04660149540411069601919535898559843190014 s(cover).6 0.00242197856572917875894734862640689243563 0.12855093144749979439112053114513400942087 s(cover).7 -0.00032596616013735266745646179664674946252 0.02076865732570042782922925539423886220902 s(cover).8 0.00700001172809289889942263584998727310449 0.36609857217759655956257347497739829123020 s(cover).9 -0.17150069832114492318630993850092636421323 0.17672571419517621449379873865836998447776 s(DOP).1 0.00018839994220792031023870016781529557193 0.01119134546418791391342306695833030971698 s(DOP).2 -0.00081869157242861999301819508900734945200 0.04333670935815417402103832955617690458894 s(DOP).3 -0.00021538789478326670289408395486674407948 0.01164171952980479901595955993798270355910 s(DOP).4 0.00043433676942596419591827161532648915454 0.02463278659589070856972270462392771150917
问题解答
1. 为什么平滑项后带有数字后缀?
- 这些数字是样条基函数的索引。mgcv构建平滑项
s(x)时,会把连续变量x转换成一组(默认k=9个)样条基函数,每个基函数对应一个独立的回归系数。 - 模型平均时,每个基函数的系数会被单独计算加权平均值,所以用
.1、.2...这样的后缀来区分同一个平滑项里的不同基函数系数。比如s(cover).9就是cover变量对应的第9个样条基函数的平均系数。
2. 如何解读平均后的平滑项结果?
- 单个系数无直接意义:不要单独看某一行的系数和标准误,因为平滑项是所有基函数的线性组合,用来拟合变量的非线性趋势,单个基函数的系数无法反映整体的非线性效应。
- 模型平均的加权逻辑:
model.avg会根据每个模型的AIC权重对系数做加权平均。如果某个平滑项只在部分模型里出现(比如s(cover)只在gam1、gam2中存在),那么在不含它的模型里,对应的所有基函数系数会被当作0参与平均。 - 实际分析建议:
- 重点看平滑项的包含概率(在
model.avg的完整结果里,Term列会显示每个变量/平滑项的包含概率),概率越高说明这个非线性效应在模型集中的支持度越强。 - 可视化整体趋势:提取模型平均后的平滑项参数,结合原变量的取值,计算所有基函数的加权组合,画出拟合的非线性曲线,这才是平滑项的核心解读方式。
- 显著性判断:不要用单个基函数的标准误做检验,建议结合单个模型中平滑项的显著性(比如
summary(gam1)里的s(cover)的p值),再结合模型平均的权重来综合判断该非线性效应是否显著。
- 重点看平滑项的包含概率(在
内容的提问来源于stack exchange,提问作者spops
相关产品推荐
相关产品推荐

