Come posso utilizzare beta di regressione logistica + dati grezzi per ottenere le probabilità


17

Ho un modello montato (dalla letteratura). Ho anche i dati grezzi per le variabili predittive.

Qual è l'equazione che dovrei usare per ottenere le probabilità? Fondamentalmente, come posso combinare dati grezzi e coefficienti per ottenere le probabilità?

Risposte:


15

Ecco la risposta del ricercatore applicato (utilizzando il pacchetto statistico R).

Innanzitutto, creiamo alcuni dati, ovvero sto simulando i dati per un semplice modello di regressione logistica bivariata log(p1-p)=β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)

Il predittore xè una variabile dicotomica:

> 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

In secondo luogo, stimare l'intercetta ( β0 ) e la pendenza ( β1 ). Come puoi vedere, l'intercetta è β0=-0,8690 e la pendenza è β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)

[...]

Terzo, R, come la maggior parte dei pacchetti statistici, può calcolare i valori adattati, cioè le probabilità. Userò questi valori come riferimento.

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

Xβ0β1glm.rcdm

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

Il passaggio finale è un confronto dei valori adattati basati su fittedR'sfunction ( glm.fitted) e il mio approccio "fatto a mano" ( logit2prop.glm.rdcm). La mia funzione logit2prop(vedi primo passaggio) converte i log in probabilità:

> ## 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

6
Nota che glm(y ~ x)non ti dà una regressione logistica, devi impostare family=binomial(link="logit"). Nota che l'output dice di Dispersion parameter for gaussian familyno binomial family. Se lo fai nel modo giusto, fitted(glm.mod)restituisce effettivamente le probabilità stimate, non i logit. Ottieni i logit con predict(glm.mod, type="link").
Caracal,

Aua! L'ho risolto. Grazie mille, @caracal, per avermi corretto! Questo è davvero imbarazzante (è ancora più imbarazzante poiché ho già dato la risposta corretta in un altro thread SO ).
Bernd Weiss,

1
il pacchetto arm ha la funzione invlogit, che è la tua funzione logit2prop.
Manoel Galdino,

Non avremmo dovuto ottenere esattamente gli stessi numeri per glm.fittede logit2prop.glm.rdcm.? Ci sono alcune differenze molto piccole. Non sono riuscito a capire perché non abbiamo esattamente gli stessi numeri nel tuo esempio. Quando controllo; library(arm); data.frame(logit2prop(glm.rdcm), invlogit(glm.rdcm))produce esattamente gli stessi risultati per logit2prope invlogit. Quindi, allo stesso modo, chiedo perché glm.fittede invlogitnon restituisco esattamente gli stessi numeri?
Erdogan CEVHER,

20

f:XlogX1-Xg:XexpX1+expX

π

f(π)=β0+X1β1+X2β2+...

πg

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


Che ne dici della regressione logistica ordinale? Quale sarebbe la logica allora?
user333

@ user333: Beh ... non ho giocato molto con la regressione logistica ordinale ... ma penso che si usi la stessa funzione di collegamento. In ogni caso, la logica è la stessa: invertire la funzione di collegamento per ottenere la variabile di risposta ...
ocram

sì ... ma come faccio a sapere quali probabilità sono associate a quali categorie target?
user333

@ user333, la tua domanda riguardava la regressione logistica, se vuoi risposte anche sulla regressione ordinale, aggiungi quella alla domanda.
mpiktas,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.