Les différentes transformations des données

add

\bullet Introduction:

Certains outils statistiques nécessitent une transformation des données afin de pouvoir être utilisés ou optimisés. Par exemple, dans le cadre de l’utilisation d’un test de Student ou bien d’une régression linéaire l’hypothèse de normalité est primordiale ou encore dans le cas où les données ne répondent pas aux hypothèses recquises, les équivalents non paramétriques de la théorie des tests nécessitent une transformation des données en vecteur des rangs associés aux données. D’Autres outils encore comme l’analyse en composantes principales, les K-plus proches voisins pondérés ou encore les support vectors machines présentent une certaine sensibilité aux trop grandes dispersions des données à laquelle le statisticien peut pallier.

Les méthodes de transformation des données se déclinent donc en trois familles:

– la standardisation ou l’action de centrer-réduire les données pour diminuer l’échelle de dispersion tout en conservant la forme des distributions conjointes,

– la transformation en vecteur de rangs dont l’objectif est de se concentrer sur l’ordre des valeurs des données et plus sur les valeurs elles-mêmes,

– la normalisation des données qui consistent à rechercher la transformation adaptée au travers de laquelle elles suivront une loi normale.

\bullet Les méthodes classiques:

La standardisation

Il s’agit de centrer-réduire la matrice \mathbf{X} en retranchant pour chaque vecteur X ^j, j \in [1, P] sa moyenne et en divisant par son écart-type. La formule d’usage est alors,

\forall j \in [1, P], X_{Std} ^j = \frac{X ^j - \mu_j}{\sigma_j ^2}

La transformation en rangs

La théorie des tests se divisent en deux familles: les tests paramétriques et les tests non paramétriques. Dans le premier cas X ^j, variable aléatoire continue, doit répondre à des hypothèses d’utilisation sur sa distribution tandis que dans le second cas nous en faisons abstraction. Ainsi, lorsque les hypothèses d’utilisation ne sont pas respectées, les alternatives non paramétriques sont souvent des choix pertinents. Il est alors judicieux de se baser sur une transformation en vecteur de rangs (R ^1, \ldots, R^p) associés aux variables quantitatives continues (X ^1, \ldots, X^p). L’algorithme ci-dessous permet d’expliciter cette transformation pour une variable aléatoire X ^j:

1) ranger les valeurs de X ^j par ordre croissant,

2) chaque R_i ^j correspond à l’indice du rang de X_i ^j dans ce classement,

3) dans le cas où X_i ^j = X_k ^j = \ldots = X_l ^j nous avons:

R_i ^j = R_k ^j = \ldots = R_l ^j = \frac{\sum_{l = i} ^l R_l ^j}{\sharp \lbrace \mbox{Valeurs egales} \rbrace}

La normalisation

Normaliser les données revient à appliquer une fonction f sur X ^j tel que f(X ^j) suit une loi normale. Plusieurs méthodes simples existent comme,

  • la transformation logarithmique: \forall j \in [1, P], X_{Norm} ^j = log (X ^j)
  • l’élévation au carré: \forall j \in [1, P], X_{Norm} ^j = (X ^j) ^2
  • la mise sous racine carré: \forall j \in [1, P], X_{Norm} ^j = \sqrt{X ^j}
  • la transformation arc-sinus: \forall j \in [1, P], X_{Norm} ^j = arcsin \sqrt{X ^j}
  • la mise à l’exponentielle: \forall j \in [1, P], X_{Norm} ^j = e ^{X ^j}
  • la transformation inverse:\forall j \in [1, P], X_{Norm} ^j = \frac{1}{X ^j}

Néanmoins ces méthodes requièrent l’absence de valeurs négatives (à l’exception de la mise à l’exponentielle et de la transformation inverse), l’absence de valeurs nulles (pour la transformation logarithmique et la transformation inverse) ou d’un intervalle spécifique dans lequel X ^j prend ses valeurs (ainsi pour la transformation arc-sinus il faut que X ^j \in [0, 1]).

