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

含交互项的GLM变量相对重要性与方差分解问题

含交互项广义线性模型(GLM)的变量相对重要性评估解答

1. GLM场景下R²的正确划分方法

你当前采用的「全模型R²减去移除目标项后模型R²」的计算逻辑属于边际方差分解,核心缺陷是对变量输入顺序高度敏感,且带交互项的场景下会出现贡献重复计算问题,不适用于相对重要性评估。
针对GLM(包括你需要用到的广义泊松GLM)的R²划分,目前行业通用的无偏方案是平均顺序贡献法(lmg法,也叫R²分割法):该方法会计算所有变量/项输入顺序下,每个项的平均方差贡献,自动解决主效应与交互项的共享变异分配问题,最终所有项的贡献总和会严格等于全模型R²。
你当前选择rsq包的type="v"类伪R²是合理的,这类方差解释型伪R²适配非高斯GLM的方差分解需求,无需更换指标。
实际计算无需手动做差,直接使用R的relaimpo包的calc.relimp()函数,指定type="lmg"即可自动完成带交互项的贡献划分,示例代码如下:

install.packages("relaimpo")
library(relaimpo)

# 基于你拟合的交互项GLM计算相对重要性
rel_imp_res <- calc.relimp(model, type = "lmg", rela = FALSE)
# 输出各主效应、交互项的绝对R²贡献
rel_imp_res$lmg
# 验证贡献总和与全模型R²一致
sum(rel_imp_res$lmg)

针对广义泊松GLM的适配,可以使用dominanceanalysis包,该包原生支持更多非高斯GLM子类的相对重要性计算,无需手动适配伪R²。

2. 分项R²总和与全模型R²存在差距的原因

你当前观测到的差距与共线性无关:你标准化后的VIF低于3,属于完全可接受的共线性水平,不会带来显著的估计偏差。差距来源主要有两点:

  • 计算逻辑错误:你计算主效应贡献时同时移除了对应交互项,导致交互项的变异被分别计入了两个主效应的贡献,又单独计算了一次交互项贡献,出现了重复计数,最终总和自然与全模型R²存在偏差。
  • 调整R²的惩罚机制:你使用了调整R²做差值计算,调整R²会根据模型自由度做惩罚,移除项后的模型自由度更高,调整R²的差值本身就不是对应项的真实边际贡献,引入了额外偏差。
    此外即便你修正了计算逻辑,手动做差的边际R²只有在所有预测变量完全不相关时总和才会等于全模型R²,只要变量间存在哪怕极低的相关(你的测试数据中am与disp本身就存在负相关),就会产生共享变异无法分配的问题,这也是推荐使用平均顺序贡献法的核心原因。

内容的提问来源于stack exchange,提问作者M. Riera

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 04:36:08