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(p1−p)=β0+β1⋅x
> 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 x
est 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
glm(y ~ x)
cela ne vous donne pas de régression logistique, vous devez définirfamily=binomial(link="logit")
. Notez que la sortie ditDispersion parameter for gaussian family
nonbinomial family
. Si vous le faites correctement,fitted(glm.mod)
renvoie en fait les probabilités estimées, pas les logits. Vous obtenez les logits avecpredict(glm.mod, type="link")
.glm.fitted
etlogit2prop.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 pourlogit2prop
etinvlogit
. Par conséquent, également, je demande pourquoiglm.fitted
etinvlogit
ne retourne pas exactement les mêmes chiffres?la source