Comment calculer le pseudo-


46

L' écriture de Christopher Manning sur la régression logistique dans R montre une régression logistique dans R comme suit:

ced.logr <- glm(ced.del ~ cat + follows + factor(class), 
  family=binomial)

Quelques sorties:

> summary(ced.logr)
Call:
glm(formula = ced.del ~ cat + follows + factor(class),
    family = binomial("logit"))
Deviance Residuals:
Min            1Q    Median       3Q      Max
-3.24384 -1.34325   0.04954  1.01488  6.40094

Coefficients:
              Estimate Std. Error z value Pr(>|z|)
(Intercept)   -1.31827    0.12221 -10.787 < 2e-16
catd          -0.16931    0.10032  -1.688 0.091459
catm           0.17858    0.08952   1.995 0.046053
catn           0.66672    0.09651   6.908 4.91e-12
catv          -0.76754    0.21844  -3.514 0.000442
followsP       0.95255    0.07400  12.872 < 2e-16
followsV       0.53408    0.05660   9.436 < 2e-16
factor(class)2 1.27045    0.10320  12.310 < 2e-16
factor(class)3 1.04805    0.10355  10.122 < 2e-16
factor(class)4 1.37425    0.10155  13.532 < 2e-16
(Dispersion parameter for binomial family taken to be 1)
Null deviance: 958.66 on 51 degrees of freedom
Residual deviance: 198.63 on 42 degrees of freedom
AIC: 446.10
Number of Fisher Scoring iterations: 4

Il explique ensuite comment interpréter les coefficients, comparer différents modèles, etc. Plutôt utile.

Cependant, quelle variance le modèle prend-il en compte? Une page Stata sur la régression logistique dit:

Techniquement, ne peut pas être calculée de la même manière dans la régression logistique telle qu'elle est en régression OLS. Le pseudo- R 2 , dans la régression logistique, est défini par 1 - L 1R2R2 , oùL0représente la probabilité de log pour le modèle "à constante uniquement" etL1,la log de vraisemblance pour le modèle complet avec constantes et prédicteurs.1L1L0L0L1

Je comprends cela au plus haut niveau. Le modèle à constante uniquement serait dépourvu de l'un des paramètres (uniquement le terme d'interception). La vraisemblance du journal est une mesure de l'adéquation des paramètres aux données. En fait, Manning sorte de conseils que la déviance pourrait être . La déviance nulle est peut-être uniquement constante et la déviance résiduelle est - 2 log L du modèle? Cependant, je ne suis pas limpide à ce sujet.2logL2logL

Quelqu'un peut -il vérifier comment on calcule en fait le pseudo- à R en utilisant cet exemple?R2


5
R21L1/L0


3
Cette page traite de plusieurs pseudo-R ^ 2.
dfrankow

2
Remarque: la question connexe n'aime pas les pseudo-R ^ 2, mais préfère la validation croisée ou la prédiction de test temporaire.
dfrankow

Réponses:


49

N'oubliez pas le package rms , de Frank Harrell. Vous trouverez tout ce dont vous avez besoin pour adapter et valider les GLM.

Voici un exemple de jouet (avec un seul prédicteur):

set.seed(101)
n <- 200
x <- rnorm(n)
a <- 1
b <- -2
p <- exp(a+b*x)/(1+exp(a+b*x))
y <- factor(ifelse(runif(n)<p, 1, 0), levels=0:1)
mod1 <- glm(y ~ x, family=binomial)
summary(mod1)

Cela donne:

Coefficients:
            Estimate Std. Error z value Pr(>|z|)    
(Intercept)   0.8959     0.1969    4.55 5.36e-06 ***
x            -1.8720     0.2807   -6.67 2.56e-11 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1   1 

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 258.98  on 199  degrees of freedom
Residual deviance: 181.02  on 198  degrees of freedom
AIC: 185.02

Maintenant, en utilisant la lrmfonction,

require(rms)
mod1b <- lrm(y ~ x)

