[STA2A] : Statistique bivariée : X et Y qualitatives

GEO UNIV’R Tunisie 2024

Auteur·rice

Claude Grasland

Date de publication

2024-05-13

PREPARATION DES DONNEES

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

Télécharger le jeux de données

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 sans 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")  

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. Les variables proposées sont les suivantes :

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

  • reg : région de résidence (NE, NO, CE, CO, SE, SO + Grand Tunis)

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

  • sex : sexe du chef de ménage

  • age : age du chef de ménage

  • mat : situation matrimoniale (célbataire, marié, veuf, divorcé)

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

  • csp : catégorie socio professionnelle du chef de ménage (simplifiée)

  • nbp : nombre de personnes composant le ménage

  • pauv: situation de pauvreté selon les critères de l’INS (Oui/Non)

  • rev : revenu moyen par personnes en DT / an

Selection du tableau à analyser

On suppose qu’on ne s’intéresse qu’à quelques variables de type qualitatif.

don<-base[,c("reg","mil","sex","ins","pvr")]
head(don)
  reg    mil   sex        ins   pvr
1  GT urbain homme   primaire FALSE
2  GT urbain homme   primaire FALSE
3  GT urbain femme secondaire FALSE
4  GT urbain homme   primaire FALSE
5  GT urbain homme secondaire FALSE
6  GT urbain homme   primaire FALSE

Recodage de la variable pvr

La variable pvr exprime sous forme logique le fait qu’un ménage soit riche ou pauvre. Elle a été créée par l’INS en tenant compte du revenu, du nombre de personnes mais aussi de la région et du milieu rural ou urbain. Un revenu de 1000 Dt n’aura en effet pas le même effet selon qu’on habite à Tunis ou Sidi Bouzid.

On décide de la recoder en “Pauvre”, “Non Pauvre”.

# Transforme du type logic au type factor
don$pvr<-as.factor(don$pvr)

# Examine les étiquettes
table(don$pvr)

FALSE  TRUE 
14665  2449 
# Change les étiquettes 
levels(don$pvr)<-c("Non pauvre","Pauvre")

# Examine les nouvelles étiquettes
table(don$pvr)

Non pauvre     Pauvre 
     14665       2449 

Résumé rapide

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

summary(don)
 reg           mil           sex                ins               pvr       
 GT:3944   urbain:10836   homme:13996   aucun     :3742   Non pauvre:14665  
 NE:2458   rural : 6278   femme: 3118   primaire  :6979   Pauvre    : 2449  
 NO:2502                                secondaire:4647                     
 CE:2862                                supérieur :1746                     
 CO:2330                                                                    
 SE:1845                                                                    
 SO:1173                                                                    

TABLEAU DE CONTINGENCE

Création

Le coeur du travail d’analyse du questionnaire est la réalisation de tris croisés c’est-à-dire de tableaux de contingence croisant les réponses à deux questions (X et Y). Prenons comme exemple la pauvreté du ménage (pvr) définie par l’INS comme une variable binaire (Y) et le niveau d’instruction (ins) du chef de ménage (X) en quatre classes.

tableau de contingence

X<-don$ins
Y<-don$pvr
tab<-table(X,Y)
addmargins(tab)
            Y
X            Non pauvre Pauvre   Sum
  aucun            3098    644  3742
  primaire         5755   1224  6979
  secondaire       4145    502  4647
  supérieur        1667     79  1746
  Sum             14665   2449 17114

Exemple de lecture : 644 ménages ont un chef sans diplôme et sont pauvres.

Pourcentage en ligne

Le tableau de contingence permet de produire différents tableaux de pourcentage.

lprop(tab)
            Y
X            Non pauvre Pauvre Total
  aucun       82.8       17.2  100.0
  primaire    82.5       17.5  100.0
  secondaire  89.2       10.8  100.0
  supérieur   95.5        4.5  100.0
  All         85.7       14.3  100.0

