Wykreślanie krzywej prawdopodobieństwa dla modelu logit z wieloma predyktorami

12

Mam następującą funkcję prawdopodobieństwa:

Prob=11+ez

gdzie

z=B0+B1X1++BnXn.

Mój model wygląda

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

Jest to wizualizowane za pomocą krzywej prawdopodobieństwa, która wygląda jak ta poniżej.

wprowadź opis zdjęcia tutaj

Zastanawiam się nad dodaniem kilku zmiennych do mojego pierwotnego równania regresji. Załóżmy, że dodam do modelu płeć (kategorycznie: F i M) i wiek (kategorycznie: <25 i> 26), a ja otrzymuję:

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

W RI można wygenerować podobną krzywą prawdopodobieństwa, która powie mi prawdopodobieństwo Y = 1 przy uwzględnieniu wszystkich trzech predyktorów. Zgubiłem się, chcę znaleźć prawdopodobieństwa dla każdej możliwej permutacji tych odmian.

Kiedy więc stawka = 1, płeć = M, a wiek wynosi> = 26, jakie jest prawdopodobieństwo, że Y = 1? Podobnie, gdy stawka = 2, płeć = F, a wiek wynosi> = 26, jakie jest prawdopodobieństwo, że Y = 1?

Chcę wygenerować krzywą prawdopodobieństwa, która pozwoli mi to zwizualizować.

Czy ktoś może pomóc? Być może zupełnie nie rozumiem, jakie informacje można uzyskać z modelu logit, ale proszę powiedz mi, czy również nie rozumiem teorii.

ATMathew
źródło
Czy chcesz, aby kod robił to w R, czy po prostu rozumiał problem koncepcyjnie?
gung - Przywróć Monikę
Gdybym miał dokonać wyboru, powiedziałbym ten problem pojęciowo. Myślę, że kod R potrafię samodzielnie wymyślić.
ATMathew
2
Jeśli nie masz nic przeciwko rozwiązaniu tego samego problemu za pomocą zwykłej regresji (najmniejszych kwadratów), to dlaczego nie wyrazić odpowiedzi jako logarytmicznej szansy (czyli tylko ) i użyć znanych Ci technik? B0+B1X1++BnXn
whuber
1
Jasne, spójrz na pakiet rms @FrankHarrell (obszerna dokumentacja znajduje się na stronie RMS ). Rozpocznij od funkcji Predict()i, plot.Predict()aby dowiedzieć się, co można zrobić (obejmuje to wykreślenie jako funkcji , z ustawionymi na wartości domyślne, lub wybrane wartości stałe). Pr(Y=1|x2,,xp)x1x2,,xp
chl

Odpowiedzi:

24

Na szczęście dla ciebie masz tylko jedną ciągłą zmienną towarzyszącą. W ten sposób można po prostu wykonać cztery (tj. 2 SEX x 2 WIEK) wykresy, każda z zależnością między BID . Alternatywnie, możesz utworzyć jeden wykres z czterema różnymi liniami (możesz użyć różnych stylów linii, grubości lub kolorów, aby je rozróżnić). Możesz uzyskać te przewidywane linie, rozwiązując równanie regresji dla każdej z czterech kombinacji dla zakresu wartości BID. p(Y=1)

Bardziej skomplikowana sytuacja ma miejsce, gdy masz więcej niż jedną ciągłą zmienną towarzyszącą. W takim przypadku często występuje szczególna zmienna towarzysząca, która w pewnym sensie jest „pierwotna”. Zmianę tę można zastosować dla osi X. Następnie rozwiązujesz dla kilku wcześniej określonych wartości innych zmiennych towarzyszących, zwykle średniej i +/- 1SD. Inne opcje obejmują różne typy wykresów 3D, coplot lub interaktywnych.

Moja odpowiedź na inne pytanie tutaj zawiera informacje na temat szeregu wykresów do eksploracji danych w więcej niż 2 wymiarach. Twój przypadek jest zasadniczo analogiczny, z wyjątkiem tego, że jesteś zainteresowany przedstawieniem przewidywanych wartości modelu, a nie wartości surowych.

Aktualizacja:

Napisałem prosty kod przykładowy w R, aby wykonać te wykresy. Pragnę zwrócić uwagę na kilka rzeczy: ponieważ „akcja” ma miejsce wcześnie, uruchomiłem BID tylko przez 700 (ale mogę przedłużyć to do 2000). W tym przykładzie używam podanej funkcji i biorę pierwszą kategorię (tj. Kobietę i młodą kobietę) jako kategorię referencyjną (która jest domyślna w R). Jak zauważa @whuber w swoim komentarzu, Modele LR są liniowe w logarytmicznych szansach, więc możesz użyć pierwszego bloku przewidywanych wartości i wykreślić, jak możesz z regresją OLS, jeśli wybierzesz. Logit to funkcja łącza, która pozwala połączyć model z prawdopodobieństwami; drugi blok przekształca logarytmiczne szanse na prawdopodobieństwa poprzez odwrotność funkcji logit, to znaczy przez wykładnik (przekształcenie w iloraz szans), a następnie podzielenie szans przez 1 + szansę. (Omówię charakter funkcji łącza i tego typu modelu tutaj , jeśli chcesz uzyskać więcej informacji).

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")

Co daje następujący wykres:
wprowadź opis zdjęcia tutaj
Funkcje te są wystarczająco podobne, że czterobiegunowe podejście do wykresu, które przedstawiłem na początku, nie jest bardzo charakterystyczne. Poniższy kod implementuje moje „alternatywne” podejście:

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"))

produkując z kolei fabułę:
wprowadź opis zdjęcia tutaj

gung - Przywróć Monikę
źródło