Rappresentazione grafica di una curva di probabilità per un modello Logit con predittori multipli


12

Ho la seguente funzione di probabilità:

Prob=11+ez

dove

z=B0+B1X1++BnXn.

Il mio modello sembra

Pr(Y=1)=11+exp([3.92+0.014×(bid)])

Questo viene visualizzato tramite una curva di probabilità che assomiglia a quella qui sotto.

inserisci qui la descrizione dell'immagine

Sto pensando di aggiungere un paio di variabili alla mia equazione di regressione originale. Diciamo che aggiungo genere (categorico: F e M) ed età (categorico: <25 e> 26) nel modello, finisco con:

Pr(Y=1)=11+exp([3.92+0.014×(bid)+0.25×(gender)+0.15×(age)])

In RI può generare una curva di probabilità simile che mi dirà la probabilità di Y = 1 quando si tiene conto di tutti e tre i predittori. Dove mi sono perso è voglio trovare le probabilità per ogni possibile permutazione di queste variazioni.

Quindi quando bid = 1, gender = M ed età è> = 26, qual è la probabilità che Y = 1? Allo stesso modo, quando bid = 2, gender = F e age is> = 26, qual è la probabilità che Y = 1?

Voglio generare una curva di probabilità che mi permetterà di visualizzarlo.

Qualcuno può aiutare? Potrei completamente fraintendere il tipo di informazioni che si possono ricavare da un modello logit, ma per favore dimmi se sto anche fraintendendo la teoria.


Vuoi che il codice faccia questo in R, o semplicemente per capire concettualmente il problema?
gung - Ripristina Monica

Se dovessi scegliere, direi il problema concettualmente. Penso che il codice R che riesco a capire da solo.
ATMathew

2
Se ti senti a tuo agio nel risolvere lo stesso problema con la regressione ordinaria (minimi quadrati), perché non esprimere semplicemente la risposta come probabilità del log (che è solo ) e utilizzare le tecniche che conosci? B0+B1X1++BnXn
whuber

1
Certo, dai un'occhiata al pacchetto rms di @FrankHarrell (ampia documentazione è disponibile sul sito web di RMS ). Inizia con le funzioni Predict()e plot.Predict()per avere un'idea di ciò che può essere fatto (questo include la stampa di in funzione di , con impostati sui valori predefiniti, o valori fissi a scelta). Pr(Y=1|x2,,xp)x1x2,,xp
chl

Risposte:


24

Fortunatamente per te, hai solo una covariata continua. Pertanto, puoi semplicemente creare quattro (cioè 2 SEX x 2 ETÀ), ciascuno con la relazione tra BID e . In alternativa, è possibile creare una trama con quattro linee diverse (è possibile utilizzare stili di linea, pesi o colori diversi per distinguerli). È possibile ottenere queste linee previste risolvendo l'equazione di regressione in ciascuna delle quattro combinazioni per un intervallo di valori BID. p(Y=1)

Una situazione più complicata è quella in cui hai più di una covariata continua. In un caso come questo, spesso c'è una particolare covariata che è "primaria" in un certo senso. Quella covariata può essere utilizzata per l'asse X. Quindi risolvi per diversi valori pre-specificati delle altre covariate, in genere la media e +/- 1SD. Altre opzioni includono vari tipi di grafici 3D, complotti o grafici interattivi.

La mia risposta a una domanda diversa qui contiene informazioni su una serie di grafici per esplorare i dati in più di 2 dimensioni. Il tuo caso è essenzialmente analogo, tranne per il fatto che sei interessato a presentare i valori previsti del modello, anziché i valori grezzi.

Aggiornare:

Ho scritto un semplice esempio di codice in R per creare questi grafici. Consentitemi di notare alcune cose: poiché l '"azione" si svolge in anticipo, ho eseguito il BID solo attraverso 700 (ma non esitate a estenderlo al 2000). In questo esempio, sto usando la funzione che specifichi e prendo la prima categoria (cioè donne e giovani) come categoria di riferimento (che è l'impostazione predefinita in R). Come osserva @whuber nel suo commento, I modelli LR sono lineari nelle probabilità del log, quindi è possibile utilizzare il primo blocco di valori previsti e tracciare come si potrebbe fare con la regressione OLS se si sceglie. Il logit è la funzione di collegamento, che consente di connettere il modello alle probabilità; il secondo blocco converte le probabilità del registro in probabilità tramite l'inverso della funzione logit, ovvero esponenziando (trasformando in probabilità) e quindi dividendo le probabilità per 1 + probabilità. (Discuto la natura delle funzioni di collegamento e questo tipo di modello qui , se vuoi maggiori informazioni.)

BID = seq(from=0, to=700, by=10)

logOdds.F.young = -3.92 + .014*BID
logOdds.M.young = -3.92 + .014*BID + .25*1
logOdds.F.old   = -3.92 + .014*BID         + .15*1
logOdds.M.old   = -3.92 + .014*BID + .25*1 + .15*1

pY.F.young = exp(logOdds.F.young)/(1+ exp(logOdds.F.young))
pY.M.young = exp(logOdds.M.young)/(1+ exp(logOdds.M.young))
pY.F.old   = exp(logOdds.F.old)  /(1+ exp(logOdds.F.old))
pY.M.old   = exp(logOdds.M.old)  /(1+ exp(logOdds.M.old))

windows()
  par(mfrow=c(2,2))
  plot(x=BID, y=pY.F.young, type="l", col="blue", lwd=2, 
       ylab="Pr(Y=1)", main="predicted probabilities for young women")
  plot(x=BID, y=pY.M.young, type="l", col="blue", lwd=2, 
       ylab="Pr(Y=1)", main="predicted probabilities for young men")
  plot(x=BID, y=pY.F.old, type="l", col="blue", lwd=2, 
       ylab="Pr(Y=1)", main="predicted probabilities for old women")
  plot(x=BID, y=pY.M.old, type="l", col="blue", lwd=2, 
       ylab="Pr(Y=1)", main="predicted probabilities for old men")

Il che produce la seguente trama:
inserisci qui la descrizione dell'immagine
Queste funzioni sono sufficientemente simili che l'approccio della trama a quattro parallele che ho delineato inizialmente non è molto distintivo. Il codice seguente implementa il mio approccio "alternativo":

windows()
  plot(x=BID, y=pY.F.young, type="l", col="red", lwd=1, 
       ylab="Pr(Y=1)", main="predicted probabilities")
  lines(x=BID, y=pY.M.young, col="blue", lwd=1)
  lines(x=BID, y=pY.F.old,   col="red",  lwd=2, lty="dotted")
  lines(x=BID, y=pY.M.old,   col="blue", lwd=2, lty="dotted")
  legend("bottomright", legend=c("young women", "young men", 
         "old women", "old men"), lty=c("solid", "solid", "dotted",
         "dotted"), lwd=c(1,1,2,2), col=c("red", "blue", "red", "blue"))

producendo a sua volta, questa trama:
inserisci qui la descrizione dell'immagine

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.