Calcular intervalos de predicción para regresión logística

20

Me gustaría entender cómo generar intervalos de predicción para estimaciones de regresión logística.

Me aconsejaron que siguiera los procedimientos en Collett's Modeling Binary Data , 2nd Ed p.98-99. Después de implementar este procedimiento y compararlo con los R predict.glm, en realidad creo que este libro muestra el procedimiento para calcular los intervalos de confianza , no los intervalos de predicción.

La implementación del procedimiento de Collett, con una comparación con predict.glm, se muestra a continuación.

Me gustaría saber: ¿cómo hago para producir un intervalo de predicción en lugar de un intervalo de confianza?

#Derived from Collett 'Modelling Binary Data' 2nd Edition p.98-99
#Need reproducible "random" numbers.
seed <- 67

num.students <- 1000
which.student <- 1

#Generate data frame with made-up data from students:
set.seed(seed) #reset seed
v1 <- rbinom(num.students,1,0.7)
v2 <- rnorm(length(v1),0.7,0.3)
v3 <- rpois(length(v1),1)

#Create df representing students
students <- data.frame(
    intercept = rep(1,length(v1)),
    outcome = v1,
    score1 = v2,
    score2 = v3
)
print(head(students))

predict.and.append <- function(input){
    #Create a vanilla logistic model as a function of score1 and score2
    data.model <- glm(outcome ~ score1 + score2, data=input, family=binomial)

    #Calculate predictions and SE.fit with the R package's internal method
    # These are in logits.
    predictions <- as.data.frame(predict(data.model, se.fit=TRUE, type='link'))

    predictions$actual <- input$outcome
    predictions$lower <- plogis(predictions$fit - 1.96 * predictions$se.fit)
    predictions$prediction <- plogis(predictions$fit)
    predictions$upper <- plogis(predictions$fit + 1.96 * predictions$se.fit)


    return (list(data.model, predictions))
}

output <- predict.and.append(students)

data.model <- output[[1]]

#summary(data.model)

#Export vcov matrix 
model.vcov <- vcov(data.model)

# Now our goal is to reproduce 'predictions' and the se.fit manually using the vcov matrix
this.student.predictors <- as.matrix(students[which.student,c(1,3,4)])

#Prediction:
this.student.prediction <- sum(this.student.predictors * coef(data.model))
square.student <- t(this.student.predictors) %*% this.student.predictors
se.student <- sqrt(sum(model.vcov * square.student))

manual.prediction <- data.frame(lower = plogis(this.student.prediction - 1.96*se.student), 
    prediction = plogis(this.student.prediction), 
    upper = plogis(this.student.prediction + 1.96*se.student))

print("Data preview:")
print(head(students))
print(paste("Point estimate of the outcome probability for student", which.student,"(2.5%, point prediction, 97.5%) by Collett's procedure:"))
manual.prediction
print(paste("Point estimate of the outcome probability for student", which.student,"(2.5%, point prediction, 97.5%) by R's predict.glm:"))    
print(output[[2]][which.student,c('lower','prediction','upper')])
carbocatión
fuente
Una pregunta básica, ¿por qué se asume sqrt (sum (model.vcov * square.student)) como el error estándar? ¿No es la desviación estándar y debe dividirse por sqrt (n)? En caso afirmativo, ¿qué n debería usarse, n para ajustarse al modelo o n del nuevo marco de datos utilizado para predecir?
Rafael

Respuestas:

6

0 0<=y<=1

Greg Snow
fuente
66
Estoy buscando un intervalo de predicción del 95% de una predicción que está en el espacio de probabilidades de registro. Más tarde lo transformo en espacio de probabilidad. Un intervalo de predicción del 100% nunca sería interesante para ningún procedimiento, ¿verdad? Por ejemplo, un intervalo de predicción del 100% para la regresión lineal incluiría -Inf a Inf ... En cualquier caso, como puede ver en mi código, el intervalo de predicción se calcula en el espacio de probabilidades de registro, que luego se transforma en espacio de probabilidad . Así que no creo que mi pregunta no tenga sentido.
carbocation
2
Las probabilidades de registro se pueden convertir en una probabilidad y puede calcular un intervalo de confianza en la probabilidad (o las probabilidades de registro). Pero hay un intervalo de predicción en la variable de respuesta que es 0 o 1. Si su resultado es la supervivencia con 0 = muerto y 1 = vivo, entonces puede predecir la probabilidad de estar vivo para un conjunto dado de covariables y calcular un intervalo de confianza en esa probabilidad Pero el resultado es 0/1, no puede tener un paciente con un 62% de vida, tiene que ser 0 o 1, por lo que los únicos intervalos de predicción posibles son 0-0, 0-1 y 1-1 (que es por qué la mayoría de las personas se apegan a los intervalos de confianza).
Greg Snow
8
Si tiene una situación en la que la respuesta es binomial (que podría ser un agregado de 0-1s en las mismas condiciones), entonces un intervalo de predicción puede tener sentido.
Glen_b: reinstala a Monica
77
La regresión logística es la regresión de una probabilidad, tratando de modelar la probabilidad de algún evento en función de las variables regresoras. Los intervalos de predicción en esta configuración se toman como intervalos en la escala de probabilidad o en la escala de probabilidades de registro, por lo que son senes perfectos.
kjetil b halvorsen
2
@Cesar, la fórmula del intervalo de predicción se deriva asumiendo que Y normalmente se distribuye alrededor de la línea, pero en la regresión logística no tenemos una distribución normal, tenemos un Bernoulli o Binomial. La aplicación de las fórmulas en esa página conduciría a un intervalo de confianza (ya puede hacerlo) o a un intervalo de confianza ampliado artificialmente que no cumple con la definición de un intervalo de predicción (predicción de resultados reales en la escala de resultados original). Como Glen_b mencionó, un intervalo de predicción puede tener sentido si el resultado es realmente binomial.
Greg Snow