Ricerca Sociale con R

Una wiki per l'analisi dei dati con R

Strumenti Utente

Strumenti Sito


r:modelli:regressione_logistica

Differenze

Queste sono le differenze tra la revisione selezionata e la versione attuale della pagina.

Link a questa pagina di confronto

Entrambe le parti precedenti la revisioneRevisione precedente
r:modelli:regressione_logistica [17/06/2025 07:50] – [I coefficienti] Agnese Vardanegar:modelli:regressione_logistica [16/10/2025 14:44] (versione attuale) Agnese Vardanega
Linea 6: Linea 6:
 ====== Regressione logistica ====== ====== Regressione logistica ======
  
-<markdown> 
  
 Modello utilizzato quando la variabile dipendente è di tipo dicotomico (categoriale).  Modello utilizzato quando la variabile dipendente è di tipo dicotomico (categoriale). 
Linea 12: Linea 11:
 Obiettivo del modello è di stabilire la probabilità di $Y$ (0 - 1), in base al valore di $X$ (0 - 1). Obiettivo del modello è di stabilire la probabilità di $Y$ (0 - 1), in base al valore di $X$ (0 - 1).
  
-</markdown> 
  
 ===== Equazioni ===== ===== Equazioni =====
Linea 19: Linea 17:
 Vedi [[modelli_lineari_generalizzati|]] Vedi [[modelli_lineari_generalizzati|]]
  
-<markdown> 
  
-La funzione che lega le probabilità $\pi$ al predittore lineare $\eta$ (*link*) è la funzione *logit*:+ 
 +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$$ $$\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*:+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}} $$ $$\pi = \frac{e^{\eta}}{1 + e^{\eta}} $$
  
-</markdown>+
  
 dove $e$ è la base del logaritmo naturale (funzione ''exp()'', inversa di ''log()''). ((Ricordiamo che in R, la funzione ''log()'' computa di default il logaritmo naturale ($ln$).)). dove $e$ è la base del logaritmo naturale (funzione ''exp()'', inversa di ''log()''). ((Ricordiamo che in R, la funzione ''log()'' computa di default il logaritmo naturale ($ln$).)).
  
-<markdown> 
  
-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*. 
  
-</markdown>+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===== ===== Applicazione=====
  
-<markdown>  
  
-```rsplus+ 
 +<code rsplus>
 library(tidyverse) library(tidyverse)
-```+</code>
  
-```rsplus+<code rsplus>
 # dati # dati
 library(LabRS) library(LabRS)
 data("tabM") data("tabM")
 tabM tabM
-```+</code>
  
-```+<code>
 ##          Genere ##          Genere
 ## Partito   Uomini Donne ## Partito   Uomini Donne
Linea 60: Linea 57:
 ##   Ind.       239   327 ##   Ind.       239   327
 ##   Rep.       477   468 ##   Rep.       477   468
-```+</code>
  
 Eliminiamo la seconda riga della tabella, e otteniamo una tabella 2 x 2: Eliminiamo la seconda riga della tabella, e otteniamo una tabella 2 x 2:
  
-```rsplus+<code rsplus>
 tab <- tabM[c(1,3),] tab <- tabM[c(1,3),]
 tab tab
-```+</code>
  
-```+<code>
 ##          Genere ##          Genere
 ## Partito   Uomini Donne ## Partito   Uomini Donne
 ##   Democr.    484   762 ##   Democr.    484   762
 ##   Rep.       477   468 ##   Rep.       477   468
-```+</code> 
  
  
-</markdown>  
  
 ===== Il modello ===== ===== Il modello =====
Linea 83: Linea 80:
 ==== La preparazione dei dati ==== ==== La preparazione dei dati ====
  
-<markdown> + 
  
 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" 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"
