Ví dụ, giả sử rằng chúng ta có mô hình hồi quy logistic đưa ra xác suất bệnh nhân sẽ phát triển một căn bệnh cụ thể dựa trên nhiều biến số.
Chúng ta có thể có được một ý tưởng về độ lớn và hướng của hiệu ứng của mỗi hiệp phương nói chung bằng cách kiểm tra các hệ số của mô hình và xem xét sự thay đổi trong tỷ lệ cược.
Điều gì sẽ xảy ra nếu chúng ta muốn biết cho một bệnh nhân duy nhất những yếu tố rủi ro lớn nhất của anh ấy / cô ấy / những yếu tố lớn nhất có lợi cho anh ấy hoặc cô ấy. Tôi đặc biệt quan tâm đến những điều mà bệnh nhân thực sự có thể làm gì đó.
Cách tốt nhất để làm việc này là gì?
Cách tôi hiện đang xem xét được ghi lại trong mã R sau (lấy từ chuỗi này ):
#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')])
Tôi đang xem xét bổ sung
this.student.prediction.list <- this.student.predictors * coef(data.model)
và cố gắng lấy thông tin ra khỏi các phần bổ sung riêng lẻ của tổng số đó là ước tính xác suất, nhưng tôi không chắc làm thế nào để làm điều đó.
Tôi có thể nhìn vào
- Những biến nào đóng góp tuyệt đối lớn nhất cho ước tính xác suất và lấy đó là những yếu tố rủi ro lớn nhất.
- Biến nào khác nhau bởi số tiền lớn nhất so với tỷ lệ trung bình của chúng, nghĩa là xem tỷ lệ nào mà mỗi biến đóng góp cho ước tính xác suất trung bình và xem biến nào khác với tỷ lệ này theo số tiền lớn nhất trong quan sát cụ thể này
- Một sự kết hợp giữa chúng: cân bằng sự khác biệt tuyệt đối giữa tỷ lệ trung bình và tỷ lệ quan sát theo tỷ lệ trung bình và lấy các biến đó với các giá trị trọng số lớn nhất
Điều nào trong số này có ý nghĩa nhất? Bất kỳ cách tiếp cận nào trong số này sẽ là một cách hợp lý để trả lời câu hỏi?
Ngoài ra, tôi muốn biết làm thế nào tôi có thể có được khoảng tin cậy cho các đóng góp cộng gộp của từng hiệp phương sai cho ước tính xác suất.