Digamos, por ejemplo, que tenemos un modelo de regresión logística que genera la probabilidad de que un paciente desarrolle una enfermedad particular basada en muchas covariables.
Podemos tener una idea de la magnitud y dirección del efecto de cada covariable en general examinando los coeficientes del modelo y considerando el cambio en la razón de posibilidades.
¿Qué sucede si queremos saber para un solo paciente cuáles son sus mayores factores de riesgo / los mayores factores a su favor? Estoy particularmente interesado en aquellos sobre los que el paciente realmente podría hacer algo.
¿Cuál es la mejor manera de hacer esto?
La forma en que estoy considerando actualmente se captura en el siguiente código R (tomado 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 considerando mirar adicionalmente
this.student.prediction.list <- this.student.predictors * coef(data.model)
y tratando de obtener la información de los sumandos individuales de la suma, que es la estimación de probabilidad, pero no estoy seguro de cómo hacerlo.
Podría mirar
- Qué variables hacen la mayor contribución absoluta a la estimación de probabilidad y las consideran los mayores factores de riesgo.
- ¿Qué variables difieren en la mayor cantidad de su proporción media?
- Una combinación de los mismos: ponderar la diferencia absoluta entre la proporción media y la proporción observada por la proporción media y tomar aquellas variables con los mayores valores ponderados
¿Cuál de estos tiene más sentido? ¿Alguno de estos enfoques sería una forma razonable de responder la pregunta?
Además, me gustaría saber cómo podría obtener intervalos de confianza para las contribuciones aditivas de covariables individuales a la estimación de probabilidad.
predict.glm
función llama a lapredict.lm
función, que tiene una sección que, si hay una intersección, cada columna de la matriz modelo tiene su media restada antes de multiplicarse por el vector de coeficiente.