1 Rappels et objectifs

Dans cet exercice, l’objectif est d’utiliser le logiciel R pour estimer un modèle de régression linéaire permettant, à partir de la mesure de la taille de l’empan, de prédire la taille d’un humain. L’empan correspond à la distance entre l’extrêmité du pouce et celle de l’auriculaire.

En notant \(y_i\) la taille de l’individu \(i\), et \(x\) son empan, il s’agit de regarder si la taille dépend linéairement de l’empan. On pose alors, pour tous les individus \(i = 1, \\ldots, n\):

\[y_i = \beta_0 x_i + \beta_1 + \varepsilon_i,\] avec \(\mathbb{E}(\varepsilon_i) = 0, \quad \forall i \in 1,\ldots, n\), \(\mathbb{E}(\varepsilon_i \varepsilon_j) = 0, \forall i \ne j\), et \(\mathbb{V}(\varepsilon_i) = \sigma^2_{\varepsilon}, \quad \forall i = 1, \ldots, n.\)

En termes matriciels, on peut noter : \[\boldsymbol y = \boldsymbol X \boldsymbol \beta + \boldsymbol \varepsilon,\] avec \(\boldsymbol \varepsilon \sim \mathcal{N}(0, \Sigma^2)\), et \[\begin{align*} \textrm{où } \boldsymbol y = \begin{bmatrix} y_1 \\ y_2 \\ \vdots \\ y_n \end{bmatrix}, \, \boldsymbol X = \begin{bmatrix} 1 & x_{1,1} \\ 1 & x_{1,2} \\ 1 & \vdots \\ 1 & x_{1,n} \end{bmatrix}, \, \boldsymbol \beta = \begin{bmatrix} \beta_0\\ \beta_1\\ \end{bmatrix} \textrm{ et } \boldsymbol \varepsilon = \begin{bmatrix} \varepsilon_1\\ \varepsilon_2\\ \vdots\\ \varepsilon_n \end{bmatrix}. \end{align*}\]

La méthode des moindres carrés ordinaires (MCO) propose une estimation \((\hat\alpha, \hat\beta)\) telle que la somme des carrés des résidus soit minimisée: \[\arg \min_{\boldsymbol \beta}\mid \mid \boldsymbol y - \boldsymbol X \boldsymbol \beta \mid \mid^2 = \arg \min_{\boldsymbol \beta} \sum_{i=1}^{n} (y_i - x_i \beta)^2.\]

Les résidus correspondent à l’écart entre la valeur observée de la taille \(y_i\) et celle prédite par le modèle \(\hat y_i\) : \(e_i = y_i - \hat y_i\).

Le modèle estimé s’écrit :

\[\hat{y_i} = \hat{\beta_0} + \hat{\beta_1} x_i,\] soit, en termes matriciels: \[\hat{\boldsymbol y} = \boldsymbol X \hat{\boldsymbol \beta},\] \[\begin{align*} \textrm{où } \hat{\boldsymbol y} = \begin{bmatrix} \hat{y}_1 \\ \hat{y}_2 \\ \vdots \\ \hat{y}_n \end{bmatrix}, \, \boldsymbol X = \begin{bmatrix} 1 & x_{1,1} \\ 1 & x_{1,2} \\ 1 & \vdots \\ 1 & x_{1,n} \end{bmatrix}, \textrm{ et } \hat{\boldsymbol \beta} = \begin{bmatrix} \hat{\beta}_0\\ \hat{\beta}_1\\ \end{bmatrix}. \end{align*}\]

La condition du premier ordre donne1 :

2 Le jeu de données

Sur AMeTICE, téléchargez le fichier empan.csv. Ce fichier contient 40 lignes. Chaque ligne correspond aux caractéristiques d’étudiant(e)s. (Note : le fichier est également disponible sur mon site : <egallic.fr/Enseignement/L3_EcoFi/Exercices/empan.csv>.)

Chargez ce tableau de données dans R à l’aide d’une fonction du package {readr}. Vous nommerez l’objet dans lequel vous chargerez les données df. Les premières lignes de ce tableau sont comme suit :