Exemple de lecture : 17.2% des ménages dont le chef n’a pas de diplôme sont pauvres

pourcentage en colonnes

Le tableau de contingence permet de produire différents tableaux de pourcentage.

cprop(tab)
            Y
X            Non pauvre Pauvre All  
  aucun       21.1       26.3   21.9
  primaire    39.2       50.0   40.8
  secondaire  28.3       20.5   27.2
  supérieur   11.4        3.2   10.2
  Total      100.0      100.0  100.0

Exemple de lecture : 26.3% des ménages pauvres ont pour chef une personne non diplômée

pourcentage du total

prop(tab)
            Y
X            Non pauvre Pauvre Total
  aucun       18.1        3.8   21.9
  primaire    33.6        7.2   40.8
  secondaire  24.2        2.9   27.2
  supérieur    9.7        0.5   10.2
  Total       85.7       14.3  100.0

Exemple de lecture : 3.8% des ménages sont pauvres et ont pour chef une personne non diplômée

VISUALISATION

Utilisation de mosaicplot

Il est facile de visualiser un tableau de contingence avec mosaicplot()

mosaicplot(tab)

Cette figure est très pratique car elle montre à la fois l’effectif des ménages par diplôme (largeur de la barre) et la proportion de ménages pauvres (hauteur à laquelle la barre est coupée)

figure améliorée

On peut ensuite améliorer le figure

mosaicplot(tab,
           xlab = "Diplôme du chef de ménage",
           ylab = "Pauvreté",
           main = "Relation entre diplome et pauvreté en Tunisie en 2021",
           sub = "Source : INS, 2021",
           col=c("lightyellow", "orange"))

TEST DU CHI-2

Hypothèse de recherche

On remarque qu’il semble exister un lien entre le niveau de diplôme du chef de ménage. Cette relation semble négative puisque les ménages les moins instruits sont ceux qui sont le plus souvent pauvre. On a donc envie d’affirmer l’hypothèse de recherche H1 :

H1: Dans le cas de la population tunisienne en 2021, il existe un lien entre le niveau de diplôme du chef de ménage (X) et la situation de pauvreté (Y).

En statistique, on ne teste jamais directement l’hypothèse H1 (il y a une relation entre X et Y) mais on teste l’hypothèse inverse (il n’y a pas de relation entre X et Y) qu’on appelle hypothèse nulle.

Hypothèse nulle

Pourquoi cette complication apparente ?

  • Parce que l’hypothèse nulle est plus rigoureuse et revient à se demander si ce n’est pas le hasard qui explique les différence de pourcentage observées. Dans notre exemple on va donc poser :

H0 : Il n’y a pas de relation entre le niveau de diplôme (X) et le fait d’être pauvre (Y). Les différences de pourcentage que nous avons mises en évidence peuvent très bien être l’effet du hasard.

La fonction chisq.test()

Cette fonction très puissance s’applique à un tableau de contingence créé avec la fonction table(). Elle renvoie un gros objet que l’on va stocker pour en extraire les résultats dont on a besoin. On peut choisir le nom de l’objet dans lequel seront stockés les résultats. Ici je vais choisir le nom resul mais j’aurais aussi bien pu l’appeler toto ou titi.

resul<-chisq.test(tab)
class(resul)
[1] "htest"

L’instruction class() nousindique que l’objet a un type spécial appelé htest. Il s’agit en fait d’une liste de résultats, comme un gros sac de course remplis de fruits, légumes, pain, etc.

Qu’y a-t-il dans l’objet resul ?

