Regressione Logistica1
Regressione Logistica1
Regressione Logistica1
library(tidyverse)
1
"Yes" = 1))
head(dati)
Regressione lineare
1.00
0.75
Probabilità di deafult
0.50
0.25
0.00
0 1000 2000
balance
2
Trattandosi di una linea, se, ad esempio, la probabilità di default è prevista per qualcuno che ha un saldo di
10000, il valore ottenuto è maggiore di 1.
predict(object = modello_lineare, newdata = data.frame(balance = 10000))
## 1
## 1.22353
Per evitare questi problemi, la regressione logistica trasforma il valore restituito dalla regressione lineare
(bo + b1X) utilizzando una funzione il cui risultato è sempre compreso tra 0 e 1. Esistono diverse funzioni
che soddisfano questa descrizione, una delle più utilizzate è la funzione logistica noto anche come funzione
sigmoide)
3
Regressione logistica
1.00
0.75
Probabilità di default
0.50
0.25
0.00
0 1000 2000
balance
4
1.00
0.75
default
0.50
0.25
0.00
0 1000 2000
balance
summary(modello_logistico)
##
## Call:
## glm(formula = default ~ balance, family = "binomial", data = dati)
##
## Deviance Residuals:
## Min 1Q Median 3Q Max
## -2.2697 -0.1465 -0.0589 -0.0221 3.7589
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -1.065e+01 3.612e-01 -29.49 <2e-16 ***
## balance 5.499e-03 2.204e-04 24.95 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 2920.6 on 9999 degrees of freedom
## Residual deviance: 1596.5 on 9998 degrees of freedom
## AIC: 1600.5
##
## Number of Fisher Scoring iterations: 8
5
La funzione summary () restituisce la stima, gli errori standard, il punteggio z e ed i p-value per ciascuno
dei coefficienti. Fornisce anche la devianza nulla (la devianza solo per la media) e la devianza residua (la
devianza per il modello con tutti i predittori).
E’ possibile ottenere singole parti dell’oggetto modello_logistico.
coef(modello_logistico)
## (Intercept) balance
## -10.651330614 0.005498917
summary(modello_logistico)$coef
## (Intercept) balance
## 3.623124e-191 1.976602e-137
##
## Call:
## glm(formula = default ~ balance + student, family = binomial,
## data = dati)
##
## Deviance Residuals:
## Min 1Q Median 3Q Max
## -2.4578 -0.1422 -0.0559 -0.0203 3.7435
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -1.075e+01 3.692e-01 -29.116 < 2e-16 ***
## balance 5.738e-03 2.318e-04 24.750 < 2e-16 ***
## studentYes -7.149e-01 1.475e-01 -4.846 1.26e-06 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 2920.6 on 9999 degrees of freedom
## Residual deviance: 1571.7 on 9997 degrees of freedom
## AIC: 1577.7
##
## Number of Fisher Scoring iterations: 8
6
logaritmo dell’ ODDS a causa dell’aumento di un’unità X.
###STIMA INTERVALLI DI CONFIDENZA
confint(modello_logistico_2)
## studentYes
## 0.328522
REGOLE INTERPRETATIVE
Ricordiamo che exp(1) è circa 2.71 Cioè, se il logit è 1, l’odds sarà 2,7 quindi la probabilità (odds/(1+odds))
è 2,7 / 3,7, o circa 3/4, 75%.
Allo stesso modo importante, exp(0) = 1 Quindi, l’odds=1 saranno 1: 1, ovvero il 50%
Quindi, ogni volta che il logit è negativo, la probabilità associata è inferiore al 50% e v.v. (logit positivo,
probabilità superiore al 50%).
CONDIZIONI
1) Indipendenza: le osservazioni devono essere indipendenti l’una dall’altra.
7
2) Relazione lineare tra il logaritmo naturale dell’odds ed una variabile continua: i modelli a forma di U
sono una chiara violazione di questa condizione.
3)La regressione logistica non richiede una distribuzione normale della variabile continua indipendente.
4)Numero di osservazioni: non esiste uno standard stabilito a questo riguardo, ma si raccomandano tra 50 e
100 osservazioni.
PREVISIONI
Si possono utilizzare le probabilità previste per comprendere il modello.
Le probabilità previste possono essere calcolate per variabili predittive sia categoriali che continue.
Per creare probabilità previste, dobbiamo prima creare un nuovo dataframe con i valori che vogliamo che le
variabili indipendenti assumano per creare le nostre previsioni.
Calcoliamo la probabilità di default per ogni valore di student, tenendo balance ed income ai valori medi.
Creiamo e visualizzazione il dataframe.
newdata1 <- with(dati, data.frame(balance = mean(balance), income = mean(income), student))
head(newdata1)