Linea 89: Linea 86:
 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.  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`.+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.  In questo contesto, la preparazione e l'organizzazione dei dati è dunque di fondamentale importanza. 
Linea 95: Linea 92:
 Ad esempio, se volessimo che la categoria target fosse "Partito Democratico", dovremmo ricodificare la variabile. 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.+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. 
  
-</markdown> 
  
 ==== La funzione ==== ==== La funzione ====
  
-<markdown> + 
  
 Per questo esempio, usiamo direttamente la tabella, che verrà trasformata in dataframe dalla procedura, che creerà la variabile 'Freq': Per questo esempio, usiamo direttamente la tabella, che verrà trasformata in dataframe dalla procedura, che creerà la variabile 'Freq':
  
  
-```rsplus+<code rsplus>
 bin.res <- glm(Partito ~ Genere, data = tab,  bin.res <- glm(Partito ~ Genere, data = tab, 
                weights = Freq,                      # pesi                weights = Freq,                      # pesi
                family = binomial)                   # distr. binomiale                family = binomial)                   # distr. binomiale
-```+</code>
  
 Guardiamo la sintesi dei risultati: Guardiamo la sintesi dei risultati:
  
  
-```rsplus+<code rsplus>
 summary(bin.res) summary(bin.res)
-```+</code>
  
-```+<code>
 ##  ## 
 ## Call: ## Call:
Linea 139: Linea 136:
 ##  ## 
 ## Number of Fisher Scoring iterations: 4 ## Number of Fisher Scoring iterations: 4
-```+</code>
  
-</markdown> + 
  
 ===== Interpretazione dei risultati ===== ===== Interpretazione dei risultati =====
Linea 148: Linea 145:
  
  
-<markdown> + 
  
 $$\text{Rep} = -0.01457-0.47291 \cdot \text{Donne}$$ $$\text{Rep} = -0.01457-0.47291 \cdot \text{Donne}$$
Linea 154: Linea 151:
 L'intercetta ($\beta_0$) è il log-odd di essere repubblicano, per gli uomini, ovvero: L'intercetta ($\beta_0$) è il log-odd di essere repubblicano, per gli uomini, ovvero:
  
-```rsplus+<code rsplus>
 log(tab["Rep.", "Uomini"] / tab["Democr.", "Uomini"]) log(tab["Rep.", "Uomini"] / tab["Democr.", "Uomini"])
-```+</code>
  
 $\beta_1$ è invece il logaritmo dell'odd ratio. $\beta_1$ è invece il logaritmo dell'odd ratio.
Linea 162: Linea 159:
 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). 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).
  
-</markdown> + 
  
 ==== predict (log-odds, eta) ==== ==== predict (log-odds, eta) ====
  
-<markdown> + 
  
-Con la funzione `predict()`, possiamo estrarre dal modello i log-odds della modalità target (repubblicani):+Con la funzione ''predict()'', possiamo estrarre dal modello i log-odds della modalità target (repubblicani):
  
-```rsplus+<code rsplus>
 predict(bin.res)  predict(bin.res) 
-```+</code>
  
-```+<code>
 ##                                          ##                                         
 ## -0.01456842 -0.01456842 -0.48747826 -0.48747826  ## -0.01456842 -0.01456842 -0.48747826 -0.48747826 
-```+</code>
  
  
-</markdown> + 
  
 ==== fitted (probabilità) ==== ==== fitted (probabilità) ====
  
-<markdown> + 
  
 Per calcolare le probabilità, applichiamo la funzione logistica. Per i repubblicani: Per calcolare le probabilità, applichiamo la funzione logistica. Per i repubblicani:
Linea 191: Linea 188:
 $$p_{Rep} = \frac{e^{\eta}} {1 + e^{\eta}}$$ $$p_{Rep} = \frac{e^{\eta}} {1 + e^{\eta}}$$
  
-```rsplus+<code rsplus>
 eta = predict(bin.res)  eta = predict(bin.res) 
  
 1 - (exp(eta) / (1 + exp(eta))) 1 - (exp(eta) / (1 + exp(eta)))
-```+</code>
  
-Questa fondamentale informazione è recuperabile direttamente con la funzione `fitted()`, che restituisce le probabilità condizionate per la sola modalità target:+Questa fondamentale informazione è recuperabile direttamente con la funzione ''fitted()'', che restituisce le probabilità condizionate per la sola modalità target:
  
-```rsplus+<code rsplus>
 fitted(bin.res) fitted(bin.res)
-```+</code>
  
-```+<code>
 ##                                  ##                                 
 ## 0.4963580 0.4963580 0.3804878 0.3804878  ## 0.4963580 0.4963580 0.3804878 0.3804878 
-```+</code>
  
  
Linea 214: Linea 211:
  
  
-```rsplus+<code rsplus>
 1-(fitted(bin.res)) 1-(fitted(bin.res))
-```+</code>
  
-```+<code>
 ##                                  ##                                 
 ## 0.5036420 0.5036420 0.6195122 0.6195122  ## 0.5036420 0.5036420 0.6195122 0.6195122 
-```+</code>
  
-</markdown> + 
  
  
 ==== Gli intervalli di confidenza ==== ==== Gli intervalli di confidenza ====
  
-<markdown> + 
  
 Analogamente, trasformiamo anche gli intervalli di confidenza: Analogamente, trasformiamo anche gli intervalli di confidenza:
  
-```rsplus+<code rsplus>
 # basati sulla likelihood # basati sulla likelihood
 exp(confint(bin.res)) exp(confint(bin.res))
-```+</code>
  
-```+<code>
 ##                 2.5 %    97.5 % ##                 2.5 %    97.5 %
 ## (Intercept) 0.8684174 1.1184090 ## (Intercept) 0.8684174 1.1184090
 ## GenereDonne 0.5251018 0.7392535 ## GenereDonne 0.5251018 0.7392535
-```+</code>
  
 L'odd ratio è compreso fra 0,53 e 0,74, confermando che gli uomini si dichiarano democratici in misura minore delle donne. L'odd ratio è compreso fra 0,53 e 0,74, confermando che gli uomini si dichiarano democratici in misura minore delle donne.
  
  
-```rsplus+<code rsplus>
 # basati sugli errori standard # basati sugli errori standard
 exp(confint.default(bin.res)) exp(confint.default(bin.res))
-```+</code>
  
-```+<code>
 ##                 2.5 %    97.5 % ##                 2.5 %    97.5 %
 ## (Intercept) 0.8684710 1.1183834 ## (Intercept) 0.8684710 1.1183834
 ## GenereDonne 0.5252367 0.7394021 ## GenereDonne 0.5252367 0.7394021
-```+</code>
  
-</markdown> + 
  
 {{indexmenu_n>2}} {{indexmenu_n>2}}

Domande? Scrivimi

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