Відповіді:
Ось відповідь прикладного дослідника (використовуючи пакет статистичних даних R).
По-перше, давайте створимо деякі дані, тобто я імітую дані для простої двовимірної логістичної регресійної моделі :
> 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
По-друге, оцініть перехоплення ( ) та нахил ( ). Як бачимо, перехоплення становить а нахил - .
> ## 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 ). Тепер давайте обчислимо логіти і збережемо ці пристосовані значення у :glm.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
glm.fitted
і logit2prop.glm.rdcm.
? Є кілька дуже маленьких відмінностей. Я не міг зрозуміти, чому у вашому прикладі немає таких самих чисел. Коли я перевіряю; library(arm); data.frame(logit2prop(glm.rdcm), invlogit(glm.rdcm))
дає точно такі самі результати для logit2prop
та invlogit
. Отже, однаково, я запитую, чому glm.fitted
і invlogit
повернути не зовсім однакові цифри?
glm(y ~ x)
не дає вам логістичної регресії, ви повинні встановитиfamily=binomial(link="logit")
. Зауважте, висновок кажеDispersion parameter for gaussian family
, що ніbinomial family
. Якщо ви зробите це правильно,fitted(glm.mod)
насправді повертає оцінені ймовірності, а не логіти. Ви отримуєте логіти за допомогоюpredict(glm.mod, type="link")
.