23 votos

Computación en intervalos de predicción para la regresión logística

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

Me aconsejaron que siga los procedimientos de Collett del Modelado de Datos Binarios, 2ª Ed p.98-99. Después de la aplicación de este procedimiento y su comparación con R predict.glm, yo realmente creo que este libro es mostrar el procedimiento para calcular los intervalos de confianza, no de intervalos de predicción.

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

Me gustaría saber: ¿cómo puedo ir desde aquí a la producción de 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')])

9voto

Eero Puntos 1612

Intervalos de predicción predecir donde la respuesta real de los valores de datos se prevé para el otoño con una determinada probabilidad. Dado que los valores posibles de la respuesta de un modelo logístico están restringidos a 0 y 1, el 100% de intervalo de predicción es, por tanto,$ 0 <= y <= 1 $. Ningún otro intervalos realmente sentido para la predicción con regresión logística. Ya que siempre es el mismo intervalo de tiempo que por lo general no es lo suficientemente interesante como para generar o discutir.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X