\documentclass[10pt]{article}

\usepackage[left=1cm,right=1cm,top=2cm,bottom=2cm]{geometry}
\usepackage[utf8]{inputenc}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{amsmath}
\usepackage{comment}
\usepackage{verbatim}
\usepackage{graphicx}
\usepackage{hyperref}

\begin{document}

\title{Analyse de données} 
\author{Jacques Bailhache (jacques.bailhache@gmail.com)}

\maketitle

\setlength{\parindent}{0pt}

\section{Prérequis}

\subsection{Multiplicateurs de Lagrange}

\subsubsection{Exemple dans un espace de dimension 2}

Soit une fonction \( h : \mathbb{R}^2 \rightarrow \mathbb{R} \).

L'équation h(x)=0 définit une courbe dans \( \mathbb{R}^2 \).

Soit une autre fonction \( f : \mathbb{R}^2 \rightarrow \mathbb{R} \).

On cherche le point x de la courbe h(x)=0 qui minimise f, autrement dit x tel que :

\begin{itemize}
     \setlength{\itemsep}{1pt}
     \setlength{\parskip}{0pt}
     \setlength{\parsep}{0pt}
\item h(x)=0
\item f(x) est minimal
\end{itemize}

\includegraphics[width=12cm]{ml1.jpg}

On voit que x est le point où la courbe h(x)=0 est tangente à une courbe de niveau de f. Le gradient de f en ce point est perpendiculaire à la courbe h(x)=0. Le gradient de h étant également perpendiculaire à la courbe h(x)=0, les gradients de f et h sont alignés ou proportionnels, ce que l'on peut écrire sous la forme :

\[ \nabla f(x) + \lambda \nabla h(x) = 0 \]

\subsubsection{Exemple dans un espace de dimension 3}

Soit deux fonction \( h_1 \) et \( h_2 : \mathbb{R}^3 \rightarrow \mathbb{R} \).

L'équation \( h_1(x)=0 \) définit une surface. L'équation \( h_2(x)=0 \) définit une autre surface. La courbe C intersection de ces deux surfaces satisfait le système d'équations 
\begin{itemize}
     \setlength{\itemsep}{1pt}
     \setlength{\parskip}{0pt}
     \setlength{\parsep}{0pt}
\item \( h_1(x)=0 \)
\item \( h_2(x)=0 \)
\end{itemize}

On cherche le point x de cette courbe qui minimise une certaine fonction \( f : \mathbb{R}^3 \rightarrow \mathbb{R} \), autrement dit x tel que :

\begin{itemize}
     \setlength{\itemsep}{1pt}
     \setlength{\parskip}{0pt}
     \setlength{\parsep}{0pt}
\item \( h_1(x) = 0 \)
\item \( h_2(x) = 0 \)
\item f(x) est minimal
\end{itemize}

\includegraphics[width=12cm]{ml2.jpg}

Le point x est le point où la courbe C est tangente à une surface où f a la même valeur. On a :

\[ \nabla f(x) + \lambda_1 \nabla h_1(x) + \lambda_2 \nabla h_2(x) = 0 \]

\subsubsection{Cas général}

Dans \( \mathbb{R}^n \), on considère p+1 fonctions \( h_1, ..., h_p, f : \mathbb{R}^n \rightarrow \mathbb{R} \).  

On cherche x tel que

\begin{itemize}
     \setlength{\itemsep}{1pt}
     \setlength{\parskip}{0pt}
     \setlength{\parsep}{0pt}
\item \( h_1(x) = 0 \)
\item \( \ldots \)
\item \( h_p(x) = 0 \)
\item f(x) est minimal
\end{itemize}

Ce point x vérifie :

\[ \nabla f(x) + \lambda_1 \nabla h_1(x) + \ldots + \lambda_p \nabla h_p(x) = 0 \]

On définit le lagrangien L par : 

\[ L(x,\lambda) = f(x) + \lambda_1 h_1(x) + \ldots + \lambda_p h_p(x) \]

On a alors : 

\[ \nabla L(x,\lambda) = \frac{\partial L(x,\lambda)}{\partial x_i} = \nabla f(x) + \lambda_1 \nabla h_1(x) + \ldots + \lambda_p h_p(x) \]

La condition \( \nabla f(x) + \lambda_1 \nabla h_1(x) + \ldots + \lambda_p \nabla h_p(x) = 0 \) peut donc s'écrire :

