的情况下,如何计算简单逻辑回归模型的偏差统计?n一世=是的一世ni=yi

机器算法验证 r 物流 越轨
2022-04-09 19:58:21

我正在研究本书第二版中的示例 7.3.1广义线性模型简介在第7.3 节剂量响应模型中。此示例适用于以下数据的简单逻辑回归模型:

在此处输入图像描述

这似乎很容易。但是,我在为这个例子计算的偏差统计中遇到了问题。以下是我的 R 代码,它将重现偏差统计,就像书中的这个例子一样。D=11.23

#original data
#copied in by row
( df <-  data.frame( 
  Trial = 1:8,
  Dose = c(1.6907, 1.7242, 1.7552, 1.7842, 1.8113, 1.8369, 1.8610, 1.8839),
  Yes = c(6, 13, 18, 28, 52, 53, 61, 60),
  No = c(59, 60, 62, 56, 63, 59, 62, 60)- c(6, 13, 18, 28, 52, 53, 61, 60),
  Total = c(59, 60, 62, 56, 63, 59, 62, 60)
) )

#Logistic Regression Model
mle_beet <- glm(cbind(Yes, No)~Dose, family=binomial(logit), data=df)
mle_beet$deviance
##

同一本书的第 5.6.1 节将二项式模型的偏差统计推导出为:

D=2i=1Nyi[loge(yiyi^)+(niyi)loge(niyiniyi^)]

然而,仔细观察给定的数据,可以看出对于最后一行,杀死的甲虫数量与甲虫总数相同()。这意味着总和的最后一部分是:n8=y8D

y8loge(y8y8^)+(n8y8)loge(n8y8n8y8^)=60loge(60y8^)+(0)loge(0n8y8^)

特别是,该值包含:

0loge(0)=0()= 未定义

这是同意这一点的R代码:

sum( 2*(df$Yes*(log(df$Yes/(mle_beet$fitted.values*df$Total))) + (df$Total-df$Yes)*
log((df$Total-df$Yes)/(df$Total-mle_beet$fitted.values*df$Total) ) ) )

我的问题是:当时计算偏差统计的数学推理是什么?这本书和 R 在后台做了什么来获得ni=yiD=11.23

(注意这本书很可能没有使用 R 来获得这个值,但两者都同意)

谢谢!

编辑:请参阅接受的答案及其评论以获得很好的解释。

如果您碰巧通过 R 中的公式计算偏差(您可能不应该mle_beet$deviance为您显示这个),您可以替换-InfNan在单个操作产生的每个向量中。以下适用于此示例:

x <- df$Yes*(log(df$Yes/(mle_beet$fitted.values*df$Total))) 
x[is.na(x) | x==-Inf ] <- 0 #only in a case $n_i = y_i$ 
y <- (df$Total-df$Yes)*
    log((df$Total-df$Yes)/(df$Total-mle_beet$fitted.values*df$Total) ) ) 
y[is.na(y) | y==-Inf ] <- 0 #only in a case $n_i = y_i$ 

sum(x+y)*2 #the deviance
1个回答

在计算二项式偏差时,我们使用的约定。0log(0)=limx0xlog(x)=0

为了理解为什么这个约定在这里有意义,从伯努利似然函数(the一般二项式情况只是此处主要思想的扩展),其中为零或一。i=1npiyi(1pi)1yiyi

现在,当我们谈论饱和模型(其可能性是偏差统计的一部分)时,我们指的是每个的模型。但是很明显,这里的可能性应该等于 1(我们的模型说数据肯定会像它们那样出现),这意味着我们应该将视为其本身等于 1,因此为了保持一致性,我们应该将的对数等于零。p^i=yii0000