La transformation ILR (Isometric Log-Ratio) est utilisée dans l'analyse des données de composition. Toute observation donnée est un ensemble de valeurs positives résumant à l'unité, telles que les proportions de produits chimiques dans un mélange ou les proportions du temps total passé dans diverses activités. L'invariant somme-à-unité implique que bien qu'il puisse y avoir composantes à chaque observation, il n'y a que fonctionnellement indépendantes. (Géométriquement, les observations se trouvent sur un simplexe dimensionnel dans l' espace euclidien dimensionnel \ mathbb {R} ^ k . Cette nature simplicial se manifeste dans les formes triangulaires des diagrammes de dispersion des données simulées illustrées ci-dessous.)k ≥ 2k - 1k - 1kRk
En règle générale, les distributions des composants deviennent «plus agréables» lorsque le journal est transformé. Cette transformation peut être mise à l'échelle en divisant toutes les valeurs d'une observation par leur moyenne géométrique avant de prendre les journaux. (De manière équivalente, les journaux des données dans toute observation sont centrés en soustrayant leur moyenne.) Ceci est connu sous le nom de transformation "Centré Log-Ratio", ou CLR. Les valeurs résultantes se trouvent toujours dans un hyperplan dans , car la mise à l'échelle fait que la somme des journaux est nulle. L'ILR consiste à choisir n'importe quelle base orthonormée pour cet hyperplan: les coordonnées de chaque observation transformée deviennent ses nouvelles données. De manière équivalente, l'hyperplan est tourné (ou réfléchi) pour coïncider avec le plan avec la disparition deRkk - 1kecoordonner et on utilise les premières coordonnées . (Parce que les rotations et les réflexions préservent la distance, ce sont des isométries , d'où le nom de cette procédure.)k - 1
Tsagris, Preston et Wood affirment qu '"un choix standard de [la matrice de rotation] est la sous-matrice Helmert obtenue en supprimant la première ligne de la matrice Helmert."H
La matrice Helmert d'ordre est construite de manière simple (voir Harville p. 86 par exemple). Sa première ligne est de s. La ligne suivante est l'une des plus simples pouvant être orthogonales à la première ligne, à savoir . La ligne est parmi les plus simples orthogonales à toutes les lignes précédentes: ses premières entrées sont s, ce qui garantit qu'elle est orthogonale aux lignes et son entrée est définie sur pour la rendre orthogonale à la première ligne (c'est-à-dire que ses entrées doivent être égales à zéro). Toutes les lignes sont ensuite redimensionnées en unités de longueur.k1( 1 , - 1 , 0 , … , 0 )jj - 112 , 3 , … , j - 1je1 - j
Voici, pour illustrer le modèle, la matrice Helmert avant que ses lignes aient été redimensionnées:4 × 4
⎛⎝⎜⎜⎜11111- 11110- 21100- 3⎞⎠⎟⎟⎟.
(Edit ajouté en août 2017) Un aspect particulièrement agréable de ces «contrastes» (qui sont lus ligne par ligne) est leur interprétabilité. La première ligne est supprimée, laissant lignes restantes pour représenter les données. La deuxième ligne est proportionnelle à la différence entre la deuxième variable et la première. La troisième ligne est proportionnelle à la différence entre la troisième variable et les deux premières. Généralement, la ligne ( ) reflète la différence entre la variable et toutes celles qui la précèdent, les variables . Cela laisse la première variablek - 1j2 ≤ j ≤ kj1 , 2 , … , j - 1j = 1comme "base" pour tous les contrastes. J'ai trouvé ces interprétations utiles en suivant l'ILR par analyse en composantes principales (PCA): il permet d'interpréter les chargements, au moins grossièrement, en termes de comparaisons entre les variables d'origine. J'ai inséré une ligne dans l' R
implémentation de ilr
ci-dessous qui donne aux variables de sortie des noms appropriés pour aider à cette interprétation. (Fin de l'édition.)
Depuis R
fournit une fonction contr.helmert
pour créer de telles matrices (bien que sans mise à l'échelle, et avec des lignes et des colonnes négatives et transposées), vous n'avez même pas besoin d'écrire le code (simple) pour le faire. En utilisant cela, j'ai implémenté l'ILR (voir ci-dessous). Pour l'exercer et le tester, j'ai généré tirages indépendants à partir d'une distribution de Dirichlet (avec les paramètres 1, 2, , ) et tracé leur matrice de nuage de points. Ici, .10001 , 2 , 3 , 4k = 4
Les points s'agglutinent tous près des coins inférieurs gauches et remplissent des zones triangulaires de leurs zones de traçage, comme cela est caractéristique des données de composition.
Leur ILR n'a que trois variables, à nouveau tracées sous forme de matrice de nuage de points:
Cela semble en effet plus agréable: les diagrammes de dispersion ont acquis des formes de «nuage elliptique» plus caractéristiques, mieux adaptées à des analyses de second ordre telles que la régression linéaire et l'ACP.
Tsagris et al. généraliser le CLR en utilisant une transformation de Box-Cox, qui généralise le logarithme. (Le journal est une transformation de Box-Cox avec le paramètre ) Il est utile parce que, comme le soutiennent les auteurs (correctement à mon humble avis), dans de nombreuses applications, les données doivent déterminer leur transformation. Pour ces données de Dirichlet, un paramètre de (qui est à mi-chemin entre aucune transformation et une transformation logarithmique) fonctionne à merveille:01 / 2
"Beau" se réfère à la description simple que cette image permet: au lieu d'avoir à spécifier l'emplacement, la forme, la taille et l'orientation de chaque nuage de points, nous devons seulement observer que (pour une excellente approximation) tous les nuages sont circulaires avec des rayons similaires . En effet, le CLR a simplifié une description initiale nécessitant au moins 16 chiffres en un qui ne nécessite que 12 chiffres et l'ILR l'a réduit à seulement quatre chiffres (trois emplacements univariés et un rayon), au prix de la spécification du paramètre ILR de - un cinquième numéro. Lorsque de telles simplifications spectaculaires se produisent avec des données réelles, nous pensons généralement que nous sommes sur quelque chose: nous avons fait une découverte ou obtenu un aperçu.1 / 2
Cette généralisation est implémentée dans la ilr
fonction ci-dessous. La commande pour produire ces variables "Z" était simplement
z <- ilr(x, 1/2)
Un avantage de la transformation de Box-Cox est son applicabilité aux observations qui incluent des vrais zéros: elle est toujours définie à condition que le paramètre soit positif.
Les références
Michail T. Tsagris, Simon Preston et Andrew TA Wood, Une transformation de puissance basée sur les données pour les données de composition . arXiv: 1106.1451v2 [stat.ME] 16 juin 2011.
David A. Harville, Algèbre matricielle du point de vue d'un statisticien . Springer Science & Business Media, 27 juin 2008.
Voici le R
code.
#
# ILR (Isometric log-ratio) transformation.
# `x` is an `n` by `k` matrix of positive observations with k >= 2.
#
ilr <- function(x, p=0) {
y <- log(x)
if (p != 0) y <- (exp(p * y) - 1) / p # Box-Cox transformation
y <- y - rowMeans(y, na.rm=TRUE) # Recentered values
k <- dim(y)[2]
H <- contr.helmert(k) # Dimensions k by k-1
H <- t(H) / sqrt((2:k)*(2:k-1)) # Dimensions k-1 by k
if(!is.null(colnames(x))) # (Helps with interpreting output)
colnames(z) <- paste0(colnames(x)[-1], ".ILR")
return(y %*% t(H)) # Rotated/reflected values
}
#
# Specify a Dirichlet(alpha) distribution for testing.
#
alpha <- c(1,2,3,4)
#
# Simulate and plot compositional data.
#
n <- 1000
k <- length(alpha)
x <- matrix(rgamma(n*k, alpha), nrow=n, byrow=TRUE)
x <- x / rowSums(x)
colnames(x) <- paste0("X.", 1:k)
pairs(x, pch=19, col="#00000040", cex=0.6)
#
# Obtain the ILR.
#
y <- ilr(x)
colnames(y) <- paste0("Y.", 1:(k-1))
#
# Plot the ILR.
#
pairs(y, pch=19, col="#00000040", cex=0.6)