이 질문에 대한 답변으로 som R 코드를 추가하여 이탈 잔차 계산을 위해 공식을 수동으로 적용하는 방법을 보여줍니다.
코드의 모델은 로짓 모델입니다.
pi:=Pr(Yi=1)=exp(b0+b1xi)1+exp(b0+b1xi).
vi:=b0+b1xi
pi:=Pr(Yi=1)=exp(vi)1+exp(vi).
b^0b^1
v^i:=b^0+b^1xi,
계산 된 다음 예상 확률이 계산됩니다.
p^i=exp(v^i)1+exp(v^i).
이러한 예측 확률을 사용하여 편차 잔차에 대한 공식이 코딩 단계에 적용됩니다.
sign(y-pred_p) * ifelse(y==1,sqrt(-2*log(pred_p)),sqrt(-2*log(1-pred_p)))
이것은 단순히 공식의 적용입니다
di={−2ln(p^i)−−−−−−−√−−2ln(1−p^i)−−−−−−−−−−−√if Yi=1if Yi=0
# 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)