Inilah jawaban peneliti terapan (menggunakan paket statistik R).
Pertama, mari kita membuat beberapa data, yaitu saya simulasi data untuk bivariat sederhana regresi logistik model yang log(p1−p)=β0+β1⋅x:
> 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)
Prediktor x
adalah variabel dikotomis:
> 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
Kedua, perkirakan intersep ( β0 ) dan kemiringan ( β1 ). Seperti yang Anda lihat, intersepnya adalah β0=−0.8690 dan kemiringannya adalah β1=−1.0769 .
> ## 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)
[...]
Ketiga, R, seperti kebanyakan paket statistik, dapat menghitung nilai yang dipasang, yaitu probabilitas. Saya akan menggunakan nilai-nilai ini sebagai referensi.
> ## Save the fitted values
> glm.fitted <- fitted(glm.mod)
Keempat, langkah ini secara langsung merujuk pada pertanyaan Anda: Kami memiliki data mentah (di sini: ) dan kami memiliki koefisien ( β 0 dan β 1 ). Sekarang, mari kita hitung log dan simpan nilai-nilai ini terpasang di :xβ0β1glm.rcdm
> ## "Raw data + coefficients" method (RDCM)
## logit = -0.8690 + (-1.0769) * x
glm.rdcm <- -0.8690 + (-1.0769)*x
Langkah terakhir adalah perbandingan nilai-nilai yang dipasang berdasarkan pada fitted
-fungsi R ( glm.fitted
) dan pendekatan "buatan tangan" saya ( logit2prop.glm.rdcm
). Fungsi saya sendiri logit2prop
(lihat langkah pertama) mengonversi log menjadi probabilitas:
> ## 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(y ~ x)
tidak memberi Anda regresi logistik, Anda harus mengaturfamily=binomial(link="logit")
. Perhatikan output mengatakanDispersion parameter for gaussian family
, bukanbinomial family
. Jika Anda melakukannya dengan benar,fitted(glm.mod)
sebenarnya mengembalikan probabilitas yang diperkirakan, bukan log. Anda mendapatkan logpredict(glm.mod, type="link")
.glm.fitted
danlogit2prop.glm.rdcm.
? Ada beberapa perbedaan yang sangat kecil. Saya tidak mengerti mengapa kami tidak memiliki angka yang persis sama dalam contoh Anda. Ketika saya memeriksa;library(arm); data.frame(logit2prop(glm.rdcm), invlogit(glm.rdcm))
menghasilkan hasil yang persis sama untuklogit2prop
daninvlogit
. Oleh karena itu, sama, saya bertanya mengapaglm.fitted
daninvlogit
tidak mengembalikan angka yang persis sama?sumber