[MOD4] : Analyse de variance simple et multiple

GEO UNIV’R Tunisie 2024

Auteur·rice

Claude Grasland, Malika Madelin

Date de publication

2024-05-13

library(sf, quietly= TRUE,warn.conflicts = F)
library(dplyr, quietly = TRUE,warn.conflicts = F)
library(knitr)
library(mapsf)
library(car,warn.conflicts = F,quietly=T)

L’objectif de cet exercice est de fournir une introduction aux modèles d’analyse de variance simple ou multiples dans lesquels une variable Y quantitative est fonction d’une ou plusieurs variables qualitatives X1, X2, X3…

1. Données

Nous allons importer un fichier de données portant sur les revenus de 17000 ménages tunisiens en 2021. Il est tiré de l’enquête consommation et revenu de l’INS dont on trouvera la description détaillée en cliquant ici

image

On peut télécharger librement les données en cliquant ici. Les fichiers obtenus sont au format stata avec l’extension .dta. Il est toutefois possible de les importer dans R avec le package haven puis de recoder les variables sous la forme de factors à l’aide du package labelled.

Télécharger le jeux de données mis en forme pour R

Importation des données

On commence par charger les données contenues dans le fichier enq_INS_conso_menages_2021.RDS à l’aide de la fonction readRDS() qui permet de lire les fichiers sauvegardés dans le format interne de R et on affiche les 6 premières lignes :

# Importe les données au format interne de R
base<-readRDS("data/ENQ-TUN-2021/enq_INS_conso_menages_2021.RDS") 

head(base)
  id reg    mil   sex age     mat        ins      csp nbp   pvr  rev
1  1  GT urbain homme  59   marie   primaire retraité   6 FALSE 5103
2  2  GT urbain homme  52   marie   primaire  employé   5 FALSE 5486
3  3  GT urbain femme  34 divorce secondaire  chomeur   2 FALSE 5962
4  4  GT urbain homme  65   marie   primaire  inactif   2 FALSE 3699
5  5  GT urbain homme  35   marie secondaire  ouvrier   4 FALSE 5058
6  6  GT urbain homme  43   marie   primaire  ouvrier   5 FALSE 3741

Liste des variables

On a légèrement changé le fichier initial de l’INS en simplifiant les noms des variables et en fusionnant certaines modalités. Nous avons décidé de retirer les données incomplètes pour lesquels il manque des informations telles que le sexe, l’âge ou la profession du chef de ménage. Pour cette raison les résultats obtenus seront très légèrement différents de ceux présentés sur le site de l’INS.

Les variables proposées sont les suivantes :

  • id : identifiant du ménage de 1 à 17114

  • reg : région de résidence (GT = Grand Tunis, NE = Nord-Est, …)

  • mil : milieu de résidence (urbain ou rural)

  • sex : sexe du chef de ménage

  • age : âge du chef de ménage

  • mat : situation matrimoniale du chef de ménage (célibataire, marié, veuf, divorcé)

  • ins : niveau d’instruction du chef de ménage (aucune, primaire, secondaire, supérieur)

  • csp : catégorie socio-professionnelle du chef de ménage (simplifiée par rapport au fichier de l’INS)

  • nbp : nombre de personnes composant le ménage

  • pvr : situation de pauvreté selon les critères de l’INS, c’est-à-dire en tenant compte par exemple du coût de la vie dans la région de résidence (Oui/Non)

  • rev : revenu annuel moyen divisé par le nombre de personnes du ménage (en DT / an)

Selection du tableau à analyser

On suppose qu’on ne s’intéresse qu’à quelques variables

don<-base[,c("reg","mil","sex", "ins", "age","rev")]
head(don)
  reg    mil   sex        ins age  rev
1  GT urbain homme   primaire  59 5103
2  GT urbain homme   primaire  52 5486
3  GT urbain femme secondaire  34 5962
4  GT urbain homme   primaire  65 3699
5  GT urbain homme secondaire  35 5058
6  GT urbain homme   primaire  43 3741

Résumé rapide

On effectue un résumé rapide du tableau à l’aide de la fonction summary():

