GAM中使用log转换计数数据如何绘制可解释的响应图?
trans=plogis 结果不符合预期的核心原因 plogis是logit链接的逆转换函数,仅适用于二分类、比例数据对应的逻辑GAM场景,你当前的因变量是log转换后的计数数据,转换类型和逻辑回归的logit转换完全不匹配,是参数误用导致的结果异常。- 如果你是手动对计数做
log(y)/log(y+1)转换后拟合高斯GAM,默认用的是恒等链接,要转回原始计数尺度应该把trans参数设置为exp,如果转换时加了常数c,需要对应调整为trans = function(x) exp(x) - c,才能得到正确的原始尺度拟合值。 - 更推荐的计数类GAM拟合方案是不做手动转换,直接指定
family = poisson(link = "log")或者family = nb()拟合原生计数模型,mgcv会自动识别链接函数,减少手动转换带来的偏差。
提升GAM绘图结果可解释性的其他方案
对应你之前线性模型用最小二乘均值的习惯,可以用以下几种方法得到更易解读的结果:
- 输出调整后边际均值:用
emmeans包可以直接提取GAM的边际均值(和你之前用的最小二乘均值逻辑一致),设置type = "response"即可直接输出原始计数尺度的结果和置信区间,提取后可自定义绘图,和线性模型的输出结果可直接对比,参考代码:emmeans(你的gam模型, ~ 目标自变量, type = "response")。 - 调整mgcv自带绘图的参数:用
plot.gam()时除了设置对应的反转换函数,还要增加seWithMean = TRUE参数,将截距的不确定性纳入置信区间计算,避免置信区间宽度被低估,加shift = TRUE可以把截距合并进平滑项的拟合值里,得到的就是其他变量取均值时,目标自变量对原始响应的边际效应曲线。 - 用第三方绘图包简化操作:
gratia包的draw()函数支持自动识别GAM的家族和链接函数,默认输出反转换到原始响应尺度的拟合曲线,自带置信带和原始数据散点,不需要手动调整trans参数,语法更简洁。
内容的提问来源于stack exchange,提问作者Cathrin
相关产品推荐
相关产品推荐

