Đóng góp của mỗi hiệp phương sai cho một dự đoán duy nhất trong mô hình hồi quy logistic


8

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.

Câu trả lời:


10

Bạn có thể sử dụng predicthàm trong R. Gọi nó với type='terms'và nó sẽ cung cấp cho bạn sự đóng góp của từng thuật ngữ trong mô hình (hệ số nhân với giá trị biến). Điều này sẽ được trên thang điểm tỷ lệ cược.

Một tùy chọn khác là sử dụng TkPredictchức năng từ gói Dạy học. Điều này sẽ hiển thị biểu đồ của giá trị dự đoán so với một trong các dự đoán, sau đó cho phép người dùng thay đổi tương tác giá trị của các dự đoán khác nhau để xem điều đó ảnh hưởng đến dự đoán như thế nào.


1
Tôi dự đoán các thuật ngữ 'điều khoản' là trung tâm. Bạn có biết làm thế nào điều này được thực hiện?
dave

4
Các predict.glmchức năng gọi là predict.lmchức năng, trong đó có một phần trong đó là nếu có một đánh chặn sau đó mỗi cột của ma trận mô hình có trừ vào nó trước khi được nhân với hệ số vector trung bình của nó.
Greg Snow
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.