## # A tibble: 40 × 6
##    empan_main_forte empan_main_faible   age genre taille forte
##               <dbl>             <dbl> <dbl> <chr>  <dbl> <chr>
##  1             19                19      19 H        172 D    
##  2             20.5              20.5    27 H        179 G    
##  3             21                21      26 H        179 G    
##  4             19                19      27 F        160 D    
##  5             21                22      25 H        186 D    
##  6             19                18.5    25 H        178 D    
##  7             19                19      20 H        182 B    
##  8             21                22      21 H        179 D    
##  9             23                22      19 H        186 D    
## 10             20                20      20 F        163 D    
## # … with 30 more rows

Les colonnes sont les suivantes (les caractéristiques des individus) :

3 Partie 1 : Modélisation

3.1 Question 1

Calculez les statistiques descriptives suivantes, pour les vairables taille et empan_main_forte :

  • moyenne ;
  • écart-type ;
  • premier et troisième quartile ;
  • médiane ;
  • minimum ;
  • maximum.

3.2 Question 2

Affichez le nombre de droitiers, de gauchers et d’ambidextres. Ensuite, convertissez ces fréquences en proportions.

3.3 Question 3

À l’aide de la fonction qplot() du package {ggplot2}, tracez un nuage de point montrant la relation entre la taille et l’empan de la main forte. Vous devriez obtenir un graphique similaire à celui ci-dessous.

3.4 Question 4

Calculez la corrélation entre la taille de l’empan de la main forte et la taille des individus.

3.5 Question 5

Dans un objet que vous appellerez n, stockez le nombre d’observations dans le tableau de données df.

3.6 Question 6

Créez un vecteur que vous nommerez constante. Cet objet doit contenir la valeur 1 répétée n fois.

3.7 Question 7

Créez un vecteur que vous nommerez y. Cet objet doit contenir les valeurs la colonne taille du tableau df. Cet objet sera notre variable de réponse, celle que nous souhaitons pouvoir prédire à l’aide du modèle de régression linéaire. Les premières valeurs de y seront comme suit :

## [1] 172 179 179 160 186 178

3.8 Question 8

Créez une matrice que vous nommerez X, qui contiendra deux colonnes : une première contenant les valeurs de constante, et une deuxième contenant les valeurs de la colonne empan_main_forte de df. Les premières valeurs de X seront comme suit :

##      [,1] [,2]
## [1,]    1 19.0
## [2,]    1 20.5
## [3,]    1 21.0
## [4,]    1 19.0
## [5,]    1 21.0
## [6,]    1 19.0

3.9 Question 9

Calculez la transposée de X, c’est-à-dire \(\boldsymbol X^t\).

3.10 Question 10

Calculez, à l’aide d’un produit matriciel, la matrice \(\boldsymbol X^t \boldsymbol X\)

3.11 Question 11

Calculez l’inverse de la matrice de la fonction précédente, c’est-à-dire \(\left(\boldsymbol X^t \boldsymbol X\right)^{-1}\)

3.12 Question 12

Calculez le vecteur colonne \(\boldsymbol X^t \boldsymbol y\)

3.13 Question 13

Calculez le vecteur des coefficients de régression par la méthode des moindres carrés ordinaires, c’est-à-dire \(\hat{\boldsymbol\beta} = \left(\boldsymbol X^t \boldsymbol X\right)^{-1} \boldsymbol X^t \boldsymbol y\). Stockez le résultat dans un objet que vous nommerez hat_beta.

3.14 Question 14

Extrayez chaque coefficient de hat_beta (le coefficient associé à la constane – i.e., la pente ici – et le coefficient associé à la taille de l’empan).

3.15 Question 15

Calculez les valeurs prédites, c’est-à-dire \(\hat{\boldsymbol y} = \boldsymbol X \hat{\boldsymbol\beta}\). Stockez les valeurs dans un objet que vous nommerez y_pred.

3.16 Question 16

Calculez les résidus \(e = \boldsymbol y - \boldsymbol{X}\hat{\boldsymbol\beta}\). Stockez le résultat dans un objet que vous nommerez residus.

