从mgcv :: gam到family = nb的空偏离变化

时间:2017-10-09 12:25:35

标签: r mgcv

我使用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不等。

在这种情况下,零偏差只会略有变化,但在另一个例子中,它变化很大。

我错过了什么?

谢谢, 哈利

1 个答案:

答案 0 :(得分:3)

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

在下一个版本(1.8-23)中,将通过直接最小化单个位置参数的偏差来替换,以找到零偏差。

Simon Wood(mgcv维护者)