Tutoriel d'Econométrie (for dummies) : les MCO sur R

Published 2023-03-29


Introduction🔗

Ce tutoriel présente les bases pour effectuer des régressions linéaires simples sur R. Tout d'abord, si ce n'est pas déjà fait, installez R (le logiciel) puis R Studio (l'interface) sur votre ordinateur. Avant de commencer, veillez à prendre en main R Studio. Je vous conseille de regarder cette vidéo (durée: 2 minutes). Il en existe pleins d'autres. Beaucoup de ressources sont mises à disposition sur internet par la grande communauté des utilisateurs de R.

Dans le cadre de l'exercice, nous allons étudier la reproduction intergénérationelle de l'éducation. L'économétrie nous permettra de répondre aux questions suivantes : Le niveau d'éducation scolaire des parents a-t-il un impact sur le niveau d'éducation scolaire de leurs enfants ? Quelle est la magnitude de cet impact ? Quels autres facteurs peuvent jouer un rôle ?

Pour répondre à ces questions, nous utilisons les données mises à disposition par Jeffrey M. Wooldridge comme ressources complémentaires à son livre Wooldridge, J. M. (2015). Introductory econometrics: A modern approach. Cengage learning. D'autres bases de données sont disponibles dans le package "Wooldridge".

Vous pouvez télécharger le code R pour suivre les étapes du tutoriel au fil de votre lecture.

Prise en main🔗

R repose sur des packages et bibliothèques (libraries) qui contiennent le code de différentes fonctions. Il faut donc d'abord installer ceux dont on a besoin pour cet exercice. Inscrivez dans votre console :

install.packages("wooldridge") # pour télécharger les données de Wooldridge
install.packages("dplyr") # pour manipuler les données

Ensuite, pour utiliser ces packages, il faut les appelez dans la bibliothèque. Ecrivez sur votre éditeur :

# Bibliothèques
library(dplyr) # pour faire des manipulations de données
library(wooldridge) # pour télécharger les données de Wooldridge

Les données🔗

Pour importer les données sur les niveaux d'éducation des individus et de leurs parents, on importe les données htv de Wooldridge. Nous écrivons dans l'éditeur :

# Importer les données
data(htv) 

"htv" est un object enregistré dans la fenêtre environnement des données. Le détails des variables se trouve sur ce site.

Il y a plusieurs façons de visualiser la base de données. Tout d'abord, regardons combien d'observations et de variables contient la base de données en utilisant la fonction dim( ), pour dimension. Nous écrivons dans l'éditeur :

dim(htv) 

Dans la console apparaît :

> dim(htv)
[1] 1230   23

Cela signifie qu'il y a 1 230 observations et 23 variables dans la base de données.

La fonction View( ) ouvre une nouvelle fenêtre sur l'ensemble des données. La fonction head( ) affiche les premières lignes de la base de données dans la console. La fonction names( ) affiche le noms des variables dans la console. Nous écrivons dans l'éditeur :

# Visualiser les données
head(htv) 

Dans la console apparaît :

> head(htv) 
       wage     abil educ ne nc west south exper motheduc fatheduc brkhme14 sibs urban ne18 nc18 south18 west18
1 12.019231 5.027738   15  0  0    1     0     9       12       12        0    1     1    1    0       0      0
2  8.912656 2.037170   13  1  0    0     0     8       12       10        1    4     1    1    0       0      0
3 15.514334 2.475895   15  1  0    0     0    11       12       16        0    2     1    1    0       0      0
4 13.333333 3.609240   15  1  0    0     0     6       12       12        0    1     1    1    0       0      0
5 11.070110 2.636546   13  1  0    0     0    15       12       15        1    2     1    1    0       0      0
6 17.482517 3.474334   18  1  0    0     0     8       12       12        0    2     1    1    0       0      0
  urban18   tuit17    tuit18    lwage expersq      ctuit
1       1 7.582914  7.260242 2.486508      81 -0.3226714
2       1 8.595144  9.499537 2.187472      64  0.9043922
3       1 7.311346  7.311346 2.741764     121  0.0000000
4       1 9.499537 10.162070 2.590267      36  0.6625338
5       1 7.311346  7.311346 2.404249     225  0

Les variables qui nous intéressent sont :

On ajoutera par la suite les variables :

Statistiques descriptives🔗

Avant toute régression, il faut comprendre ce que nous avons dans les données. Nous calculons les statistiques qui établissent une description basique des variables qui nous intéressent dans le cadre de notre étude avec la fonction summary( ). Sur l'éditeur, nous écrivons :

summary(htv[,c("educ","motheduc","fatheduc","abil","sibs","urban")])

Dans la console apparaît :

> summary(htv[,c("educ","motheduc","fatheduc","abil","sibs","urban")])
      educ          motheduc        fatheduc          abil              sibs            urban       
 Min.   : 6.00   Min.   : 0.00   Min.   : 0.00   Min.   :-5.6315   Min.   : 0.000   Min.   :0.0000  
 1st Qu.:12.00   1st Qu.:12.00   1st Qu.:11.00   1st Qu.: 0.5662   1st Qu.: 2.000   1st Qu.:1.0000  
 Median :12.00   Median :12.00   Median :12.00   Median : 2.1498   Median : 3.000   Median :1.0000  
 Mean   :13.04   Mean   :12.18   Mean   :12.45   Mean   : 1.7966   Mean   : 2.949   Mean   :0.8171  
 3rd Qu.:15.00   3rd Qu.:12.00   3rd Qu.:14.00   3rd Qu.: 3.4615   3rd Qu.: 4.000   3rd Qu.:1.0000  
 Max.   :20.00   Max.   :20.00   Max.   :20.00   Max.   : 6.2637   Max.   :13.000   Max.   :1.0000

Régressions🔗

Modèle 1🔗

Nous voulons savoir si le niveau d'éducation des parents influence celui de leurs enfants. On pose le modèle suivant :

educi = b0 + b1 motheduci + b2 fatheduci + ui

avec i désignant l'observation (l'individu), b0 la constante, b1 l'effet moyen d'une année d'éducation supplémentaire d'une mère sur le nombre d'années d'éducation d'un individu, b2 l'effet moyen d'une année d'éducation supplémentaire d'un père sur le nombre d'années d'éducation d'un individu, et ui le terme d'erreur.

