回归模型的偏差

机器算法验证 r 回归 越轨
2022-04-10 20:46:03

模型的偏差定义为: D=2(loglikelihood(model)loglikelihood(saturated.model))

所以我尝试将这个公式的结果与不同模型的 deviance() 函数的输出进行比较:

线性回归模型:

> ?cats
> m1=lm(Hwt~Bwt+Sex,data=cats)
> m1.saturated=lm(Hwt~factor(1:nrow(cats)),data=cats)
> deviance(m1)
[1] 299
> sum(residuals(m1)^2)
[1] 299
> deviance(m1.saturated)
[1] 0
> as.numeric(-2*(logLik(m1)-logLik(m1.saturated)))
[1] Inf

299 Inf 有问题

GLM:泊松回归

> x = rnorm(10)
> y = rpois(10,lam=exp(1 + 2*x))
> m2 = glm(formula = y ~ x, family = poisson)
> m2.saturated <- glm(y ~ factor(1:10),family=poisson)
> deviance(m2) 
[1] 14
> deviance(m2.saturated) 
[1] 4.5e-10
> as.numeric(-2*(logLik(m2)-logLik(m2.saturated))) 
[1] 14

14 = 14
好的,它有效!

GLM:伽玛回归

 > cement <- read.table("cement.dat", col.names = c("time","resistance"), dec = ",") 
 > attach(cement)
 > m3 <- glm(resistance ~ I(1/time), family = Gamma)
 > m3.saturated <- glm(resistance ~ factor(1:nrow(cement)), family = Gamma)
 > deviance(m3)
 [1] 0.16
 > deviance(m3.saturated)
 [1] 9.3e-17
 > as.numeric(-2*(logLik(m3)-logLik(m3.saturated)))
 [1] 758

0.16 758 一定有什么地方出错了

结果不应该一样吗?

1个回答

我还试图了解应如何将色散参数包含在公式中以计算线性模型与其对数似然的偏差,并且我在有关 GLM 的书籍中找不到任何参考资料。这对我来说真的是个谜。即使这是一个非常基本的观点,没有人回答的事实似乎表明它对许多人来说是模糊的......

我的小贡献:由于饱和模型的对数似然是 Inf,我们也可以从一个更简单的问题开始,计算两个非饱和模型之间的偏差差异。但这仍然不起作用:

library(MASS)
data(cats)
m0=lm(Hwt~Bwt,data=cats)
m1=lm(Hwt~Bwt+Sex,data=cats)
deviance(m1)-deviance(m0)
#[1] -0.1548002
as.numeric(-2*(logLik(m1)-logLik(m0)))
#[1] -0.07443916

对我来说,色散参数似乎很明显应该包含在公式中,但是如何?首先,对色散有两种估计,一种用于 m1,另一种用于 m2。