Графікування кривої ймовірності для моделі Logit з кількома прогнозами


12

У мене є така функція ймовірності:

Prob=11+ez

де

z=B0+B1X1++BnXn.

Моя модель виглядає так

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

Це візуалізується за допомогою кривої ймовірності, яка виглядає як наведена нижче.

введіть тут опис зображення

Я розглядаю можливість додати пару змінних до мого початкового рівняння регресії. Скажімо, я додаю гендер (категоричні: F і M) і вік (категоричні: <25 і> 26) у модель, і закінчую:

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

У RI можна генерувати аналогічну криву ймовірностей, яка підкаже мені ймовірність Y = 1 при обліку всіх трьох прогнокторів. Там, де я загублений, я хочу знайти ймовірність для кожної можливої ​​перестановки цих варіацій.

Отже, коли ставка = 1, стать = M, а вік> = 26, яка ймовірність того, що Y = 1? Аналогічно, коли ставка = 2, стать = F, а вік> = 26, яка ймовірність того, що Y = 1?

Я хочу створити криву ймовірності, яка дозволить мені уявити це.

Хтось може допомогти? Я, можливо, зовсім не розумію, яку саме інформацію можна отримати з моделі logit, але скажіть, будь ласка, чи я теж не розумію теорію.


Ви хочете, щоб код це робив в R або просто зрозумів проблему концептуально?
gung - Відновіть Моніку

Якби мені довелося вибирати, я б сказав це питання концептуально. Я думаю, що R-код я можу розібратися самостійно.
ATMathew

2
Якщо вам зручно вирішувати ту саму проблему звичайною (найменшою квадратикою) регресією, то чому б не просто висловити відповідь як коефіцієнт журналу (який просто ) і використовувати методи, які ви знаєте? B0+B1X1++BnXn
whuber

1
Звичайно, подивіться на пакет @FrankHarrell rms (вичерпну документацію можна знайти на веб-сайті RMS ). Почніть з Predict()і plot.Predict()функцій, щоб відчути, що можна зробити (це включає побудову графіку як функції , при цьому значення встановлені за замовчуванням, або фіксовані значення на ваш вибір). x 1 x 2 , , x pPr(Y=1|x2,,xp)x1x2,,xp
chl

Відповіді:


24

На щастя для вас, у вас є лише одне безперервне коваріат. Таким чином, ви можете просто зробити чотири (тобто, 2 SEX x 2 AGE) графіки, кожен зі співвідношенням BID та . Крім того, ви можете зробити один сюжет із чотирма різними лініями на ньому (ви можете використовувати різні стилі ліній, ваги чи кольори для їх розрізнення). Ви можете отримати ці передбачувані рядки, вирішивши рівняння регресії в кожній з чотирьох комбінацій для діапазону значень BID. p(Y=1)

Складнішою є ситуація, коли у вас більше одного безперервного коваріату. У такому випадку часто є певний коваріат, який у певному сенсі є "первинним". Цей коваріат можна використовувати для осі X. Потім ви вирішите для декількох заданих значень інших коваріатів, як правило, середнього значення та +/- 1SD. Інші варіанти включають різні типи 3D-сюжетів, коплотів чи інтерактивних сюжетів.

У моїй відповіді на інше запитання тут є інформація про низку сюжетів для вивчення даних у понад 2 вимірах. Ваш випадок є по суті аналогічним, за винятком того, що вам цікаво представити передбачувані значення моделі, а не необроблені значення.

Оновлення:

Я написав простий код прикладу в R, щоб зробити ці сюжети. Дозвольте зазначити кілька речей: Оскільки "дія" відбувається рано, я побіг BID лише 700 (але не соромтеся продовжити це до 2000 року). У цьому прикладі я використовую функцію, яку ви вказали, і приймаю першу категорію (тобто, жінку та молодих) як референтну категорію (яка за замовчуванням в R). Як зазначає @whuber у своєму коментаріМоделі LR лінійні в одиницях журналу, тому ви можете використовувати перший блок передбачуваних значень та графік, як це можливо при регресії OLS, якщо ви захочете. Логіт - це функція зв'язку, яка дозволяє підключити модель до ймовірностей; другий блок перетворює коефіцієнти журналу у ймовірності через інверсію функції logit, тобто шляхом експоненції (перетворення на коефіцієнти), а потім діленням шансів на 1 + коефіцієнти. (Я обговорюю характер функції зв'язку , і цей тип моделі тут , якщо ви хочете отримати більше інформації.)

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

Що дає наступний сюжет:
введіть тут опис зображення
Ці функції достатньо схожі на те, що чотири паралельний сюжетний підхід, який я окреслив спочатку, не дуже відрізняється. Наступний код реалізує мій "альтернативний" підхід:

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

створюючи, в свою чергу, цей сюжет:
введіть тут опис зображення

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.