Đầu ra của dự báo hồi quy logistic


14

Tôi đã tạo Hồi quy logistic bằng mã sau:

full.model.f = lm(Ft_45 ~ ., LOG_D)
base.model.f = lm(Ft_45 ~ IP_util_E2pl_m02_flg)
step(base.model.f, scope=list(upper=full.model.f, lower=~1),
     direction="forward", trace=FALSE)

Sau đó tôi đã sử dụng đầu ra để tạo ra một mô hình cuối cùng:

final.model.f = lm(Ft_45 ~ IP_util_E2pl_m02_flg + IP_util_E2_m02_flg + 
                           AE_NumVisit1_flg + OP_NumVisit1_m01_flg + IP_TotLoS_m02 + 
                           Ft1_45 + IP_util_E1_m05_flg + IP_TotPrNonElecLoS_m02 + 
                           IP_util_E2pl_m03_flg + LTC_coding + OP_NumVisit0105_m03_flg +
                           OP_NumVisit11pl_m03_flg + AE_ArrAmb_m02_flg)

Sau đó, tôi đã dự đoán kết quả cho một tập hợp dữ liệu khác bằng cách sử dụng chức năng dự đoán:

log.pred.f.v <- predict(final.model.f, newdata=LOG_V)

Tôi đã có thể sử dụng thiết lập đường cong ROC vừa ý và tạo một bảng để thiết lập độ nhạy và độ đặc hiệu mang lại cho tôi các phản hồi mà tôi mong đợi.

Tuy nhiên, những gì tôi đang cố gắng làm là thiết lập cho mỗi hàng dữ liệu xác suất của Ft_45 là 1. Nếu tôi nhìn vào đầu ra của log.pred.fv, tôi nhận được, ví dụ:

1 -0.171739593    
2 -0.049905948    
3 0.141146419    
4 0.11615669    
5 0.07342591    
6 0.093054334    
7 0.957164383    
8 0.098415639    
.
.
.
104 0.196368229    
105 1.045208447    
106 1.05499112

Vì tôi chỉ nắm bắt được dự kiến ​​về những gì tôi đang làm, tôi đang đấu tranh để hiểu làm thế nào để giải thích giá trị âm và cao hơn 1 như tôi mong đợi một xác suất nằm trong khoảng từ 0 đến 1.

Vì vậy, câu hỏi của tôi là tôi chỉ thiếu một bước mà tôi cần phải chuyển đổi đầu ra hoặc tôi đã hoàn toàn sai. Cảm ơn bạn trước bất kỳ sự giúp đỡ nào bạn có thể cung cấp.

Câu trả lời:


23

Đầu tiên, có vẻ như bạn đã xây dựng mô hình hồi quy tuyến tính thông thường, không phải mô hình hồi quy logistic. Để xây dựng mô hình hồi quy logistic, bạn cần sử dụng glm()với family="binomial" , không lm().

x1,x2x3y

logit <- glm(y~x1+x2+x3,family="binomial")

β0,β1,β2β3

Nếu bạn sau đó làm predict(logit), R sẽ tính toán và trả lại b0 + b1*x1 + b2*x2 + b3*x3.

y= =tôiog(p1-p)= =β0+β1x1+β2x2+β3x3

p

Trong R, bạn có thể làm một cái gì đó như thế này:

pred <- predict(logit,newdata=data) #gives you b0 + b1x1 + b2x2 + b3x3
probs <- exp(pred)/(1+exp(pred)) #gives you probability that y=1 for each observation

Cảm ơn bạn rất nhiều, trước tiên là đã sửa mã của tôi và thứ hai là giải thích làm thế nào để có được xác suất trong R. Tôi đã cho nó đi và nó hoạt động hoàn hảo. Tôi ước tôi đã hỏi vài tuần trước !!
SeBee

1
Có thể được rút ngắn bằng probs <- exp(predict(logit, type = "response" , newdata=data)hoặc ít nhất `probs <- 1 / (1 + exp (-pred))
snoram

11

Nhìn vào tài liệu của predict.glm, có vẻ như dễ dàng như sử dụng một tham số phụ trong predictcuộc gọi:

 type = "response"

Xem tài liệu:

loại - loại dự đoán cần thiết. Mặc định là trên thang đo của các yếu tố dự đoán tuyến tính; "phản hồi" thay thế là trên thang đo của biến phản ứng. Do đó, đối với mô hình nhị thức mặc định, các dự đoán mặc định là tỷ lệ cược log (xác suất theo thang đo logit) và type = "reply" đưa ra xác suất dự đoán. Tùy chọn "thuật ngữ" trả về một ma trận đưa ra các giá trị phù hợp của từng thuật ngữ trong công thức mô hình theo thang dự báo tuyến tính. Giá trị của đối số này có thể được viết tắt

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.