如何比较负二项式回归的系数以确定相对重要性?

机器算法验证 r 回归 造型 负二项分布 标准化
2022-04-16 08:39:37

我在 R 中工作,使用 glm.nb(MASS 包的)用负二项式回归模型对计数数据进行建模。我想比较我的每个预测变量对响应变量的影响的相对重要性(注意:每个预测变量都有完全不同的尺度 - 有时是数量级)。不幸的是,R 的输出给我的结果是非标准化的 ( b ) 系数(“估计值”)。我希望有人能给我一个提示,告诉我如何从 NB 回归模型中获取标准化(beta)系数......或另一种“更好”的方式来确定我的每个预测变量对我的响应变量的相对重要性.

我研究了几种可能的方法,例如:

  1. 使用 R 包“relimpo”(如对https://stats.stackexchange.com/a/7118的评论中所建议),但它不适用于 NB 回归模型,因此完全改变了我应该考虑的假设并使结果大不相同;
  2. 均值居中和缩放我的数据,这会改变解释并使其无法使用 NB 模型,因为响应变量现在具有负值;
  3. 仅缩放,这样我仍然可以运行 NB 模型......我认为这只会影响系数的比例而不改变它们的方向(即,https://stats.stackexchange.com/a/29784) -但我确实得到了一些翻转为负的正系数。反之亦然……这对我来说似乎很奇怪,让我怀疑我是否犯了错误。

我受益于查看当进行多元回归时,何时应将预测变量居中以及何时应将它们标准化?(以及有关问题的评论中的建议链接,例如http://andrewgelman.com/2009/07/when_to_standar/何时以及如何在线性回归中使用标准化解释变量,并且在进行变量之前经常调整(例如标准化)模型——什么时候这是个好主意,什么时候是坏主意?)。

底线:我还没有找到在 R 中使用 NB 模型的方法(我在统计上证实它比 lm、glm 或 poisson 更适合对我的数据进行建模)并且仍然具有相对重要性 - 或者至少是标准化的贝塔系数 - 对于我的预测者......

R 脚本是这样的:

library("MASS")
nb = glm.nb(responseCountVar ~ predictor1 + predictor2 + 
  predictor3, data=myData, control=glm.control(maxit=125))
summary(nb)

scaled_nb = glm.nb(scale(responseCountVar, center = FALSE) ~ scale(predictor1, center = FALSE) + scale(predictor2, center = FALSE) + 
  scale(predictor3, center = FALSE), data=myData, control=glm.control(maxit=125))
summary(scaled_nb)
2个回答

首先,您必须弄清楚一个变量的哪些变化与另一个变量的变化“相等”。通常的标准化使用标准偏差,但这可能是理想的,也可能不是理想的。可能无法弄清楚这一点 - 特别是如果 IV 彼此相关,在这种情况下,其中一个的更改将与另一个的更改一起发生。

一旦你弄清楚了这一点,你就可以从 IV 的各种组合中得到预测值,根据你在第一步中认为“相等”的量来改变每个组合。

另一件事是将预测结果绘制成自变量值变化的图形。

要获得直接从 R 中的任何 lm(或 glm)模型获得标准化 beta 系数的快速方法,请尝试使用lm.beta(model). 在提供的示例中,这将是:

library("MASS")
nb = glm.nb(responseCountVar ~ predictor1 + predictor2 + 
  predictor3, data=myData, control=glm.control(maxit=125))
summary(nb)

library(QuantPsyc)
lm.beta(nb)