Présentation des deux bases de données HDV2003 et RP2012
HDV2003
Ce fichier (HDV2003) est issu de l'enquête Histoire de vie qui porte sur la construction des identités et a pour objectifs de décrire, de hiérarchiser, d'analyser les différents types de liens sociaux qui permettent aux individus de s'intégrer dans la société française du début du XXIème siècle. Le fichier original contient 808 variables et 8403 observations. Télécharger le dictionnaire des données. Cependant, la base complète n'est pas disponible dans le package questionr
, seulement quelques observations (2000) et quelques variables (20).
data("hdv2003")
head(hdv2003)
RP2012
Échantillon du recensement national français de 2012. Il contient des résultats pour chaque ville française de plus de 2000 habitants, et un petit sous-ensemble de variables, à la fois en nombre et en proportion de population. Une base de données avec 5170 lignes et 60 variables.
data("rp2012")
head(rp2012)
On parle de variable quantitative quand on a une variable de type numérique (un nombre) qui peut prendre un grand nombre de valeurs.
Maximum
et minimum
Pour analyser une variable quantitative, on peut d'abord voir comment la série est repartie quelle est la valeur minimale (fonction min
), la valeur maximale (fonction max
).
Exécutez ce code suivant pour calculer le minimum et le maximum de la variable age de la base de données hdv2003
data(hdv2003)
##Maximum
max(hdv2003$age)
##Minimum
min(hdv2003$age)
Moyenne
et médiane
On peut calculer aussi les indicateurs de centralité, c'est-à-dire autour de quelle valeur se répartissent les données. Ainsi, on peut calculer la moyenne (fonction mean
), la médiane (fonction median
).
Exécutez ce code suivant pour calculer la moyenne et la médiane de la variable age de la base de données hdv2003
data(hdv2003)
##Moyenne
mean(hdv2003$age)
##Médiane
median(hdv2003$age)
Variance
, Ecart-type
et Etendue
Les indicateurs de dispersion sont aussi souvent utilisés pour caractériser une variable quantitative. On peut calculer l'écart-type (fonction sd
) de la variable, la variance (fonction var
) ou l'étendue (max
-- min
) pour voir si les données sont regroupées ou au contraire dispersées.
Exécutez ce code pour calculer l'écart-type, la variance et l'étendue de la variable age de la base de donnée hdv2003.
data(hdv2003)
##Variance
var(hdv2003$age)
##Ecart-type
sd(hdv2003$age)
##Etendue
max(hdv2003$age)-min(hdv2003$age)
Quartiles
Les quartiles (fonction quantile
) aussi sont généralement utilisés pour mesurer la dispersion d'une série.
Le premier quartile est la valeur pour laquelle on a 25% des observations en dessous et 75% au-dessus;
Le deuxième quartile est la valeur pour laquelle on a 50% des observations en dessous et 50% au-dessus (c'est donc la médiane);
Le troisième quartile est la valeur pour laquelle on a 75% des observations en dessous et 25% au-dessus.
Exécutez ce code pour calculer le quartile d'ordre 25% et 75% de la variable age de la base de données hdv2003
data(hdv2003)
##Quartiles d'ordre 25%
quantile(hdv2003$age, prob=0.25)
##Quartile d'ordre 75%
quantile(hdv2003$age, prob=0.75)
summary
La fonction summary
permet d'avoir plusieurs indicateurs (min, max, quartiles et moyenne) en même temps.
Exécutez ce code pour calculer la moyenne, le minimum, le maximum et les quartiles de la variable age de la base de données hdv2003
data(hdv2003)
## Min, 1er quartile, Mediane, Moyenne, 3e quartile et maximum
summary(hdv2003$age)
Pour étudier aussi la distribution d'une variable quantitative, on peut faire une représentation graphique :
Un histogramme (hist)
Une boite à moustache (boxplot)
La fonction hist
a plusieurs arguments qui permettent de personnaliser le graphique :
Breaks : le nombre de classes,
Main : le titre du graphique
xlab : axe des abscisses
ylab : axe des ordonnées
col : couleur.
Ce document http://www.stat.columbia.edu/~tzheng/files/Rcolor.pdf donne beaucoup d'informations sur les couleurs intégrées dans R.
Construisons l'histogramme de la variable nombre d'heures passés devant la télé par jour.
data(hdv2003)
hist(hdv2003$heures.tv, main = "Nombre d'heures passées devant la télé par jour", xlab = "Heures", ylab = "Effectif", col="blue",breaks=10)
La fonction boxplot
est utilisée pour représenter la boite à moustache. Elle est souvent utilisée pour voir la dispersion des données (valeurs aberrantes). Elle est aussi utilisée pour comparer les distributions de plusieurs variables ou d'une même variable entre différents groupes.
data(hdv2003)
##BOITE A MOUSTACHE
boxplot(hdv2003$heures.tv, main = "Nombre d'heures passées devant la télé par jour", ylab = "Heures")
Pour une interprétation plus détaillée de la boite à moustache, veuillez consulter ce document http://pbil.univ-lyon1.fr/R/pdf/lang04.pdf
Le code pour importer hdv2003
est déjà présent. Nous avons aussi retiré les lignes où heures.tv
est absent (NA
).
data("hdv2003")
hdv2003 <- hdv2003 %>% filter(!is.na(heures.tv))
Une variable qualitative est une variable qui ne peut prendre qu'un nombre limité de valeurs, appelées modalités. Par exemple, la variable sexe
avec deux modalités: 1. Masculin, 2. Féminin est une variable qualitative.
Le mode est la modalité qui a le plus grand effectif.
Pour étudier une variable qualitative, on fait généralement un tri à plat (fonction table
) c'est-à-dire la répartition de la variable suivant ses modalités.
Faisons le tri à plat de la variable qualif (qualification) dans la base de données hdv2003
data("hdv2003")
## Tri à plat de la variable qualif
table(hdv2003$qualif)
##
## Ouvrier specialise Ouvrier qualifie Technicien
## 203 292 86
## Profession intermediaire Cadre Employe
## 160 260 594
## Autre
## 58
On a 6 modalités et le mode est la modalité Employé
, il a la plus grande valeur (594).
On peut stocker le résultat de table
dans un objet et utiliser l'objet dans la suite si on veut ordonner par exemple les données. Faisons le tri à plat de la variable qualification et ordonnez ensuite les valeurs.
data("hdv2003")
## Tri à plat de la variable qualif
table(hdv2003$qualif)
##
## Ouvrier specialise Ouvrier qualifie Technicien
## 203 292 86
## Profession intermediaire Cadre Employe
## 160 260 594
## Autre
## 58
tabQualif<-table(hdv2003$qualif)
sort(tabQualif)
##
## Autre Technicien Profession intermediaire
## 58 86 160
## Ouvrier specialise Cadre Ouvrier qualifie
## 203 260 292
## Employe
## 594
Il faut noter que par défaut la fonction table n'affiche pas les valeurs manquantes. Pour les afficher, il faut utiliser l'argument useNA = "always".
Par exemple:
table (hdv2003$sexe, useNA= "always")
##
## Homme Femme <NA>
## 899 1101 0
La fonction table
ne donne que les effectifs et parfois il est plus pertinent de travailler avec les proportions. On peut utiliser la fonction prop.table
pour calculer ces proportions.
prop.table(table(hdv2003$qualif))*100
##
## Ouvrier specialise Ouvrier qualifie Technicien
## 12.280702 17.664852 5.202662
## Profession intermediaire Cadre Employe
## 9.679371 15.728978 35.934664
## Autre
## 3.508772
On peut utiliser la fonction round
pour diminuer le nombre de chiffres après la virgule comme suit:
round(prop.table(table(hdv2003$qualif))*100, 2)
##
## Ouvrier specialise Ouvrier qualifie Technicien
## 12.28 17.66 5.20
## Profession intermediaire Cadre Employe
## 9.68 15.73 35.93
## Autre
## 3.51
Il existe une fonction freq
du package questionr
qui permet de faire du tri à plat
freq(hdv2003$nivetud)
La colonne n représente les effectifs, la colonne % représente les pourcentages, la colonne %val représente les pourcentages des valeurs valides calculées sans les données manquantes. Freq a plusieurs arguments pour personnaliser son affichage. On peut ajouter l'argument total qui permet d'afficher les totaux, on peut ajouter sort qui permet d'ordonner, on peut ajouter valid qui permet d'afficher ou pas les pourcentages de valeurs valides. Les autres arguments sont détaillés dans l'annexe.
##TRI A PLAT AVEC LES PROPORTIONS
freq(hdv2003$nivetud, valid= FALSE, total = TRUE, sort = "dec")
Comme dans le cas des variables quantitatives, on peut utiliser aussi la fonction summary
pour faire le tri à plat. Dans ce cas, on aura les effectifs et une colonne NA'S qui représente les données manquantes.
summary(hdv2003$qualif)
## Ouvrier specialise Ouvrier qualifie Technicien
## 203 292 86
## Profession intermediaire Cadre Employe
## 160 260 594
## Autre NA's
## 58 347
Pour représenter une variable qualitative, on peut recourir à différents types de graphiques tels que le diagramme en bâton (barplot
), le diagramme en barre (plot
) le diagramme de Cleveland (dotchart
), le diagramme circulaire (pie
). Ces fonctions ne s'appliquent pas directement sur la variable, mais au tri à plat obtenu avec la fonction table
. On peut aussi utiliser la fonctionsort
pour ordonner les valeurs pour une meilleure présentation des graphiques.
##DIAGRAMME CIRCULAIRE
pie(table(hdv2003$sexe))
##DIAGRAMME EN BARRE AVEC VARIABLE "IMPORTANCE DU TRAVAIL" ORDONNEE
barplot(sort(table(hdv2003$trav.imp)))
##DIAGRAMME EN BATON AVEC VARIABLE "IMPORTANCE DU TRAVAIL" ORDONNEE
plot(sort(table(hdv2003$trav.imp)))
##DIAGRAMME DE CLEVELAND AVEC VARIABLE "IMPORTANCE DU TRAVAIL" ORDONNEE
dotchart(sort(as.matrix(table(hdv2003$trav.imp))[, 1]),pch = 19)
Il faut transformer le tri à plat en matrice pour respecter le fonctionnement de la fonction, d'où l'utilisation de as.matrix. On aura le même résultat si on ne l'utilise pas, mais avec un message d'avertissement (warning). L'argument pch permet de spécifier le symbole à utiliser. Il peut prendre soit un nombre entier compris entre 0 et 25, soit un caractère textuel (voir ci-dessous).
On s'intéresse à l'importance accordée par les enquêtés à leur travail (variable trav.imp
de la base de données hdv2003
). Faites un tri à plat des effectifs des modalités de cette variable avec la commande table
. Faites un tri à plat affichant le nombre de chaque modalité. Enlevez les valeurs manquantes grâce à l'argument useNA
(lisez la documentation pour savoir comment l'utiliser).
Représentez graphiquement les effectifs des modalités à l'aide d'un graphique en barres.
Utilisez l'argument col de la fonction barplot
pour modifier la couleur du graphique en tomato.
Utilisez ce code pour importer la base: data("hdv2003")
data("hdv2003")
barplot(sort(table(hdv2003$trav.imp), useNA="no"), col="tomato")
L'analyse bivariée consiste à étudier deux variables en même temps afin de déterminer la relation empirique entre elles.
Pour étudier deux variables qualitatives, on fait généralement un tableau croisé. On peut utiliser la fonction table
pour faire le tableau.
##Tableau croisé de la variable importance du travail en fonction du sexe
table(hdv2003$trav.imp, hdv2003$sexe)
##
## Homme Femme
## Le plus important 13 16
## Aussi important que le reste 159 100
## Moins important que le reste 328 380
## Peu important 20 32
En ligne, on a la variable importance du travail et en colonne le sexe. Donc on peut dire que 159 hommes ont dit que le travail est moins important que le reste. La meilleure interprétation est de passer par les pourcentages colonnes ou ligne. Pour ce faire, on utilise les fonctions lprop
et cprop
du package questionr
.
tab <-table(hdv2003$trav.imp, hdv2003$sexe)
lprop(tab)
##
## Homme Femme Total
## Le plus important 44.8 55.2 100.0
## Aussi important que le reste 61.4 38.6 100.0
## Moins important que le reste 46.3 53.7 100.0
## Peu important 38.5 61.5 100.0
## All 49.6 50.4 100.0
lprop
permet de calculer les pourcentages lignes. Ainsi, on peut dire que parmi ceux qui ont répondu que le travail est plus important, il y a 44,8% d'hommes et 55,2% de femmes.
tab <-table(hdv2003$trav.imp, hdv2003$sexe)
cprop(tab)
##
## Homme Femme All
## Le plus important 2.5 3.0 2.8
## Aussi important que le reste 30.6 18.9 24.7
## Moins important que le reste 63.1 72.0 67.6
## Peu important 3.8 6.1 5.0
## Total 100.0 100.0 100.0
cprop
permet de calculer les pourcentages colonnes. Ainsi, on peut dire que parmi les hommes, il y a 63,1% qui ont répondu que le travail est moins important que le reste.
Les pourcentages totaux s'obtiennent avec la fonction prop
.
tab <-table(hdv2003$trav.imp, hdv2003$sexe)
prop(tab)
##
## Homme Femme Total
## Le plus important 1.2 1.5 2.8
## Aussi important que le reste 15.2 9.5 24.7
## Moins important que le reste 31.3 36.3 67.6
## Peu important 1.9 3.1 5.0
## Total 49.6 50.4 100.0
On peut utiliser une autre fonction qui fait un peu le même travail que table
. Il s'agit de la fonction xtabs
. On utilisera le symbole ~ pour indiquer la variable qu'il faut utiliser. S'il y a plusieurs variables, on les sépare par le symbole +.
xtabs(~sexe, hdv2003)
## sexe
## Homme Femme
## 899 1101
xtabs(~trav.imp+sexe, hdv2003)
## sexe
## trav.imp Homme Femme
## Le plus important 13 16
## Aussi important que le reste 159 100
## Moins important que le reste 328 380
## Peu important 20 32
Pour calculer les pourcentages ligne, colonnes et totaux, on peut faire la même chose que table
en utilisant les fonctions cprop
, lprop
et prop
de la même manière.
Avec xtabs
, on peut faire un tableau de plus de deux variables.
xtabs(~trav.imp+sexe+sport, hdv2003)
## , , sport = Non
##
## sexe
## trav.imp Homme Femme
## Le plus important 9 11
## Aussi important que le reste 87 58
## Moins important que le reste 165 223
## Peu important 9 24
##
## , , sport = Oui
##
## sexe
## trav.imp Homme Femme
## Le plus important 4 5
## Aussi important que le reste 72 42
## Moins important que le reste 163 157
## Peu important 11 8
Pour représenter deux variables qualitatives, on peut utiliser un diagramme en mosaïque avec la fonction mosaicplot
.
Exécutez le code suivant du diagramme en mosaïque
data(hdv2003)
mosaicplot(qualif ~ sexe, data = hdv2003, shade = TRUE, main = "Graphe en mosaïque")
La fonction mosaicplot
comporte plusieurs arguments parmi lesquels l'argument shade qui nous permet de produire des tracés en mosaïque étendue (si FALSE), ou un vecteur numérique d'au plus 5 nombres positifs distincts donnant les valeurs absolues des points de coupure pour les résidus (si TRUE).
Interprétation du graphique
Chaque rectangle correspond à une case du tableau où la largeur correspond au pourcentage des modalités en colonnes (il y a beaucoup plus d'employés que de technicien) et la hauteur correspond aux proportions des colonnes (la proportion d'hommes chez les ouvriers qualifiés est supérieure à celle des cadres). La couleur de la case correspond au résidu du test de khi-deux correspondant.
Pour avoir plus d'informations sur les fonctions (arguments, valeurs retournées), vous pouvez utiliser la fonction help
. Exécutez ce code ci-dessous pour plus d'informations sur la fonction mosaicplot
.
help(mosaicplot)
Le croisement d'une variable quantitative et d'une variable qualitative permet de voir comment la variable quantitative est repartie suivant les modalités de la variable qualitative. La boite à moustache (fonction boxplot
) est généralement utilisée pour voir cette dispersion. Par exemple on peut visualiser la répartition des âges selon la fréquentation ou non du cinéma.
Exécutez le code suivant pour générer la boite à moustache
data(hdv2003)
##CROISEMENT D'UNE VARIABLE QUALITATIVE ET D'UNE VARIABLE QUANTITATIVE
boxplot(hdv2003$age ~ hdv2003$cinema)
L'interprétation d'un boxplot est la suivante : Les bords inférieurs et supérieurs du carré central représentent le premier et le troisième quartile de la variable représentée sur l'axe vertical. On a donc 50% de nos observations dans cet intervalle. Le trait horizontal dans le carré représente la médiane. Enfin, des "moustaches" s'étendent de chaque côté du carré, jusqu'aux valeurs minimales et maximales, avec une exception : si des valeurs sont éloignées du carré de plus de 1,5 fois l'écart interquartile (la hauteur du carré), alors on les représente sous forme de points (symbolisant des valeurs considérées comme "extrêmes").
On remarque que ceux qui fréquentent le cinéma sont sensiblement plus jeunes que ceux qui ne le fréquentent pas.
L'étude de deux variables quantitatives se fait d'abord par une représentation graphique de type nuage de points pour voir le comportement de deux variables (tendance de corrélation ou pas). On peut utiliser la base de données rp2012 qui comporte beaucoup plus de variables quantitatives. On peut ainsi représenter le pourcentage de cadres selon le pourcentage de diplômés du supérieur.
Exécutez le code suivant:
data(rp2012) ##Accés de la base de données rp2012
##CROISEMENT DE DEUX VARIABLES QUANTITATIVES
plot(rp2012$cadres, rp2012$dipl_sup)
D'après le graphique ci-dessus, on obtient une relation de dépendance claire entre le pourcentage des cadres et le pourcentage des diplômés du supérieur. On peut le tester numériquement en calculant le coefficient de corrélation qu'on verra dans la partie corrélation.
Corrélations et Test
Si on veut tester l'hypothèse d'indépendance des lignes et des colonnes d'un tableau croisé de variables qualitatives, on peut utiliser le test d'indépendance de khi-deux. La fonction chisq.test appliqué au tableau croisé permet d'effectuer ce test. Testons l'hypothèse d'indépendance des deux variables « faire du sport » et « sexe ».
data(hdv2003)
##Test de Khi-deux
tab<- table(hdv2003$sexe, hdv2003$sport)
chisq.test(tab)
X-squared, la valeur de la statistique du Khi-deux pour notre tableau, c'est-à-dire une "distance" entre notre tableau observé et celui attendu si les deux variables étaient indépendantes.
df, le nombre de degrés de liberté du test.
p-value, indique la probabilité d'obtenir une valeur de la statistique du Khi-deux au moins aussi extrême sous l'hypothèse d'indépendance.
Ici, le p-value est extrêmement faible (4.6e-05), est inférieur au seuil de décision généralement choisi (5% ou 0.05). On peut donc rejeter l'hypothèse d'indépendance des lignes et des colonnes du tableau.
L'association linéaire entre deux variables quantitatives est mesurée par le coefficient de corrélation linéaire. Sa valeur varie entre -1 et 1. On parle d'une association linéaire négative parfaite si la valeur vaut 1 et d'une association linéaire positive parfaite si la valeur vaut 1. La valeur 0 indique une non-association linéaire entre les deux variables. La fonction cor
permet de calculer la corrélation. Ainsi, calculons la corrélation entre le pourcentage de cadres et celui de diplômés du supérieur :
data(rp2012)
##COEFFICIENT DE CORRELATION LINEAIRE
cor(rp2012$cadres, rp2012$dipl_sup)
Le coefficient de corrélation est égal à 0,93, proche de 1. Donc, on peut dire que les deux variables sont corrélées positivement.
Calculons le coefficient de corrélation entre le pourcentage de propriétaire et le pourcentage de diplômés du supérieur :
data(rp2012)
cor(rp2012$proprio, rp2012$dipl_sup)
Le coefficient de corrélation est très faible (0.05), donc on note une absence de liaison entre les deux variables.
Vidéo Récapitulative
Dans le jeu de données hdv2003, faire le tableau croisé entre la catégorie socio-professionnelle (variable qualif) et le fait de croire ou non en l'existence des classes sociales (variable clso). Identifier la variable indépendante et la variable dépendante, et calculer les pourcentages ligne ou colonne. Interpréter le résultat. Faire un test du Khi-deux. Peut-on rejeter l'hypothèse d'indépendance ?
Représenter ce tableau croisé sous la forme d'un mosaicplot en colorant les cases selon les résidus du test de Khi-deux.
data(hdv2003)
tab <- table(hdv2003$qualif, hdv2003$clso)
chisq.test(tab)
#On peut rejeter l'hypothèse car la valeur de p est inférieur à 0.05
Toujours sur le jeu de données hdv2003, faire le boxplot qui croise le nombre d'heures passées devant la télévision (variable heures.tv) avec le statut d'occupation (variable occup). Calculer la durée moyenne devant la télévision en fonction du statut d'occupation à l'aide de tapply
.
data(hdv2003)
boxplot(hdv2003$heures.tv ~ hdv2003$occup, las=2)#las=2 met le nom des occupations à la vertical
Sur le jeu de données rp2012, représenter le nuage de points croisant le pourcentage de personnes sans diplôme (variable dipl_aucun) et le pourcentage de propriétaires (variable proprio).
Calculer le coefficient de corrélation linéaire correspondant.
data(rp2012)
plot(rp2012$dipl_aucun, rp2012$proprio)
cor(rp2012$dipl_aucun,rp2012$proprio)
Quand on a une corrélation forte entre deux variables quantitatives, on peut penser à faire une régression linéaire, c'est-à-dire exprimer l'une en fonction de l'autre variable.
La fonction lm
est utilisée pour faire une régression linéaire simple.
La proportion de cadres et la proportion des diplômés du supérieur sont fortement corrélées. Faisons la régression entre ces deux variables.
data(rp2012)
##REGRESSION LINEAIRE
lm(rp2012$cadres ~ rp2012$dipl_sup)
Le symbole Tilde ~ est utilisé pour séparer la variable d'intérêt et la variable explicative. Si on a plusieurs variables explicatives, on les sépare par le signe +.
L'Intercept représente la constante du modèle, c'est-à-dire ici l'ordonnée à l'origine qui vaut 0.92.
Le coefficient associé à la variable explicative (dipl_sup) vaut 1.08.
Pour avoir des résultats plus détaillés, on peut stocker le résultat de la régression dans un objet et utiliser la fonction summary
.
data(rp2012)
reg <- lm(rp2012$cadres ~ rp2012$dipl_sup)
summary(reg)
Call : la formule du modèle ;
Residuals : des statistiques descriptives des résidus ;
Coefficients : un tableau à deux entrées où les lignes correspondent aux coefficients associés aux variables explicatives, et les colonnes, dans l'ordre, à l'estimation du coefficient, l'écart-type estimé, la valeur du test de Student de nullité statistique du coefficient et enfin la p-value associée à ce test, suivie d'un symbole pour lire rapidement la significativité ;
Signif. codes : les significations des symboles de niveau de significativité ;
Residual standard error : estimation de l'écart-type de l'aléa et degré de liberté ;
Multiple R-squared : coefficient de détermination ;
Adjusted R-squared : coefficient de détermination ajusté ;
F-statistic : valeur de la statistique de Fisher du test de significativité globale, ainsi que les degrés de liberté et la p-value associée au test.
La variable dipl_sup est significative, le coefficient est significativement différent de 0. On remarque que la part des diplômés du supérieur augmente avec la part des cadres. On peut représenter la droite de régression avec la fonction abline
.
data(rp2012)
reg <- lm(rp2012$cadres ~ rp2012$dipl_sup)
plot(rp2012$dipl_sup, rp2012$cadres)
abline(reg, col="blue")
La fonction reg
retourne plusieurs éléments qu'on peut accéder en utilisant le reg
suivi du symbole $.
D'abord, sortons tous les éléments retournés par reg. Pour ce faire, on utilise la fonction names
.
data(rp2012)
reg <- lm(rp2012$cadres ~ rp2012$dipl_sup)
names(reg)
Les éléments les plus utilisés sont :
Coefficients : un vecteur de coefficients ;
residuals : les résidus ;
fitted.values : les valeurs estimées ;
df.residual : nombre de degrés de liberté.
Ainsi, pour accéder aux coefficients, on utilise la commande suivante :
data(rp2012)
reg <- lm(rp2012$cadres ~ rp2012$dipl_sup)
reg$coefficients
Nous donnons les couples d'observations suivants :
Xi | 18 | 7 | 14 | 31 | 21 | 5 | 11 | 16 | 26 | 9 |
---|---|---|---|---|---|---|---|---|---|---|
Yi | 55 | 17 | 36 | 85 | 62 | 18 | 33 | 41 | 63 | 87 |
La première étape est d'obtenir les données. Enregistez-les dans un format adapté.
Tracez le nuage de points des couples (xi, yi). À la vue de ce diagramme, pouvons-nous soupçonner une liaison linéaire entre ces deux variables ?
Déterminez pour ces observations la droite des moindres carrés, c'est-à-dire donner les coefficients de la droite des MC.
Tracez ensuite la droite sur le même graphique.
Xi <- c(18, 7, 14, 31, 21, 5, 11, 16, 26, 9)
Yi <- c(55, 17, 36, 85, 62, 18, 33, 41, 63, 87)
plot(Xi, Yi)
reg <- lm(Yi ~ Xi)
reg$coefficients
abline(reg, col="blue")
La régression logistique, également appelée modèle logit, est utilisée pour modéliser des variables de résultat dichotomiques.
Soit Y la variable à prédire (variable expliquée) et X = (X1, X2, ......, Xj) les variables prédictives (variables explicatives) .
Dans le cadre de la régression logistique binaire, la variable Y prend deux modalités possibles {1, 0} . Les variables Xj sont exclusivement continues ou binaires.
La régression logistique est largement répandue dans de nombreux domaines. On peut citer de façon non exhaustive :
En médecine, elle permet par exemple de trouver les facteurs qui caractérisent un groupe de sujets malades par rapport à des sujets sains.
Dans le domaine des assurances, elle permet de cibler une fraction de la clientèle qui sera sensible à une police d'assurance sur tel ou tel risque particulier.
Dans le domaine bancaire, pour détecter les groupes à risque lors de la souscription d'un crédit.
En économétrie, pour expliquer une variable discrète. Par exemple, les intentions de vote aux élections.
Exemple 1 . Supposons que nous nous intéressons aux facteurs qui influencent la victoire d'un candidat politique aux élections. La variable de résultat (réponse) est binaire (0/1); Gagner ou perdre. Les variables prédictives d'intérêt sont le montant d'argent dépensé pour la campagne, le temps passé à faire campagne et si le candidat est ou non un titulaire.
Exemple 2 . Un chercheur s'intéresse à la façon dont les variables, telles que le GRE (scores aux examens d'études supérieures), la moyenne cumulative (moyenne pondérée cumulative) et le prestige de l'établissement de premier cycle, affectent l'admission aux études supérieures. La variable de réponse, admettre/ne pas admettre, est une variable binaire.
Pour la pratique l'exemple 2 sera fait. D'abord, importons les données et présentons-les.
mydata <- read.csv("https://stats.idre.ucla.edu/stat/data/binary.csv")
## Afficher les premieres observations
head(mydata)
La base de données contient 4 variables:
admit: variable binaire dont 1 représente admis à l'université et 0 non admis à l'université;
gre: Scores aux examens d'études supérieures;
gpa: La moyenne cumulative des notes;
rank: Le prestige de l'établissement de premier cycle.
La variable rank prend les valeurs 1 à 4. Les institutions ayant un rank de 1 ont le plus grand prestige, tandis que celles ayant un rang de 4 ont le plus faible.
On peut faire une analyse descriptive rapide de la base en utilisant la fonction summary
summary(mydata)
## admit gre gpa rank
## Min. :0.0000 Min. :220.0 Min. :2.260 Min. :1.000
## 1st Qu.:0.0000 1st Qu.:520.0 1st Qu.:3.130 1st Qu.:2.000
## Median :0.0000 Median :580.0 Median :3.395 Median :2.000
## Mean :0.3175 Mean :587.7 Mean :3.390 Mean :2.485
## 3rd Qu.:1.0000 3rd Qu.:660.0 3rd Qu.:3.670 3rd Qu.:3.000
## Max. :1.0000 Max. :800.0 Max. :4.000 Max. :4.000
sapply(mydata, sd)
## admit gre gpa rank
## 0.4660867 115.5165364 0.3805668 0.9444602
La moyenne des notes obtenues est égale à 3,39 avec un écart de 0,38. Alors que le score moyen aux examens d'études supérieures est égal à 587,7 avec un écart de 115,5. Les variables gre et gpa seront considérées comme des variable continues et la variable rank comme une variable qualitative.
Ainsi, on peut faire un tri à plat de la variable à expliquer (admit) et l'une des variables explicatives (rank).
tab<-table(mydata$rank, mydata$admit)
cprop(tab)
##
## 0 1 All
## 1 10.3 26.0 15.2
## 2 35.5 42.5 37.8
## 3 34.1 22.0 30.2
## 4 20.1 9.4 16.8
## Total 100.0 100.0 100.0
L'analyse suivant la réputation montre que 26% des élèves acceptées proviennent d'une prestigieuse école (réputation de niveau 1) contre 42,5% qui sont issus d'une école de niveau de réputation 2. Parmi les non acceptés, 10,3% sont sortis dans de prestigieuses écoles, 35,5% dans des écoles de niveau de réputation 2.
La fonction qui permet de faire la régression logistique dans R est glm
du package stats
en choisissant comme argument family="binomial". Le symbole ~ sépare la variable à expliquer (admit) et les variables explicatives et les variables explicatives sont séparées par le symbole +. La variable rank est transformée en facteur avant de la mettre dans le modèle. Exécutez le code suivant pour réaliser la régression logistique de la variable admit sur les variables gpa, gre et rank.
mydata <- read.csv("https://stats.idre.ucla.edu/stat/data/binary.csv")
mydata$rank <- factor(mydata$rank)
mylogit <- glm(admit ~ gre + gpa + rank, data = mydata, family = "binomial")
summary(mylogit)
On utilise la fonction summary
pour afficher les résultats détaillés de la régression logistique. Les variables ont significatives au moins au seuil de 5% (Pr(>|z|)<0,05). Les variables gre et gpa influencent positivement l'acceptation de l'élève à l'université. Par contre, le niveau de prestige 2 influence négativement l'acceptation de l'élève à l'université comparé au niveau de prestige 1, tout comme les niveaux de prestige 3 et 4.
On peut calculer les exponentielles des coefficients pour avoir les odds-ratios. On extrait d'abord les coefficients avec la fonction coef
, ensuite on calcule l'exponentielle avec la fonction exp
comme suit:
##
## Call:
## glm(formula = admit ~ gre + gpa + rank, family = "binomial",
## data = mydata)
##
## Deviance Residuals:
## Min 1Q Median 3Q Max
## -1.6268 -0.8662 -0.6388 1.1490 2.0790
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -3.989979 1.139951 -3.500 0.000465 ***
## gre 0.002264 0.001094 2.070 0.038465 *
## gpa 0.804038 0.331819 2.423 0.015388 *
## rank2 -0.675443 0.316490 -2.134 0.032829 *
## rank3 -1.340204 0.345306 -3.881 0.000104 ***
## rank4 -1.551464 0.417832 -3.713 0.000205 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 499.98 on 399 degrees of freedom
## Residual deviance: 458.52 on 394 degrees of freedom
## AIC: 470.52
##
## Number of Fisher Scoring iterations: 4
exp(coef(mylogit))
## (Intercept) gre gpa rank2 rank3 rank4
## 0.0185001 1.0022670 2.2345448 0.5089310 0.2617923 0.2119375
On peut aussi calculer les intervalles de confiance avec la fonction confint
et mettre tout dans un tableau avec la fonction cbind.
exp(cbind(OR = coef(mylogit), confint(mylogit)))
## OR 2.5 % 97.5 %
## (Intercept) 0.0185001 0.001889165 0.1665354
## gre 1.0022670 1.000137602 1.0044457
## gpa 2.2345448 1.173858216 4.3238349
## rank2 0.5089310 0.272289674 0.9448343
## rank3 0.2617923 0.131641717 0.5115181
## rank4 0.2119375 0.090715546 0.4706961
Avec le calcul des odds ratio, nous pouvons maintenant dire que pour une augmentation d'une unité de la moyenne des notes, les chances d'être admis dans une école d'études supérieures (par rapport à une non-admission) augmentent d'un facteur de 2,23. De même les chances d'être admis dans une école d'études supérieures (par rapport à une non-admission) sont 0,5 fois plus petites si on est issue d'un établissement de réputation 2 par rapport à un établissement de réputation 1. L'odds-ratio lié à la variable test est sensiblement égale à 1 alors l'effet est négligeable.
Utilisez la base de données mtcars qui contient des informations sur 32 véhicules. Parmi ces variables figurent:
am : Type de transmission (variable dichotomique et variable à expliquer)
hp : Puissance brute du véhicule
wt : Poids du véhicule (1000 lbs)
cyl : Nombre de cylindres
Faites un modèle de régression logistique avec comme variable à expliquer am et comme variables explicatives hp, wt et cyl Interprétez les résultats.
## Importation des données
library(dplyr)
data("mtcars")
library(dplyr)
data("mtcars")
mylogit <- glm(am ~ hp + wt + cyl, data = mtcars, family = "binomial")
summary(mylogit)