Як я можу використовувати логістичну регресію бета-версії + необроблені дані для отримання ймовірностей


17

У мене встановлена ​​модель (з літератури). У мене також є вихідні дані для прогнозних змінних.

Яке рівняння я повинен використовувати для отримання ймовірностей? В основному, як я поєдную необроблені дані та коефіцієнти для отримання ймовірностей?

Відповіді:


15

Ось відповідь прикладного дослідника (використовуючи пакет статистичних даних R).

По-перше, давайте створимо деякі дані, тобто я імітую дані для простої двовимірної логістичної регресійної моделі log(p1p)=β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)

Прогноз x- це дихотомна змінна:

> 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

По-друге, оцініть перехоплення ( β0 ) та нахил ( β1 ). Як бачимо, перехоплення становить β0=0.8690 а нахил - β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)

[...]

По-третє, R, як і більшість статистичних пакетів, може обчислити встановлені значення, тобто ймовірності. Я буду використовувати ці значення як орієнтир.

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

По-четверте, цей крок безпосередньо стосується вашого питання: У нас є необроблені дані (тут: ) і у нас є коефіцієнти ( β 0 і β 1 ). Тепер давайте обчислимо логіти і збережемо ці пристосовані значення у :xβ0β1glm.rcdm

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

Останнім кроком є ​​порівняння встановлених значень на основі fittedфункцій R ( glm.fitted) та мого підходу "hand made" ( logit2prop.glm.rdcm). Моя власна функція logit2prop(див. Перший крок) перетворює logit у ймовірності:

> ## 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
Зверніть увагу, що glm(y ~ x)не дає вам логістичної регресії, ви повинні встановити family=binomial(link="logit"). Зауважте, висновок каже Dispersion parameter for gaussian family, що ні binomial family. Якщо ви зробите це правильно, fitted(glm.mod)насправді повертає оцінені ймовірності, а не логіти. Ви отримуєте логіти за допомогою predict(glm.mod, type="link").
каракал

Ауа! Я це зафіксував. Дякую, @caracal, що виправили мене! Це насправді бентежить (це ще більше бентежить, оскільки я вже дав правильну відповідь в іншій темі SO ).
Бернд Вайс

1
Пакет пакету має функцію invlogit, яка є вашою функцією logit2prop.
Маноел Галдіно

Чи не слід було б отримати точно однакові числа для glm.fittedі logit2prop.glm.rdcm.? Є кілька дуже маленьких відмінностей. Я не міг зрозуміти, чому у вашому прикладі немає таких самих чисел. Коли я перевіряю; library(arm); data.frame(logit2prop(glm.rdcm), invlogit(glm.rdcm))дає точно такі самі результати для logit2propта invlogit. Отже, однаково, я запитую, чому glm.fittedі invlogitповернути не зовсім однакові цифри?
Ердоган ЦЕВЕР

20

f:xlogx1xg:xexpx1+expx

π

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

πg

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


Як щодо порядкової логістичної регресії? Яка б тоді була логіка?
користувач333

@ user333: Ну ... я не дуже багато грав у порядковій логістичній регресії ... але я думаю, що один використовує ту саму функцію зв'язку. У будь-якому випадку логіка однакова: зворотна функція зв'язку, щоб отримати змінну відповіді ...
ocram

так ... але як я можу дізнатися, які ймовірності відображені в які цільові категорії?
користувач333

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