summary(don)
 reg           mil           sex                ins            age        
 GT:3944   urbain:10836   homme:13996   aucun     :3742   Min.   : 19.00  
 NE:2458   rural : 6278   femme: 3118   primaire  :6979   1st Qu.: 46.00  
 NO:2502                                secondaire:4647   Median : 56.00  
 CE:2862                                supérieur :1746   Mean   : 56.34  
 CO:2330                                                  3rd Qu.: 66.00  
 SE:1845                                                  Max.   :109.00  
 SO:1173                                                                  
      rev        
 Min.   :   185  
 1st Qu.:  3035  
 Median :  4429  
 Mean   :  5519  
 3rd Qu.:  6496  
 Max.   :526271  
                 

Pour cette enquete l’INS a utilisé la méthode de tirage au sort par région, milieu, sexe et âge qui rend l’échantillon représentatif de la population tunisienne sans qu’il soit nécessaire d’introduire une procédure de redressement. Le fait que nous ayons retiré les quelques individus pour lesquels certaines valeurs étaient manquantes ne change pas fondamentalement les résultats.

2. Variable dépendante (Y)

On se propose d’expliquer la variable revenu annuel moyen par membre du ménage que l’on appellera par la suite de façon abrégée revenu annuel moyen. On va commencer par analyser rapidement les caractéristiques dela distribution statistique de cette variable.

Paramètres principaux

Un résumé rapide est obtenu à l’aide de la fonction summary() que l’on complète par le calcul de l’écart-type et du coefficient de variation.

res<-summary(don$rev)
ect<-sd(don$rev)
cv <- 100*sd(don$rev)/mean(don$rev)
res<-c(res,ect,cv)
names(res)<-c("Minimum", "Q1","Médiane","Moyenne","Q3","Maximum", "Ecart-type", "CV (%)")
kable(res, digits=1, caption = "Paramètres principaux des revenus en Tunisie")
Paramètres principaux des revenus en Tunisie
x
Minimum 185.0
Q1 3035.0
Médiane 4429.0
Moyenne 5519.4
Q3 6495.8
Maximum 526271.0
Ecart-type 7036.7
CV (%) 127.5
  • Nous obtenons un revenu annuel moyen de 5519 DT ce qui est un peu plus que la valeur publiée sur le site de l’INS qui est de 5426 DT. La différence s’explique, comme nous l’avons expliqué précédemment, par le fait que nous avons retiré quelques individus ayant des valeurs manquantes.

  • l’analyse des quantiles de la distribution indique que le revenu médian est de 4429 DT et que 50% des ménages ont des revenus compris entre Q1 = 3035 DT et Q3 = 6495 DT. Il existe toutefois des valeurs extrêmes puisque le minimum est de 185 DT et le maximum de 526271 DT.

  • La dispersion de la distribution des revenus est donc très forte comme en témoigne l’écart type de 7036 DT et surtout le coefficient de variation qui montre que l’écart-type est égal à 127.5% de la moyenne.

Forme de la distribution

On devine à l’aide des résultats précédents que la distribution comporte des valeurs exceptionnelles et doit être fortement dissymétriques à gauche.

par(mfrow=c(2,1))

hist(don$rev, 
     main="Histogramme",
     col="lightyellow",
     xlab="Revenu par habitant·e (log)")

boxplot(don$rev, 
        main = "Boîte à moustache",
        col="lightyellow",
        xlab ="Revenu par habitant·e (log)", 
        horizontal=T)

La distribution est effectivemet fortement dissymétrique à gauche en raison de la présence de valeurs exceptionnelles correspondant aux individus les plus riches. L’histogramme est de ce fait totalement illisible.

Transformation logarithmique

On décide de transformer la variable en son logarithme ce qui est une pratique courante lorsqu’on analyse les revenus des ménages. On espère ainsi que la nouvelle distribution deviendra plus symétrique voire gaussienne ce qui signifierait qu’elle est log-normale.

don$logrev<-log(don$rev)

par(mfrow=c(2,1))
hist(don$logrev, 
     main="Histogramme",
     col="lightyellow",
     xlab="Revenu par habitant·e (log)")

boxplot(don$logrev, 
        main = "Boîte à moustache",
        col="lightyellow",
        xlab ="Revenu par habitant·e (log)", 
        horizontal=T)

La distribution comporte encore des valeurs exceptionnelles à droite comme à gauche mais elle est désormais symétrique. Elle n’est donc pas véritablement log-normale car elle présente une sur-concentration des valeurs au centre. Nous n’allons cependant pas la modifier davantage et utiliser désormais le logarithme du revenu dans la suite des analyses.

3. Analyse de variance simple

On va tester tour à tour chacune des différentes variables qualitatives sélectionnées.

Modèle 1 : Le revenu moyen annuel (log) est-il différent en milieu urbain et en milieu rural ?

Dans le cas d’une variable qualitative à deux modalités, nous pourrions utiliser un test d’égalité des moyennes comme cela a été vu dans le premier cours de statistique bivariée. Mais nous préférons utiliser ici l’analyse de variance afin de pouvoir ensuite appliquer la même méthode avec les autres variables qualitatives ayant plus de deux modalités.

Paramètres principaux

On commence par calculer les paramètres principaux des variables logrev (Y) en fonction de la variable explicative (X).

Y <- don$logrev
X <- don$mil

# création de 2 objets avec les libellés, pour les mobiliser plus facilement
nameY <- "log. du revenu moyen (en DT/hab.)"
nameX <- "Milieu (Urbain/Rural)"

# calcul de la moyenne et de l'écart-type de Y selon les 2 modalités de X 
moy<-tapply(Y,X,mean)
ect<- tapply(Y,X,sd)
cv <- 100*ect/moy
tabres<-rbind(moy,ect,cv)
kable(tabres, caption = "Paramètres princiapux du revenu moyen annuel ")
Paramètres princiapux du revenu moyen annuel
urbain rural
moy 8.5667253 8.1360017
ect 0.5679606 0.5558948
cv 6.6298443 6.8325299

Les deux moyennes sont visiblement différentes et les revenus (en log) plus élevés en milieu urbain (8.57) qu’en milieu rural (8.13). Mais chaque milieu présente un fort écart-type (0.57 et 0.56) de sorte qu’il est difficile d’affirmer avec certitude que la différence entre les deux moyennes est significative si on ne fait pas un test statistique.

Visualisation graphique

Pour mieux apprécier la différence entre les deux distributions on réalise une boxplot permettant de comparer non seulement les moyennes mais aussi les quartiles et ainsi de mieux apprécier visuellement la différence entre les deux distributions.

boxplot(Y~X,
    col="lightyellow",
     cex.axis=0.6, 
     xlab=nameX, 
     ylab= nameY,
    horizontal=T)

Il y a effectivement un net décalage entre le centre des deux distributions où se trouvent la médiane et les quartiles Q1 et Q3.

Modélisation linéaire

On réalise le modèle d’analyse de variance en utilisant le modèle linéaire général, c’est-à-dire la fonction lm() qu’on a utilisé précédemment pour mettre en relation deux variables quantitatives à l’aide de modèles de régression. Puis on résume les parts de variance intra-groupe et inter-groupe à l’aide de la fonction anova().

mod<-lm(Y~X)
summary(mod)

Call:
lm(formula = Y ~ X)

Residuals:
    Min      1Q  Median      3Q     Max 
-2.9156 -0.3659 -0.0118  0.3454  5.0376 

Coefficients:
             Estimate Std. Error t value Pr(>|t|)    
(Intercept)  8.566725   0.005414 1582.36   <2e-16 ***
Xrural      -0.430724   0.008939  -48.19   <2e-16 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 0.5636 on 17112 degrees of freedom
Multiple R-squared:  0.1195,    Adjusted R-squared:  0.1194 
F-statistic:  2322 on 1 and 17112 DF,  p-value: < 2.2e-16
anova(mod)
Analysis of Variance Table

Response: Y
             Df Sum Sq Mean Sq F value    Pr(>F)    
X             1  737.5  737.46  2321.9 < 2.2e-16 ***
Residuals 17112 5434.9    0.32                      
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Interprétation des résultats

Comme nous avons utilisé le logarithme du revenu, il faut utiliser une transformation exponentielle pour analyser correctement les coefficients. En effet on a :

  • \(log(rev) = a + b\times mil\)

  • \(rev = exp(a + b\times mil)\)

  • \(rev = exp(a) \times exp(b)^{mil}\)

exp(mod$coefficients)
 (Intercept)       Xrural 
5253.8967919    0.6500385 

Dans cet exemple, les coefficients nous indiquent donc que le revenu moyen en milieu urbain est de 5254 DT/hab. (« (Intercept) »), tandis qu’il n’est que de en milieu rural. Le coefficient du modèle indique que le revenu ruar est égal à 65% de la valeur observée en milieu rural.

Vous avez sans doute remarqué que les valeurs moyennes de revenu en milieu urbain et rural que nous obtenons ici ne correspondant pas à celles fournies par l’INS. La différence s’explique par le fait que nous avons travaillé sur le logarithme des revenus et non pas sur les revenus. En procédant ainsi nous avons en fait comparé la différence entre les moyennes géométriques des individus situés en milieu urbain et rural et non pas la différence entre les moyennes arithmétiques.

\(Moy_{arithmétique} = \sum_{i=1}^{n}{X_i} / n\) \(Moy_{geométrique} = exp(\sum_{i=1}^{n}log({X_i}) / n)\)

Modèle 2 : Le revenu moyen annuel est-il lié au genre du chef de ménage ?

On rassemble nos quatre petits blocs de programme en un seul et on change juste le choix de la variable explicative. Désormais c’est à vous de faire les commentaires !

# Choix des variables
Y<-don$logrev 
X<- don$sex
nameY <-"log. du Revenu (en DT/hab.)"
nameX <- "Genre du chef de ménage"

# Paramètres principaux
tapply(Y,X,mean)
   homme    femme 
8.378079 8.546267 
tapply(Y,X,sd)
    homme     femme 
0.5958316 0.6025676 
# Visualisation
boxplot(Y~X,
    col="lightyellow",
     cex.axis=0.6, 
     xlab=nameX, 
     ylab= nameY,
    horizontal=T)

# Modélisation
mod<-lm(Y~X)
summary(mod)

Call:
lm(formula = Y ~ X)

Residuals:
    Min      1Q  Median      3Q     Max 
-3.1577 -0.3861 -0.0128  0.3657  4.7955 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept) 8.378079   0.005047 1660.07   <2e-16 ***
Xfemme      0.168188   0.011824   14.22   <2e-16 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 0.5971 on 17112 degrees of freedom
Multiple R-squared:  0.01169,   Adjusted R-squared:  0.01163 
F-statistic: 202.3 on 1 and 17112 DF,  p-value: < 2.2e-16
anova(mod)
Analysis of Variance Table

Response: Y
             Df Sum Sq Mean Sq F value    Pr(>F)    
X             1   72.1  72.131  202.34 < 2.2e-16 ***
Residuals 17112 6100.2   0.356                      
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# Paramètres
exp(mod$coefficients)
(Intercept)      Xfemme 
4350.643239    1.183159 

Que pouvez-vous dire des résultats ?

Modèle 3 : Le revenu des habitant·es est-il lié au niveau d’instruction du chef de ménage ?

Même programme mais avec une variable qualitative ayant quatre niveaux.

# Choix des variables
Y<-don$logrev
X<- don$ins
nameY <-"log. du Revenu (en DT/hab.)"
nameX <- "Instruction du chef de ménage"

# Paramètres principaux
tapply(Y,X,mean)
     aucun   primaire secondaire  supérieur 
  8.288205   8.295452   8.501042   8.874047 
tapply(Y,X,sd)
     aucun   primaire secondaire  supérieur 
 0.5629074  0.5562095  0.5908929  0.6076974 
# Visualisation
boxplot(Y~X,
    col="lightyellow",
     cex.axis=0.6, 
     xlab=nameX, 
     ylab= nameY,
    horizontal=T)

# Modélisation
mod<-lm(Y~X)
summary(mod)

Call:
lm(formula = Y ~ X)

Residuals:
    Min      1Q  Median      3Q     Max 
-3.0751 -0.3714 -0.0042  0.3619  4.8854 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept) 8.288205   0.009361 885.374   <2e-16 ***
Xprimaire   0.007247   0.011603   0.625    0.532    
Xsecondaire 0.212836   0.012578  16.922   <2e-16 ***
Xsupérieur  0.585841   0.016597  35.299   <2e-16 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 0.5726 on 17110 degrees of freedom
Multiple R-squared:  0.09098,   Adjusted R-squared:  0.09082 
F-statistic: 570.8 on 3 and 17110 DF,  p-value: < 2.2e-16
anova(mod)
Analysis of Variance Table

Response: Y
             Df Sum Sq Mean Sq F value    Pr(>F)    
X             3  561.6 187.184  570.82 < 2.2e-16 ***
Residuals 17110 5610.8   0.328                      
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# Paramètres
exp(mod$coefficients)
(Intercept)   Xprimaire Xsecondaire  Xsupérieur 
3976.691268    1.007273    1.237182    1.796502 

Que pouvez-vous dire des résultats ?

Modèle 4 : Le revenu des habitant·es est-il lié à la région où ils se trouvent ?

Même programme mais avec une variable qualitative ayant cinq niveaux.

# Choix des variables
Y<-don$logrev
X<- don$reg
nameY <-"log. du Revenu (en DT/hab.)"
nameX <- "Région"

# Paramètres principaux
tapply(Y,X,mean)
      GT       NE       NO       CE       CO       SE       SO 
8.739277 8.340811 8.231761 8.516970 8.062688 8.312937 8.390937 
tapply(Y,X,sd)
       GT        NE        NO        CE        CO        SE        SO 
0.5414742 0.5446345 0.5585463 0.5891304 0.5630847 0.5684727 0.5301464 
# Visualisation
boxplot(Y~X,
    col="lightyellow",
     cex.axis=0.6, 
     xlab=nameX, 
     ylab= nameY,
    horizontal=T)

# Modélisation
mod<-lm(Y~X)
summary(mod)

Call:
lm(formula = Y ~ X)

Residuals:
    Min      1Q  Median      3Q     Max 
-3.0926 -0.3644 -0.0166  0.3462  5.1109 

Coefficients:
             Estimate Std. Error t value Pr(>|t|)    
(Intercept)  8.739277   0.008881  984.01   <2e-16 ***
XNE         -0.398466   0.014333  -27.80   <2e-16 ***
XNO         -0.507516   0.014255  -35.60   <2e-16 ***
XCE         -0.222307   0.013696  -16.23   <2e-16 ***
XCO         -0.676588   0.014574  -46.42   <2e-16 ***
XSE         -0.426340   0.015732  -27.10   <2e-16 ***
XSO         -0.348340   0.018550  -18.78   <2e-16 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 0.5578 on 17107 degrees of freedom
Multiple R-squared:  0.1378,    Adjusted R-squared:  0.1375 
F-statistic: 455.6 on 6 and 17107 DF,  p-value: < 2.2e-16
anova(mod)
Analysis of Variance Table

Response: Y
             Df Sum Sq Mean Sq F value    Pr(>F)    
X             6  850.5 141.743  455.63 < 2.2e-16 ***
Residuals 17107 5321.9   0.311                      
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# Paramètres
exp(mod$coefficients)
 (Intercept)          XNE          XNO          XCE          XCO          XSE 
6243.3778591    0.6713493    0.6019892    0.8006695    0.5083484    0.6528945 
         XSO 
   0.7058590 

Que pouvez-vous dire des résultats ?

Modèle 5 : Le revenu des habitant·es est-il lié à l’âge du chef de ménage ?

Initialement la variable âge est quantitative. On pourrait envisager de construire une régression mais rien de prouve que le revenu augmente avec l’âge.

plot(don$age,don$logrev, pch=20, cex=0.2)