R2print(mod1b)

Logistic Regression Model

lrm(formula = y ~ x)

                      Model Likelihood     Discrimination    Rank Discrim.    
                         Ratio Test            Indexes          Indexes       

Obs           200    LR chi2      77.96    R2       0.445    C       0.852    
 0             70    d.f.             1    g        2.054    Dxy     0.705    
 1            130    Pr(> chi2) <0.0001    gr       7.801    gamma   0.705    
max |deriv| 2e-08                          gp       0.319    tau-a   0.322    
                                           Brier    0.150                     


          Coef    S.E.   Wald Z Pr(>|Z|)
Intercept  0.8959 0.1969  4.55  <0.0001 
x         -1.8720 0.2807 -6.67  <0.0001 

R2=0.445(1exp(LR/n))/(1exp((2L0)/n))χ2R2LR=2L0R2=1

Par la main,

> mod0 <- update(mod1, .~.-x)
> lr.stat <- lrtest(mod0, mod1)
> (1-exp(-as.numeric(lr.stat$stats[1])/n))/(1-exp(2*as.numeric(logLik(mod0)/n)))
[1] 0.4445742
> mod1b$stats["R2"]
       R2 
0.4445742 

R2R2c


Pouvez-vous s'il vous plaît expliquer comment vous avez obtenu .445? J'ai utilisé 1-exp (-77.96 / 200) mais j'ai 322. Qu'est ce que je fais mal? Merci.

2
Lequel est Nagelkerke R2?
JetLag

1
@JetLag Sous Discrimination Indexes, Nagelkerke est abrégé en R2 (c'est-à-dire 0,445). Vous pouvez vérifier cela en utilisant la fonction NagelkerkeR2 () du paquet fmsb.
Chernoff


7

R2

R2RM2=1lnL^fulllnL^nulllnL^fulllnL^full

R2

  1. deviance=2ln(Lfull)null.deviance=2ln(Lnull)

    pR2 = 1 - mod$deviance / mod$null.deviance # works for glm

Mais l'approche ci-dessus ne fonctionne pas pour le pseudo hors échantillonR2

  1. Utilisez la fonction "logLik" dans R et la définition (fonctionne également pour dans l'échantillon)

    mod_null <- glm(y~1, family = binomial, data = insample) 1- logLik(mod)/logLik(mod_null)

Ceci peut être légèrement modifié pour calculer le pseudo échantillonR2

Exemple:

pseudo-R hors échantillon

R2

Rp2=1Lest.outLnull.out,
Lest.outLnull.out

Codes:

pred.out.link <- predict(mod, outSample, type = "link") mod.out.null <- gam(Default~1, family = binomial, data = outSample) pR2.out <- 1 - sum(outSample$y * pred.out.link - log(1 + exp(pred.out.link))) / logLik(mod.out.null)


deviance=2ln(Lfull)model1 <- glm(cbind(ncases, ncontrols) ~ agegp + tobgp * alcgp, data = esoph, family = binomial)model1$deviance-2*logLik(model1)

6

si déviance était proportionnelle au log de vraisemblance, et que l’on utilise la définition (voir par exemple McFadden ici )

pseudo R^2 = 1 - L(model) / L(intercept)

R21198.63958.66

La question qui se pose est la suivante: la déviance rapportée est-elle proportionnelle au log de vraisemblance?


3
Ce pseudo-R ^ 2 ne correspond pas du tout à la réponse de Nagelkerke R ^ 2 de @ chl.
dfrankow

La déviance a été définie à -2 * LL quand j'étais à l'école.
DWin

@dfrankow n'est pas d'accord, parce que Nagelkerke est une normalisation de Cox et Snell R2, qui est différente de McFaddens R2.
colin

0

R2R2=1llfullllconstantllfullllconstant

R2R2=1i(yiy^i)2i(yiy¯train)2i(yiy¯train)2y¯traini(yiβ0)2β^0=y¯trainR2R2

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.