我正在研究本书第二版中的示例 7.3.1广义线性模型简介在第7.3 节剂量响应模型中。此示例适用于以下数据的简单逻辑回归模型:
这似乎很容易。但是,我在为这个例子计算的偏差统计中遇到了问题。以下是我的 R 代码,它将重现偏差统计,就像书中的这个例子一样。
#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
特别是,该值包含:
未定义
这是同意这一点的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 在后台做了什么来获得?
(注意这本书很可能没有使用 R 来获得这个值,但两者都同意)
谢谢!
编辑:请参阅接受的答案及其评论以获得很好的解释。
如果您碰巧通过 R 中的公式计算偏差(您可能不应该mle_beet$deviance
为您显示这个),您可以替换-Inf
或Nan
在单个操作产生的每个向量中。以下适用于此示例:
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