Comment puis-je utiliser les bêtas de régression logistique + les données brutes pour obtenir des probabilités


17

J'ai un modèle ajusté (de la littérature). J'ai également les données brutes pour les variables prédictives.

Quelle est l'équation que je devrais utiliser pour obtenir des probabilités? Fondamentalement, comment combiner des données brutes et des coefficients pour obtenir des probabilités?

Réponses:


15

Voici la réponse du chercheur appliqué (en utilisant le package de statistiques R).

Commençons par créer des données, c'est-à-dire que je simule des données pour un modèle de régression logistique bivarié simple :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)

Le prédicteur xest une variable dichotomique:

> 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

Deuxièmement, estimez l'ordonnée à l'origine ( ) et la pente ( β 1 ). Comme vous pouvez le voir, l'ordonnée à l'origine est β 0 = - 0,8690 et la pente est .β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)

[...]

Troisièmement, R, comme la plupart des progiciels statistiques, peut calculer les valeurs ajustées, c'est-à-dire les probabilités. Je vais utiliser ces valeurs comme référence.

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

Quatrièmement, cette étape fait directement référence à votre question: nous avons les données brutes (ici: ) et nous avons les coefficients ( et ). Maintenant, calculons les logits et enregistrons ces valeurs ajustées dans :xβ0β1glm.rcdm

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

La dernière étape est une comparaison des valeurs ajustées basées sur la fonction de R fitted( glm.fitted) et mon approche "à la main" ( logit2prop.glm.rdcm). Ma propre fonction logit2prop(voir première étape) convertit les logits en probabilités:

> ## 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
Notez que glm(y ~ x)cela ne vous donne pas de régression logistique, vous devez définir family=binomial(link="logit"). Notez que la sortie dit Dispersion parameter for gaussian familynon binomial family. Si vous le faites correctement, fitted(glm.mod)renvoie en fait les probabilités estimées, pas les logits. Vous obtenez les logits avec predict(glm.mod, type="link").
caracal

Aua! J'ai corrigé ça. Merci beaucoup, @caracal, de m'avoir corrigé! C'est vraiment gênant (c'est encore plus gênant car j'ai déjà donné la bonne réponse dans un autre fil SO ).
Bernd Weiss

1
le bras du package a la fonction invlogit, qui est votre fonction logit2prop.
Manoel Galdino

N'aurions-nous pas dû obtenir exactement les mêmes nombres pour glm.fittedet logit2prop.glm.rdcm.? Il y a de très petites différences. Je n'ai pas pu comprendre pourquoi nous n'avons pas exactement les mêmes chiffres dans votre exemple. Quand je vérifie; library(arm); data.frame(logit2prop(glm.rdcm), invlogit(glm.rdcm))produit exactement les mêmes résultats pour logit2propet invlogit. Par conséquent, également, je demande pourquoi glm.fittedet invlogitne retourne pas exactement les mêmes chiffres?
Erdogan CEVHER

20

F:XJournalX1-Xg:XexpX1+expX

π

F(π)=β0+X1β1+X2β2+

πg

π=g(β0+X1β1+X2β2+)


Et la régression logistique ordinale? Quelle serait alors la logique?
user333

@ user333: Eh bien ... je n'ai pas beaucoup joué avec la régression logistique ordinale ... mais je pense que l'on utilise la même fonction de lien. Dans tous les cas, la logique est la même: inverser la fonction link pour obtenir la variable de réponse ...
ocram

oui ... mais comment savoir quelles probabilités sont mappées à quelles catégories cibles?
user333

@ user333, votre question portait sur la régression logistique, si vous voulez aussi des réponses sur la régression ordinale, veuillez l'ajouter à la question.
mpiktas
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.