Tôi có một mô hình được trang bị (từ các tài liệu). Tôi cũng có dữ liệu thô cho các biến dự đoán.
Phương trình tôi nên sử dụng để có xác suất là gì? Về cơ bản, làm cách nào để kết hợp dữ liệu thô và hệ số để có xác suất?
Tôi có một mô hình được trang bị (từ các tài liệu). Tôi cũng có dữ liệu thô cho các biến dự đoán.
Phương trình tôi nên sử dụng để có xác suất là gì? Về cơ bản, làm cách nào để kết hợp dữ liệu thô và hệ số để có xác suất?
Câu trả lời:
Dưới đây là câu trả lời của nhà nghiên cứu ứng dụng (sử dụng gói thống kê R).
Trước tiên, hãy tạo một số dữ liệu, tức là tôi đang mô phỏng dữ liệu cho mô hình hồi quy logistic bivariate đơn giản :
> set.seed(3124)
>
> ## Formula for converting logit to probabilities
> ## Source: http://www.statgun.com/tutorials/logistic-regression.html
> logit2prop <- function(l){exp(l)/(1+exp(l))}
>
> ## Make up some data
> y <- rbinom(100, 1, 0.2)
> x <- rbinom(100, 1, 0.5)
Công cụ dự đoán x
là một biến nhị phân:
> x
[1] 0 1 1 1 1 1 0 1 0 1 0 1 0 0 1 1 1 0 1 1 1 1 1 1 0 0 1 1 1 1 0 0 1 0 0 1 0 0 0 1 1 1 0 1 1 1 1
[48] 1 1 0 1 0 0 0 0 1 0 0 1 1 0 0 0 0 1 0 0 1 1 1 0 0 1 0 0 0 0 1 1 0 1 0 1 0 1 1 1 1 1 0 1 0 0 0
[95] 1 1 1 1 1 0
Thứ hai, ước tính đánh chặn ( ) và độ dốc ( ). Như bạn có thể thấy, phần chặn là và độ dốc là .
> ## Run the model
> summary(glm.mod <- glm(y ~ x, family = "binomial"))
[...]
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -0.8690 0.3304 -2.630 0.00854 **
x -1.0769 0.5220 -2.063 0.03910 *
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
(Dispersion parameter for binomial family taken to be 1)
[...]
Thứ ba, R, giống như hầu hết các gói thống kê, có thể tính toán các giá trị được trang bị, tức là xác suất. Tôi sẽ sử dụng các giá trị này làm tài liệu tham khảo.
> ## Save the fitted values
> glm.fitted <- fitted(glm.mod)
Thứ tư, bước này trực tiếp đề cập đến câu hỏi của bạn: Chúng tôi có dữ liệu thô (ở đây: ) và chúng tôi có các hệ số ( và ). Bây giờ, hãy tính toán các bản ghi và lưu các giá trị được trang bị này vào :glm.rcdm
> ## "Raw data + coefficients" method (RDCM)
## logit = -0.8690 + (-1.0769) * x
glm.rdcm <- -0.8690 + (-1.0769)*x
Bước cuối cùng là so sánh các giá trị được trang bị dựa trên R's fitted
-feft ( glm.fitted
) và phương pháp "làm bằng tay" của tôi ( logit2prop.glm.rdcm
). Hàm riêng của tôi logit2prop
(xem bước đầu tiên) chuyển đổi nhật ký thành xác suất:
> ## Compare fitted values and RDCM
> df <- data.frame(glm.fitted, logit2prop(glm.rdcm))
> df[10:25,]
> df[10:25,]
glm.fitted logit2prop.glm.rdcm.
10 0.1250000 0.1250011
11 0.2954545 0.2954624
12 0.1250000 0.1250011
13 0.2954545 0.2954624
14 0.2954545 0.2954624
15 0.1250000 0.1250011
16 0.1250000 0.1250011
17 0.1250000 0.1250011
18 0.2954545 0.2954624
19 0.1250000 0.1250011
20 0.1250000 0.1250011
21 0.1250000 0.1250011
22 0.1250000 0.1250011
23 0.1250000 0.1250011
24 0.1250000 0.1250011
25 0.2954545 0.2954624
glm.fitted
và logit2prop.glm.rdcm.
? Có một số khác biệt rất nhỏ. Tôi không thể hiểu tại sao chúng ta không có chính xác những con số giống nhau trong ví dụ của bạn. Khi tôi kiểm tra; library(arm); data.frame(logit2prop(glm.rdcm), invlogit(glm.rdcm))
tạo ra kết quả chính xác như nhau cho logit2prop
và invlogit
. Do đó, bằng nhau, tôi hỏi tại sao glm.fitted
và invlogit
trả lại không phải là cùng một số chính xác?
Do đó, nếu bạn muốn bạn cần đánh giá ở phía bên tay phải:
glm(y ~ x)
không cung cấp cho bạn một hồi quy logistic, Bạn phải thiết lậpfamily=binomial(link="logit")
. Lưu ý đầu ra nóiDispersion parameter for gaussian family
, khôngbinomial family
. Nếu bạn làm đúng,fitted(glm.mod)
thực sự trả về xác suất ước tính, không phải là nhật ký. Bạn nhận được các bản ghi vớipredict(glm.mod, type="link")
.