3.17 Question 17

Calculez la somme des carrés des résidus, c’est-à-dire \(\text{SCR} = \sum_{i=1}^{n} \left( y_i - \hat{y_i}\right)^2\). Stockez le résultat dans un objet que vous nommerez somme_carre_residus.

3.18 Question 18

Pour calculer le coefficient de détermination, le \(R^2\), nous pouvons au préalable calculer la somme des carrés des écarts expliqués ainsi que la somme des carrés totale.

La variance peut se décomposer en deux termes : une part expliquée par le modèle et une part inexpliquée :

\[\underbrace{(y_i - \bar{y})}_{\text{Ecart total}} = \underbrace{(\hat{y}_i - \bar{y})}_{\text{Écart expliqué}} + \underbrace{(y_i - \hat{y}_i)}_{\text{Écart résiduel}},\] avec \(\overline y = \frac{1}{n}\sum_{i=1}^{n} y_i\) la moyenne de\(y\).

On peut montrer que :

\[\underbrace{\sum_{i=1}^{n}(y_i - \bar{y})^2}_{\text{SCT}} = \underbrace{\sum_{i=1}^{n}(\hat{y}_i - \bar{y})^2}_{\text{SCE}} + \underbrace{\sum_{i=1}^{n}(y_i - \hat{y}_i)^2}_{\text{SCR}},\] avec :

  • \(\text{SCT}\) : la somme des carrés totale
  • \(\text{SCE}\) : la somme des carrés des écarts expliqués par le modèle
  • \(\text{SCR}\) : la somme des carrés des résidus

Calculez \(\text{SCT}\) et \(\text{SCE}\) et stockez les valeurs dans des objets que vous nommerez somme_carres_totale et somme_carres_expliques, respectivement

3.19 Question 19

Calculez le coefficient de détermination : \(R^2 = \frac{\text{SCE}}{\text{SCT}}\)

4 Rappels sur les tests de nullité des coefficients de la régression linéaire

À présent, nous souhaitons pouvoir effectuer des tests de significativité des coefficients de la régression. Le test se présente sous la forme suivante : \[\begin{align*} \begin{cases} H_0 : \beta_i = 0\\ H_1 : \beta_i \ne 0 \end{cases}, i = 1, 2 \end{align*}\]

Ce test s’appuie sur la statistique de test suivante : \[\begin{align*} T = \frac{\hat{\beta}_i - \beta_{i,H_0}}{\hat{\sigma}_{\hat{\beta}_i}} \sim \mathcal{S}t(n-m-1), \end{align*}\] avec \(\beta_{i,H_0}\) la valeur de \(\beta_i\) sous l’hypothèse nulle, \(\hat{\sigma}_{\hat{\beta}_i}\) l’estimation de l’écart-type de l’estimation du paramètre \(\beta_i\).

Pour effectuer ce test bilatéral, on peut lire dans la table de la loi de Student deux fractiles tels que : \[\begin{align*} \mathbb{P}\left( -t_{1-\alpha/2} < \frac{\hat{\beta}_i - \alpha_{i,H_0}}{\hat{\sigma}_{\hat{\beta}_i}} < t_{1-\alpha/2} \right) = 1 - \alpha. \end{align*}\] avec \(\alpha\) le risque de première espèce (le risque de rejeter \(H_0\) alors qu’elle est vraie).

À partir des observations, il est possible de calculer : \[\begin{align*} t_{i,\textrm{obs.}} = \frac{\hat{\beta}_i}{\hat{\sigma}_{\hat{\beta}_i}}. \end{align*}\]

La règle de décision est la suivante :

4.1 Question 20

Calculez la variance des erreurs \(\hat{\sigma}^2_\varepsilon = \frac{\text{SCR}}{n-m-1}\). Stockez le résultat dans un objet que vous nommerez hat_sigma_2_u.

4.2 Question 21

Calculez la matrice de variance-covariance des estimateurs \(\mathbb{V}\left(\hat{\boldsymbol\beta}\right) = \hat{\sigma}^2_\varepsilon \left(\boldsymbol X^t \boldsymbol X\right)^{-1}\). Stockez le résultat dans un objet que vous nommerez var_cov.