str(resul)
List of 9
 $ statistic: Named num 268
  ..- attr(*, "names")= chr "X-squared"
 $ parameter: Named int 3
  ..- attr(*, "names")= chr "df"
 $ p.value  : num 8.6e-58
 $ method   : chr "Pearson's Chi-squared test"
 $ data.name: chr "tab"
 $ observed : 'table' int [1:4, 1:2] 3098 5755 4145 1667 644 1224 502 79
  ..- attr(*, "dimnames")=List of 2
  .. ..$ X: chr [1:4] "aucun" "primaire" "secondaire" "supérieur"
  .. ..$ Y: chr [1:2] "Non pauvre" "Pauvre"
 $ expected : num [1:4, 1:2] 3207 5980 3982 1496 535 ...
  ..- attr(*, "dimnames")=List of 2
  .. ..$ X: chr [1:4] "aucun" "primaire" "secondaire" "supérieur"
  .. ..$ Y: chr [1:2] "Non pauvre" "Pauvre"
 $ residuals: 'table' num [1:4, 1:2] -1.92 -2.91 2.58 4.42 4.69 ...
  ..- attr(*, "dimnames")=List of 2
  .. ..$ X: chr [1:4] "aucun" "primaire" "secondaire" "supérieur"
  .. ..$ Y: chr [1:2] "Non pauvre" "Pauvre"
 $ stdres   : 'table' num [1:4, 1:2] -5.73 -10.01 8 12.32 5.73 ...
  ..- attr(*, "dimnames")=List of 2
  .. ..$ X: chr [1:4] "aucun" "primaire" "secondaire" "supérieur"
  .. ..$ Y: chr [1:2] "Non pauvre" "Pauvre"
 - attr(*, "class")= chr "htest"

Plein de choses …

Distribution observée

On retrouve dans l’objet resul notre tableau de contingence initial

Nij = effectifs observés

tabobs <- resul$observed
addmargins(tabobs)
            Y
X            Non pauvre Pauvre   Sum
  aucun            3098    644  3742
  primaire         5755   1224  6979
  secondaire       4145    502  4647
  supérieur        1667     79  1746
  Sum             14665   2449 17114

Distribution théorique

Afin de voir si le hasard est effectivement intervenu, on va reconstituer ce que serait le tableau de contingence croisant X et Y dans le cas où les deux variables ne sont pas reliées. On extrait cette information de l’objet resul la partie appelée expected.

Tij = (Ni. x N.j)/N..

tabtheo <- resul$expected
round(addmargins(tabtheo),1)
            Y
X            Non pauvre Pauvre   Sum
  aucun          3206.5  535.5  3742
  primaire       5980.3  998.7  6979
  secondaire     3982.0  665.0  4647
  supérieur      1496.1  249.9  1746
  Sum           14665.0 2449.0 17114

Résidus

On va ensuite mesurer les écarts entre effectifs observés et théoriques appelés résidus (Nij-Tij).

Résidus (Nij-Tij)

tabresid <- tabobs-tabtheo
round(addmargins(tabresid),1)
            Y
X            Non pauvre Pauvre    Sum
  aucun          -108.5  108.5    0.0
  primaire       -225.3  225.3    0.0
  secondaire      163.0 -163.0    0.0
  supérieur       170.9 -170.9    0.0
  Sum               0.0    0.0    0.0

Chi-2

On va ensuite exprimer les écartes entre effectifs observés et estimés sous une forme mathématique appelée chi2 définie par la formule (Nij-Tij)x(Nij-Tij)/Tij. Ce résultat n’est pas fourni mais on peut le calculer :

Chi-2 = (Nij-Tij)x(Nij-Tij)/Tij

tabchi2<-(tabobs-tabtheo)**2 / tabtheo
round(addmargins(tabchi2),1)
            Y
X            Non pauvre Pauvre   Sum
  aucun             3.7   22.0  25.7
  primaire          8.5   50.8  59.3
  secondaire        6.7   39.9  46.6
  supérieur        19.5  116.8 136.3
  Sum              38.3  229.6 267.9

Ce qui nous intéresse c’est la somme du chi2 de toutes les cases qui mesure la différence entre les distributions observées et théoriques. Plus le chi2 total est grand, plus il y a de chance qu’il existe une relation entre X et Y.

test du chi-2