On va donc transformer la variable age en classes qui doivent être bien réfléchies car elles vont conditionner les résultats. On peut utiliser les quantiles ou bien choisir ses propres classes en fonction de la connaissance que l’on a du phénomène. Par exemple ici on va retenir , 4 classes échelonnées en intervalles de 15 ans

classes<-c(min(don$age),35,50,65, max(don$age))
don$age4 <- cut(don$age,classes)
table(don$age4)

 (19,35]  (35,50]  (50,65] (65,109] 
    1075     5042     6478     4517 

On peut alors appliquer le même programme que précédemment :

# Choix des variables
Y<-don$logrev
X<- don$age4
nameY <-"log. du Revenu (en DT/hab.)"
nameX <- "Age du chef de ménage"

# Paramètres principaux
tapply(Y,X,mean)
 (19,35]  (35,50]  (50,65] (65,109] 
8.399881 8.216320 8.455677 8.558383 
tapply(Y,X,sd)
  (19,35]   (35,50]   (50,65]  (65,109] 
0.6684426 0.5873870 0.5647931 0.5923722 
# Visualisation
boxplot(Y~X,
    col="lightyellow",
     cex.axis=0.6, 
     xlab=nameX, 
     ylab= nameY,
    horizontal=T)

# Modélisation
mod<-lm(Y~X)
summary(mod)

Call:
lm(formula = Y ~ X)

Residuals:
    Min      1Q  Median      3Q     Max 
-3.0004 -0.3745 -0.0130  0.3539  4.6152 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)  8.39988    0.01787 470.176  < 2e-16 ***
X(35,50]    -0.18356    0.01968  -9.328  < 2e-16 ***
X(50,65]     0.05580    0.01929   2.892  0.00383 ** 
X(65,109]    0.15850    0.01988   7.974 1.64e-15 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 0.5858 on 17108 degrees of freedom
  (2 observations deleted due to missingness)
Multiple R-squared:  0.04896,   Adjusted R-squared:  0.04879 
F-statistic: 293.6 on 3 and 17108 DF,  p-value: < 2.2e-16
anova(mod)
Analysis of Variance Table

Response: Y
             Df Sum Sq Mean Sq F value    Pr(>F)    
X             3  302.2 100.729  293.58 < 2.2e-16 ***
Residuals 17108 5869.9   0.343                      
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# Paramètres
exp(mod$coefficients)
 (Intercept)     X(35,50]     X(50,65]    X(65,109] 
4446.5360045    0.8323016    1.0573829    1.1717547 

Que pouvez-vous dire des résultats ?

4. Analyse de variance multiple

Modèle sans interaction

Si on suppose que toutes les variables explicatives sont indépendantes, on peut construire un modèle décrivant la prévision du revenu en fonction de l’effet des modalités de chacune des variables.

mod<-lm(formula = logrev~sex+age4+ins+mil+reg, data=don)
summary(mod)

Call:
lm(formula = logrev ~ sex + age4 + ins + mil + reg, data = don)

Residuals:
    Min      1Q  Median      3Q     Max 
-2.8541 -0.3160 -0.0053  0.2974  5.1697 

Coefficients:
               Estimate Std. Error t value Pr(>|t|)    
(Intercept)    8.311428   0.021026 395.284  < 2e-16 ***
sexfemme       0.204795   0.010614  19.294  < 2e-16 ***
age4(35,50]   -0.073096   0.016830  -4.343 1.41e-05 ***
age4(50,65]    0.201689   0.016787  12.015  < 2e-16 ***
age4(65,109]   0.354050   0.017738  19.960  < 2e-16 ***
insprimaire    0.128949   0.011287  11.425  < 2e-16 ***
inssecondaire  0.330686   0.012744  25.948  < 2e-16 ***
inssupérieur   0.647722   0.016273  39.802  < 2e-16 ***
milrural      -0.211446   0.008892 -23.780  < 2e-16 ***
regNE         -0.278030   0.013094 -21.234  < 2e-16 ***
regNO         -0.296649   0.013478 -22.010  < 2e-16 ***
regCE         -0.121768   0.012377  -9.838  < 2e-16 ***
regCO         -0.450201   0.013859 -32.484  < 2e-16 ***
regSE         -0.322928   0.014129 -22.856  < 2e-16 ***
regSO         -0.281712   0.016577 -16.994  < 2e-16 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 0.4967 on 17097 degrees of freedom
  (2 observations deleted due to missingness)
