Calcul du barycentre des modalités de variables qualitatives supplémentaires: cas particulier

106 views
Skip to first unread message

Christophe Bechet

unread,
Nov 22, 2017, 11:46:52 AM11/22/17
to FactoMineR users
Bonjour,

Tout d'abord un très grand merci d'avoir créé ce package FactoMineR pour l'analyse multifatcorielle. Il m'a été très utile jusqu'ici, mais je rencontre un problème d'ordre méthodologique.

J'essaye d'appliquer l'ACM sur un jeu de données longitudinales. Jusqu'ici, j'avais séparé mon jeu de données en plusieurs clusters en fonction des périodes (mettons années 1910, 1920, 1930...) et appliqué une ACM sur chaque partition. J'ai pu remarquer que plus le jeu de données est grand, plus la position des variables actives reste stable d'une partition (i.e. d'une période) à l'autre. À l'inverse, plus le jeu de données est petit, moins les dimensions restent stables. Mon but est d'observer le changement de profil pour chaque modalité d'une variable qualitative supplémentaire au cours du temps. Pour ce faire, j'extrais les coordonnées des points des variables actives et de la variable supplémentaire et je visualise les changements dans un graphique dynamique (package: googleVis).

Ma question est la suivante: comment faire en sorte que les coordonnées des modalités des variables actives restent stables pour chaque partition et que les coordonnées des modalités de la variable supplémentaire puissent se mouvoir, si le jeu de données n'est pas suffisamment grand? Je pensais exploiter une propriété des variables supplémentaires, à savoir que les coordonnées de leurs modalités sont calculées par la moyenne pondérée des coordonnées des points des individus (arrêtez-moi si je me trompe). Donc, au lieu de créer un biplot pour chaque période étudiée, l'idée serait de créer un seul biplot "panchronique" afin de stabiliser les dimensions, puis de projeter les modalités de la variable supplémentaire pour chaque période.

Exemple: pour les années 1910:
- créer une ACM sur base des variables actives de tout le jeu de données;
- extraire les coordonnées des individus pour cette période;
- si la variable supplémentaire a les modalités A, B et C, subdiviser les coordonnées en trois selon ces modalités;
- enfin, calculer les coordonnées de chaque modalité en calculant la moyenne pondérée des points qui les définissent.

Il suffirait ensuite d'appliquer cette procédure à chaque partition/période. Je voudrais savoir si cela a déjà été étudié ou s'il existe une procédure pour stabiliser les dimensions pour des études longitudinales. Je ne suis pas statisticien, donc si quelqu'un pouvait m'éclairer sur comment les moyennes pondérées sont calculées, je lui en serais reconnaissant.

D'avance merci!

Christophe Bechet

unread,
Nov 22, 2017, 7:45:26 PM11/22/17
to FactoMineR users
En fait ma question pourrait très bien se résumer à ceci: quel coefficient est utilisé pour pondérer la moyenne des coordonnées des points lorsqu'on cherche les coordonnées d'une catégorie, donc une modalité provenant d'une variable qualitative supplémentaire?

François Husson

unread,
Nov 23, 2017, 1:59:34 AM11/23/17
to FactoMineR users
Bonjour,
Dans les calculs, les individus ont des poids qui sont dans le vecteur row.w. Donc par défaut tous les individus ont le même poids 1/I. Ajouter une variable supplémentaire ne modifie pas les coordonnées des modalités actives et des individus. Ce qui peut se passer, c'est que certaines modalités supplémentaires soient extrêmes et modifient le minimum et le maximum utilisés pour construire les graphes. Il faut alors que vous trouviez les min et max des axes pour toutes les variables supplémentaires (i.e. toutes les périodes) dans un premier temps, et ensuite, vous imposez lors de la construction des graphes l'utilisation de ces min et max.
FH

Christophe Bechet

