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

Ajouter un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *