Die ILR-Transformation (Isometric Log-Ratio) wird bei der Analyse von Zusammensetzungsdaten verwendet. Bei jeder Beobachtung handelt es sich um eine Reihe positiver Werte, die sich zu einer Einheit addieren, beispielsweise die Anteile von Chemikalien in einem Gemisch oder Anteile der Gesamtzeit, die für verschiedene Tätigkeiten aufgewendet wurden. Die Summe-zu-Einheit-Invariante impliziert, dass, obwohl es zu jeder Beobachtung Komponenten geben kann , es nur funktional unabhängige Werte gibt. (Geometrisch liegen die Beobachtungen auf einem dimensionalen Simplex im dimensionalen euklidischen Raum . Diese Vereinfachung manifestiert sich in den dreieckigen Formen der Streudiagramme der simulierten Daten, die unten gezeigt werden.)k ≥ 2k - 1k - 1kRk
In der Regel werden die Verteilungen der Komponenten bei der Protokolltransformation "netter". Diese Transformation kann skaliert werden, indem alle Werte in einer Beobachtung durch ihren geometrischen Mittelwert dividiert werden, bevor die Protokolle erstellt werden. (Entsprechend werden die Protokolle der Daten in jeder Beobachtung durch Subtrahieren ihres Mittelwerts zentriert.) Dies wird als "Centered Log-Ratio" -Transformation oder CLR bezeichnet. Die resultierenden Werte liegen immer noch in einer Hyperebene in , da die Summe der Protokolle aufgrund der Skalierung Null ist. Die ILR besteht aus der Auswahl einer beliebigen orthonormalen Basis für diese Hyperebene: Die Koordinaten jeder transformierten Beobachtung werden zu ihren neuen Daten. Entsprechend wird die Hyperebene gedreht (oder reflektiert), um mit der Ebene zusammenzufallen, in der verschwindet.Rkk - 1kthKoordinate und man verwendet die ersten Koordinaten. (Da Rotationen und Reflexionen den Abstand bewahren, handelt es sich um Isometrien , daher der Name dieses Verfahrens.)k - 1
Tsagris, Preston und Wood geben an, dass "eine Standardauswahl von [der Rotationsmatrix] die Helmert- Submatrix ist, die durch Entfernen der ersten Reihe aus der Helmert-Matrix erhalten wird".H
Die Helmert-Matrix der Ordnung ist auf einfache Weise aufgebaut (siehe z. B. Harville S. 86). Seine erste Reihe ist alle s. Die nächste Zeile ist eine der einfachsten, die orthogonal zur ersten Zeile erstellt werden kann, nämlich . Zeile gehört zu den einfachsten, die zu allen vorhergehenden Zeilen orthogonal sind: Ihre ersten Einträge sind s, was garantiert, dass sie zu den Zeilen und ihrem orthogonal sind entry wird auf , um es orthogonal zur ersten Zeile zu machen (dh seine Einträge müssen sich zu Null summieren). Alle Zeilen werden dann auf die Einheitslänge skaliert.k1( 1 , - 1 , 0 , … , 0 )jj - 112 , 3 , ... , j - 1jth1 - j
Zur Veranschaulichung des Musters sehen Sie hier die Helmert-Matrix, bevor ihre Zeilen neu skaliert wurden:4 × 4
⎛⎝⎜⎜⎜11111- 11110- 21100- 3⎞⎠⎟⎟⎟.
(Änderung hinzugefügt August 2017) Ein besonders schöner Aspekt dieser "Kontraste" (die zeilenweise gelesen werden) ist ihre Interpretierbarkeit. Die erste Zeile wird gelöscht, und es verbleiben verbleibende Zeilen zur Darstellung der Daten. Die zweite Zeile ist proportional zur Differenz zwischen der zweiten und der ersten Variablen. Die dritte Zeile ist proportional zur Differenz zwischen der dritten und den ersten beiden Variablen. Im Allgemeinen spiegelt die Zeile ( ) die Differenz zwischen der Variablen und all jenen, die ihr vorausgehen, den Variablen wider . Damit bleibt die erste Variablek - 1j2 ≤ j ≤ kj1 , 2 , ... , j - 1j = 1als "basis" für alle kontraste. Ich fand diese Interpretationen hilfreich, wenn ich der ILR von Principal Components Analysis (PCA) folgte: Sie ermöglicht es, die Belastungen zumindest grob in Bezug auf Vergleiche zwischen den ursprünglichen Variablen zu interpretieren. Ich habe eine Zeile in die R
Implementierung von ilr
unten eingefügt , die den Ausgabevariablen geeignete Namen gibt, um bei dieser Interpretation zu helfen. (Ende der Bearbeitung.)
Da es R
eine Funktion contr.helmert
zum Erstellen solcher Matrizen gibt (allerdings ohne Skalierung und mit negierten und transponierten Zeilen und Spalten), müssen Sie dazu nicht einmal den (einfachen) Code schreiben. Damit habe ich die ILR implementiert (siehe unten). Um es auszuüben und zu testen, erzeugte ich unabhängige Zeichnungen aus einer Dirichlet-Verteilung (mit den Parametern ) und zeichnete ihre Streudiagramm-Matrix. Hier ist .10001 , 2 , 3 , 4k = 4
Die Punkte klumpen alle in der Nähe der unteren linken Ecken und füllen dreieckige Flächen ihrer Darstellungsbereiche, wie es für Kompositionsdaten charakteristisch ist.
Ihre ILR hat nur drei Variablen, die wiederum als Streudiagramm-Matrix dargestellt sind:
Dies sieht in der Tat besser aus: Die Streudiagramme haben charakteristischere "elliptische Wolken" -Formen erhalten, die sich besser für Analysen zweiter Ordnung wie lineare Regression und PCA eignen.
Tsagris et al. Verallgemeinern Sie die CLR mit einer Box-Cox-Transformation, die den Logarithmus verallgemeinert. (Das Protokoll ist eine Box-Cox-Transformation mit Parameter ) Es ist nützlich, weil, wie die Autoren (richtig IMHO) argumentieren, in vielen Anwendungen die Daten ihre Transformation bestimmen sollten. Für diese Dirichlet-Daten funktioniert ein Parameter von (der auf halbem Weg zwischen keiner Transformation und einer Log-Transformation liegt) wunderbar:01 / 2
"Schön" bezieht sich auf die einfache Beschreibung, die dieses Bild ermöglicht: Anstatt den Ort, die Form, die Größe und die Ausrichtung jeder Punktwolke angeben zu müssen, müssen wir nur beobachten, dass (in ausgezeichneter Näherung) alle Wolken kreisförmig mit ähnlichen Radien sind . In der Tat hat die CLR eine anfängliche Beschreibung, die mindestens 16 Zahlen erfordert, zu einer vereinfacht, die nur 12 Zahlen erfordert, und die ILR hat diese auf nur vier Zahlen (drei univariate Stellen und einen Radius) zu einem Preis für die Angabe des ILR-Parameters von reduziert eine fünfte Zahl. Wenn solche dramatischen Vereinfachungen bei realen Daten auftreten, denken wir normalerweise, dass wir uns auf etwas einlassen: Wir haben eine Entdeckung gemacht oder einen Einblick erhalten.1 / 2
Diese Verallgemeinerung ist in der folgenden ilr
Funktion implementiert . Der Befehl zum Erzeugen dieser "Z" -Variablen war einfach
z <- ilr(x, 1/2)
Ein Vorteil der Box-Cox-Transformation ist ihre Anwendbarkeit auf Beobachtungen mit echten Nullen: Sie ist weiterhin definiert, sofern der Parameter positiv ist.
Verweise
Michail T. Tsagris, Simon Preston und Andrew TA Wood, Eine datenbasierte Leistungstransformation für kompositorische Daten . arXiv: 1106.1451v2 [stat.ME] 16. Juni 2011.
David A. Harville, Matrixalgebra Aus Sicht eines Statistikers . Springer Science & Business Media, 27. Juni 2008.
Hier ist der 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)