On peut calculer beaucoup plus rapidement le chi-2 total d’un tableau et sa significativité en utilisant la fonction chisq.test() sans la stocker :

chisq.test(tab)

    Pearson's Chi-squared test

data:  tab
X-squared = 267.94, df = 3, p-value < 2.2e-16

On obtient directement la valeur du chi-2 du tableau (X-squared = 267.94) ainsi que le nombre de degrés de libertés (df = 3) et la significativité de la relation (p-value < 2.2e-16)

Interprétation du résultat du test

Le chi-2 total du tableau (267.9) sera d’autant plus élevé que la distribution observée s’éloigne de la distribution théorique. Plus le chi-2 augmente, moins il y a de chance que le hasard explique les différences entre valeurs observées et estimées. On peut alors faire un test pour connaître la probabilité que le chi-2 observé soit l’effet du hasard.

  • le tableau possède 3 degré de liberté = (lignes - 1) x (colonnes - 1)
  • le tableau possède un chi-2 égal à 267.9
  • Un calcul effectué par un logiciel de statistique montre que la probabilité que cette valeur soit l’effet du hasard (p-value) est presque nulle p <0.0001

On va donc rejeter H0 et accepter H1

Conclusion : On peut affirmer sans grand risque d’erreur (1 chance sur 10 000) qu’en Tunisie en 2021 il existe une relation significative entre le niveau de diplôme du chef de ménage et la situation de pauvreté

Seuils de décision

Dans l’exemple précédent, nous sommes tombé sur une relation très significative. Mais ce n’est pas toujours le cas. Pour fixer les ordres de grandeur, voici un tableau simple à retenir :

Test..p.value. Interprétation code
> 0.10 Non significatif n.s
0.05 à 0.10 Presque significatif .
0.01 à 0.05 légèrement significatif *
0.001 à 0.01 significatif **
0.001 < très significatif ***

La taille de l’échantillon influence beaucoup le résultat du test du chi-2. Plus l’échantillon est grand, plus on a de chances de rejeter H0. ici nous avions 17000 personnes ce qui est considérable pourune enquête.

Mais qu’aurions nous observée si nous n’avions eu que 50, 100 ou 200 personnes ?

Taille de l’échantillon (n=50)

Effectif
Non pauvre Pauvre Sum
aucun 8 1 9
primaire 21 3 24
secondaire 13 0 13
supérieur 4 0 4
Sum 46 4 50
% en ligne
Non pauvre Pauvre Total
aucun 88.9 11.1 100
primaire 87.5 12.5 100
secondaire 100.0 0.0 100
supérieur 100.0 0.0 100
All 92.0 8.0 100


    Pearson's Chi-squared test

data:  tab
X-squared = 2.2569, df = 3, p-value = 0.5208

Taille de l’échantillon (n=100)

Effectif
Non pauvre Pauvre Sum
aucun 17 4 21
primaire 35 6 41
secondaire 28 1 29
supérieur 8 1 9
Sum 88 12 100
% en ligne
Non pauvre Pauvre Total
aucun 81.0 19.0 100
primaire 85.4 14.6 100
secondaire 96.6 3.4 100
supérieur 88.9 11.1 100
All 88.0 12.0 100


    Pearson's Chi-squared test

data:  tab
X-squared = 3.2722, df = 3, p-value = 0.3515

Taille de l’échantillon (n=200)

Effectif
Non pauvre Pauvre Sum
aucun 29 9 38
primaire 77 15 92
secondaire 48 4 52
supérieur 15 3 18
Sum 169 31 200
% en ligne
Non pauvre Pauvre Total
aucun 76.3 23.7 100
primaire 83.7 16.3 100
secondaire 92.3 7.7 100
supérieur 83.3 16.7 100
All 84.5 15.5 100


    Pearson's Chi-squared test

data:  tab
X-squared = 4.4277, df = 3, p-value = 0.2188

A VOUS DE JOUER

Construisez une hypothèse de votre choix croisant deux variables qualitatives et testez-là.