Comment utiliser Predict() avec le modèle de régression logistique dans R
Une fois que nous avons ajusté un modèle de régression logistique dans R, nous pouvons utiliser la fonction prédire() pour prédire la valeur de réponse d’une nouvelle observation que le modèle n’a jamais vue auparavant.
Cette fonction utilise la syntaxe suivante :
prédire (objet, newdata, type = « réponse »)
où:
- object : Le nom du modèle de régression logistique
- newdata : Le nom de la nouvelle trame de données pour laquelle faire des prédictions
- type : Le type de prédiction à faire
L’exemple suivant montre comment utiliser cette fonction dans la pratique.
Exemple : utilisation de Predict() avec un modèle de régression logistique dans R
Pour cet exemple, nous utiliserons l’ensemble de données R intégré appelé 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
Nous ajusterons le modèle de régression logistique suivant dans lequel nous utilisons les variables disp et hp pour prédire la variable de réponse am (le type de transmission de la voiture : 0 = automatique, 1 = manuelle) :
#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 disp -0.09518 0.04800 -1.983 0.0474 * hp 0.12170 0.06777 1.796 0.0725 . --- Signif. 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
Nous pouvons ensuite créer une nouvelle trame de données contenant des informations sur huit voitures que le modèle n’a jamais vues auparavant et utiliser la fonction prédire() pour prédire la probabilité qu’une nouvelle voiture ait une transmission automatique (am=0) ou une transmission manuelle (am =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
Voici comment interpréter le résultat :
- La probabilité que la voiture 1 ait une transmission manuelle est de 0,004 .
- La probabilité que la voiture 2 ait une transmission manuelle est de 0,008 .
- La probabilité que la voiture 3 ait une transmission manuelle est de 0,336 .
Et ainsi de suite.
Nous pouvons également utiliser la fonction table() pour créer une matrice de confusion qui affiche les valeurs am réelles par rapport aux valeurs prédites par le modèle :
#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
Enfin, nous pouvons utiliser la fonction Mean() pour calculer le pourcentage d’observations dans la nouvelle base de données pour lesquelles le modèle a correctement prédit la valeur de am :
#calculate percentage of observations the model correctly predicted response value for
mean(am_pred == newdata$am)
[1] 0.75
Nous pouvons voir que le modèle a correctement prédit la valeur am pour 75 % des voitures dans la nouvelle base de données.
Ressources additionnelles
Les didacticiels suivants expliquent comment effectuer d’autres tâches courantes dans R :
Comment effectuer une régression linéaire simple dans R
Comment effectuer une régression linéaire multiple dans R
Comment effectuer une régression polynomiale dans R
Comment créer un intervalle de prédiction dans R