# Importe les données au format interne de R
<-readRDS("data/ENQ-TUN-2021/enq_INS_conso_menages_2021.RDS") base
[STA2A] : Statistique bivariée : X et Y qualitatives
GEO UNIV’R Tunisie 2024
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
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
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.
<-base[,c("reg","mil","sex","ins","pvr")]
donhead(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
$pvr<-as.factor(don$pvr)
don
# 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
<-don$ins
X<-don$pvr
Y<-table(X,Y)
tabaddmargins(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.
<-chisq.test(tab)
resulclass(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
<- resul$observed
tabobs 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..
<- resul$expected
tabtheo 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)
<- tabobs-tabtheo
tabresid 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
<-(tabobs-tabtheo)**2 / tabtheo
tabchi2round(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)
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 |
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)
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 |
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)
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 |
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à.