La méthode des moindres carrés ordinaires (MCO) nous permet d'estimer les coefficients b0, b1 et b2 en minimisant la somme des carrés des résidus, ces résidus étant les estimateurs des termes d'erreur ui. Le modèle s'appuie sur certaines hypothèses, qui, si respectées, estime correctement (sans biais) les coefficients.

On utilise la fonction lm( ) pour estimer notre modèle linéaire et la fonction summary( ) pour afficher les résultats. Nous écrivons dans l'éditeur :

regression1 <- lm(educ ~ motheduc + fatheduc, data = htv)
summary(regression1)

La console affiche les résultats suivants :

> regression1 <- lm(educ ~ motheduc + fatheduc, data = htv) # lm = modèle linéaire
> summary(regression1)

Call:
lm(formula = educ ~ motheduc + fatheduc, data = htv)

Residuals:
    Min      1Q  Median      3Q     Max 
-6.2898 -0.9400 -0.4037  1.1239  8.1672 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)  6.96435    0.31982  21.776   <2e-16 ***
motheduc     0.30420    0.03193   9.528   <2e-16 ***
fatheduc     0.19029    0.02228   8.539   <2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 2.042 on 1227 degrees of freedom
Multiple R-squared:  0.2493,	Adjusted R-squared:  0.248 
F-statistic: 203.7 on 2 and 1227 DF,  p-value: < 2.2e-16

