Bagaimana saya bisa menggunakan beta regresi logistik + data mentah untuk mendapatkan probabilitas

17

Saya memiliki model yang pas (dari literatur). Saya juga punya data mentah untuk variabel prediktif.

Apa persamaan yang harus saya gunakan untuk mendapatkan probabilitas? Pada dasarnya, bagaimana cara menggabungkan data mentah dan koefisien untuk mendapatkan probabilitas?

pengguna333
sumber

Jawaban:

15

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(p1p)=β0+β1x:

> 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 xadalah 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
Bernd Weiss
sumber
6
Catatan yang glm(y ~ x)tidak memberi Anda regresi logistik, Anda harus mengatur family=binomial(link="logit"). Perhatikan output mengatakan Dispersion parameter for gaussian family, bukan binomial family. Jika Anda melakukannya dengan benar, fitted(glm.mod)sebenarnya mengembalikan probabilitas yang diperkirakan, bukan log. Anda mendapatkan log predict(glm.mod, type="link").
caracal
Aua! Saya telah memperbaikinya. Terima kasih banyak, @caracal, karena mengoreksi saya! Ini benar-benar memalukan (bahkan lebih memalukan karena saya sudah memberikan jawaban yang benar di utas SO lainnya ).
Bernd Weiss
1
lengan paket memiliki fungsi invlogit, yang merupakan fungsi logit2prop Anda.
Manoel Galdino
Bukankah kita seharusnya memperoleh angka yang persis sama untuk glm.fitteddan logit2prop.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 untuk logit2propdan invlogit. Oleh karena itu, sama, saya bertanya mengapa glm.fitteddan invlogittidak mengembalikan angka yang persis sama?
Erdogan CEVHER
20

f:xlogx1xg:xexpx1+expx

π

f(π)=β0+x1β1+x2β2+

πg

π=g(β0+x1β1+x2β2+)

okram
sumber
Bagaimana dengan regresi logistik ordinal? Apa yang akan menjadi logika itu?
user333
@ user333: Ya ... Saya belum banyak bermain dengan regresi logistik ordinal ... tapi saya pikir orang menggunakan fungsi tautan yang sama. Bagaimanapun, logikanya sama: membalikkan fungsi tautan untuk mendapatkan variabel respons ...
ocram
ya ... tapi bagaimana saya tahu probabilitas dipetakan ke kategori target mana?
user333
@ user333, pertanyaan Anda adalah tentang regresi logistik, jika Anda ingin jawaban tentang regresi ordinal juga, silakan tambahkan itu ke pertanyaan.
mpiktas