unread,
Nov 23, 2017, 4:00:46 AM11/23/17
to FactoMineR users
Donc si je comprends bien, puisque row.w reste constant, calculer le barycentre d'une catégorie supplémentaire revient à calculer la moyenne arithmétique de ses coordonnées? Ou bien dois-je plutôt additionner tous les row.wi x Dim1i et diviser le tout par le nombre d'observations? Je n'arrive pas aux mêmes coordonnées que $quali.sup$coord si je me contente de calculer la moyenne arithmétique des coordonnées sur l'ensemble du jeu.

Christophe Bechet

unread,
Nov 23, 2017, 7:27:53 AM11/23/17
to FactoMineR users
J'ai essayé d'utiliser row.w pour pondérer la moyenne des coordonnées, mais je ne parviens pas au même résultat que celui retourné par MCA. Voici un exemple de données sur lequel je me suis exercé.

set.seed(90114)
V1
<-sample(rep(c("a", "A"), 100))
V2
<-sample(rep(c("a", "A", "b", "B"), 50))
V3
<-sample(rep(c("F", "M", "I"), 67), 200)
V4
<-sample(rep(c("C", "R"), 100))
V5
<-sample(rep(c(1970, 1980, 1990, 2000, 2010), 40))
data
<-data.frame(V1, V2, V3, V4, V5)

J'ai appliqué une ACM sur les variables V2 à V4. V1 est la variable supplémentaire dont les coordonnées des catégories sont à prédire.

data.mca<-MCA(data[, -5], quali.sup=1, graph=F)



Pour retourner les coordonnées des catégories, il suffit d'utiliser la valeur suivante de l'ACM:

categories<-data.mca$quali.sup$coord[, 1:2]
categories
#            Dim 1       Dim 2
# V1_a -0.03923839 -0.06338353
# V1_A  0.03923839  0.06338353


Ce qui m'intéresse donc ici, c'est le calcul effectué pour obtenir ces valeurs si celles-ci sont bien barycentriques à leurs nuages de points respectifs (un nuage de points pour la valeur "a" et un nuage de points pour la valeur "A").

DIM1<-data.mca$ind$coord[, 1]
DIM2
<-data.mca$ind$coord[, 2]
WEIGHT
<-data.mca$call$row.w
data1
<-data.frame(data, WEIGHT, DIM1, DIM2)


v1_a
<-data1[data1$V1=="a",]
v1_A
<-data1[data1$V1=="A",]


V1_a_Dim1
<-sum(v1_a$WEIGHT*v1_a$DIM1)/100 # -0.0248
v1_a_Dim2
<-sum(v1_a$WEIGHT*v1_a$DIM2)/100 # -0.0382


J'ai une différence entre les valeurs retournées par quali.sup$coord et mon calcul, comme vous pouvez le constater. Le calcul n'est donc pas correct.

François Husson

unread,
Nov 23, 2017, 9:47:40 AM11/23/17
to FactoMineR users
Non, bien sûr, les calculs sont bons.
Vous oubliez par contre dans votre calcul la dilatation de l'ACM. Il vous faut diviser les coordonnées des barycentres que vous avez calculés par la racine carré de la valeur propre de la dimension. 
Donc avec vos calculs :

> V1_a_Dim1/sqrt(data.mca$eig[1,1])
[1] -0.03923839
> v1_a_Dim2/sqrt(data.mca$eig[2,1])
[1] -0.06338353
> categories
           Dim 1       Dim 2
V1_a -0.03923839 -0.06338353
V1_A  0.03923839  0.06338353

On retrouve bien les valeurs attendues.
Vous pouvez voir cette vidéo qui explique le calcul des barycentres (des pseudo-barycentres en fait) en ACM : https://www.youtube.com/watch?v=liWN3V7RkZc

FH

Christophe Bechet

unread,
Nov 23, 2017, 11:09:27 AM11/23/17
to FactoMineR users
D'accord! Je cherche depuis longtemps ce détail et même dans les ouvrages de Greenacre, je ne parvenais pas à le trouver. Je vous remercie infiniment!
Reply all
Reply to author
Forward
0 new messages