Multiple R-squared:  0.3166,    Adjusted R-squared:  0.316 
F-statistic: 565.7 on 14 and 17097 DF,  p-value: < 2.2e-16
Anova(mod,type = "III")
Anova Table (Type III tests)

Response: logrev
            Sum Sq    Df   F value    Pr(>F)    
(Intercept)  38551     1 156249.64 < 2.2e-16 ***
sex             92     1    372.27 < 2.2e-16 ***
age4           403     3    544.54 < 2.2e-16 ***
ins            474     3    640.78 < 2.2e-16 ***
mil            140     1    565.51 < 2.2e-16 ***
reg            342     6    230.91 < 2.2e-16 ***
Residuals     4218 17097                        
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Comme on peut le voir, toutes les variables ont des effets significatifs toutes choses égales quant à celui des autres. Mais Le fait de procéder à une estimation simultanée entraîne des modifications des coefficients par rapport à ceux que l’on avait obtenu à l’aide des modèles simples. Ce modèle final résume 31.6% de la variance du logarithme des revenus ((« R-squared »), ce qui est un bon résultat. Mais il demeure évidemment plus de deux-tiers de variance résiduelle imputable à des facteurs non pris en compte.

Interprétation des résultats

Nous construisons un tableau final dans lequel on a indiqué pour chaque modalité le coefficient correspondant et sa transformation exponentielle.

x <- mod$coefficients
tabres <- data.frame(parametre=x, exp_parametre=exp(x))
kable(tabres, digits=3)
parametre exp_parametre
(Intercept) 8.311 4070.120
sexfemme 0.205 1.227
age4(35,50] -0.073 0.930
age4(50,65] 0.202 1.223
age4(65,109] 0.354 1.425
insprimaire 0.129 1.138
inssecondaire 0.331 1.392
inssupérieur 0.648 1.911
milrural -0.211 0.809
regNE -0.278 0.757
regNO -0.297 0.743
regCE -0.122 0.885
regCO -0.450 0.638
regSE -0.323 0.724
regSO -0.282 0.754
  • la ligne « (Intercept) » correspond à la situation de référence par laquelle on va calculer l’effet des différentes modalités. Il s’agit ici d’un homme (*sex*), de 19-34 ans (*age*), sans instruction (*ins*) et résidant en milieu urbain (*mil*) dans le Grand Tunis (*reg*). Son revenu par personne sera selon le modèle de 4070 DT/hab.

  • les femmes chefs de ménage ont en moyenne un revenu supérieur de 27% par rapport aux autres chefs de ménage, toutes choses égales quant à leurs caractéristiques.

  • le revenu varie de façon non linéaire avec l’âge. Les chefs de ménage de 35-50 ans ont en effet un niveau de revenu inférieur de -7% à celui des 19-34 ans. Par contre il est supérieur de +22% pour les 50-64 ans et de +43% pour les 65 ans et plus.

  • le revenu augmente régulièrement avec le niveau d’instruction des chefs de ménage. Par rapport à un non diplômé, le revenu sera augmenté de +13.8% pour un niveau primaire, +39% pour un niveau secondaire et +91% pour un niveau supérieur.

  • les ménages ruraux ont des revenus plus faibles que les ménages urbains. La différence est environ de -20% en moyenne.

  • le revenu varie fortement selon les régions. Ce résultat n’est évidemment pas une surprise, mais les coefficients d’inégalités sont ici calculés toutes choses égales quant aux autres facteurs (milieu, âge, sexe, instruction) ce qui rend l’analyse plus précise. Par rapport à la région du Grand Tunis, les autres régions se classent par ordre décroissant ainsi : Centre Est (-11.5%), Nord Est (-24.3%), Sud-Ouest (-24.6%), Nord Ouest (-25.7%), Sud Est (-27.6%) et surtout Centre-Ouest (-36.2%).