4.3 Question 22

Extrayez les éléments de la diagonale de la matrice de variance-covariance (les variances, donc), puis calculez leur racine carrée de manière à obtenir les erreurs-types \(\hat{\sigma}_{\hat{\boldsymbol\beta}}\). Stockez le résultat dans un objet que vous nommerez hat_sigma_betas.

4.4 Question 23

Pour chaque coefficient, calculez la statistique observée du test de nullité des coefficients \(t_{i,\textrm{obs.}} = \frac{\hat{\beta}_i}{\hat{\sigma}_{\hat{\beta}_i}}\). Stockez le résultat dans un objet (un vecteur) que vous nommerez t_obs.

4.5 Question 24

À l’aide de la fonction qt(), stockez dans un objet que vous nommerez t_tab le quantile d’ordre 95% d’une Student à n-m-1 degrés de libertés.

4.6 Question 25

Comparez les valeurs de t_obs avec celles de t_tab. Concluez pour chaque coefficient.

4.7 Question 26

À l’aide de la fonction pt(), calculez la p-value associée au test de nullité de chaque coefficient (rappel : nous effectuons un test bilatéral ici).

4.8 Question 27

Retrouvez l’ensemble des résultats calculés précédemment en effectuant une régression linéaire à l’aide des fonctions lm() et summary(). Stockez le résultat dans un objet que vous nommerez reg.

## 
## Call:
## lm(formula = taille ~ 1 + empan_main_forte, data = df)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -17.150  -7.343   0.108   5.252  31.907 
## 
## Coefficients:
##                  Estimate Std. Error t value Pr(>|t|)    
## (Intercept)        96.276     20.978   4.589 4.75e-05 ***
## empan_main_forte    3.885      1.045   3.718 0.000645 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 9.489 on 38 degrees of freedom
## Multiple R-squared:  0.2668, Adjusted R-squared:  0.2475 
## F-statistic: 13.82 on 1 and 38 DF,  p-value: 0.0006453

4.9 Question 28

À l’aide d’un mètre-ruban, mesurez la taille de votre empan. En utilsant le modèle estimé, prédisez votre taille. Comparez avec la réalité.

5 Ajout de nouvelles données : nettoyage

Certain•es étudiant•es de L3 Eco-Fi ont accepté de répondre à un sondage dans lequel il leur était demandé de répondre à des questions permettant d’avoir de nouvelles observations. Les réponses sont disponibles en ligne, à l’adresse suivante : http://egallic.fr/Enseignement/L3_EcoFi/Exercices/empan_L3_EF.csv

Dans cette partie de l’exercice, nous allons dans un premier temps nettoyer les nouvelles données et les mettre dans un format similaire à celles ayant servi à l’estimation du modèle. Ensuite, nous utiliserons le modèle estimé pour faire des prévisions sur la taille des étudiant•es de L3 Eco-Fi.

Note 1 : ici, nous avons la réponse donnée par les étudiant•es au sujet de leur taille. Nous pourrons donc comparer la prévision donnée par le modèle avec leur réponse. Ce nouvel échantillon de valeurs nous permet de tester les capacités prédictives du modèle sur des données n’ayant pas servi à l’apprentissage du modèle.

Note 2 : les données ont été anonymisées.

5.1 Question 29

Chargez les données situées à l’adresse suivante dans un objet que vous nommerez df_l3 : http://egallic.fr/Enseignement/L3_EcoFi/Exercices/empan_L3_EF.csv. Il s’agit d’un fichier CSV dont les champs sont séparés par des virgules.

5.2 Question 30

Renommez les colonnes à l’aide de la fonction rename() de {dplyr} comme suit :

Nouveau nom de colonne Ancien nom de colonne
empan_main_forte Q00_Empan main forte
empan_main_faible Q00_Empan main faible
age Q01_Age
genre Q02_Genre
taille Q03_Taille
forte Q04_Main forte type

5.3 Question 31

Modifiez df_l3 de sorte que seules les colonnes suivantes soient conservées : empan_main_forte, empan_main_faible, age, genre, taille, forte

