8 votos

Contribución de cada covariable a una sola predicción en un modelo de regresión logística

Por ejemplo, supongamos que tenemos un modelo de regresión logística que genera la probabilidad de que un paciente va a desarrollar una determinada enfermedad, basado en muchas de las covariables.

Nos podemos hacer una idea de la magnitud y la dirección del efecto de cada covariable, en general, mediante el examen de los coeficientes del modelo y teniendo en cuenta el cambio en el odds-ratio.

Lo que si queremos saber para un solo paciente cuáles son sus mayores factores de riesgo / los mayores factores en su favor. Estoy particularmente interesado en aquellos en los que el paciente podría realmente hacer algo al respecto.

¿Cuál es la mejor manera de hacer esto?

La manera en que yo estoy estudiando en la actualidad es capturada en el siguiente código R (sacado de este hilo):

#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')])

Estoy pensando en buscar, además, al

this.student.prediction.list <- this.student.predictors * coef(data.model)

y tratando de sacar la información de la persona sumandos de la suma, que es la probabilidad de estimar, pero no estoy seguro de cómo hacerlo.

Yo pude ver

  • De las variables que hacen la mayor contribución absoluta a la probabilidad de la estimación y se llevan a ser el más grande de los factores de riesgo.
  • Las variables que se diferencian por la mayor cantidad de su media de la proporción, es decir, ver en qué proporción cada variable contribuye a la probabilidad de estimar la media y ver las variables que difieren de este porcentaje, la mayor cantidad en esta observación en particular
  • Una combinación de los mismos: el peso de la diferencia absoluta entre la media de la proporción y la proporción observada por la media de la proporción y de tomar esas variables con el mayor de los valores ponderados

Cual de estos tiene más sentido? Cualquiera de estos enfoques ser una manera razonable para responder a la pregunta?

Además, me gustaría saber cómo puedo obtener los intervalos de confianza para el aditivo contribuciones individuales de las covariables para la estimación de la probabilidad.

10voto

Eero Puntos 1612

Usted puede utilizar el predict función en R. Llame a con type='terms' y se le dará la contribución de cada término en el modelo (el coeficiente de veces el valor de la variable). Esto será en el log-odds escala.

Otra opción es el uso de la TkPredict función de la TeachingDemos paquete. Esto mostrará un gráfico de la predicción de valor frente a uno de los predictores, a continuación, permitir al usuario cambiar el valor de los distintos predictores para ver cómo eso afecta a la predicción.

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