\[ \nabla L(x,\lambda) = 0 \]

ou

\[ \frac{\partial L(x,\lambda)}{\partial x_i} = 0 \]

On peut également réécrire la condition \( h_j(x) = 0 \) sous la forme :

\[ \frac{\partial L(x,\lambda)}{\partial \lambda_j} = 0 \]


\subsection{Projection}

\includegraphics[width=12cm]{projection.jpg}


\subsection{Valeurs et vecteurs propres d'une matrice}

Calcul des valeurs et vecteurs propres par la méthode de la puissance itérée et de la déflation en J :

\begin{verbatim}

NB. Calcul des valeurs et vecteurs propres d'une matrice par la méthode de la puissance itérée et de la déflation
NB. Référence : 
NB.  http://www.bibmath.net/dico/index.php?action=affiche&quoi=./m/methodepuissance.html
NB.  http://log.chez.com/text/math/methodepuissance.pdf
NB.  http://www.normalesup.org/~pastre/meth-num/MN/9-val-pro/cours-valeurspropres.pdf
NB.  http://log.chez.com/text/math/cours-valeurspropres.pdf

and =: *.
or =: +.
not =: -.

transpose =: |:
extprod =: */
matprod =: +/ . *

avg =: 3 : 0
 (+/ y) % #y
)

puissance =: 3 : 0
 A =. y
 n =. #A
 u =. 1 , (n-1) $ 0
 i =. 0
 while. (i < 10000)
 do.
  i =. i + 1
  u1 =. u
  u =. A matprod u
  u =. u % (u matprod u)^0.5
  d =. u - u1
  if. (d matprod d) < 1e_30
  do. break.
  end.
 end.
 l =. avg (A matprod u) % u
 l; u; i
)

