La seguente spiegazione non si limita alla regressione logistica ma si applica ugualmente alla normale regressione lineare e ad altri GLM. Di solito, Resclude un livello del categoriale e i coefficienti indicano la differenza di ciascuna classe rispetto a questa classe di riferimento (o talvolta chiamata classe di base) (questo è chiamato codifica fittizia o contrasti di trattamento in R, vedere qui per un'eccellente panoramica delle diverse opzioni di contrasto ). Per vedere i contrasti correnti in R, digitare options("contrasts"). Normalmente, Rordina i livelli della variabile categoriale in ordine alfabetico e prende il primo come classe di riferimento. Questo non è sempre ottimale e può essere modificato digitando (qui imposteremo la classe di riferimento su "c" nella nuova variabile)new.variable <- relevel(old.variable, ref="c")zpanova(model1, model2, test="LRT")R
mydata <- read.csv("https://stats.idre.ucla.edu/stat/data/binary.csv")
mydata$rank <- factor(mydata$rank)
my.mod <- glm(admit ~ gre + gpa + rank, data = mydata, family = "binomial")
summary(my.mod)
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -3.989979 1.139951 -3.500 0.000465 ***
gre 0.002264 0.001094 2.070 0.038465 *
gpa 0.804038 0.331819 2.423 0.015388 *
rank2 -0.675443 0.316490 -2.134 0.032829 *
rank3 -1.340204 0.345306 -3.881 0.000104 ***
rank4 -1.551464 0.417832 -3.713 0.000205 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
rank1rankrank1rankrank1rank2- 0.675rank1rank2- 3,99 - 0,675 = - 4,67rank1rank1. È inoltre possibile adattare il modello senza intercettazione aggiungendo - 1alla formula del modello per visualizzare direttamente tutti i coefficienti:
my.mod2 <- glm(admit ~ gre + gpa + rank - 1, data = mydata, family = "binomial")
summary(my.mod2) # no intercept model
Coefficients:
Estimate Std. Error z value Pr(>|z|)
gre 0.002264 0.001094 2.070 0.038465 *
gpa 0.804038 0.331819 2.423 0.015388 *
rank1 -3.989979 1.139951 -3.500 0.000465 ***
rank2 -4.665422 1.109370 -4.205 2.61e-05 ***
rank3 -5.330183 1.149538 -4.637 3.54e-06 ***
rank4 -5.541443 1.138072 -4.869 1.12e-06 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Si noti che l'intercettazione è scomparsa ora e che il coefficiente di rank1è esattamente l'intercetta del primo modello. Qui, il test Wald non controlla la differenza a coppie tra i coefficienti ma l'ipotesi che ogni singolo coefficiente sia zero. Ancora una volta, abbiamo prove che ogni coefficiente di rankdifferisce da zero. Infine, per verificare se l'intera variabile rankmigliora l'adattamento del modello, adattiamo un modello con ( my.mod1) e uno senza la variabile rank( my.mod2) e conduciamo un test del rapporto di verosimiglianza. Questo verifica l'ipotesi che tutti i coefficienti di ranksiano zero:
my.mod1 <- glm(admit ~ gre + gpa + rank, data = mydata, family = "binomial") # with rank
my.mod2 <- glm(admit ~ gre + gpa, data = mydata, family = "binomial") # without rank
anova(my.mod1, my.mod2, test="LRT")
Analysis of Deviance Table
Model 1: admit ~ gre + gpa + rank
Model 2: admit ~ gre + gpa
Resid. Df Resid. Dev Df Deviance Pr(>Chi)
1 394 458.52
2 397 480.34 -3 -21.826 7.088e-05 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Il test del rapporto di verosimiglianza è estremamente significativo e concluderemmo che la variabile rankdovrebbe rimanere nel modello.
Anche questo post è molto interessante.
admit ~ 1vsadmit ~ rank - 1?