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)
Für Ihren Anwendungsfall ist es wahrscheinlich in Ordnung, einfach alles auf eins zu verkleinern. Die Tatsache, dass sich die Zahlen nicht genau zu 24 addieren, wird den Daten ein wenig zusätzliches Rauschen hinzufügen, aber es sollte die Dinge nicht so durcheinander bringen.
Abgesehen von allen technischen Details ist es wichtig zu wissen, wie die ilr-transformierten Daten richtig interpretiert werden. Am Ende bezieht sich die ilr-Transformation nur auf die log-Verhältnisse von Gruppen. Aber es definiert es in Bezug auf eine vordefinierte Hierarchie. Wenn Sie eine Hierarchie wie folgt definieren
Jede transformierte Variable kann wie folgt berechnet werden
Die nächste Frage lautet also: Wie definieren Sie Ihre Variablenhierarchie? Das liegt ganz bei Ihnen, aber wenn Sie drei Variablen haben, gibt es nicht zu viele Kombinationen, mit denen Sie herumspielen können. Zum Beispiel können Sie einfach die Hierarchie definieren
wobeiA B 12√lnAB (AB|C) A B C 2√3√lnABC
A
der aufgewendeten Zeit Schlaf darstellt,B
repräsentiert die Zeit mit sitzender verbracht,C
stellt die Zeit der körperlichen Aktivität damit verbracht,(A|B)
darstellt zwischen der normalisierten log - Verhältnis (dhB 1Zurück zu Ihrer ursprünglichen Frage: Wie können Sie diese Informationen verwenden, um die ilr-Transformation tatsächlich durchzuführen?
Wenn Sie R verwenden, checke ich das Kompositionspaket aus
Um dieses Paket verwenden zu können, müssen Sie wissen, wie Sie eine sequenzielle binäre Partition (SBP) erstellen und auf diese Weise die Hierarchie definieren. Für die oben definierte Hierarchie können Sie den SBP mit der folgenden Matrix darstellen.
Wo die positiven Werte die Variablen im Zähler repräsentieren, repräsentieren die negativen Werte die Variablen im Nenner, und Nullen repräsentieren das Fehlen dieser Variablen in der Waage. Sie können die orthonormale Basis mit dem
balanceBase
von Ihnen definierten SBP erstellen .Sobald Sie dies haben, sollten Sie in der Lage sein, Ihre Proportionenstabelle zusammen mit der oben berechneten Basis zu übergeben.
Ich würde diese Referenz für die ursprüngliche Definition von Salden überprüfen
quelle
Die obigen Beiträge beantworten die Frage, wie Sie eine ILR-Basis aufbauen und Ihre ILR-Salden erhalten. Um diese Erweiterung, die Wahl davon kann aufgrund der Interpretation der Ergebnisse erleichtern.
Sie könnten an einer Partition der folgenden Partition interessiert sein:
(1) (schlafend, sitzend | körperliche Aktivität) (2) (schlafend | sitzend).
Da Ihre Komposition aus drei Teilen besteht, erhalten Sie zwei ILR-Bilanzen zur Analyse. Wenn Sie die Partition wie oben beschrieben einrichten, erhalten Sie Konten, die "aktiv oder nicht" (1) und "welche Form der Inaktivität" (2) entsprechen.
Wenn Sie jeden ILR-Saldo separat analysieren, z. B. eine Regression gegen die Tages- oder Jahreszeit durchführen, um festzustellen, ob Änderungen vorliegen, können Sie die Ergebnisse als Änderungen in "Aktiv oder Nicht" und in "Änderungen in" interpretieren "welche Form der Inaktivität".
Wenn Sie andererseits Techniken wie PCA ausführen, die eine neue Basis im ILR-Raum erhalten, hängen Ihre Ergebnisse nicht von Ihrer Wahl der Partition ab. Dies liegt daran, dass Ihre Daten im CLR-Raum vorhanden sind, der D-1-Ebene orthogonal zum Ein-Vektor, und dass die ILR-Salden verschiedene Auswahlmöglichkeiten für Einheitsnormachsen sind, um die Position der Daten auf der CLR-Ebene zu beschreiben.
quelle