Ricerca Sociale con R

Una wiki per l'analisi dei dati con R

Strumenti Utente

Strumenti Sito


r:modelli:regressione_logistica

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
1)
Ricordiamo che in R, la funzione log() computa di default il logaritmo naturale ($ln$).

Domande? Scrivimi

Messenger Telegram Email
r/modelli/regressione_logistica.txt · Ultima modifica: 16/10/2025 14:44 da Agnese Vardanega