log() computa di default il logaritmo naturale ($ln$).Indice
Regressione logistica
Modello utilizzato quando la variabile dipendente è di tipo dicotomico (categoriale).
Obiettivo del modello è di stabilire la probabilità di $Y$ (0 - 1), in base al valore di $X$ (0 - 1).
Equazioni
Vedi Modelli lineari generalizzati
La funzione che lega le probabilità $\pi$ al predittore lineare $\eta$ (link) è la funzione logit:
$$\text{logit}(\pi) = \text{ln}\left(\frac{\pi}{1-\pi}\right) = \text{ln}(\omega) = \eta$$
Per “tornare” alle probabilità $\pi$ a partire dal predittore lineare $\eta$, si userà quindi la funzione inversa ($g$) della logit, ovvero la funzione logistica:
$$\pi = \frac{e^{\eta}}{1 + e^{\eta}} $$
dove $e$ è la base del logaritmo naturale (funzione exp(), inversa di log()). 1).
In pratica, i parametri del modello (i regressori) saranno espressi in termini di log-odds ($ln(\omega)$), che potranno essere trasformati in odds con l'antilogaritmo e in probababilità con la funzione logistica.
Applicazione
library(tidyverse)
# dati library(LabRS) data("tabM") tabM
## Genere ## Partito Uomini Donne ## Democr. 484 762 ## Ind. 239 327 ## Rep. 477 468
Eliminiamo la seconda riga della tabella, e otteniamo una tabella 2 x 2:
tab <- tabM[c(1,3),] tab
## Genere ## Partito Uomini Donne ## Democr. 484 762 ## Rep. 477 468
Il modello
La preparazione dei dati
Per applicare il modello della regressione logistica, dobbiamo in primo luogo scegliere la modalità target, ovvero, della variabile dipendente, quale modalità sarà equivalente a “1”.
La procedura di R, assegna di default la prima modalità (livello) della variabile dipendente: in questo caso, “Democratici” (livello 0). Di conseguenza, il modello stimerà i log-odds del secondo livello (“Repubblicani”) rispetto al primo.
Lo stesso accade per le variabili indipendenti categoriali come Genere (con livelli, ad esempio, “Donne” e “Uomini”): R individua automaticamente il primo livello di riferimento. Se dall'output del modello vediamo un coefficiente per GenereDonne, significa che “Uomini” è stato scelto come livello di riferimento per la variabile Genere.
In questo contesto, la preparazione e l'organizzazione dei dati è dunque di fondamentale importanza.
Ad esempio, se volessimo che la categoria target fosse “Partito Democratico”, dovremmo ricodificare la variabile.
In generale, per avere un maggior controllo su questi aspetti, è bene trasformare le tabelle in dataframe in formato lungo - con le variabili come colonne e le osservazioni come righe.
La funzione
Per questo esempio, usiamo direttamente la tabella, che verrà trasformata in dataframe dalla procedura, che creerà la variabile 'Freq':
bin.res <- glm(Partito ~ Genere, data = tab, weights = Freq, # pesi family = binomial) # distr. binomiale
Guardiamo la sintesi dei risultati:
summary(bin.res)
## ## Call: ## glm(formula = Partito ~ Genere, family = binomial, data = tab, ## weights = Freq) ## ## Coefficients: ## Estimate Std. Error z value Pr(>|z|) ## (Intercept) -0.01457 0.06452 -0.226 0.821 ## GenereDonne -0.47291 0.08724 -5.420 5.94e-08 *** ## --- ## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 ## ## (Dispersion parameter for binomial family taken to be 1) ## ## Null deviance: 2995.9 on 3 degrees of freedom ## Residual deviance: 2966.4 on 2 degrees of freedom ## AIC: 2970.4 ## ## Number of Fisher Scoring iterations: 4
Interpretazione dei risultati
I coefficienti
$$\text{Rep} = -0.01457-0.47291 \cdot \text{Donne}$$
L'intercetta ($\beta_0$) è il log-odd di essere repubblicano, per gli uomini, ovvero:
log(tab["Rep.", "Uomini"] / tab["Democr.", "Uomini"])
$\beta_1$ è invece il logaritmo dell'odd ratio.
L'intercetta rappresenta insomma il log-odd per la categoria di riferimento (Uomini Repubblicani), mentre i coefficienti $\beta_i$ rappresentano gli effetti delle variabili indipendenti sulla variabile dipendente, ovvero il cambiamento nel log-odds per unità di cambiamento o la differenza tra categorie (in quanto logaritmi degli odds ratio, ad es. Donne vs. Uomini).
predict (log-odds, eta)
Con la funzione predict(), possiamo estrarre dal modello i log-odds della modalità target (repubblicani):
predict(bin.res)
## 1 2 3 4 ## -0.01456842 -0.01456842 -0.48747826 -0.48747826
fitted (probabilità)
Per calcolare le probabilità, applichiamo la funzione logistica. Per i repubblicani:
$$p_{Rep} = \frac{e^{\eta}} {1 + e^{\eta}}$$
eta = predict(bin.res) 1 - (exp(eta) / (1 + exp(eta)))
Questa fondamentale informazione è recuperabile direttamente con la funzione fitted(), che restituisce le probabilità condizionate per la sola modalità target:
fitted(bin.res)
## 1 2 3 4 ## 0.4963580 0.4963580 0.3804878 0.3804878
Per calcolare le probabilità dell'altra modalità, basterà sottrarre questi valori a 1:
$$p_{Dm} = 1 - \frac{e^{\eta}} {1 + e^{\eta}}$$
1-(fitted(bin.res))
## 1 2 3 4 ## 0.5036420 0.5036420 0.6195122 0.6195122
Gli intervalli di confidenza
Analogamente, trasformiamo anche gli intervalli di confidenza:
# basati sulla likelihood exp(confint(bin.res))
## 2.5 % 97.5 % ## (Intercept) 0.8684174 1.1184090 ## GenereDonne 0.5251018 0.7392535
L'odd ratio è compreso fra 0,53 e 0,74, confermando che gli uomini si dichiarano democratici in misura minore delle donne.
# basati sugli errori standard exp(confint.default(bin.res))
## 2.5 % 97.5 % ## (Intercept) 0.8684710 1.1183834 ## GenereDonne 0.5252367 0.7394021