Dans le cas de la présence de valeurs négatives, un paramètre c de translation peut être appliqué afin de déplacer la distribution sur un intervalle de valeurs positives tout en conservant la forme de la distribution. Pour le cas des valeurs nulles, la méthode à suivre est souvent de « tricher » en supposant qu’il s’agit d’une valeur très faible arrondie et en lui attribuant une valeur décimale (par exemple: 0.000\cdots01) en fonction de l’intervalle de valeurs prises par X ^j de manière à ce qu’elle n’influe pas la distribution générale.

Deux autres outils de normalisation existent et sont plus performants: la transformation Box-Cox et la transformation de Johnson. Nous présentons dans la suite de cette article le premier.

\bullet La normalisation de Box-Cox

C’est en 1964 que George Edward Pelham Box et David Roxbee Cox ont mis à notre disposition ce fabuleux outil qu’est la normalisation (également appelée transformation) de Box-Cox. La transformation de Box-Cox ne permet pas de pallier au problème des valeurs négatives ou nulles pour X ^j. Toutefois, elle offre l’avantage de pouvoir prendre en compte une variable Y qualitative et de normaliser X ^j en fonction des différents groupes de Y. La transformation de Box-Cox est la plus populaire des méthodes de normalisation des données, elle le doit principalement à sa simplicité de mise en oeuvre malgré qu’il puisse exister des situations pour lesquels elle soit inefficace.

La transformation de Box-Cox consiste en réalité en l’application d’un algorithme qui va chercher à maximiser la log-vraisemblance d’une configuration de la variable X ^j en fonction du paramètre de transformation noté \lambda. Il convient de fixer au préalable un intervalle de variation pour \lambda, sachant qu’il n’y a pas de règle encore définie sur ce paramètrage.

L’objectif est donc de maximiser la log-vraisemblance, dépendante de \lambda, et de formule:

LL_{\lambda} = - \frac{n}{2} \cdot log(2 \pi) - n \cdot log(s_{\lambda} ^j) - \sum_{i = 1} ^n [-\frac{1}{2 \cdot s_{\lambda} ^j} \cdot log [ f_{\lambda} (X ^j) - \mu_{\lambda} ^j ] ^2 + (\lambda - 1) \sum_{i = 1} ^n log(X_i ^j)]

\mu_{\lambda} ^j, s_{\lambda} ^j représentent, respectivement, la moyenne et l’écart-type calculés à partir de f_{\lambda} (X ^j) la fonction de transformation de Box-Cox pour \lambda variant dans son intervalle de variation fixé et de formule:

