零偏差从 mgcv::gam 更改为 family=nb

Null deviance changing from mgcv::gam with family=nb

我正在使用 mgcv::gam 拟合负二项式模型,我注意到零偏差会随着拟合的变化而变化。如果我使用 negbin 系列函数而不是 nb,问题就会消失。

下面重现了这个问题。

library(mgcv)
set.seed(3)
n <- 400
dat <- gamSim(1, n=n)
g <- exp(dat$f / 5)

## negative binomial data...
dat$y <- rnbinom(g, size=3, mu=g)
## known theta fit ...

# Now fit 3 different models
preds <- c("x1", "x2", "x3")

for (i in 1:length(preds)){
  fo <- formula(paste("y ~ x0 +", preds[i]))
  #print(fo)

  m1 <- gam(fo, data=dat, family=nb(theta=3)) # nb
  m2 <- gam(fo, data=dat, family=negbin(3))   # negbin

  print(paste(m1$null.deviance, ", ", m2$null.deviance))
}

如果我 运行 那个,我得到以下结果。

[1] "820.724580736807 ,  820.708788014928"
[1] "820.747020281717 ,  820.708788014928"
[1] "820.708788454065 ,  820.708788014928"

使用 nb 得到的 null.deviance 从 820.71 到 820.75 不等。

在这种情况下,零偏差仅发生轻微变化,但在我的另一个示例中,它发生了很大变化。

我错过了什么?

谢谢, 哈利

对于 'nb' 等“扩展族”,mgcv 使用零偏差的近似值,这很容易计算,即使对于有序分类等族也是如此,但取决于位置的平均值根据模型的响应参数。近似值是空模型的位置参数将是拟合模型下观测特定位置参数的平均值。

在下一个版本 (1.8-23) 中,这将被直接最小化单个位置参数的偏差所取代,以找到零偏差。

Simon Wood(mgcv 维护者)