Hier soir, on voyait comment faire une analyse des correspondances à partir du tableau de contingence. Mais on peut avoir le problème autrement, à partir des individus. Certes, ces derniers ne sont pas observés (vraiment), mais peu importe.
> data(HairEyeColor) > N = HairEyeColor[,,"Male"] + HairEyeColor[,,"Female"] > Hair = rep(rep(rownames(N),ncol(N)), + as.vector(N)) > Eye = rep(colnames(N),apply(N,2,sum)) > df = data.frame(Ind=1:sum(N),Hair,Eye) > tail(df) Ind Hair Eye 587 587 Blond Green 588 588 Blond Green 589 589 Blond Green 590 590 Blond Green 591 591 Blond Green 592 592 Blond Green
On a ici une base classique, mais pas encore une matrice avec laquelle on pourra faire de l’analyse de données. Pour récupérer la matrice, on va disjoncter cette base,
> XH <- model.matrix(Ind~0+Hair,data=df) > XE <- model.matrix(Ind~0+Eye,data=df) > X <- cbind(XE,XH) > tail(X[,1:5]) EyeBlue EyeBrown EyeGreen EyeHazel HairBlack 587 0 0 1 0 0 588 0 0 1 0 0 589 0 0 1 0 0 590 0 0 1 0 0 591 0 0 1 0 0 592 0 0 1 0 0
On a cette fois une vraie matrice de nombres, avec laquelle on peut faire des calculs. Parmi les représentation usuelles, on peut définir la matrice de Burt, qui est une forme de tableau de contingence en grande dimension (à partir des variables disjonctées).
> Burt <- t(X) %*% X > Burt[,1:5] EyeBlue EyeBrown EyeGreen EyeHazel HairBlack EyeBlue 215 0 0 0 20 EyeBrown 0 220 0 0 68 EyeGreen 0 0 64 0 5 EyeHazel 0 0 0 93 15 HairBlack 20 68 5 15 108 HairBlond 94 7 16 10 0 HairBrown 84 119 29 54 0 HairRed 17 26 14 14 0
(etc) Mais on en reparlera.
On avait noté que pour l’Analyse des Correspondances, la distance naturelle était celle du chi-deux. Prenons notre tableau disjonctif. L’écriture classique de la distance du chi-deux entre deux lignes,
donne ici (comme les sommes des lignes donne où est le nombre de variables qualitatives – ici 2, mais on espère bien pouvoir intégrer plus de variables qualitatives – et où les nombres qui apparaissent dans la matrice sont les ),
avec
Voilà la distance entre deux individus. Si on voulait faire un ACP, on utilisait comme distance entre individus
Bref, notre analyse des correspondance peut être obtenue en faisant une ACP, avec les bons poids. Étant donné que
pour voir l’analyse des correspondances comme une ACP (entre des vrais individus, contrairement à hier), on va utiliser les poids suivants, sur les colonnes (i.e. les variables indicatrices disjonctées), i.e. on veut utiliser des distances de la forme
avec ici
Bon, lançons nous… soit on utilise juste le terme de gauche et on demande une ACP sur données normalisées, soit on utilise ce poids, avec une ACP sur données brutes. Essayons le premier.
Pour les poids, on utilise
> n=sum(N) > (nk=apply(X,2,sum)) EyeBlue EyeBrown EyeGreen EyeHazel HairBlack 215 220 64 93 108 > n*p [1] 1184
On pose alors
> omega=(n-nk)/(n*p)
et on fait ensuite une régression, dont on va chercher à représenter les variables (qui sont ici toutes nos modalités)
> library(FactoMineR) > PCA(X,col.w = omega)
On retrouve ici – à une symétrie près – la sortie que l’on a quand on fait une analyse des correspondances,
> library(FactoMineR) > acm=CA(N)
On a ici une approche très différente de celle d’hier:
- hier, on faisait une ACP, en projetant les individus, qui étaient les profils lignes de notre tableau de contingence (puis une analyse des profils colonnes, qu’on superposait ensuite)
- aujourd’hui, on fait une ACP, on projetant cette fois les variables, dans un tableau disjonctif complet.
L’avantage de cette dernière technique est qu’elle peut se faire avec plus de deux variables qualitatives, contrairement à la première approche.
OpenEdition suggests that you cite this post as follows:
Arthur Charpentier (January 27, 2015). Analyse des Correspondances, suite. Freakonometrics. Retrieved October 8, 2024 from https://doi.org/10.58079/ouya