X_{Norm_{\lambda}} ^j = f_{\lambda} (X ^j) = \left\{ \begin{array}{ll} \frac{(X ^j) ^ {\lambda} - 1}{\lambda} & \mbox{si } \lambda \neq 0 \\ log(X ^j) & \mbox{sinon} \\ \end{array} \right.

Notons que le retour au vecteur X ^j se fait via la transformation suivante:

X ^j = (1 + f_{\lambda} (X ^j) \cdot \lambda) ^{\frac{1}{\lambda}}, \forall \lambda \neq 0

Démonstration:

La formule de la log-vraisemblance que nous avons présentée ci-dessus se retrouve assez logiquement. En effet, la densité de probabilité pour X, et donc la vraisemblance en relation avec f_{\lambda}(X), est obtenue en multipliant la densité d’une loi normal aux points de f_{\lambda}(X) avec la jacobienne J de la transformation dont la particularité est:

J(\lambda; X ^j) = f_{\lambda} ' (X) = \frac{\partial (\frac{X ^{\lambda} - 1}{\lambda})}{\partial X} = \frac{\lambda}{\lambda} \cdot X ^{\lambda - 1} = X ^{\lambda - 1}

Par conséquent, si nous partons du produit évoqué ci-dessus avec g(.) fonction de densité d’une loi normale, nous avons:

g(f_{\lambda}(X ^j)) \cdot J(\lambda; X) \Rightarrow L = \prod_{i = 1} ^n g(f_{\lambda} (X_i ^j)) \cdot X_i ^{\lambda - 1}

\Rightarrow LL = log(L) = log \prod_{i = 1} ^n [\frac{1}{s_{\lambda} ^j \sqrt{2 \pi}} e ^{- \frac{1}{2} (\frac{f_{\lambda} (X_i ^j) - \mu_{\lambda} ^j}{s_{\lambda} ^j}) ^2} \cdot X_i ^{\lambda - 1}]

= \sum_{i = 1} ^n log [ \frac{1}{s_{\lambda} ^j \sqrt{2 \pi}} e ^{-\frac{1}{2} (\frac{f_{\lambda} (X_i ^j) - \mu_{\lambda} ^j}{s_{\lambda} ^j}) ^2} X_i ^{\lambda - 1} ]

= \sum_{i = 1} ^n [log(1) - log(s_{\lambda} ^j) - log(\sqrt{2 \pi}) + log( e^ {-\frac{1}{2} (\frac{f_{\lambda} (X_i ^j) - \mu_{\lambda} ^j}{s_{\lambda} ^j}) ^2}) + log(X_i ^{\lambda - 1})]

= \sum_{i = 1} ^n [0 - log(s_{\lambda} ^j) - \frac{1}{2} \cdot log(2 \pi) - \frac{1}{2} (\frac{f_{\lambda} (X_i ^j) - \mu_{\lambda} ^j}{s_{\lambda} ^j}) ^2 + (\lambda - 1) \cdot log(X_i)]

= -n \cdot log(s_{\lambda} ^j) - \frac{n}{2} \cdot log(2 \pi) - \frac{1}{s_{\lambda} ^2} \sum_{i = 1} ^n [ f_{\lambda} (X_i ^j) - \mu_{\lambda} ^j ] ^2 + (\lambda - 1) \cdot \sum_{i = 1} ^n log(X_i)

Autres approches:

Deux alternatives existent, l’une est en fait la version à deux paramètres \lambda_1, \lambda_2 de la transformation de Box-Cox,

X_{Norm} ^j = \left\{ \begin{array}{ll} \frac{(X ^j + \lambda_2) ^ {\lambda_1} - 1}{\lambda_1} & \mbox{si } \lambda_1 \neq 0 \\ log(X ^j + \lambda_2) & \mbox{sinon} \\ \end{array} \right.

La seconde alternative est celle de Johnson, moins populaire et plus complexe, et qui permet notamment de composer lorsque X ^j contient des valeurs négatives ou nulles.

\bullet Exemple:

Soit l’échantillon suivant:

add

Dans un premier temps, nous appliquons les méthodes simples: la transformation logarithmique, l’élévation au carré, la mise sous racine carré, la transformation inverse et la mise à l’exponentielle. Nous obtenons les distributions suivantes:

add2

Nous voyons que les méthodes simples sont assez inefficaces pour normaliser X puisque les différents tests de Shapiro-Wilk effectués rejettent systèmatiquement l’hypothèse de normalité.

Nous proposons désormais d’appliquer l’algorithme de la transformation de Box-Cox. Le but étant de déterminer le \lambda optimisant la normalisation de la variable X. Nous faisons varier notre paramètre dans l’ensemble \lbrace -3, -2, -1, 1, 2, 3 \rbrace.

Nous commençons par la détermination des différents versions normalisées de X pour les différentes valeurs de \lambda ci-dessus via la formule:

f_{\lambda} (X) = \frac{X ^{\lambda} - 1}{\lambda}

, nous obtenons donc la matrice où la première colonne contient les valeurs brutes, les colonnes suivantes les valeurs transformées pour le \lambda qui varie:

\begin{pmatrix} X & \lambda = -3 & \lambda = - 2 & \lambda = - 1 & \lambda = 1 & \lambda = 2 & \lambda = 3 \\ 8.1472 & 0.33271695 & 0.49246726 & 0.87725844 & 7.1472 & 32.68843392 & 179.9285392 \\ 9.0579 & 0.33288480 & 0.49390582 & 0.88959913 & 8.0579 & 40.52277620 & 247.3868031 \\ 1.2699 & 0.17056490 & 0.18995056 & 0.21253642 & 0.2699 & 0.30632300 & 0.3492997 \\ 9.1338 & 0.33289589 & 0.49400669 & 0.89051654 & 8.1338 & 41.21315122 & 253.6663871 \\ 6.3236 & 0.33201512 & 0.48749622 & 0.84186223 & 5.3236 & 19.49395848 & 83.9558639 \\ 0.9754 & -0.02586184 & -0.02553846 & -0.02522042 & -0.0246 & -0.02429742 & -0.0239998 \\ 2.7850 & 0.31790201 & 0.43553565 & 0.64093357 & 1.7850 & 3.37811250 & 6.8670289 \\ 5.4688 & 0.33129534 & 0.48328194 & 0.81714453 & 4.4688 & 14.45388672 & 54.1865438 \\ 9.5751 & 0.33295363 & 0.49454640 & 0.89556245 & 8.5751 & 45.34127001 & 292.2898296 \\ 9.6489 & 0.33296227 & 0.49462950 & 0.89636124 & 8.6489 & 46.05063560 & 299.1082853 \\ 1.5761 & 0.24819455 & 0.29871915 & 0.36552249 & 0.5761 & 0.74204561 & 0.9717254 \\ 9.7059 & 0.33296877 & 0.49469240 & 0.89696988 & 8.7059 & 46.60224740 & 304.4464687 \\ 9.5717 & 0.33295322 & 0.49454252 & 0.89552535 & 8.5717 & 45.30872044 & 291.9782197 \\ 4.8538 & 0.33041837 & 0.47877703 & 0.79397585 & 3.8538 & 11.27968722 & 37.7841639 \\ 8.0028 & 0.33268297 & 0.49219297 & 0.87504373 & 7.0028 & 31.52240392 & 170.5125961 \\ 1.4189 & 0.21664609 & 0.25164871 & 0.29522870 & 0.4189 & 0.50663861 & 0.6188797 \\ \vdots & \vdots & \vdots & \vdots & \vdots & \vdots & \vdots \\ \end{pmatrix}

Ensuite, calculons pour chaque f_{\lambda}(X), \forall \lambda \in \lbrace -3, -2, -1, 1, 2, 3 \rbrace la moyenne \mu_{\lambda} et l’écart-type s_{\lambda}. Nous pouvons désormais appliquer la formule de la log-vraisemblance en chacun des points f_{\lambda} (X_i), i \in [1, 20] et faisant intervenir les données brutes X_i:

L(f_{\lambda}(X_i)) = -\frac{1}{2 \times s ^2} \times (f_{\lambda} (X_i) - \mu_{\lambda}) ^2 + (\lambda - 1) \times log(X_i)

Ainsi, pour chaque observation et pour chaque valeur du paramètre \lambda, nous obtenons la matrice de résultats suivante:

\begin{pmatrix} LL_{\lambda = -3} & LL_{\lambda = -2} & LL_{\lambda = -1} & LL_{\lambda = 1} & LL_{\lambda = 2} & LL_{\lambda = 3} \\ -8.479135 & -6.409691 & -4.346851 & -0.1369732409 & 2.0182532 & 4.162568432 \\ -8.903788 & -6.732621 & -4.584175 & -0.3195406894 & 1.8673801 & 4.087034199 \\ -1.957951 & -2.142060 & -2.168162 & -1.2184568013 & -0.6638793 & -0.233505522 \\ -8.937220 & -6.758012 & -4.602831 & -0.3381958856 & 1.8445733 & 4.061893685 \\ -7.462282 & -5.632935 & -3.778143 & -0.0004298665 & 1.7958142 & 3.554280961 \\ -6.526091 & -5.158099 & -3.576740 & -1.3617822495 & -0.9517867 & -0.764794082 \\ -4.128943 & -3.075512 & -2.093173 & -0.6070319391 & 0.3298588 & 1.398454525 \\ -6.878034 & -5.184171 & -3.454031 & -0.0415887216 & 1.5293813 & 3.110504307 \\ -9.126233 & -6.901486 & -4.708211 & -0.4571451572 & 1.6766955 & 3.842538392 \\ -9.156986 & -6.924817 & -4.725340 & -0.4787835226 & 1.6424508 & 3.792426287 \\ -1.963800 & -1.776753 & -1.740387 & -1.0778858603 & -0.4166366 & 0.204502335 \\ -9.180577 & -6.942712 & -4.738477 & -0.4958385366 & 1.6147344 & 3.750839250 \\ -9.124810 & -6.900406 & -4.707418 & -0.4561603241 & 1.6782290 & 3.844747729 \\ -6.396877 & -4.813315 & -3.191057 & -0.1127209004 & 1.2960108 & 2.762786138 \\ -8.407442 & -6.355093 & -4.306735 & -0.1150235995 & 2.0234063 & 4.143368587 \\ -1.799064 & -1.825264 & -1.887763 & -1.1489776963 & -0.5385110 & -0.009026059 \\ \vdots & \vdots & \vdots & \vdots & \vdots & \vdots \\ \end{pmatrix}

Il ne reste plus qu’à appliquer la formule faisant intervenir la somme de la log-vraisemblance de chaque individu selon les différentes variations du paramètre \lambda considérées:

LL = -\frac{20}{2} \times log(2 \times \pi) - 20 \times log(s_{\lambda}) + \sum_{i = 1} ^{20} L(f_{\lambda} (X_i))

, nous obtenons alors:

\lambda = -3 \Longrightarrow LL = -110.5453,

\lambda = -2 \Longrightarrow LL = -86.86381,

\lambda = -1 \Longrightarrow LL = -67.89594,

\lambda = 1 \Longrightarrow LL = -51.75309,

\lambda = 2 \Longrightarrow LL = -53.52531,

\lambda = 3 \Longrightarrow LL = -58.67262,

Le graphe ci-dessous permet de voir que le paramètre qui maximise la log-vraisemblance est \lambda = 1.

add3

Nous constatons que pour \lambda = 1 nous avons: X_{Norm} = f_{\lambda = 1}(X) = \frac{X ^1 - 1}{1} = X - 1. Nous en déduisons que la normalisation de Box-Cox n’est pas parvenue à trouver une fonction f_{\lambda} permettant à X de suivre une loi normale.

\bullet Application informatique:

Procédure SAS:

– pour la transformation de Box-Cox: http://support.sas.com/documentation/cdl/en/statug/63033/HTML/default/viewer.htm#statug_transreg_sect015.htm

– pour la transformation de Johnson: http://support.sas.com/documentation/cdl/en/imlsug/63546/HTML/default/viewer.htm#imlsug_ugvartransform_sect002.htm

Package R:

– pour la transformation de Box-Cox: https://stat.ethz.ch/R-manual/R-devel/library/MASS/html/boxcox.html

– pour la transformation de Johnson: https://cran.r-project.org/web/packages/Johnson/index.html

\bullet Bibliographie:

– Transformation de données: normalisation, stabilisation des variances de Daniel Borcard

– Tests de normalité – Techniques empiriques et tests statistiques de  Ricco Rakatomolala

– Estimation of the box-cox transformation parameter and application to hydrologic data de Melanie Wong

– An analysis of transformations de G. E. P. Box et D. R. Cox

– Le document: http://russell.vcharite.univ-mrs.fr/EIE/fchap14.pdf