5.4 Question 32

La colonne genre de df_l3 contient des valeurs du type 1 : Homme pour les hommes et 2 : Femme pour les femmes. Modifiez les observations de cette colonne de sorte que :

  • 1 : Homme devienne H
  • 2 : Femme devienne F.

Pour ce faire, vous pourrez utiliser la fonction case_when() de {dplyr}.

5.5 Question 33

La colonne forte de df_l3 contient des valeurs du type 1 : Gauche pour les gauchers, 2 : Droite pour les droitiers et 3 : Je suis ambidextre pour les ambidextres. Modifiez les observations de cette colonne de sorte que :

  • 1 : Gauche deviennt G
  • 2 : Droite devienne D
  • 3 : Je suis ambidextre devienne B

5.6 Question 34

La colonne empan_main_faible de df_l3 comporte une valeur manquante. Modifiez df_l3 de manière à supprimer l’observation pour laquelle une valeur est manquante pour empan_main_faible. Pour ce faire, vous pourre faire appel à la fonction filter() de {dplyr}.

5.7 Question 35

Une personne a indiqué une taille d’empan de 182 cm pour la main forte et de 187 cm pour la main faible. Retirez les observations de df_l3 pour lesquelles les valeurs dans les colonnes empan_main_forte ou empan_main_faible sont supérieures à 50. Pour ce faire, vous pourrez faire appel à la fonction filter() de {dplyr}.

À l’issue de cette quesiton, le nouveau jeu d’observations doit ressembler à ceci :

## # A tibble: 7 × 6
##   empan_main_forte empan_main_faible   age genre taille forte
##              <dbl>             <dbl> <dbl> <chr>  <dbl> <chr>
## 1             26                19      21 H        167 D    
## 2             21.5              21.5    19 H        182 D    
## 3             20                19      21 H        180 D    
## 4             21.5              21.5    21 H        180 G    
## 5             18                17      21 F        173 D    
## 6             16                15      21 H        177 D    
## 7             19                15      22 H        188 D

5.8 Question 36

Construisez une nouvelle matrice nommée X_new contenant :

  • une colonne de 1 pour la constante
  • une colonne avec les observations de l’empan pour la main forte, en utilisant les valeurs de la colonne empan_main_forte du tableau de données df_l3

5.9 Question 37

Calculez, à l’aide de vos coefficients estimés contenus dans hat_beta, la taille prédite par votre modèle pour les étudiant•es de L3 Eco-Fi.

5.10 Question 38

Calculez les résidus pour ces prévisions (rappelez-vous que dans ce cas précis, vous connaissez les valeurs observées de la taille des étudiant•es, celles-ci étant contenues dans la colonne taille de df_l3).

5.11 Question 39

Calculez l’erreur quadratique moyenne obtenue sur ces prédictions.

5.12 Question 40

Dans une question précédente, vous avez estimé votre modèle à l’aide de la fonction lm() et stocké le résultat dans un objet que vous avez nommé reg. Utilisez la fonction predict() appliquée à votre objet reg et à votre tableau de données df_l3. À quoi correspondent les valeurs retournées ?

5.13 Question 41

Stockez le résultat retourné par la fonction predict() à la question précédente dans une colonne nommée taille_pred dans le tableau df_l3.

5.14 Question 42

À l’aide d’un nuage de point, graphez la taille des individus (à la fois celle observée et celle prédite) en fonction de l’empan de la main forte. Faites dépendre la couleur des points selon le type de la taille : observée ou prédite par le modèle.


  1. On utilise les propriétés suivantes : \(\frac{\partial \boldsymbol x^t \boldsymbol A}{\partial \boldsymbol x} = \boldsymbol A^t\), \(\frac{\partial \boldsymbol A \boldsymbol x}{\partial \boldsymbol x} = \boldsymbol A\) et \(\frac{\partial a \boldsymbol \varepsilon}{\partial \boldsymbol x} = a \frac{\partial u}{\partial \boldsymbol x}\), avec \(u = u(\boldsymbol x)\).↩︎