glm R中的空偏差

机器算法验证 r 越轨
2022-04-10 07:30:02

这是一个关于在有和没有截距的简单泊松模型中计算零偏差的差异的问题。

如果

y = c(2,3,6,7,8,9,10,12,15)
x = c(-1, -1, 0, 0, 0, 0, 1, 1, 1)

glm(y~x, family = poisson)

# Call:  glm(formula = y ~ x, family = poisson)
# 
# Coefficients:
# (Intercept)            x  
#      1.8893       0.6698  
# 
# Degrees of Freedom: 8 Total (i.e. Null);  7 Residual
# Null Deviance:      18.42 
# Residual Deviance: 2.939        AIC: 41.05

零偏差可以计算如下:

lf = sum(y * log(y) - y - log(factorial(y)))
ln = sum(y * log(mean(y)) - mean(y) - log(factorial(y)))

2*(lf - ln)

# [1] 18.42061

如果我在没有截距的情况下拟合模型:

glm(y~x - 1, family = poisson)

# Call:  glm(formula = y ~ x - 1, family = poisson)
# 
# Coefficients:
#     x  
# 2.373  
# 
# Degrees of Freedom: 9 Total (i.e. Null);  8 Residual
# Null Deviance:      191.9 
# Residual Deviance: 94.74        AIC: 130.9

零偏差现在是 191.9。

有人可以告诉我如何计算这个模型的零偏差 - 我的印象是它与截距模型相同,即单个参数等于平均值​​,但显然不是。

我想我错误地假设空模型在两种情况下都是相同的。是不是还是我犯了一个愚蠢的错误?实际上,我以前从未详细考虑过这个案例,显然我的知识在某处存在差距。

我可以得到如下的空偏差:

glm(y~1-1, family=poisson)

# Call:  glm(formula = y ~ 1 - 1, family = poisson)
# 
# No coefficients
# 
# Degrees of Freedom: 9 Total (i.e. Null);  9 Residual
# Null Deviance:      191.9
# Residual Deviance: 191.9        AIC: 226

但我不知道这个模型是什么。

抱歉,如果之前已经回答过这个问题,但我见过的唯一类似问题(为什么 glm.nb 中的零偏差在相同响应变量的模型之间不同?)没有给出明确的解释。

1个回答

感谢@jbaums。

y = c(2,3,6,7,8,9,10,12,15)
x = c(-1, -1, 0, 0, 0, 0, 1, 1, 1)

对于无截距空模型,我们有: 导致以下空模型似然项: 或对数似然项: 空模型的对数似然是这些项的总和:

YPoisson(1)
L(y)=exp(1)/y!
l(y)=1log(y!)

lnull = sum(-1 - log(factorial(y))) 

像往常一样,饱和模型的对数似然是:

lf = sum(y * log(y) - y - log(factorial(y))) 

所以零偏差是:

2*(lf - lnull) 
# [1] 191.8602