Результат прогнозування логістичної регресії


14

Я створив логістичну регресію, використовуючи наступний код:

full.model.f = lm(Ft_45 ~ ., LOG_D)
base.model.f = lm(Ft_45 ~ IP_util_E2pl_m02_flg)
step(base.model.f, scope=list(upper=full.model.f, lower=~1),
     direction="forward", trace=FALSE)

Потім я використовував вихід, щоб створити остаточну модель:

final.model.f = lm(Ft_45 ~ IP_util_E2pl_m02_flg + IP_util_E2_m02_flg + 
                           AE_NumVisit1_flg + OP_NumVisit1_m01_flg + IP_TotLoS_m02 + 
                           Ft1_45 + IP_util_E1_m05_flg + IP_TotPrNonElecLoS_m02 + 
                           IP_util_E2pl_m03_flg + LTC_coding + OP_NumVisit0105_m03_flg +
                           OP_NumVisit11pl_m03_flg + AE_ArrAmb_m02_flg)

Тоді я передбачив результати для іншого набору даних за допомогою функції передбачення:

log.pred.f.v <- predict(final.model.f, newdata=LOG_V)

Мені вдалося встановити приємну криву ROC і створив таблицю для встановлення чутливості та специфічності, яка дає мені відповіді, на які я б очікував.

Однак те, що я намагаюся зробити, це встановити для кожного ряду даних, якою є ймовірність того, що Ft_45 дорівнює 1. Якщо я дивлюся на вихід log.pred.fv, я отримую, наприклад:

1 -0.171739593    
2 -0.049905948    
3 0.141146419    
4 0.11615669    
5 0.07342591    
6 0.093054334    
7 0.957164383    
8 0.098415639    
.
.
.
104 0.196368229    
105 1.045208447    
106 1.05499112

Оскільки я маю лише попереднє уявлення про те, що я роблю, я намагаюся зрозуміти, як інтерпретувати негативні та вищі значення 1, оскільки я б очікував, що вірогідність буде від 0 до 1.

Отже, моє запитання: чи я просто пропускаю крок, коли мені потрібно перетворити вихід, або я пішов зовсім неправильно Заздалегідь дякую за будь-яку допомогу, яку ви можете запропонувати.

Відповіді:


23

По-перше, схоже, ви створили звичайну лінійну регресійну модель, а не логістичну регресійну модель. Для побудови моделі логістичної регресії, необхідно використовувати glm()з family="binomial" , що не lm().

Припустимо, ви будуєте наступну логістичну модель регресії, використовуючи незалежні змінні та для прогнозування ймовірності події :x1,x2x3y

logit <- glm(y~x1+x2+x3,family="binomial")

Ця модель має коефіцієнти регресії та . β0,β1,β2β3

Якщо ви це зробите predict(logit), R обчислить і повернеться b0 + b1*x1 + b2*x2 + b3*x3.

Нагадаємо, що ваше рівняння логістичної регресії - . y=log(p1p)=β0+β1x1+β2x2+β3x3

Отже, щоб отримати бажані ймовірності, потрібно розв’язати це рівняння для .p

У R ви можете зробити щось подібне:

pred <- predict(logit,newdata=data) #gives you b0 + b1x1 + b2x2 + b3x3
probs <- exp(pred)/(1+exp(pred)) #gives you probability that y=1 for each observation

Дякую вам велике, по-перше за виправлення мого коду, по-друге за пояснення, як отримати ймовірності в R. Я дав йому піти, і він працює чудово. Я б хотів, щоб я запитав тижні тому !!
SeBee

2
Можна скоротити з probs <- exp(predict(logit, type = "response" , newdata=data)або принаймні `пробками <- 1 / (1 + exp (-pred))
снорам

11

Переглядаючи документацію predict.glm, здається, що це так само просто, як і використання додаткового параметра при predictвиклику:

 type = "response"

Дивіться документацію:

type - тип необхідного прогнозування. За замовчуванням - за шкалою лінійних предикторів; альтернативна "відповідь" знаходиться на шкалі змінної відповіді. Таким чином, для біноміальної моделі за замовчуванням передбачення за замовчуванням складаються з логічного коефіцієнта (ймовірності за шкалою logit), а type = "відповідь" дає прогнозовані ймовірності. Варіант "терміни" повертає матрицю, яка дає відповідні значення кожного терміна у формулі моделі за лінійною шкалою предиктора. Значення цього аргументу можна скоротити

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