En respuesta a esta pregunta He añadido un código R para mostrar cómo aplicar manualmente la fórmula para el cálculo de los residuos de desviación
El modelo del código es un modelo logit en el que
$$p_i := Pr(Y_i = 1) = \frac{\exp(b_0 + b_1x_i)}{1+\exp(b_0 + b_1x_i)}.$$
Defino $v_i := b_0 + b_1x_i$ de forma que el modelo pueda escribirse como
$$p_i := Pr(Y_i = 1) = \frac{\exp(v_i)}{1+\exp(v_i)}.$$
Estimando el modelo obtengo estimaciones $\hat b_0$ y $\hat b_1$ . A partir de estas estimaciones, los valores latentes previstos
$$\hat v_i := \hat b_0 + \hat b_1 x_i,$$
y, a continuación, se calculan las probabilidades previstas
$$\hat p_i =\frac{\exp(\hat v_i )}{1+\exp(\hat v_i )}.$$
A partir de estas probabilidades previstas, se aplica la fórmula de los residuos de desviación en la etapa de codificación
sign(y-pred_p) * ifelse(y==1,sqrt(-2*log(pred_p)),sqrt(-2*log(1-pred_p)))
que no es más que una aplicación de la fórmula
$d_i = \begin{cases} \sqrt{-2\ln(\hat p_i)} &\text{if } Y_i=1\\ -\sqrt{-2\ln(1-\hat p_i)} &\text{if } Y_i=0\\ \end{cases}$
# Simulate some data
N <- 1000
b0 <- 0.5
b1 <- 1
x <- rnorm(N)
v <- b0 + b1*x
p <- exp(v)/(1+exp(v))
y <- as.numeric(runif(N)<p)
# Estimate model
model <- glm(y~x,family=binomial)
summary_model <- summary(model)
summary_dev_res <- summary_model$deviance.resid
# This is the output you get:
quantile(summary_dev_res)
# Calculate manually deviance residuals
# First calculate predicted v's
pred_v <- coef(model)[1] + coef(model)[2]*x
# The calculate predicted probabilities
pred_p <- exp(pred_v)/(1+exp(pred_v))
# Apply formula for deviance residuals
dev_res <- sign(y-pred_p) * ifelse(y==1,sqrt(-2*log(pred_p)),sqrt(-2*log(1-pred_p)))
# Check that it is the same as deviance residuals returned from summary
plot(summary_dev_res,dev_res)
points(seq(-3,3,length.out=100),seq(-3,3,length.out=100),type="l",col="red",lwd=2)
# all points should be on the red line
# Also compare the quantiles ...
quantile(summary_dev_res)
quantile(dev_res)