Accueil > R et RStudio > Les régressions

Les régressions

Dernier ajout : 9 octobre 2014.

Dans cette rubrique, on présentera :
- la régression linéaire simple : la variable à expliquer et la variable explicative sont quantitatives ;
- la régression linéaire multiple : la variable à expliquer est quantitative et les variables à expliquer peuvent être quantitatives, binaires, ou catégorielles.
- la régression logistique : la variable à expliquer est binaire et les autres variables peuvent être quantitatives, binaires, ou catégorielles.

Articles de cette rubrique

    9 octobre 2014

  • La régression logistique

    Un fichier de données

    Travaillons sur une enquête de satisfactions dans un hôpital, récupéré lors d’un cours de FUN (France Unité Numérique). Les fichiers sont disponibles ici.

    Par la suite, ces données seront stockées dans la variable satis .

    Dans ces données comme souvent, les observations sont en lignes et les variables en colonnes.

    Présentation

    On cherche à expliquer une variable binaire Y à l’aide d’autres variables.

    Pour que déboucher sur une valeur numérique, on utilise le modèle suivant :

    \ln \left( \frac{P(Y=1)}{P(Y=0} \right)=\ln \left( \frac{P(Y=1)}{1-P(Y=1} \right) =a+b \times X_1+c \times X_2 + \cdots =K

    On aura alors pour les prédictions :

    p(Y=1)=\frac{e^K}{1+e^K}

    La procédure est voisine de la celle de la régression multiple.

    Un exemple

    On cherche à expliquer la variable binaire recommander.b en fonction de plusieurs variables :
    - sexe.cat
    - age
    - score.relation
    - profession.cat

    Les variables catégorielles

    Il faudra faire très attention à bien convertir les variables catégorielles pour qu’elles ne soient pas interprétées comme des variables quantitatives.

    Dans le logiciel, la première catégorie servira de référence. Par exemple, pour le sexe codé ("H","F"), "H" sera la référence. On cherchera donc à savoir si le fait d’être une femme modifie le score de relation.

    Pour changer cette référence, on peut le faire de la sorte :

    La variable binaire

    La régression logistique

    Calculons les valeurs de p par catégorie :

    Single term deletions

    Model:
    recommander.b ~ sexe.cat + age + score.relation + profession.cat
                  Df Deviance    AIC    LRT Pr(>Chi)    
    <none>              332.48 354.48                    
    sexe.cat        1   336.74 356.74  4.259  0.03905 *  
    age             1   333.00 353.00  0.516  0.47243    
    score.relation  1   409.14 429.14 76.665  < 2e-16 ***
    profession.cat  7   341.19 349.19  8.711  0.27408    
    ---
    Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

    La valeur de p pour l’âge est faible (inférieure à 0.05).

    Regardons l’ensemble des résultats :

    Call:
    glm(formula = recommander.b ~ sexe.cat + age + score.relation +
       profession.cat, family = binomial("logit"), data = satis)

    Deviance Residuals:
       Min       1Q   Median       3Q      Max  
    -2.2358  -0.8142   0.5003   0.6937   2.0298  

    Coefficients:
                     Estimate Std. Error z value Pr(>|z|)    
    (Intercept)     -23.745655 882.744298  -0.027   0.9785    
    sexe.catF         0.595364   0.293048   2.032   0.0422 *  
    age               0.006309   0.008796   0.717   0.4732    
    score.relation    0.256624   0.034247   7.493 6.71e-14 ***
    profession.cat2  15.641720 882.743601   0.018   0.9859    
    profession.cat3  15.338964 882.743436   0.017   0.9861    
    profession.cat4  14.630198 882.743434   0.017   0.9868    
    profession.cat5  14.881076 882.743450   0.017   0.9866    
    profession.cat6  15.129875 882.743504   0.017   0.9863    
    profession.cat7  15.301040 882.743609   0.017   0.9862    
    profession.cat8  14.363204 882.743485   0.016   0.9870    
    ---
    Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

    (Dispersion parameter for binomial family taken to be 1)

       Null deviance: 419.70  on 334  degrees of freedom
    Residual deviance: 332.48  on 324  degrees of freedom
     (199 observations deleted due to missingness)
    AIC: 354.48

    Number of Fisher Scoring iterations: 13

    Interprétation

    Servons-nous de deux prédictions pour mieux comprendre ce qui se passe :

          1
    1.589661
          1
    2.185025
    [1] 0.595364

    Les autres paramètres étant inchangés, on a une augmentation de la valeur prédite de 0.595364.

    Mais interprétons les prédictions.

    Pour un homme :

    [1] 0.8305684

    Pour une femme :

    [1] 0.8988967

    La probabilité de recommander est de 0.8305684 pour homme et de 0.8988967 pour une femme (avec les autres paramètres choisis fixés).

    Cas particulier : une seule variable explicative binaire

    Cherchons à expliquer la variable recommander.b à l’aide de la variable binaire sexe.

    Call:
    glm(formula = recommander.b ~ sexe, family = binomial("logit"),
       data = satis)

    Deviance Residuals:
       Min       1Q   Median       3Q      Max  
    -1.4964  -1.4602   0.8890   0.9188   0.9188  

    Coefficients:
               Estimate Std. Error z value Pr(>|z|)    
    (Intercept)  0.64401    0.14454   4.456 8.37e-06 ***
    sexe         0.08039    0.21085   0.381    0.703    
    ---
    Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

    (Dispersion parameter for binomial family taken to be 1)

       Null deviance: 516.95  on 404  degrees of freedom
    Residual deviance: 516.81  on 403  degrees of freedom
     (129 observations deleted due to missingness)
    AIC: 520.81

    Number of Fisher Scoring iterations: 4

    Comparons avec l’odds-ratio.

    2 by 2 table analysis:
    ------------------------------------------------------
    Outcome   : 0
    Comparing : 0 vs. 1

       0  1    P(0) 95% conf. interval
    0 130 63  0.6736    0.6043   0.7360
    1 139 73  0.6557    0.5892   0.7165

                                      95% conf. interval
                Relative Risk: 1.0273    0.8945   1.1798
            Sample Odds Ratio: 1.0837    0.7169   1.6383
    Conditional MLE Odds Ratio: 1.0835    0.7021   1.6745
       Probability difference: 0.0179   -0.0740   0.1088

                Exact P-value: 0.7523
           Asymptotic P-value: 0.703
    ------------------------------------------------------
    [1] 1.08371

    Calculons le p-value avec le test du Chi2 :

            Pearson's Chi-squared test

    data:  satis$recommander.b and satis$sexe
    X-squared = 0.1454, df = 1, p-value = 0.703

    On retrouve la même p-value.


  • La régression linéaire multiple

    Un fichier de données

    Travaillons sur une enquête de satisfactions dans un hôpital, récupéré lors d’un cours de FUN (France Unité Numérique). Les fichiers sont disponibles ici.

    Par la suite, ces données seront stockées dans la variable satis .

    Dans ces données comme souvent, les observations sont en lignes et les variables en colonnes.

    Présentation

    On cherche à expliquer une variable quantitative Y par des variables quantitatives ou catégorielles. Ces dernières seront par le logiciel codées en plusieurs variables binaires.

    Y=a+b \times X_1 + c \times X_2 + \cdots  + bruit

    NB : le bruit devra avoir une distribution normale.

    Un exemple

    Cherchons à expliquer le score de relation avec les variables suivantes :
    - âge
    - sexe
    - score.information
    - profession

    Les variables catégorielles

    Il faudra faire très attention à bien convertir les variables catégorielles pour qu’elles ne soient pas interprétées comme des variables quantitatives.

    Dans le logiciel, la première catégorie servira de référence. Par exemple, pour le sexe codé ("H","F"), "H" sera la référence. On cherchera donc à savoir si le fait d’être une femme modifie le score de relation.

    Pour changer cette référence, on peut le faire de la sorte :

    La régression multiple

    Call:
    lm(formula = score.relation ~ age + sexe.cat + score.information +
       profession.cat, data = satis)

    Residuals:
        Min       1Q   Median       3Q      Max
    -19.9512  -2.0524   0.7879   2.5011   8.9167

    Coefficients:
                     Estimate Std. Error t value Pr(>|t|)    
    (Intercept)       22.02989    4.36455   5.047 7.67e-07 ***
    age                0.04289    0.01534   2.795  0.00551 **
    sexe.catF         -0.67479    0.47778  -1.412  0.15886    
    score.information  0.31210    0.03473   8.987  < 2e-16 ***
    profession.cat2    1.95365    4.21957   0.463  0.64369    
    profession.cat3    0.66762    4.16591   0.160  0.87278    
    profession.cat4    0.85505    4.16932   0.205  0.83764    
    profession.cat5    2.30864    4.17398   0.553  0.58059    
    profession.cat6    0.70852    4.20634   0.168  0.86635    
    profession.cat7    0.87308    4.27127   0.204  0.83817    
    profession.cat8    1.93984    4.21116   0.461  0.64538    
    ---
    Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

    Residual standard error: 4.127 on 308 degrees of freedom
     (215 observations deleted due to missingness)
    Multiple R-squared:  0.2311,        Adjusted R-squared:  0.2061
    F-statistic: 9.257 on 10 and 308 DF,  p-value: 2.068e-13

    On voit les différentes variables qui ont été créées :
    - sexe.catF
    - profession.cat2
    - profession.cat3
    - profession.cat4
    - profession.cat5
    - profession.cat6
    - profession.cat7
    - profession.cat8

    Pour voir apparaître les valeurs de p par variable :

    Single term deletions

    Model:
    score.relation ~ age + sexe.cat + score.information + profession.cat
                     Df Sum of Sq    RSS    AIC F value    Pr(>F)    
    <none>                         5246.0 915.21                      
    age                1    133.08 5379.1 921.20  7.8134  0.005512 **
    sexe.cat           1     33.98 5280.0 915.27  1.9947  0.158856    
    score.information  1   1375.56 6621.6 987.50 80.7605 < 2.2e-16 ***
    profession.cat     7    136.28 5382.3 909.39  1.1430  0.335906    
    ---
    Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

    Cette fois-ci, pour l’âge, on a une valeur de p faible (0.00551) et b=0.04289.

    Les autres critères étant inchangés, chaque augmentation de l’âge de 10 ans augmentera le score de relation de 0.4289.

    On peut le voir en faisant deux prédictions.

          1
    26.19871
          1
    26.62757

    Calculons la différence :

    [1] 0.42886

    Validité du modèle


  • La régression linéaire simple

    Un fichier de données

    Travaillons sur une enquête de satisfactions dans un hôpital, récupéré lors d’un cours de FUN (France Unité Numérique). Les fichiers sont disponibles ici.

    Par la suite, ces données seront stockées dans la variable satis .

    Dans ces données comme souvent, les observations sont en lignes et les variables en colonnes.

    Présentation

    On cherche à expliquer une variable quantitative Y à l’aide d’une variable quantitative X en utilisant un modèle linéaire :

    Y=a + b \times X + \textrm{bruit}

    En pratique, on devra vérifier que le bruit suit une loi normale.

    Un exemple

    Étudions si le score de relation varie en fonction de l’âge des personnes.

    Calculons les paramètres avec la commande lm(Y X) :

    Call:
    lm(formula = score.relation ~ age, data = satis)

    Residuals:
       Min      1Q  Median      3Q     Max
    -22.047  -2.447   1.339   3.620   5.673

    Coefficients:
               Estimate Std. Error t value Pr(>|t|)    
    (Intercept) 33.76634    0.84496  39.962   <2e-16 ***
    age          0.02668    0.01485   1.796   0.0734 .  
    ---
    Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

    Residual standard error: 4.609 on 347 degrees of freedom
     (185 observations deleted due to missingness)
    Multiple R-squared:  0.00921,        Adjusted R-squared:  0.006355
    F-statistic: 3.226 on 1 and 347 DF,  p-value: 0.07336

    On y voit les coefficients avec leur p-value respectifs :
    - a = 33.76634 avec p=<2e-16
    - b = 0.02668 avec p = 0.0734

    Mais on y trouve aussi la valeur du p-value (0.07336), que l’on avait dans la test de corrélation linéaire :

            Pearson's product-moment correlation

    data:  satis$score.relation and satis$age
    t = 1.796, df = 347, p-value = 0.07336
    alternative hypothesis: true correlation is not equal to 0
    95 percent confidence interval:
    -0.009102243  0.198945290
    sample estimates:
          cor
    0.09596955

    Cette valeur étant trop élevée (supérieure à 0.05), on peut pas affirmer que les deux variables sont liés.

    Test de normalité du bruit

    Pour juger de la validité d’un modèle de régression, on peut tracer un histogramme :

    On voit que le bruit ne suit pas une loi normale. Le modèle n’est pas valide.

    Représentation graphique

    Cas particulier : la variable X est binaire

    Cherchons à expliquer le score de relation par le fait de recommander l’établissement.

    Préparons la variable binaire :

    Calculons les coefficients :

    Call:
    lm(formula = score.relation ~ recommander.b, data = satis)

    Residuals:
        Min       1Q   Median       3Q      Max
    -19.1091  -1.6826   0.8909   2.9975   7.8909

    Coefficients:
                 Estimate Std. Error t value Pr(>|t|)    
    (Intercept)    32.1091     0.3918  81.959   <2e-16 ***
    recommander.b   4.5735     0.4763   9.602   <2e-16 ***
    ---
    Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

    Residual standard error: 4.109 on 338 degrees of freedom
     (194 observations deleted due to missingness)
    Multiple R-squared:  0.2143,        Adjusted R-squared:  0.212
    F-statistic: 92.19 on 1 and 338 DF,  p-value: < 2.2e-16

    On voit que les valeurs de p sont faibles.

    On lit aussi b=4.5735.

    Si la variable recommande augmente de 1 (passe de 0 à 1), le score de relation augmente de 4.5735.

    Comparons avec le test de Student :

            Two Sample t-test

    data:  score.relation by recommander.b
    t = -9.6016, df = 338, p-value < 2.2e-16
    alternative hypothesis: true difference in means is not equal to 0
    95 percent confidence interval:
    -5.510459 -3.636576
    sample estimates:
    mean in group 0 mean in group 1
          32.10909        36.68261

    On y retrouve la p-value très faible.

    On voit aussi l’écart des moyennes entre les deux sous-groupes :

    [1] 4.57352

    Une autre façon de trouver ces valeurs est de réaliser deux prédictions :

          1
    32.10909
          1
    36.68261
    [1] 4.57352

SPIP | | Plan du site | Suivre la vie du site RSS 2.0