Как я могу использовать логистическую регрессию бета-версии + необработанные данные, чтобы получить вероятности

17

У меня есть модель (из литературы). У меня также есть необработанные данные для прогнозирующих переменных.

Какое уравнение я должен использовать, чтобы получить вероятности? Как мне объединить необработанные данные и коэффициенты, чтобы получить вероятности?

user333
источник

Ответы:

15

Вот ответ прикладного исследователя (с использованием пакета статистики R).

Во-первых, давайте создадим некоторые данные, т.е. я имитирую данные для простого двумерной модели логистической регрессии :Lограмм(п1-п)знак равноβ0+β1Икс

> 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β1glm.rcdm

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

Последний шаг - это сравнение подгоночных значений, основанных на R fitted-функции ( glm.fitted) и моем подходе "ручной работы" ( logit2prop.glm.rdcm). Моя собственная функция logit2prop(см. Первый шаг) преобразует логиты в вероятности:

> ## 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").
Каракал
Aua! Я исправил это. Большое спасибо, @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

е:ИксжурналИкс1-Иксграмм:ИксехрИкс1+ехрИкс

π

е(π)знак равноβ0+Икс1β1+Икс2β2+...

πграмм

πзнак равнограмм(β0+Икс1β1+Икс2β2+...)

ocram
источник
Как насчет порядковой логистической регрессии? Какова будет логика тогда?
user333
@ user333: Ну ... я не играл много с порядковой логистической регрессией ... но я думаю, что кто-то использует ту же функцию связи. В любом случае, логика та же: обратная функция link для получения переменной ответа ...
ocram
да ... но как мне узнать, какие вероятности сопоставлены с какими целевыми категориями?
user333
@ user333, ваш вопрос был о логистической регрессии, если вы хотите получить ответы и о порядковой регрессии, добавьте это к вопросу.
mpiktas