Come utilizzare predict() con il modello di regressione logistica in r
Una volta adattato un modello di regressione logistica in R, possiamo utilizzare la funzione predit() per prevedere il valore di risposta di una nuova osservazione che il modello non ha mai visto prima.
Questa funzione utilizza la seguente sintassi:
predire (oggetto, nuovi dati, tipo = “risposta”)
Oro:
- oggetto: il nome del modello di regressione logistica
- newdata: il nome del nuovo frame di dati per cui fare previsioni
- type: il tipo di previsione da effettuare
L’esempio seguente mostra come utilizzare questa funzione nella pratica.
Esempio: utilizzo di Predict() con un modello di regressione logistica in R
Per questo esempio, utilizzeremo il set di dati R integrato chiamato mtcars :
#view first six rows of mtcars dataset
head(mtcars)
mpg cyl disp hp drat wt qsec vs am gear carb
Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1
Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2
Valiant 18.1 6 225 105 2.76 3,460 20.22 1 0 3 1
Adatteremo il seguente modello di regressione logistica in cui utilizziamo le variabili disp e hp per prevedere la variabile di risposta am (il tipo di trasmissione dell’auto: 0 = automatico, 1 = manuale):
#fit logistic regression model model <- glm(am ~ disp + hp, data=mtcars, family=binomial) #view model summary summary(model) Call: glm(formula = am ~ disp + hp, family = binomial, data = mtcars) Deviance Residuals: Min 1Q Median 3Q Max -1.9665 -0.3090 -0.0017 0.3934 1.3682 Coefficients: Estimate Std. Error z value Pr(>|z|) (Intercept) 1.40342 1.36757 1.026 0.3048 available -0.09518 0.04800 -1.983 0.0474 * hp 0.12170 0.06777 1.796 0.0725 . --- Significant. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 (Dispersion parameter for binomial family taken to be 1) Null deviance: 43,230 on 31 degrees of freedom Residual deviance: 16,713 on 29 degrees of freedom AIC: 22,713 Number of Fisher Scoring iterations: 8
Possiamo quindi creare un nuovo data frame contenente informazioni su otto auto che il modello non ha mai visto prima e utilizzare la funzione predit() per prevedere la probabilità che una nuova auto avrà un cambio automatico (am=0) o un cambio manuale ( sono =1):
#define new data frame
newdata = data. frame (disp=c(200, 180, 160, 140, 120, 120, 100, 160),
hp=c(100, 90, 108, 90, 80, 90, 80, 90),
am=c(0, 0, 0, 1, 0, 1, 1, 1))
#view data frame
newdata
#use model to predict value of am for all new cars
newdata$am_prob <- predict(model, newdata, type=" response ")
#view updated data frame
newdata
disp hp am am_prob
1 200 100 0 0.004225640
2 180 90 0 0.008361069
3 160 108 0 0.335916069
4 140 90 1 0.275162866
5 120 80 0 0.429961894
6 120 90 1 0.718090728
7 100 80 1 0.835013994
8 160 90 1 0.053546152
Ecco come interpretare il risultato:
- La probabilità che l’auto 1 abbia un cambio manuale è 0,004 .
- La probabilità che l’auto 2 abbia un cambio manuale è 0,008 .
- La probabilità che l’auto 3 abbia un cambio manuale è 0,336 .
E così via.
Possiamo anche utilizzare la funzione table() per creare una matrice di confusione che mostri i valori am effettivi rispetto ai valori previsti dal modello:
#create vector that contains 0 or 1 depending on predicted value of am
am_pred = rep(0, dim(newdata)[1])
am_pred[newdata$am_prob > .5] = 1
#create confusion matrix
table(am_pred, newdata$am)
am_pred 0 1
0 4 2
1 0 2
Infine, possiamo utilizzare la funzione Mean() per calcolare la percentuale di osservazioni nel nuovo database per le quali il modello ha previsto correttamente il valore di am :
#calculate percentage of observations the model correctly predicted response value for
mean(am_pred == newdata$am)
[1] 0.75
Possiamo vedere che il modello ha previsto correttamente il valore am per il 75% delle auto nel nuovo database.
Risorse addizionali
I seguenti tutorial spiegano come eseguire altre attività comuni in R:
Come eseguire una regressione lineare semplice in R
Come eseguire la regressione lineare multipla in R
Come eseguire la regressione polinomiale in R
Come creare un intervallo di previsione in R