Les analyses factorielles contraintes
L’exécution de ce tutoriel nécessite au préalable l’installation (ou la mise à jour) des packages suivants :
GDAtools
etfactoextra
(analyses factorielles),pls
,morepls
etplsVarSel
(régressions PLS), les habituelsggplot2
etdplyr
, ainsi quesoc.ca
etquestionr
dont on va utiliser des jeux de données.
Premiers pas
Tout d’abord, on charge les packages nécessaires en mémoire.
Variables supplémentaires
Pour ce premier exemple, nous allons utiliser l’un des jeux de
données fournis avec le package GDAtools
. Il s’agit
d’informations sur les goûts et les pratiques culturelles de 2000
individus : écoute de genres musicaux (variété française, rap, rock,
jazz et classique) et goût pour des genres de films (comédie, film
policier, animation, science-fiction, film d’amour, comédie musicale).
Ces 11 variables serviront de variables “actives” dans une ACM et seront
complétées par 3 variables “supplémentaires” : le sexe, l’âge et le
niveau d’éducation.
## 'data.frame': 2000 obs. of 14 variables:
## $ FrenchPop: Factor w/ 3 levels "No","Yes","NA": 2 1 2 1 2 1 1 1 1 2 ...
## $ Rap : Factor w/ 3 levels "No","Yes","NA": 1 1 1 1 1 1 1 1 1 1 ...
## $ Rock : Factor w/ 3 levels "No","Yes","NA": 1 1 2 1 1 2 1 1 2 1 ...
## $ Jazz : Factor w/ 3 levels "No","Yes","NA": 1 2 1 1 1 1 1 1 1 1 ...
## $ Classical: Factor w/ 3 levels "No","Yes","NA": 1 2 1 2 1 1 1 1 1 1 ...
## $ Comedy : Factor w/ 3 levels "No","Yes","NA": 1 2 1 1 1 1 2 2 2 2 ...
## $ Crime : Factor w/ 3 levels "No","Yes","NA": 1 1 1 1 2 1 1 1 1 1 ...
## $ Animation: Factor w/ 3 levels "No","Yes","NA": 1 1 1 1 1 1 1 1 1 1 ...
## $ SciFi : Factor w/ 3 levels "No","Yes","NA": 2 1 1 1 1 2 1 1 1 1 ...
## $ Love : Factor w/ 3 levels "No","Yes","NA": 1 1 2 1 1 1 1 1 1 1 ...
## $ Musical : Factor w/ 3 levels "No","Yes","NA": 1 1 1 1 1 1 1 1 1 1 ...
## $ Gender : Factor w/ 2 levels "Men","Women": 1 1 2 1 2 2 2 2 1 1 ...
## $ Age : Factor w/ 3 levels "15-24","25-49",..: 2 3 2 3 2 2 2 2 1 3 ...
## $ Educ : Factor w/ 4 levels "None","Low","Medium",..: 3 4 3 4 2 1 3 2 2 2 ...
Les variables actives ont toutes une modalité “non-réponse” (“NA”), qui concerne quelques individus. L’ACM spécifique permet de neutraliser ces modalités dans la construction de l’espace factoriel, tout en conservant l’ensemble des individus.
junk <- c("FrenchPop.NA", "Rap.NA", "Rock.NA", "Jazz.NA", "Classical.NA",
"Comedy.NA", "Crime.NA", "Animation.NA", "SciFi.NA", "Love.NA",
"Musical.NA")
mca <- speMCA(Taste[,1:11], excl = junk)
On représente ensuite le nuage des modalités. Sur ce nuage :
- l’écoute de jazz et de musique classique et le goût des comédies musicales semblent s’opposer à l’écoute de rap et au goût pour les comédies sur l’axe 1 ;
- le goût pour l’animation et la science-fiction à celui pour les films d’amour et les comédies musicales sur l’axe 2.
On représente traditionnellement les résultats dans un plan,
c’est-à-dire en deux dimensions (ici les dimensions 1 et 2). Mais il est
parfois plus simple de concentrer l’interprétation sur un seul axe à la
fois, ce qui est possible avec la
fonctionggaxis_variables()
(paramétrée ici pour afficher
les noms des modalités avec une taille proportionnelle à leur
contribution à la construction de l’axe).
Toutefois, l’interprétation du plan factoriel, pour être robuste, ne peut s’arrêter à un examen visuel du nuage des modalités. Celui-ci doit être complété par l’analyse attentive d’indicateurs statistiques, en particulier des contributions des modalités à la construction des axes et de leur qualité de représentation.
Les variables d’écoute de musique classique et de jazz contribuent à elles seules pour plus de 60 % à la construction de l’axe 1. L’écoute de classique et de jazz s’oppose donc à leur non-écoute, et secondairement au goût pour les comédies.
Variable | Category | Weight | Quality of representation | Contribution (left) | Contribution (right) | Total contribution | Cumulated contribution | Contribution of deviation | Proportion to variable |
---|---|---|---|---|---|---|---|---|---|
Classical | Yes | 552 | 0.478 | 23.08 | 31.88 | 31.88 | 31.88 | 100 | |
No | 1443 | 0.474 | 8.8 | ||||||
Jazz | Yes | 364 | 0.467 | 25.49 | 31.15 | 63.04 | 31.15 | 100 | |
No | 1621 | 0.448 | 5.66 | ||||||
Comedy | Yes | 856 | 0.253 | 9.66 | 16.88 | 79.92 | 16.88 | 100 | |
No | 1141 | 0.252 | 7.22 |
Sur l’axe 2, l’écoute de rock et de rap et le goût pour les films de science-fiction s’opposent au goût pour les films d’amour et les comédies musicale et à l’écoute de variété française.
Variable | Category | Weight | Quality of representation | Contribution (left) | Contribution (right) | Total contribution | Cumulated contribution | Contribution of deviation | Proportion to variable |
---|---|---|---|---|---|---|---|---|---|
Rock | Yes | 535 | 0.229 | 12.99 | 17.77 | 17.77 | 17.77 | 100 | |
No | 1455 | 0.226 | 4.78 | ||||||
Love | Yes | 225 | 0.250 | 17.24 | 17.24 | 35 | 17.24 | 88.79 | |
FrenchPop | No | 741 | 0.199 | 9.69 | 15.39 | 50.39 | 15.39 | 100 | |
Yes | 1249 | 0.196 | 5.69 | ||||||
Musical | Yes | 66 | 0.191 | 14.33 | 14.33 | 64.72 | 14.33 | 96.61 | |
SciFi | Yes | 143 | 0.160 | 11.49 | 11.49 | 76.21 | 11.49 | 92.72 | |
Rap | Yes | 261 | 0.164 | 11.05 | 11.05 | 87.27 | 11.05 | 86.56 |
On peut aller plus loin en étudiant la relation entre l’espace factoriel et les variables supplémentaires, en l’occurrence le sexe, l’âge et le niveau d’éducation. Une première étape consiste à projeter les variables supplémentaires sur le nuage des variables.
p <- ggcloud_variables(mca, shapes=FALSE, col="lightgray")
ggadd_supvars(p, mca, Taste[,c("Gender","Age","Educ")])
Le niveau d’éducation semble avant tout associé à l’axe 1, les plus diplômés étant du côté de l’écoute de jazz et de classique. Le sexe ne semble lié qu’à l’axe 2, avec les femmes dans le bas du plan et les hommes en haut. Quant à l’âge, il est associé aux deux axes : les individus se déplacent du quadrant nord-est au quadrant sud-ouest à mesure que leur âge augmente.
On peut confirmer statistiquement ces premières observations en mesurant le degré d’association entre les variables supplémentaires et les axes à l’aide du rapport de corrélation (eta²).
## dim.1 dim.2
## Gender 0.0 6.0
## Age 3.8 14.2
## Educ 5.9 3.3
Le niveau d’éducation est la variable supplémentaire la plus associée à l’axe 1 : il “explique” 5,9 % de la variance des coordonnées individuelles sur cet axe. L’âge est également associé au premier axe, mais de manière moins marquée, et le sexe pas du tout.
Sur l’axe 2, l’âge est la variable la plus structurante, devant le sexe et le niveau d’éducation. On voit en outre que l’âge est nettement plus lié à l’axe 2 qu’à l’axe 1.
Au niveau des modalités, on peut caractériser l’association d’une modalité de variable supplémentaire avec un axe à partir des coefficients de corrélation.
Sur l’axe 1, les non et peu diplômés et les 15-24 ans s’opposent aux plus diplômés et aux 50 ans et plus. Les autres modalités apparaissent peu liées à l’axe (leurs coefficients de corrélation, dans la dernière colonne du tableau, sont proches de 0).
categories | avg.coord.in.cat | sd.coord.in.cat | sd.coord.in.dim | cor |
---|---|---|---|---|
Age.15-24 | 0.156 | 0.355 | 0.369 | 0.176 |
Educ.None | 0.094 | 0.324 | 0.369 | 0.145 |
Educ.Low | 0.052 | 0.355 | 0.369 | 0.100 |
Age.25-49 | 0.006 | 0.358 | 0.369 | 0.015 |
Gender.Women | 0.004 | 0.370 | 0.369 | 0.012 |
Gender.Men | -0.005 | 0.368 | 0.369 | -0.012 |
Educ.Medium | -0.040 | 0.376 | 0.369 | -0.051 |
Age.50+ | -0.061 | 0.369 | 0.369 | -0.142 |
Educ.High | -0.141 | 0.382 | 0.369 | -0.213 |
Sur l’axe 2, les hommes, les moins de 50 ans et les plus diplômés s’opposent aux femmes, aux plus de 50 ans et aux sans diplôme.
categories | avg.coord.in.cat | sd.coord.in.cat | sd.coord.in.dim | cor |
---|---|---|---|---|
Age.15-24 | 0.236 | 0.320 | 0.342 | 0.288 |
Gender.Men | 0.088 | 0.302 | 0.342 | 0.245 |
Age.25-49 | 0.049 | 0.333 | 0.342 | 0.123 |
Educ.High | 0.076 | 0.327 | 0.342 | 0.123 |
Educ.Low | 0.016 | 0.341 | 0.342 | 0.034 |
Educ.Medium | 0.007 | 0.335 | 0.342 | 0.009 |
Educ.None | -0.100 | 0.341 | 0.342 | -0.167 |
Gender.Women | -0.081 | 0.357 | 0.342 | -0.245 |
Age.50+ | -0.131 | 0.299 | 0.342 | -0.330 |
Analyses inter-classes
On dispose d’une enquête post-électorale du Cevipof réalisée en 1997, et en particulier de 20 questions abordant des enjeux politiques, économiques et sociaux (voir l’annexe de Perrineau et al 2000 pour le détail des questions). Les réponses à ces questions permettent de dessiner un espace politique des électeurs français à la fin des années 1990. On souhaite étudier ce qui, dans cet espace politique, différencie les différents électorats, approchés par le vote au premier tour des élections législatives de 1997. On pourrait réaliser une ACM à partir des 20 questions traitées comme variables actives, puis projeter le vote en tant que variable supplémentaire sur l’espace factoriel. C’est l’option adoptée dans l’article mentionné plus haut. Toutefois, avec cette approche, l’espace politique est construit indépendamment du vote, avec qui il n’est mis en relation que dans un second temps. On peut donc préférer une “analyse factorielle inter-classes”, avec laquelle on construit l’espace politique qui différencie le mieux les électorats. Son premier axe est celui qui sépare (ou “explique”) le mieux les votes, le second axe explique le mieux ce qui ne l’a pas été par le premier, et ainsi de suite.
# les données sont disponibles dans le package "soc.ca"
data(political_space97, package = "soc.ca")
str(political_space97)
## tibble [2,980 × 22] (S3: tbl_df/tbl/data.frame)
## $ quest : chr [1:2980] "1" "3" "4" "11" ...
## $ Immigrants : num [1:2980] 2 4 2 2 4 4 1 4 2 4 ...
## $ NorthAfricans : num [1:2980] 4 2 2 3 1 3 2 1 2 1 ...
## $ Races : num [1:2980] 4 2 2 4 4 4 2 4 1 4 ...
## $ AtHome : num [1:2980] 4 4 2 3 4 4 1 4 2 4 ...
## $ DeathPenalty : num [1:2980] 4 4 2 2 4 3 1 4 1 4 ...
## $ School : num [1:2980] 2 2 1 2 2 1 2 2 1 2 ...
## $ StrikeEffectivness: num [1:2980] 3 1 4 2 2 1 3 1 3 3 ...
## $ Strike95 : num [1:2980] 4 2 3 5 2 3 2 4 3 2 ...
## $ Unions : num [1:2980] 3 1 2 3 2 2 3 2 3 2 ...
## $ PublicServices : num [1:2980] 2 1 3 3 1 2 3 1 4 1 ...
## $ Liberalism : num [1:2980] 2 4 3 2 2 2 3 3 2 2 ...
## $ Profit : num [1:2980] 2 2 2 2 2 4 3 3 2 2 ...
## $ Privatization : num [1:2980] 5 2 2 2 4 3 2 3 3 2 ...
## $ Globalization : num [1:2980] 2 3 2 3 3 2 2 3 3 2 ...
## $ Democracy : num [1:2980] 4 2 3 2 2 3 3 2 2 2 ...
## $ Politicians : num [1:2980] 3 2 2 3 2 3 3 2 3 3 ...
## $ Euro : num [1:2980] 4 2 2 2 2 3 3 2 3 2 ...
## $ EUpower : num [1:2980] 2 3 1 3 3 3 3 1 2 3 ...
## $ EndEU : num [1:2980] 3 1 1 1 2 2 2 1 2 1 ...
## $ EUprotection : num [1:2980] 4 2 2 1 3 3 1 2 2 2 ...
## $ Vote : chr [1:2980] "Socialist" "Socialist" "TraditionalRight" "TraditionalRight" ...
# codage des variables actives et du vote
actives <- as.data.frame(lapply(political_space97[,2:21], factor))
vote <- factor(political_space97$Vote)
# les non-réponses sont mises en "junk" (elles ne contribuent pas à l'analyse)
junk <- grep(".5", getindexcat(actives), value = TRUE, fixed = TRUE)
# analyse inter-classes
inter <- bcMCA(actives, vote, excl = junk)
Le premier axe est structuré avant tout par l’opinion sur les grèves de 1995, les syndicats et les privatisations, secondairement sur la peine de mort et l’accueil des immigrés.
Ce premier axe correspond à une opposition gauche-droite entre partis traditionnels.
Le second axe est structuré avant tout le rapport à la démocratie, à l’Union Européenne, ainsi qu’à l’immigration et à la peine de mort.
Ce second axe “explique” quant à lui une opposition entre le Front National et la droite traditionnelle.
On peut représenter ensemble l’espace politique et le vote.
factoextra::fviz_ca(inter,
invisible = "row.sup",
col.row = "#d7191c",
col.col = "#2c7bb6",
title = "Analyse inter-classes",
repel = TRUE)
L’approche par variables instrumentales constitue une forme de rapprochement entre l’analyse géométrique des données et les méthodes de régression. En pratique, il s’agit de construire un espace factoriel, à partir d’un premier groupe de variables actives, de manière à ce que cet espace “explique” au mieux un second ensemble de variables, dites variables instrumentales. Dans le cas général, il y a plusieurs variables instrumentales, qui peuvent être catégorielles et/ou numériques. Lorsque les variables actives sont toutes numériques, on parle d’Analyse en Composantes Principales sur Variables Instrumentales (fonction
PCAiv()
), et lorsque les variables actives sont toutes catégorielles, d’Analyse des Correspondances sur Variables Instrumentales (fonctionMCAiv()
). Si la variable instrumentale est unique et catégorielle, on peut dire qu’elle partitionne les individus en groupes ou “classes”. Il s’agit donc de faire une analyse inter-classes, en construisant un espace factoriel qui rend compte des différences entre classes (fonctionsbcPCA()
pour les cas où les variables actives sont continues etbcMCA()
pour ceux où elles sont catégorielles). On parle aussi parfois d’analyse discriminante barycentrique ou d’analyse des correspondances discriminantes. Si les variables actives sont continues, une variante est l’analyse factorielle discriminante (AFD), dite aussi analyse discriminante descriptive (fonctionDA()
), qui est équivalente à l’analyse discriminante linéaire dans la littérature anglo-saxonne. Lorsque les variables actives sont catégorielles, une adaptation de l’AFD a été proposée par Gilbert Saporta (1977) sous le nom de Disqual (fonctionDAQ()
).
Régressions PLS
Les régressions PLS (Partial Least Squares) s’appliquent aux cas où l’on a une ou plusieurs variables à expliquer \(Y\) et un ensemble de variables explicatives \(X\), quels que soient leurs types (continus ou catégoriels). Elles permettent de construire l’espace des \(X\) qui explique au mieux l’espace des \(Y\). Elles constituent donc un compromis entre les régressions des \(Y\) en fonction des \(X\), l’ACP des \(X\) et l’ACP des \(Y\). Elles autorisent des usages diversifiés :
- Orientées vers la régression, les régressions PLS permettent de traiter un grand nombre de variables explicatives sans problèmes d’estimation ou de multicolinéarité, et de faire de la sélection de variables.
- Orientées vers l’analyse factorielle, elles s’appuient sur des espaces et une approche géométrique, relationnelle et multidimensionnelle.
Exemple 1 : la réussite scolaire des enfants immigrés
Pour illustrer le premier usage - orienté vers la régression, on s’appuie sur les données utilisées dans l’article de Jean-Paul Caille et Louis-André Vallet sur la réussite scolaire au collège des enfants étrangers ou issus de l’immigration (Caille et Vallet, 1995).
On cherche à expliquer la réussite scolaire par la nationalité et par d’autres caractéristiques sociales et familiales des élèves : le sexe, le rang dans la fratrie, la PCS de la personne de référence de la famille, le diplôme du père, celui de la mère, activité ou absence d’activité professionnelle de la mère, la taille de la famille, la structure familiale, présence d’un frère ou d’une sœur scolarisée en lycée ou dans l’enseignement supérieur. La réussite scolaire est approchée par le fait d’avoir reçu, quatre ans après l’entrée au collège, une proposition d’orientation en seconde générale ou technologique.
# chargement du jeu de données
load("/home/nicolas/Nextcloud/UVSQ/M1_StatsApplScSoc/ValletCaille.RData")
str(basereg)
## 'data.frame': 15806 obs. of 11 variables:
## $ Seconde : Factor w/ 2 levels "0","1": 2 1 1 2 1 1 1 2 2 1 ...
## $ Natio2 : Factor w/ 2 levels "France","etranger": 2 1 1 1 2 2 2 1 1 1 ...
## $ Pcsresp : Factor w/ 8 levels "ouvr_qual","agriculteur",..: 1 4 7 4 8 1 7 5 3 1 ...
## $ DiploP : Factor w/ 5 levels "CAP-BEP-BEPC",..: 1 5 5 4 5 4 1 5 1 1 ...
## $ DiploM : Factor w/ 5 levels "CAP-BEP-BEPC",..: 1 5 3 1 5 4 2 5 1 1 ...
## $ Mactiv : Factor w/ 2 levels "non","oui": 2 2 2 2 NA 2 1 1 2 NA ...
## $ Sexe : Factor w/ 2 levels "1","2": 1 2 1 2 1 2 2 2 1 2 ...
## $ Taillefam: Factor w/ 6 levels "2","1","3","4",..: 3 3 3 1 4 5 5 1 2 1 ...
## $ Rang : Factor w/ 4 levels "1","2","3","4 ou plus": 2 1 2 1 1 4 3 2 1 2 ...
## $ FSetud : Factor w/ 2 levels "non","oui": 2 1 1 1 1 2 1 1 1 2 ...
## $ Structpar: Factor w/ 3 levels "biparentale",..: 1 1 2 1 1 1 1 1 1 1 ...
Les variables explicatives, qui sont ici toutes catégorielles, sont recodées sous forme dichotomique. La variable à expliquer étant binaire, on fait le choix de l’utiliser comme une variable numérique, de valeur 0 ou 1 (mais on aurait également pu la recoder sous la forme de deux variables dichotomiques).
# sélection et recodage des variables explicatives
X <- dichotom(basereg[,-1], out = "numeric")
# sélection et recodage de la variable à expliquer
Y <- as.numeric(basereg$Seconde=="1")
# X et Y dans un seul tableau de données
df <- data.frame(Seconde = I(as.matrix(Y)), X = I(as.matrix(X)))
On réalise une première régression PLS sans fixer le nombre de composantes (i.e. axes).
pls1 <- pls::mvr(Seconde ~ X,
data = df,
scale = TRUE,
validation = "CV",
jackknife = TRUE,
method = "oscorespls")
A titre exploratoire, on étudie les projections des variables dans le plan formé par les deux premières composantes. Au préalable, on interprète chacune des composantes à partir des “poids” (i.e. contributions) des variables explicatives dans leur construction.
La première composante est un axe de hiérarchie sociale : elle oppose les élèves dont les parents sont les plus diplômés et dont la personne de référence de la famille est cadre, aux élèves dont les parents sont les moins diplômés et dont la personne de référence de la famille est ouvrière.
La seconde composante oppose les élèves étrangers, de sexe féminin et/ou de mère inactive aux élèves français, de sexe masculin et/ou de mère active.
Dans le plan formé par ces deux composantes, on voit que la réussite scolaire se situe nettement du côté de la partie supérieure de la hiérarchie sociale, mais aussi, plus légèrement, du côté des élèves étrangers, de sexe féminin et/ou de mère inactive.
Avant d’obtenir les résultats de la régression PLS sous forme de coefficients, on va déterminer le nombre optimal de composantes à retenir. Il existe plusieurs approches pour cela, notamment :
- tests de permutation
- erreur-type des résidus issus de la validation croisée
- indicateur \(Q^2\) (on retient les composantes dont le \(Q^2 \ge 0.0975\))
Les trois approches ne suggérant pas le même nombre de composantes, on choisit la solution qui conserve le plus d’information, i.e. celle à 2 composantes. On a vu aussi que la variable de nationalité, dont l’interprétation nous intéresse, pèse dans la construction du second axe.
## [1] 2
## [1] 1
## 1 comps
## 1
On peut ensuite obtenir les résultats de la régression sous forme de coefficients, p-values et intervalles de confiance (calculés avec une procédure jackknife). Les coefficients permettent de comparer la force des effets des variables et leur signe. Cependant, ils correspondent aux coefficients des variables explicatives centrées et réduites, leur valeur in abstracto n’a donc pas de signification.
coefficients | std error | t-value | p-value | 2.5% | 97.5% | |
---|---|---|---|---|---|---|
Natio2.France | -0.00864 | 0.00136 | -6.332 | 0.00014 | -0.01131 | -0.00596 |
Natio2.etranger | 0.00864 | 0.00136 | 6.332 | 0.00014 | 0.00596 | 0.01131 |
Pcsresp.ouvr_qual | -0.02890 | 0.00163 | -17.729 | 0.00000 | -0.03209 | -0.02570 |
Pcsresp.agriculteur | 0.00548 | 0.00171 | 3.201 | 0.01081 | 0.00212 | 0.00884 |
Pcsresp.artcom | -0.00805 | 0.00212 | -3.801 | 0.00421 | -0.01219 | -0.00390 |
Pcsresp.cadre | 0.03991 | 0.00239 | 16.714 | 0.00000 | 0.03523 | 0.04459 |
Pcsresp.prof_int | 0.01991 | 0.00196 | 10.149 | 0.00000 | 0.01606 | 0.02375 |
Pcsresp.empl | -0.01012 | 0.00188 | -5.375 | 0.00045 | -0.01381 | -0.00643 |
Pcsresp.ouvr_nqual | -0.01978 | 0.00191 | -10.332 | 0.00000 | -0.02353 | -0.01603 |
Pcsresp.inactif | -0.00927 | 0.00117 | -7.934 | 0.00002 | -0.01155 | -0.00698 |
DiploP.CAP-BEP-BEPC | -0.00079 | 0.00270 | -0.291 | 0.77732 | -0.00609 | 0.00451 |
DiploP.aucun | -0.02709 | 0.00187 | -14.509 | 0.00000 | -0.03074 | -0.02343 |
DiploP.CEP | -0.01585 | 0.00217 | -7.289 | 0.00005 | -0.02011 | -0.01159 |
DiploP.bac ou plus | 0.04703 | 0.00169 | 27.878 | 0.00000 | 0.04372 | 0.05034 |
DiploP.inconnu | -0.01812 | 0.00330 | -5.495 | 0.00038 | -0.02458 | -0.01166 |
DiploM.CAP-BEP-BEPC | 0.00129 | 0.00161 | 0.798 | 0.44529 | -0.00187 | 0.00444 |
DiploM.aucun | -0.03066 | 0.00285 | -10.770 | 0.00000 | -0.03624 | -0.02508 |
DiploM.CEP | -0.02785 | 0.00256 | -10.861 | 0.00000 | -0.03287 | -0.02282 |
DiploM.bac ou plus | 0.05532 | 0.00141 | 39.318 | 0.00000 | 0.05256 | 0.05808 |
DiploM.inconnu | -0.01408 | 0.00242 | -5.828 | 0.00025 | -0.01882 | -0.00935 |
Mactiv.non | 0.00404 | 0.00252 | 1.602 | 0.14355 | -0.00090 | 0.00897 |
Mactiv.oui | 0.00452 | 0.00301 | 1.499 | 0.16814 | -0.00139 | 0.01042 |
Sexe.1 | -0.03666 | 0.00125 | -29.425 | 0.00000 | -0.03910 | -0.03422 |
Sexe.2 | 0.03666 | 0.00125 | 29.425 | 0.00000 | 0.03422 | 0.03910 |
Taillefam.2 | 0.00964 | 0.00213 | 4.525 | 0.00144 | 0.00546 | 0.01382 |
Taillefam.1 | 0.00324 | 0.00194 | 1.669 | 0.12944 | -0.00056 | 0.00704 |
Taillefam.3 | -0.00200 | 0.00202 | -0.988 | 0.34910 | -0.00595 | 0.00196 |
Taillefam.4 | -0.01044 | 0.00199 | -5.238 | 0.00054 | -0.01435 | -0.00653 |
Taillefam.5-7 | -0.00930 | 0.00255 | -3.649 | 0.00533 | -0.01430 | -0.00430 |
Taillefam.8 et plus | 0.00064 | 0.00220 | 0.291 | 0.77762 | -0.00367 | 0.00495 |
Rang.1 | 0.00966 | 0.00138 | 6.982 | 0.00006 | 0.00694 | 0.01237 |
Rang.2 | -0.00877 | 0.00215 | -4.079 | 0.00276 | -0.01299 | -0.00456 |
Rang.3 | 0.00156 | 0.00309 | 0.504 | 0.62657 | -0.00450 | 0.00761 |
Rang.4 ou plus | -0.00569 | 0.00197 | -2.890 | 0.01789 | -0.00956 | -0.00183 |
FSetud.non | -0.01689 | 0.00103 | -16.360 | 0.00000 | -0.01891 | -0.01486 |
FSetud.oui | 0.01689 | 0.00103 | 16.360 | 0.00000 | 0.01486 | 0.01891 |
Structpar.biparentale | 0.01171 | 0.00111 | 10.513 | 0.00000 | 0.00953 | 0.01389 |
Structpar.monoparentale | -0.00915 | 0.00108 | -8.475 | 0.00001 | -0.01127 | -0.00704 |
Structpar.autre | -0.00775 | 0.00228 | -3.407 | 0.00779 | -0.01221 | -0.00329 |
On peut aussi les représenter sous forme graphique. On constate notamment que la nationalité étrangère est un facteur favorable à la réussite scolaire, même s’il pèse beaucoup moins fortement que le sexe ou la position sociale des parents.
On peut également obtenir les coefficients “bruts”, i.e. non standardisés : ils sont exprimés dans leur unité de mesure d’origine. Cela facilite l’interprétation de l’effet d’une variable sur la variable à expliquer, mais ne permet pas la comparaison de la force des effets.
coefficients | std error | t-value | p-value | 2.5% | 97.5% | |
---|---|---|---|---|---|---|
Natio2.France | -0.03916 | 0.00618 | -6.332 | 0.00014 | -0.05128 | -0.02704 |
Natio2.etranger | 0.03916 | 0.00618 | 6.332 | 0.00014 | 0.02704 | 0.05128 |
Pcsresp.ouvr_qual | -0.06629 | 0.00374 | -17.729 | 0.00000 | -0.07362 | -0.05896 |
Pcsresp.agriculteur | 0.02929 | 0.00915 | 3.201 | 0.01081 | 0.01136 | 0.04723 |
Pcsresp.artcom | -0.03039 | 0.00799 | -3.801 | 0.00421 | -0.04605 | -0.01472 |
Pcsresp.cadre | 0.10242 | 0.00613 | 16.714 | 0.00000 | 0.09041 | 0.11443 |
Pcsresp.prof_int | 0.04830 | 0.00476 | 10.149 | 0.00000 | 0.03897 | 0.05762 |
Pcsresp.empl | -0.03047 | 0.00567 | -5.375 | 0.00045 | -0.04158 | -0.01936 |
Pcsresp.ouvr_nqual | -0.07132 | 0.00690 | -10.332 | 0.00000 | -0.08485 | -0.05779 |
Pcsresp.inactif | -0.06835 | 0.00861 | -7.934 | 0.00002 | -0.08523 | -0.05146 |
DiploP.CAP-BEP-BEPC | -0.00169 | 0.00580 | -0.291 | 0.77732 | -0.01305 | 0.00967 |
DiploP.aucun | -0.08614 | 0.00594 | -14.509 | 0.00000 | -0.09778 | -0.07451 |
DiploP.CEP | -0.04484 | 0.00615 | -7.289 | 0.00005 | -0.05690 | -0.03278 |
DiploP.bac ou plus | 0.10558 | 0.00379 | 27.878 | 0.00000 | 0.09816 | 0.11300 |
DiploP.inconnu | -0.05078 | 0.00924 | -5.495 | 0.00038 | -0.06890 | -0.03267 |
DiploM.CAP-BEP-BEPC | 0.00278 | 0.00348 | 0.798 | 0.44529 | -0.00405 | 0.00961 |
DiploM.aucun | -0.08996 | 0.00835 | -10.770 | 0.00000 | -0.10633 | -0.07359 |
DiploM.CEP | -0.07029 | 0.00647 | -10.861 | 0.00000 | -0.08298 | -0.05761 |
DiploM.bac ou plus | 0.12351 | 0.00314 | 39.318 | 0.00000 | 0.11735 | 0.12967 |
DiploM.inconnu | -0.05096 | 0.00874 | -5.828 | 0.00025 | -0.06810 | -0.03382 |
Mactiv.non | 0.00847 | 0.00529 | 1.602 | 0.14355 | -0.00189 | 0.01884 |
Mactiv.oui | 0.00921 | 0.00615 | 1.499 | 0.16814 | -0.00283 | 0.02126 |
Sexe.1 | -0.07332 | 0.00249 | -29.425 | 0.00000 | -0.07820 | -0.06843 |
Sexe.2 | 0.07332 | 0.00249 | 29.425 | 0.00000 | 0.06843 | 0.07820 |
Taillefam.2 | 0.01941 | 0.00429 | 4.525 | 0.00144 | 0.01100 | 0.02782 |
Taillefam.1 | 0.00992 | 0.00594 | 1.669 | 0.12944 | -0.00173 | 0.02157 |
Taillefam.3 | -0.00438 | 0.00444 | -0.988 | 0.34910 | -0.01308 | 0.00431 |
Taillefam.4 | -0.03739 | 0.00714 | -5.238 | 0.00054 | -0.05139 | -0.02340 |
Taillefam.5-7 | -0.04144 | 0.01136 | -3.649 | 0.00533 | -0.06370 | -0.01918 |
Taillefam.8 et plus | 0.00919 | 0.03159 | 0.291 | 0.77762 | -0.05272 | 0.07110 |
Rang.1 | 0.01931 | 0.00277 | 6.982 | 0.00006 | 0.01389 | 0.02473 |
Rang.2 | -0.01839 | 0.00451 | -4.079 | 0.00276 | -0.02723 | -0.00955 |
Rang.3 | 0.00503 | 0.00998 | 0.504 | 0.62657 | -0.01453 | 0.02458 |
Rang.4 ou plus | -0.02740 | 0.00948 | -2.890 | 0.01789 | -0.04599 | -0.00882 |
FSetud.non | -0.03881 | 0.00237 | -16.360 | 0.00000 | -0.04346 | -0.03416 |
FSetud.oui | 0.03881 | 0.00237 | 16.360 | 0.00000 | 0.03416 | 0.04346 |
Structpar.biparentale | 0.03794 | 0.00361 | 10.513 | 0.00000 | 0.03087 | 0.04502 |
Structpar.monoparentale | -0.03202 | 0.00378 | -8.475 | 0.00001 | -0.03943 | -0.02461 |
Structpar.autre | -0.06027 | 0.01769 | -3.407 | 0.00779 | -0.09495 | -0.02560 |
A noter : si l’on souhaite sélectionner les principales variables explicatives du modèles, on peut s’appuyer sur les coefficients de la régression et les p-values associées. Mais une autre approche consiste à utiliser les VIP (Variable Importance in the Prediction), qui mesurent l’importance des variables explicatives dans la prédiction des variables à expliquer. Par convention, on peut considérer une variable comme importante si son \(VIP > 0.8\) ou \(>1\), selon les recommandations. Cela nous amènerait ici à ne conserver que 19 ou même 10 des 39 variables explicatives.
## DiploM.bac ou plus DiploP.bac ou plus Pcsresp.cadre
## 2.516 2.437 2.007
## DiploM.aucun Pcsresp.ouvr_qual DiploP.aucun
## 1.453 1.438 1.304
## Sexe.1 Sexe.2 DiploM.CEP
## 1.292 1.292 1.210
## Pcsresp.ouvr_nqual Pcsresp.prof_int DiploP.inconnu
## 1.013 0.961 0.958
## Mactiv.oui FSetud.non FSetud.oui
## 0.890 0.869 0.869
## Natio2.France Natio2.etranger DiploP.CEP
## 0.841 0.841 0.830
## Taillefam.2 Taillefam.5-7 DiploM.inconnu
## 0.770 0.749 0.720
## Mactiv.non Structpar.biparentale Rang.4 ou plus
## 0.719 0.671 0.597
## Structpar.monoparentale Taillefam.4 Pcsresp.inactif
## 0.555 0.528 0.510
## Pcsresp.empl Rang.2 Structpar.autre
## 0.467 0.426 0.379
## Rang.1 Pcsresp.artcom Taillefam.8 et plus
## 0.317 0.281 0.275
## Pcsresp.agriculteur Rang.3 Taillefam.1
## 0.182 0.162 0.148
## DiploM.CAP-BEP-BEPC DiploP.CAP-BEP-BEPC Taillefam.3
## 0.104 0.096 0.094
Exemple 2 : les loisirs
Pour le deuxième exemple, on utilise les données issues de l’enquête
“Histoires de vie” (Insee, 2003) disponibles dans le package
questionr
.
On va chercher à expliquer les pratiques de loisirs par les propriétés sociales des enquêtés.
- 10 variables de loisirs : hard-rock, lecture de BD, pêche et chasse, cuisine, bricolage, cinéma, sport et télévision
- 6 variables de propriétés sociales : sexe, âge, niveau d’études, statut d’emploi, qualification, religiosité
On recode toutes les variables sous forme dichotomique. On a préalablement discrétisé l’âge et la consommation de télévision, pour des raisons d’interprétation, mais, du point de vue technique, cela n’était pas nécessaire.
# chargement du jeu de données
data(hdv2003, package = "questionr")
# sélection et recodage des variables explicatives
X <- select(hdv2003, age, sexe, nivetud, occup, qualif, relig) %>%
mutate(age = Hmisc::cut2(age, cuts = c(18,26,36,51,66))) %>% # discrétisation de l'âge
dichotom(out = "numeric") # dichotomisation
# sélection et recodage des variables à expliquer
Y <- select(hdv2003, hard.rock:heures.tv) %>%
mutate(heures.tv = Hmisc::cut2(heures.tv, g = 4) %>%
factor(labels = as.character(1:4))) %>% # discrétisation de la consommation de tv
dichotom(out = "numeric") %>% # dichotomisation
lapply(scale) %>% # standardisation
as.data.frame()
# X et Y dans un seul tableau de données
df <- data.frame(Y = I(as.matrix(Y)), X = I(as.matrix(X)))
On réalise une régression PLS, en ne conservant que les 5 premières composantes.
pls2 <- pls::mvr(Y ~ X, data = df,
ncomp = 5,
scale = TRUE,
validation = "CV",
jackknife = TRUE,
method = "oscorespls",
maxit = 1000)
La projection des variables explicatives sur le plan formé par les deux premières composantes donne un premier regard sur les propriétés sociales les plus structurantes.
Mais l’examen des contributions permet une interprétation plus précise pour chacune des composantes. La première oppose les plus de 50 ans, retraités, peu diplômés et/ou ouvriers, aux étudiants et actifs de moins de 50 ans, diplômés du supérieur et /ou cadres. Elle semble donc à la fois structurée par l’âge et la hiérarchie sociale.
Le second axe traduit quant à lui avant tout une opposition sexuée.
A partir de la projection des variables à expliquer sur le plan formé
par les deux premières composantes, on constate que :
- les loisirs des personnes âgées ou situées en bas de la hiérarchie sociale se limitent à une consommation importante de télévision ;
- la pratique du sport et du cinéma, associée à une faible consommation de télévision, sont associées aux moins de 50 ans et aux individus situés en haut de la hiérarchie sociale ;
- la seconde composante oppose la cuisine (loisir féminin) au bricolage, la pêche et la chasse (loisirs masculins).
L’examen des “redondances” permet de vérifier quelles variables de Y sont les mieux expliquées par les composantes 1 et 2 : ce sont bien celles que l’on avait identifiées à partir de la projection des variables.
## t1 t2
## Rd 0.061 0.024
## hard.rock.Non 0.004 0.000
## hard.rock.Oui 0.004 0.000
## lecture.bd.Non 0.013 0.004
## lecture.bd.Oui 0.013 0.004
## peche.chasse.Non 0.000 0.058
## peche.chasse.Oui 0.000 0.058
## cuisine.Non 0.003 0.059
## cuisine.Oui 0.003 0.059
## bricol.Non 0.048 0.075
## bricol.Oui 0.048 0.075
## cinema.Non 0.251 0.021
## cinema.Oui 0.251 0.021
## sport.Non 0.155 0.000
## sport.Oui 0.155 0.000
## heures.tv.1 0.047 0.001
## heures.tv.2 0.013 0.001
## heures.tv.3 0.010 0.001
## heures.tv.4 0.087 0.001
Analyses conditionnelles
Les analyses conditionnelles (ou intra-classes) constituent une autre tentative d’intégration de l’analyse géométrique des données et de la régression. Leur principe consiste à contraindre les axes de l’ACM à être indépendants (i.e. orthogonaux) d’une ou plusieurs variables supplémentaires, c’est-à-dire à construire une ACM “toute chose (de ces variables supplémentaires) égale par ailleurs” (Bry et al, 2016). La comparaison des résultats de l’ACM originelle et de ceux de l’ACM conditionnelle est un moyen d’étudier les effets de structure.
Dans le cas général, il y a plusieurs variables dont il faut
“éliminer l’effet” et celles-ci sont parfois appelées variables
instrumentales orthogonales. On réalisera donc une Analyse
en Composantes Principales sur Variables Instrumentales
Orthogonales si les variables actives sont toutes numériques
(fonction PCAoiv()
)
et une Analyse des Correspondances sur Variables Instrumentales
Orthogonales si les variables actives sont toutes catégorielles
(fonction MCAoiv()
).
Comme pour les analyses discriminantes (ou inter-classes), si la variable instrumentale orthogonale est unique et catégorielle, elle partitionne les individus en “classes”. Mais on est cette fois dans le cadre d’une analyse intra-classes : il s’agit de construire l’espace factoriel rendant compte des structures communes aux différentes classes.
Lorsque les variables actives sont catégorielles, on réalise une
ACM conditionnelle (Escofier, 1990 et fonction wcMCA()
).
L’approche conditionnelle s’applique aussi au cas de variables actives
numériques (fonction wcPCA()
).
On construit maintenant l’espace des goûts communs aux femmes et aux hommes, ou, dit autrement, en neutralisant les différences sexuées.
junk <- c("FrenchPop.NA", "Rap.NA", "Rock.NA", "Jazz.NA", "Classical.NA",
"Comedy.NA", "Crime.NA", "Animation.NA", "SciFi.NA", "Love.NA",
"Musical.NA")
intra <- wcMCA(Taste[,1:11], Taste$Gender, excl = junk)
Dans le plan (1,2), les résultats obtenus sont très proches de ceux de l’ACM spécifique. La principale différence concerne le goût (très féminin) pour les films d’amour, qui se distingue nettement moins sur l’axe 2.
Cela se confirme à l’examen précis des contributions : le goût pour les films d’amour ne contribue qu’à hauteur de 6% à la construction de l’axe 2, contre 17% pour l’ACM.
Variable | Category | Weight | Quality of representation | Contribution (left) | Contribution (right) | Total contribution | Cumulated contribution | Contribution of deviation | Proportion to variable |
---|---|---|---|---|---|---|---|---|---|
Rock | Yes | 535 | 0.290 | 17.36 | 23.76 | 23.76 | 23.76 | 100 | |
No | 1455 | 0.287 | 6.39 | ||||||
SciFi | Yes | 143 | 0.214 | 16.25 | 16.25 | 40.01 | 16.25 | 92.76 | |
FrenchPop | No | 741 | 0.176 | 9.07 | 14.41 | 54.42 | 14.41 | 100 | |
Yes | 1249 | 0.174 | 5.35 | ||||||
Rap | Yes | 261 | 0.171 | 12.14 | 12.14 | 66.56 | 12.14 | 86.63 | |
Musical | Yes | 66 | 0.137 | 10.84 | 10.84 | 77.4 | 10.84 | 96.66 | |
Animation | Yes | 91 | 0.096 | 7.52 | 7.52 | 84.91 | 7.52 | 95.2 | |
Love | Yes | 225 | 0.083 | 6.04 | 6.04 | 90.95 | 6.04 | 88.87 |