{"word_count": 1083, "character_count": 7656}
Lors du dernier cours d'analyse des données, on était parti sur l'analyse (simple) des correspondance, à partir d'un tableau de contingence, pour deux variables qualitatives,On définit alors les effets marginaux,pour les lignes, et pour les colonnes,Prenons la matrice du tableau de contingence des variables couleurs des yeux / couleurs des cheveux,&#62; data(HairEyeColor) &#62; N = HairEyeColor[,,"Male"] + HairEyeColor[,,"Female"]&#62; N       EyeHair    Brown Blue Hazel Green  Black    68   20    15     5  Brown   119   84    54    29  Red      26   17    14    14  Blond     7   94    10    16On peut ajouter les totaux par marges, car on en aura besoin par la suite&#62; addmargins(N)       EyeHair    Brown Blue Hazel Green Sum  Black    68   20    15     5 108  Brown   119   84    54    29 286  Red      26   17    14    14  71  Blond     7   94    10    16 127  Sum     220  215    93    64 592Au lieu de travailler avec les comptages, on peut considérer les probabilités empiriques, appelées aussi fréquences empiriques,La matrice des profils lignes est ici&#62; L = N / apply(N,1,sum)&#62; L       EyeHair         Brown      Blue      Hazel     Green  Black 0.62962963 0.1851852 0.13888889 0.0462963  Brown 0.41608392 0.2937063 0.18881119 0.1013986  Red   0.36619718 0.2394366 0.19718310 0.1971831  Blond 0.05511811 0.7401575 0.07874016 0.1259843où chaque ligne est une mesure de probabilité, dans l'espace de la couleur des yeux.&#62; addmargins(L)       EyeHair        Brown     Blue     Hazel    Green Sum  Black 0.6296296 0.185185 0.1388888 0.046296   1  Brown 0.4160839 0.293706 0.1888111 0.101398   1  Red   0.3661971 0.239436 0.1971831 0.197183   1  Blond 0.0551181 0.740157 0.0787401 0.125984   1(il y a une ligne en plus, mais qui ne sert à rien) Unne autre commande pour avoir la même sortie est&#62; addmargins(prop.table(N,1))Aussi, tous les profils lignes sont dans le simplexe de . On peut aussi définir le profil ligne moyen&#62; Lbar &#60;- apply(N,2,sum)/sum(N)&#62; Lbar     Brown      Blue     Hazel     Green 0.3716216 0.3631757 0.1570946 0.1081081Si les deux couleurs (yeux et cheveux) étaient indépendantes, les lignes de la matrice précédente seraient égales à cette dernière.Un peu d'algèbre matricielle permet de noter queavec . Et on notera que l'on peut aussi écrireEn cas d'indépendance, , et tous les profils lignes sont alors égaux.La distance entre profils ligne sera ici inspirée de la distance du chi-deux,Ce n'est alors plus la métrique euclidienne standard...  En reprenant des notations classiques d'algèbre linéaire, on noteraoù ici , histoire de récupérer les probabilités conditionnelles.Si je me permets une petite digression, de manière générale, étant donnée une matrice diagonale  de , on peut définir un produit scalaireet on a une sorte de norme euclidienne associée,La "sphère unité" pour cette nouvelle norme est alors un ellipsoïde. On peut montrer assez facilement que munir l'espace d'une telle métrique est équivalent à attribuer des poids  aux différentes composantes, et à utiliser la métrique usuelle (dite canonique).Aussi, en analyse en composante principale, on avait noté qu'il valait souvent mieux "normaliser" les données, pour éviter les problèmes d'unités. Lorsque nous avions vu l'analyse en composante principale en cours, nous avions utilisé la distance euclidienne sur la matrice normalisée, mais en fait, il aurait été équivalent de faire une analyse en composantes principales sur  avec comme métrique .Lorsque l'on projette le nuage de points (ici nos lignes) sur une droite de vecteur directeur , l'inertie est alorsConsidérons l'analyse spectrale de la matrice : on note  les valeurs propres (ordonnées de manière décroissante) et  les vecteurs propres. La contribution (absolue) du point  est alorsLe facteur  permet de normaliser, en quelque sorte: la somme des contributions de tous mes individus est ici 1.Mais revenons à nos moutons. Travaillons sur la matrice des profils lignes centrés,&#62; n = sum(N)&#62; X = t(t(L)-Lbar)Si on regarde les valeurs propres, effectivement, la quatrième est nulle (car on est sur le simplexe, ce qui impose une contrainte)&#62; eigen(X%*%t(X))$values[1] 3.550530e-01 2.718039e-02 1.652334e-03 1.659651e-17On va effectuer ici un ACP du nuage des lignes, avec la métrique , avec une matrice de poids  (car certes, on a normalisé, mais on n'avait pas autant d'individus sur toutes les lignes). Bref, la première partie de l'analyse des correspondance revient à faire une ACP sur la matrice des profils lignes, avec pour métrique , avec comme matrice de poids . Autrement dit, on calcule&#62; acp = PCA(X,scale.unit=FALSE,row.w=(apply(N,1,sum)/n),col.w=1/(apply(N,2,sum)/n))Si on visualise nos individus, on obtient&#62; plot(acp,choix="ind")On a fait ici la première moitié. Car ensuite, de manière parfaitement symétrique on ne fait plus l'ACP sur les profils lignes, mais les profils colonnes (autrement dit sur la matrice  au lieu de la matrice ), avec maintenant comme métrique , avec une matrice de poids . Bref, pour faire cette ACP, on utilise&#62; tN=t(N)&#62; C = tN / apply(tN,1,sum)&#62; Cbar = apply(tN,2,sum)/sum(N)&#62; Y = t(t(C)-Cbar)&#62; acp = PCA(Y,scale.unit=FALSE,row.w=(apply(N,2,sum)/n),col.w=1/(apply(N,1,sum)/n))et pour visualiserQuelque part, on peut projet les deux nuages (les profils lignes d'un côté, et les profils colonnes de l'autre) sur la même représentation (un peu comme en ACP). Si on visualise simultanément (à un soucis de signe près car si on considère des vecteurs propres de norme 1, il restera toujours une indétermination quand on signe), on obtient l'analyse des correspondances.&#62; library(FactoMineR)&#62; acm=CA(N)Autant l'analyse des profils lignes (les points bleus, correspondant aux couleurs des cheveux) permet de voir des profils proches en terme de distribution de couleurs d'yeux, l'analyse des profils colonnes (ici les points rouges) permet de voir les proximités entre les distributions des couleurs de cheveux, pour différentes couleurs d'yeux. Mais surtout, cette double projection permet de voir des corrélations fortes entre modalités des deux variables, ici la couleurs des yeux et la couleur des cheveux. On retrouve ici l'idée de la représentation simultanée dans le schémaUn test du chi-deux, permettant de tester l'indépendance entre la couleur des yeux et la couleur des cheveux donne les résidus suivants&#62; chisq.test(N)$residuals       EyeHair         Brown     Blue     Hazel     Green  Black  4.3983985 -3.06937 -0.477352 -1.953683  Brown  1.2334581 -1.94947  1.353284 -0.345099  Red   -0.0749779 -1.73012  0.852252  2.282736  Blond -5.8509974  7.04959 -2.227844  0.612698Autrement dit, on a une fort résidus (plus que sous hypothèse d'indépendance) entre les yeux bleus et les cheveux blond (c'est la plus forte valeur). Il serait donc normal que blond et blue soient proches. Pareil pour black et brown (pour les yeux). En revanche, blond et brown doivent être très éloignés. C'est finalement ce qu'on retrouve sur cette double projection. Un autre outils est la matrice d'attraction-répulsion, qui présente les résidus non pas de manière absolue (en tant que différence) mais relative, avec un ratio&#62; N/chisq.test(N)$expected       EyeHair        Brown      Blue     Hazel     Green  Black 1.6942761 0.5099053 0.8841099 0.4282407  Brown 1.1196440 0.8087169 1.2018949 0.9379371  Red   0.9854033 0.6592859 1.2551870 1.8239437  Blond 0.1483178 2.0380150 0.5012277 1.1653543Mais on verra... il y a d'autres techniques pour arriver à la même représentation, basées non pas sur le tableau de contingence, mais sur le tableau disjonctif... à suivre donc.