Jak mogę użyć bety regresji logistycznej + surowych danych, aby uzyskać prawdopodobieństwa

17

Mam dopasowany model (z literatury). Mam również surowe dane dla zmiennych predykcyjnych.

Jakie równanie powinienem zastosować, aby uzyskać prawdopodobieństwa? Zasadniczo, jak połączyć surowe dane i współczynniki, aby uzyskać prawdopodobieństwa?

użytkownik333
źródło

Odpowiedzi:

15

Oto odpowiedź zastosowanego badacza (przy użyciu pakietu statystyk R).

Najpierw stwórzmy dane, tzn. Symuluję dane dla prostego dwuwymiarowego modelu regresji logistycznej :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)

Predyktor xjest zmienną dychotomiczną:

> 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

Po drugie, oszacuj przecięcie ( ) i nachylenie ( β 1 ). Jak widać przecięcie wynosi β 0 = - 0,8690, a nachylenie wynosi β 1 = - 1,0769 .β0β1β0=0.8690β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)

[...]

Po trzecie, R, jak większość pakietów statystycznych, może obliczyć dopasowane wartości, tj. Prawdopodobieństwa. Użyję tych wartości jako odniesienia.

> ## Save the fitted values
> glm.fitted <- fitted(glm.mod)

xβ0β1 ). Teraz obliczmy logi i zapisz te dopasowane wartości w glm.rcdm:

> ## "Raw data + coefficients" method (RDCM)
## logit = -0.8690 + (-1.0769) * x
glm.rdcm <- -0.8690 + (-1.0769)*x

Ostatnim krokiem jest porównanie dopasowanych wartości na podstawie funkcji R fitted( glm.fitted) i mojego „ręcznego” podejścia ( logit2prop.glm.rdcm). Moja własna funkcja logit2prop(patrz pierwszy krok) przekształca logi w prawdopodobieństwa:

> ## 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
źródło
6
Pamiętaj, że glm(y ~ x)nie daje to regresji logistycznej, musisz ustawić family=binomial(link="logit"). Zauważ, że wynik mówi Dispersion parameter for gaussian family, nie binomial family. Jeśli zrobisz to dobrze, fitted(glm.mod)faktycznie zwraca szacunkowe prawdopodobieństwa, a nie logi. Dostajesz logi z predict(glm.mod, type="link").
caracal
Aua! Naprawiłem to. Wielkie dzięki, @caracal, za poprawienie mnie! To jest naprawdę krępujące (jest jeszcze bardziej krępujące, ponieważ podałem już poprawną odpowiedź w innym wątku SO ).
Bernd Weiss,
1
ramię pakietu ma funkcję invlogit, która jest funkcją logit2prop.
Manoel Galdino,
Czy nie powinniśmy uzyskać dokładnie takich samych liczb dla glm.fittedi logit2prop.glm.rdcm.? Istnieje kilka bardzo małych różnic. Nie mogłem zrozumieć, dlaczego nie mamy dokładnie takich samych liczb w twoim przykładzie. Kiedy sprawdzę; library(arm); data.frame(logit2prop(glm.rdcm), invlogit(glm.rdcm))daje dokładnie takie same wyniki dla logit2propi invlogit. Dlatego też pytam dlaczego glm.fittedi invlogitnie zwracam dokładnie tych samych liczb?
Erdogan CEVHER
20

f:xlogx1xg:xexpx1+expx .

π , prawdopodobieństwo sukcesu:

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

πg po prawej stronie:

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

ocram
źródło
Co powiesz na porządkową regresję logistyczną? Jaka byłaby wówczas logika?
user333,
@ user333: Cóż ... Nie grałem dużo z reginalną regresją logistyczną ... ale myślę, że używa się tej samej funkcji link. W każdym razie logika jest taka sama: odwróć funkcję link, aby uzyskać zmienną odpowiedzi ...
ocram
tak ... ale skąd mam wiedzieć, które prawdopodobieństwa są mapowane na które kategorie docelowe?
user333
@ user333, twoje pytanie dotyczyło regresji logistycznej, jeśli chcesz również odpowiedzi na temat regresji porządkowej, dodaj ją do pytania.
mpiktas