deflation =: 3 : 0
 A =. y
 NB. B = transpose A
 n =. #A
 l =. 0 $ 0
 u =. (n,0) $ 0
 for. A
 do.
  NB. echo 'A='; A
  lu1 =. puissance A
  NB. echo lu1
  l1 =. > 0 { lu1
  u1 =. > 1 { lu1
  l =. l , l1
  u =. u ,. u1
  lu2 =. puissance (transpose A)
  l2 =. > 0 { lu2
  u2 =. > 1 { lu2
  A =. A - l1 * u1 extprod u2 % u1 matprod u2
  NB. B =. B - l1 * u2 extprod u1 % u2 matprod u1
 end.
 l ; u
)

\end{verbatim}

\section{Analyse en composantes principales}

On a un tableau de données X à n lignes et p colonnes. Chaque ligne représente un individu et chaque colonne une variable. Ce tableau représente un ensemble de points dans un espace de dimension p.

L'analyse en composantes principales consiste à projeter ces points sur un sous-espace de dimension $q<p$ tel que les projections des points soient le plus écartés possible.

\subsection{Cas q = 1 : projection sur une droite}

Soit $u_1$ un vecteur unitaire ($^tu_1 u_1 = 1$) de cette droite.

Les projections de ces n points sur cette droits sont :

\[ C = X u_1 \]

L'écartement de ces projections est mesuré par une valeur appelée inertie que l'on calcule par la formule :

\[ ^tC C = {^tu_1} ^tX X u_1 \]

Le problème consiste donc à maximiser \( {^tu_1} ^tX X u_1 \) sous la contrainte \( ^tu_1 u_1 = 1 \).

On définit le lagrangien :

\[ L(u_1,\lambda) = {^tu_1} ^tX X u_1 - \lambda_1 (^tu_1 u_1 - 1) \]

On a alors :

\begin{itemize}

\item \( \frac{\partial L(u_1,\lambda_1)}{\partial u_1} = 0 
\Rightarrow 2 ( {^tX} X u_1 - \lambda_1 u_1) = 0 
\Rightarrow {^tX} X u_1 = \lambda_1 u_1 \)

\item \( \frac{\partial L(u_1,\lambda_1)}{\partial \lambda_1} = 0 
\Rightarrow {^tu_1} u_1 - 1 = 0 
\Rightarrow {^tu_1} u_1 = 1 \)

\end{itemize}

$u_1$ est le premier vecteur propre de $^tX X$ et $\lambda_1$ la valeur propre correspondante.


\subsection{Cas q = 2 : projection sur un plan}

Le plan de projection optimal, c'est-à-dire celui qui maximise l'écartement des projections, contient nécessairement la droite optimale considérée dans la section précédente. Ce plan est donc défini par le vecteur $u_1$ déterminé précédemment, et par un autre vecteur $u_2$ que nous devons trouver.

On cherche \( u_2 \) tel que \( {^tu_2} {^tX} X u_2 \) soit maximal, sous les contraintes \( {^tu_2} u_2 = 1 \) et \( {^tu_2} u_1 = 0 \).

Le lagrangien correspondant est :

\[ L(u_2,\lambda_2,\mu) = {^tu_2} {^tX} X u_2 - \lambda_2 ({^tu_2} u_2 - 1) - \mu ({^tu_2} u_1) \]

En écrivant que la dérivée partielle de ce lagrangien respectivement par rapport à \( u_2, \lambda_2, \mu \) est égale à 0, on obtient :

\begin{itemize}
\item \( {^tX} X u_2 = \lambda_2 u_2 \)
\item \( {^tu_2} u_2 = 1 \)
\item \( {^tu_1} u_2 = 0 \)
\end{itemize}

$u_2$ est le deuxième vecteur propre de ${^tX}X$ associé à la deuxième valeur propre $\lambda_2$.


\subsection{Cas général}

On peut montrer que le sous-espace de dimension q pour lequel les projections des points représentés par X sont le plus écartés 
est défini par les q vecteurs propres de ${^tX}X$ associés aux q plus grandes valeurs propres.


\subsection{Exemple d'ACP en J}

\begin{verbatim}

NB. Analyse en composantes principales
NB. Exemple tiré de http://www.math.u-bordeaux.fr/~mchave100p/wordpress/wp-content/uploads/2013/10/ACP_L3.pdf
NB.                 http://log.chez.com/text/math/ACP_L3.pdf

transpose =: |:
matprod =: + / . *
id =: (= / ~) @ i.

diag =: 3 : 0
 y * id # y
)

NB. Tableau de données
X =: 1 3 $ 90 140 6.0
X =: X ,   60  85 5.9
X =: X ,   75 135 6.1
X =: X ,   70 145 5.8 
X =: X ,   85 130 5.4
X =: X ,   70 145 5.0

n =: # X
p =: # 0 { X

M =: (+ / X) % # X                     NB. Moyenne des colonnes
Y =: X - (1 + 0 * i. # X) * / M        NB. Données centrées
E =: ((+ / Y ^ 2) % # Y) ^ 0.5         NB. Ecarts-types des colonnes
Z =: Y % (1 + 0 * i. # Y) * / E        NB. Données centrées-réduites

C =: ((transpose Y) matprod Y) % # Y   NB. Matrice des covariances
R =: ((transpose Z) matprod Z) % # Z   NB. Matrice des corrélations

LV =: deflation R                      NB. Valeurs et vecteurs propres
V =: > 1 { LV                NB. Vecteurs propres
NB. V =: V % (1 + 0 * i. # V) * / (+ / V ^ 2) ^ 0.5   NB. Vecteurs propres normés
F =: Z matprod V                       NB. Composantes principales

echo 'Composantes principales :'
echo F

S =: (Z matprod transpose Z) % # Z
KU =: deflation S
U =: > 1 { KU
NB. U =: U % (1 + 0 * i. # U) * / (+ / U ^ 2) ^ 0.5
A =: ((transpose Z) matprod U) % # Z

echo 'Coordonnées factorielles des variables :'
echo A

L =: diag (> 0 { LV) ^ 0.5
K =: diag (> 0 { KU) ^ 0.5

F1 =: U matprod K
A1 =: V matprod L

\end{verbatim}

\subsection{Références}

\begin{itemize}

\item \url{http://cours.polymtl.ca/geo/marcotte/glq3402/chapitre3.pdf} 

ou \url{http://log.chez.com/text/math/chapitre3.pdf}

\item \url{http://www.arnaud.martin.free.fr/Doc/polyAD.pdf}

ou \url{http://log.chez.com/text/math/polyAD.pdf}

\item \url{http://www2.agroparistech.fr/IMG/pdf/AnalyseComposantesPrincipales-AgroParisTech.pdf}

ou \url{http://log.chez.com/text/math/AnalyseComposantesPrincipales-AgroParisTech.pdf}

\item \url{http://asi.insa-rouen.fr/enseignants/~gasso/public/Courses/DM/pca.pdf}

ou \url{http://log.chez.com/text/math/pca.pdf}

\item \url{https://www.lamsade.dauphine.fr/~atif/lib/exe/fetch.php?media=teaching:coursad_acp.pdf}

ou \url{http://log.chez.com/text/math/coursad_acp.pdf}

\item \url{http://hamrita.e-monsite.com/medias/files/chap2ad.pdf}

ou \url{http://log.chez.com/text/math/chap2ad.pdf}

\item \url{http://www.foad-mooc.auf.org/IMG/pdf/M03-5.pdf}

ou \url{http://log.chez.com/text/math/M03-5.pdf}

\item \url{https://www.iro.umontreal.ca/~vincentp/ift3395/cours/continuous_latent_variables_print.pdf}

ou \url{http://log.chez.com/text/math/continuous_latent_variables_print.pdf}

\item \url{http://www.math.tu-dresden.de/~gournay/SMV.pdf}

ou \url{http://log.chez.com/text/math/SMV.pdf}

\item \url{http://www.ressources-actuarielles.net/EXT/ISFA/1226-02.nsf/d512ad5b22d73cc1c1257052003f1aed/da8b20974b2986a3c1257c72004dc73d/$FILE/Me%CC%81moire%20TRIEU%20Thi%20Diep.pdf}

ou \url{http://log.chez.com/text/math/Me%CC%81moire%20TRIEU%20Thi%20Diep.pdf}


\end{itemize}


\section{Analyse canonique}

L'analyse canonique consiste, à partir de données avec deux groupes de variables, à trouver une combinaison linéaire des variables du premier groupe et une combinaison linéaire des variables du deuxième groupe qui soient les plus corrélées possibles.


\subsection{Formulation mathématique}

Les données sont représentées par deux tableaux X et Y correspondant aux deux groupes de variables. Les deux tableaux ont n lignes (nombre d'individus). Le tableau X a p colonnes (nombre de variables du premier groupe). Le tableau Y a q colonnes (nombre de variables du deuxième groupe).

Le problème consiste à trouver a et b qui rendent maximal \( ^ta ^tX Y b \) avec les contraintes \( ^ta ^tX X a = 1 \) et \( ^tb ^tY Y b = 1 \).

Il s'agit de rendre maximal le lagrangien associé à ce problème :

\[ ^ta ^tX Y b - \lambda (^ta ^tX X a - 1) - \mu (^tb ^tY Y b - 1) \]

En écrivant que les dérivées partielles de ce lagrangien par rapport à a et b sont égales à 0, on obtient :

\begin{itemize}
\item \( ^tX Y b - 2 \lambda ^tX X a = 0 \)
\item \( ^tY X a - 2 \mu ^tY Y b = 0 \)
\end{itemize}

En multipliant respectivement par \( ^ta \) et \( ^tb \) on obtient :

\begin{itemize}
\item \( ^ta ^tX Y b = 2 \lambda \)
\item \( ^tb ^tY X a = 2 \mu \)
\end{itemize}

On a donc \( \lambda = \mu \). On pose \( \beta = 2 \lambda = 2 \mu \). On a alors :

\begin{itemize}
\item \( ^tX Y b = \beta ^tX X a \)
\item \( ^tY X a = \beta ^tY Y b \)
\end{itemize}

donc

\[ ^tY X (^tX X)^-1 ^tX Y b = {\beta^2} \ {^tY} Y b \]

Donc b est vecteur propre de 

\[ M = (^tY Y)^{-1} \ {^tY} X (^tX X)^{-1} \ {^tX} Y \]

De même, a est vecteur propre de 

\[ N = (^tX X)^{-1} \ {^tX} Y (^tY Y)^{-1} \ {^tY} X \]

et 

\[ a = \frac{1}{\beta} (^tX X)^{-1} \ {^tX} Y b \ ; \ b = \frac{1}{\beta} (^tY Y)^{-1} \ {^tY} X a \]

En multipliant respectivement par X ey Y on obtient :

\begin{itemize}
\item \( X a = \frac{1}{\beta} X (^tX X)^{-1} \ {^tX} Y b \)
\item \( Y b = \frac{1}{\beta} Y (^tY Y)^{-1} \ {^tY} X a \)
\end{itemize}

Dans ces formules apparaissent les opérateurs de projection orthogonale \( P_X = X (^tX X)^{-1} \ {^tX} \) et \( P_Y = Y (^tY Y)^{-1} \ {^tY} \).

Donc chacun des vecteurs \( X a \) et \( Y b \) est colinéaire à la projection de l'autre.



\subsection{Exemple d'analyse canonique en J}

\begin{verbatim}

NB. Analyse canonique
NB. D'après http://iml.univ-mrs.fr/~reboul/canonique.pptx.pdf
NB.         http://log.chez.com/text/math/canonique.pptx.pdf

transpose =: |:      NB. Transposition de matrice
matprod =: + / . *   NB. Produit de matrices
inv =: %.            NB. Inverse
id =: (= / ~) @ i.   NB. Matrice identité

NB. Données

X =: 1 2 $ 100  100
X =: X ,   200  400
X =: X ,  _400 _200
X =: X ,   200 _300
X =: X ,  _100    0

Y =: 1 3 $ 200    0 _107
Y =: Y ,   600 _300  212
Y =: Y ,  _600 _200  233
Y =: Y ,  _200  200   92
Y =: Y ,     0  300 _430

NB. Réduction des données
X =: X % ((#X) # 1) */ (+/X^2)^0.5
Y =: Y % ((#Y) # 1) */ (+/Y^2)^0.5

VXX =: (transpose X) matprod X
VYY =: (transpose Y) matprod Y
VXY =: (transpose X) matprod Y
VYX =: (transpose Y) matprod X

RX =: (inv VXX) matprod VXY matprod (inv VYY) matprod VYX
RY =: (inv VYY) matprod VYX matprod (inv VXX) matprod VXY

LUX =: deflation RX
LUY =: deflation RY

UX =: > 1 { LUX
UY =: > 1 { LUY

echo 'Facteurs canoniques :'
echo ' '
echo UX
echo ' '
echo UY

NB. echo (transpose UX) matprod UX
NB. echo (transpose UY) matprod UY

\end{verbatim}

\subsection{Référence}

Statistique exploratoire multidimensionnelle, DUNOD, 2.1 Analyse canonique


\section{Analyse canonique généralisée}

L'analyse canonique généralisée est une méthode d'analyse de tableaux de données de n lignes (individus) et p colonnes (variables) groupées en q groupes, que l'on peut écrire sous la forme :

\[ X = (X_1, X_2, \ldots, X_k, \ldots, X_q) \]

Si q = 2, on retrouve l'analyse canonique classique.

Si chaque bloc $X_k$ est un tableau disjonctif complet, on retrouve l'analyse des correspondances multiples.

Si chaque bloc n'est formé que d'une seule colonne, on retrouve l'analyse en composantes principales.

\subsection{Formulation mathématique}

Il s'agit de maximiser \( \sum_{k=1}^q \ ^ty X_k (^tX_k X_k)^{-1} \ ^tX_k y \) avec la contrainte \( ^ty y = 1 \).

Le vecteur y est le vecteur propre correspondant à la plus grande valeur propre de la matrice :

\[ S = \sum_{k=1}^q X_k (^tX_k X_k)^{-1} \ ^tX_k \]


\subsection{Cas q = 2 : Analyse canonique classique}

Pour q = 2, on a : 

\[ X_1 (^tX_1 X_1)^{-1} \ ^tX_1 y + X_2 (^tX_2 X_2)^{-1} \ ^tX_2 y = \lambda y \]

Posons \( (^tX_1 X_1)^{-1} \ ^tX_1 y = a \) et \( (^tX_2 X_2)^{-1} \ ^tX_2 y = b \).

On a alors 

\[ X_1 a + X_2 b = \lambda y \]

En multipliant à gauche par \( (^tX_1 X_1)^{-1} \ ^tX_1 \), on obtient :

\[ (^tX_1 X_1)^{-1} \ ^tX_1 X_2 b = (\lambda - 1) a \]

De même, on a aussi

\[ (^tX_2 X_2)^{-1} \ ^tX_2 X_1 a = (\lambda - 1) b \]

et par substitution 

\[ (^tX_2 X_2)^{-1} \ ^tX_2 X_1 (^tX_1 X_1)^{-1} \ ^tX_1 X_2 b = (\lambda - 1)^2 b \]

On retrouve la matrice à diagonaliser de l'analyse canonique classique.


\subsection{Cas où chaque bloc comprend une seule colonne : Analyse en composantes principales}

Dans ce cas on a :

\[ S = \sum_{k=1}^q x_k (^tx_k x_k)^{-1} \ ^tx_k = \sum_{k=1}^q \frac{1}{n s_k^2} x_k \ ^tx_k \]

avec

\[ s_k^2 = \frac{1}{n} \ ^tx_k x_k \]

Soit la matrice T dont la k-ième colonne vaut \( t_k = \frac{1}{s_k} x_k \). 

Alors on a \( S = \frac{1}{n} T \ ^tT \).

La relation \( S y = \lambda y \) s'écrit alors : 

\[ \frac{1}{n} T ^tT y = \lambda y \]

En multipliant à gauche par \( ^tT \) on obtient :

\[ \frac{1}{n} \ ^tT T ^tT y = \lambda ^tT y \]

 
et en posant \( ^tT y = u\) :

\[ \frac{1}{n} \ ^tT T u = \lambda u \]

ou

\[ C u = \lambda u \]


\subsection{Référence}

Statistique exploratoire multidimensionnelle, éditions DUNOD, 8.3.5 Analyse canonique généralisée


\section{Analyse factorielle universelle}

\includegraphics[width=12cm]{afu.jpg}

Exemple de programme J effectuant une ACP avec une AFU :

\begin{verbatim}

NB. Analyse factorielle universelle

transpose =: |:      NB. Transposition de matrices
matprod =: + / . *   NB. Produit de matrices
id =: (= / ~) @ i.   NB. Matrice identité

diag =: 3 : 0        NB. Matrice diagonale à partir d'un vecteur
 y * id #y
)

tmatprod =: 3 : 0
 (transpose y) matprod y
)
   
maptmatprod =: 3 : 0
 if. 0 = # y do. 0 0 0 $ 0
 else. (tmatprod {. y), maptmatprod }. y
 end.
)

mapprod =: 4 : 0
 if. 0 = # x do. 0 0 0 $ 0
 else. (({. x) matprod y) , (}. x) mapprod y
 end.
)

NB. Tableau de données
X =: 1 3 $ 90 140 6.0
X =: X ,   60  85 5.9
X =: X ,   75 135 6.1
X =: X ,   70 145 5.8 
X =: X ,   85 130 5.4
X =: X ,   70 145 5.0

n =: # X
p =: # 0 { X

M =: (+ / X) % #X                     NB. Moyenne des colonnes
Y =: X - (1 + 0 * i. #X) * / M        NB. Données centrées
E =: ((+ / Y ^ 2) % #Y) ^ 0.5         NB. Ecarts-types des colonnes
Z =: Y % (1 + 0 * i. #Y) * / E        NB. Données centrées-réduites

NB. Tableau tridimensionnel pour l'AFU
T =: ((1 + 0 * i. # 0 { Z) * / Z) * 0 2 1 |: (id # 0 { Z) * / (1 + 0 * i. #Z)

Z1 =: + / T   NB. Tableau bidimensionnel somme des couches

V =: maptmatprod T
W =: + / V
S =: Z1 matprod (%. W) matprod (transpose Z1) 
LU =: deflation S   NB. Valeurs et vecteurs propres de S
echo LU
U =: > 1 { LU
V =: (transpose Z1) matprod U
V =: V % (1 + 0 * i. #V) * / (+ / V ^ 2) ^ 0.5
C =: T mapprod V
F =: + / C
echo 'Composantes principales :'
echo F

\end{verbatim}

Exemple de programme J effectuant une analyse canonique avec une AFU :

\begin{verbatim}

NB. Analyse canonique avec AFU
NB. Données d'après http://iml.univ-mrs.fr/~reboul/canonique.pptx.pdf
NB.                 http://log.chez.com/text/math/canonique.pptx.pdf

transpose =: |:      NB. Transposition de matrice
matprod =: + / . *   NB. Produit de matrices
extprod =: */
inv =: %.             NB. Inverse
id =: (= / ~) @ i.   NB. Matrice identité

diag =: 3 : 0        NB. Matrice diagonale à partir d'un vecteur
 y * id #y
)

tmatprod =: 3 : 0
 (transpose y) matprod y
)
   
maptmatprod =: 3 : 0
 if. 0 = # y do. 0 0 0 $ 0
 else. (tmatprod {. y), maptmatprod }. y
 end.
)

mapprod =: 4 : 0
 if. 0 = # x do. 0 0 0 $ 0
 else. (({. x) matprod y) , (}. x) mapprod y
 end.
)

NB. Données

X =: 1 2 $ 100  100
X =: X ,   200  400
X =: X ,  _400 _200
X =: X ,   200 _300
X =: X ,  _100    0

Y =: 1 3 $ 200    0 _107
Y =: Y ,   600 _300  212
Y =: Y ,  _600 _200  233
Y =: Y ,  _200  200   92
Y =: Y ,     0  300 _430

NB. Réduction des données
X =: X % ((#X) # 1) */ (+/X^2)^0.5
Y =: Y % ((#Y) # 1) */ (+/Y^2)^0.5

T =: (1 0 extprod (X ,. (0*Y))) + (0 1 extprod ((0*X) ,. Y))
echo 'Tableau de données de l''AFU :'
echo T

Z1 =: + / T   NB. Tableau bidimensionnel somme des couches

V =: maptmatprod T
W =: + / V
S =: Z1 matprod (%. W) matprod (transpose Z1) 
LU =: deflation S   NB. Valeurs et vecteurs propres de S
echo 'Eléments propres :'
echo LU
U =: > 1 { LU

u1 =: 0 { transpose U
echo 'Premier vecteur propre :'
echo u1

a =: (inv (transpose X) matprod X) matprod (transpose X) matprod u1
b =: (inv (transpose Y) matprod Y) matprod (transpose Y) matprod u1

a =: a % (a matprod a)^0.5
b =: b % (b matprod b)^0.5

u2 =: 1 { transpose U

a2 =: (inv (transpose X) matprod X) matprod (transpose X) matprod u2
b2 =: (inv (transpose Y) matprod Y) matprod (transpose Y) matprod u2

a2 =: a2 % (a2 matprod a2)^0.5
b2 =: b2 % (b2 matprod b2)^0.5

echo 'Facteurs canoniques :'
echo a
echo a2

\end{verbatim}


\section{Analyses de tableaux de données avec deux groupes de variables et analyse comparative universelle}

Il existe plusieurs méthode d'analyse de tableaux de données avec deux groupes de variables. Nous avons déjà vu l'analyse canonique. Il existe d'autres méthodes que l'on peut résumer dans le tableau ci-dessous :

\bigskip

\begin{tabular}{|c|c|}
\hline
Nom de l'analyse & Matrices à diagonaliser \\ \hline
Analyse canonique                     & \( ({^tX} X)^{-1} \ {^tX} Y ({^tY} Y)^{-1} \ {^tY} X \) \\ \hline
Analyse projetée                      & \( {^tX} Y ({^tY} Y)^{-1} \ {^tY} X                  \) \\ \hline
Analyse procrustéenne orthogonale     & \( {^tX} Y {^tY} X                                   \) \\ \hline
Analyse procrustéenne sans contrainte & \( ({^tX} X)^{-1} \ {^tX} Y                          \) \\ \hline
\end{tabular}

\bigskip

Pour plus d'informations, voir Statistique exploratoire multidimensionnelle, DUNOD, Chapitre 8 Analyse de données structurées.

\bigskip

On voit que pour toutes ces analyses, la matrice à diagonaliser est de la forme :

\[ ({^tX} X)^a \ ({^tX} Y)^b \ ({^tY} Y)^c \ ({^tY} X)^d \]

L'analyse comparative universelle généralise toutes ces méthodes. C'est une méthode paramétrée par 4 coefficients a, b, c, d, qui consiste à diagonaliser la matrice indiquée ci-dessus. Elle englobe les méthodes indiquées ci-dessus, ainsi que l'ACP avec a = 1 et b = c = d = 0 :

\bigskip

\begin{tabular}{|c|c|c|c|c|c|}
\hline
Nom de l'analyse                      &  a & b &  c & d & Matrices à diagonaliser \\ \hline
Analyse en composantes principales    &  1 & 0 &  0 & 0 & \( {^tX} X                                           \) \\ \hline
Analyse canonique                     & -1 & 1 & -1 & 1 & \( ({^tX} X)^{-1} \ {^tX} Y ({^tY} Y)^{-1} \ {^tY} X \) \\ \hline
Analyse projetée                      &  0 & 1 & -1 & 1 & \( {^tX} Y ({^tY} Y)^{-1} \ {^tY} X                  \) \\ \hline
Analyse procrustéenne orthogonale     &  0 & 1 &  0 & 1 & \( {^tX} Y {^tY} X                                   \) \\ \hline
Analyse procrustéenne sans contrainte & -1 & 1 &  0 & 0 & \( ({^tX} X)^{-1} \ {^tX} Y                          \) \\ \hline
\end{tabular}


\end{document}