Le résumé de la régression est organisé en 4 parties:

  1. Call : rappelle la régression effectuée.
  2. Residuals : présente des statistiques sur les résidus (valeurs minimum, 1er quartile, médiane, 3ème quartile, maximum).
  3. Coefficients : présente les coefficients estimés, ainsi que les écart-types, les statistiques de Student (qui teste l'hypothèse nulle selon laquelle le coefficient est égal à zéro (H0 : b=0), les p-valeur et les niveaux de significativité des estimateurs.
  4. Statistiques complémentaires : présente les écart-types estimés des résidus, le R carré (ajusté et non-ajusté du nombre de variables), et les résultat du test de Fisher selon lequel aucun des coefficient n'est statistiquement différent de zéro.

Résultats du modèle 1🔗

Les résultats du modèle nous permettent d'écrire la relation linéaire suivante :

educ = 6.96 + 0.30 motheduc + 0.19 fatheduc

Modèle 2🔗

Nous voulons augmenter l'adéquation de notre modèle, c'est-à-dire augmenter le R carré et éviter les biais dans les coefficients estimés.

Nous ajoutons la variable d'habileté qui traduit des capacités cognitives des individus :

educi = b0 + b1 motheduci + b2 fatheduci + b3 abili + ui

Nous écrivons dans l'éditeur :

regression2 <- lm(educ ~ motheduc + fatheduc + abil, data = htv)
summary(regression2)

La console affiche :

> regression2 <- lm(educ ~ motheduc + fatheduc + abil, data = htv)
> summary(regression2)

Call:
lm(formula = educ ~ motheduc + fatheduc + abil, data = htv)

Residuals:
   Min     1Q Median     3Q    Max 
-5.407 -1.195 -0.199  1.076  7.012 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)  8.44869    0.28954  29.180  < 2e-16 ***
motheduc     0.18913    0.02851   6.635 4.87e-11 ***
fatheduc     0.11109    0.01988   5.586 2.85e-08 ***
abil         0.50248    0.02572  19.538  < 2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 1.784 on 1226 degrees of freedom
Multiple R-squared:  0.4275,	Adjusted R-squared:  0.4261 
F-statistic: 305.2 on 3 and 1226 DF,  p-value: < 2.2e-16

Résultats du modèle 2🔗

Les résultats du modèle nous permettent d'écrire la relation linéaire suivante :

educ = 8.45 + 0.19 motheduc + 0.11 fatheduc + 0.50 abil

Modèle 3🔗

Dans un troisème, nous ajoutons d'autres variables qui sont censées avoir un effet sur l'éducation : le nombre de frères et soeurs, désigné par la variable sibs (siblings), et le lieu de vie, qui est soit urbain, soit rural, désigné par la variable urban.

educi = b0 + b1 motheduci + b2 fatheduci + b3 abili + b4 sibsi + b5 urbani + ui

Nous écrivons dans l'éditeur :

regression3 <- lm(educ ~ motheduc + fatheduc + abil + sibs + urban, data = htv)
summary(regression3)

La console affiche :

> regression3 <- lm(educ ~ motheduc + fatheduc + abil + sibs + urban, data = htv)
> summary(regression3)

Call:
lm(formula = educ ~ motheduc + fatheduc + abil + sibs + urban, 
    data = htv)

Residuals:
    Min      1Q  Median      3Q     Max 
-5.7411 -1.1774 -0.1683  1.1051  6.8351 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)  8.84210    0.32327  27.352  < 2e-16 ***
motheduc     0.16967    0.02865   5.923 4.10e-09 ***
fatheduc     0.10766    0.01984   5.428 6.88e-08 ***
abil         0.49087    0.02567  19.120  < 2e-16 ***
sibs        -0.10870    0.02788  -3.899 0.000102 ***
urban        0.27854    0.13326   2.090 0.036803 *  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 1.771 on 1224 degrees of freedom
Multiple R-squared:  0.4365,	Adjusted R-squared:  0.4342 
F-statistic: 189.7 on 5 and 1224 DF,  p-value: < 2.2e-16

Résultats du modèle 3🔗

Les résultats du modèle nous permettent d'écrire la relation linéaire suivante :

educ = 8.84 + 0.17 motheduc + 0.11 fatheduc + 0.49 abil − 0.11 sibs + 0.28 urban

Comment expliquer le biais du coefficient estimé de b1 ?

Vérification des hypothèses supplémentaires🔗

Nous avons fait des hypothèses quant aux corrélations entre éducation de la mère, capacités cognitives de son enfant, nombre de frères et soeurs et le fait d'habiter en ville. Il est possible de les vérifier. Pour cela, on peut écrire le modèle suivant :

motheduci = a0 + a1 abili + a2 sibsi + a2 urbani + ei

Nous écrivons dans l'éditeur :

regression4 <- lm(motheduc ~ abil + sibs + urban, data = htv)
summary(regression4)

Et apparaît dans la console :

> regression4 <- lm(motheduc ~ abil + sibs + urban, data = htv)
> summary(regression4)

Call:
lm(formula = motheduc ~ abil + sibs + urban, data = htv)

Residuals:
     Min       1Q   Median       3Q      Max 
-10.7605  -1.0483  -0.1568   0.9411   7.6347 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept) 11.49920    0.17679  65.044  < 2e-16 ***
abil         0.35561    0.02751  12.927  < 2e-16 ***
sibs        -0.18249    0.03207  -5.690 1.59e-08 ***
urban        0.70749    0.15329   4.615 4.33e-06 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 2.064 on 1226 degrees of freedom
Multiple R-squared:  0.181,	Adjusted R-squared:  0.179 
F-statistic: 90.31 on 3 and 1226 DF,  p-value: < 2.2e-16

Nos hypothèses sont vérifiées. Le nombre d'années d'éducation de la mère est :

Prédictions🔗

Nous pouvons maintenant évaluer le nombre moyen d'années d'éducation prédit pour un individu moyen qui habite en ville. Pour cela, on fixe la valeur de toute les variables explicatives à leur moyenne, c'est-à-dire motheduc = 12.19, fatheduc = 12.45, abil = 1.80, sibs = 2.95. On choisit la valeur urban = 1 qui signifie que l'individu vit en ville.

On calcule donc grâce à la formule obtenu du modèle 3:

^educ = 8.84 + 0.17 _motheduc + 0.11 _fatheduc + 0.49 _abil − 0.11 _sibs + 0.28 urban
^educ = 8.84 + 0.17 × 12.19 + 0.11 × 12.45 + 0.49 × 1.80 − 0.11 × 2.95 + 0.28 × 1
^educ = 13.1

L'individu avec ces caractéristiques aura en moyenne 13 années d'éducation, qui correspond au diplôme du bac.

Il est possible de jouer avec l'équation et de comparer la différence d'éducation entre deux individus aux caractéristiques différentes. Le code R fournit un exemple d'application de ce type.

Conclusion🔗

Dans cet exercice, nous avons démontré que le niveau d'éducation des individus dépend de plusieurs facteurs tels que le contexte familial, les capacités intellectuelles et le milieu de vie. Plus précisément, le niveau d'éducation des parents, la composition de la fratrie ainsi que le fait de vivre en ville ou à la campagne ont un impact significatif sur le niveau d'éducation des individus. Nous avons présenté le sens de l'impact de ces variables, positif et négatif, ainsi que la magnitude de leur impact, représenté par la valeur de leurs coefficients.

Bien que cette analyse soit limitée, nous constatons que la combinaison de ces facteurs peut engendrer de multiples inégalités dans la réussite scolaire avec des différences entre les milieux urbains et ruraux, entre les familles, ou même au sein des familles, entre les frères et soeurs. Il existe aussi certainement des différences entre les pays, mais les données que nous avons utilisées ne nous permettent pas de l'étudier.