Durchführen einer Transformation des isometrischen Log-Verhältnisses


17

Ich habe Daten zum Bewegungsverhalten (Schlafenszeit, Bewegungsmangel und körperliche Aktivität), die sich auf ungefähr 24 belaufen (wie in Stunden pro Tag). Ich möchte eine Variable erstellen, die die relative Zeit erfasst, die für jedes dieser Verhalten aufgewendet wurde. Mir wurde mitgeteilt, dass eine Transformation des isometrischen Log-Verhältnisses dies bewirken würde.

Es sieht so aus, als ob ich die ilr-Funktion in R verwenden sollte, aber ich kann keine tatsächlichen Beispiele mit Code finden. Wo soll ich anfangen?

Die Variablen, die ich habe, sind Schlafenszeit, durchschnittliche sitzende Zeit, durchschnittliche leichte körperliche Aktivität, durchschnittliche moderate körperliche Aktivität und durchschnittliche kräftige körperliche Aktivität. Der Schlaf wurde selbst gemeldet, während die anderen Durchschnittswerte aus gültigen Tagen mit Beschleunigungsmesserdaten stammen. Für diese Variablen summieren sich die Fälle also nicht zu genau 24.

Meine Vermutung: Ich arbeite in SAS, aber es sieht so aus, als würde R für diesen Teil viel einfacher zu verwenden sein. Importieren Sie also zunächst nur Daten mit den gewünschten Variablen. Verwenden Sie dann die Funktion acomp (). Dann kann ich die Syntax für die Funktion ilr () nicht herausfinden. Jede Hilfe wäre sehr dankbar.

Antworten:


21

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.)k2k1k1kRk

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.Rkk1kthKoordinate und man verwendet die ersten Koordinaten. (Da Rotationen und Reflexionen den Abstand bewahren, handelt es sich um Isometrien , daher der Name dieses Verfahrens.)k1

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)jj112,3,,j1jth1j

Zur Veranschaulichung des Musters sehen Sie hier die Helmert-Matrix, bevor ihre Zeilen neu skaliert wurden:4×4

(1111110011201113).

(Ä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 Variablek1j2jkj1,2,,j1j=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 RImplementierung von ilrunten eingefügt , die den Ausgabevariablen geeignete Namen gibt, um bei dieser Interpretation zu helfen. (Ende der Bearbeitung.)

Da es Reine Funktion contr.helmertzum 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

Abbildung 1

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:

Figur 2

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

Figur 3

"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 ilrFunktion 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 RCode.

#
# 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)

1
@Alex Ich verstehe nicht, was du mit "falschen" Korrelationen meinst. Ja, die Variablen müssen abhängig sein - aber die Aufgabe von PCA besteht darin, Ihnen bei der Charakterisierung und Quantifizierung dieser Abhängigkeiten zu helfen. Beachten Sie auch, dass die Summe der CLRs nicht konstant ist (obwohl die CLRs auf Werten basieren, die sich zu einer Einheit summieren).
Whuber

1
@Alex Warum nicht einfach die PCA-Ausgabe studieren? Wenn es kompliziert ist und Sie sich auf nur zwei Variablen konzentrieren möchten, führen Sie eine PCA dieser beiden Variablen durch. Ein Streudiagramm von ihnen wird die Art und das Ausmaß jeglicher Kollinearität aufdecken.
Whuber

1
@Alex Sicher - deshalb verwende ich in dieser Antwort Streudiagramme, um die ILR zu veranschaulichen!
whuber

2
@ Alex Das ist ein interessantes Zitat. Es scheint eine Philosophie zu widerspiegeln, die (unter anderem) EDA widerspricht und besagt, dass, wenn man eine Wiederholung von Variablen findet, die nützliche oder informative Beziehungen hervorbringt, das eine gute Sache ist, kein Problem. Befürworter von EDA (wie John Tukey) argumentieren, dass die Form, in der Daten ursprünglich ausgedrückt werden, nicht unbedingt die Form ist, in der sie analysiert werden sollten, während dieses Zitat implizit genau das Gegenteil voraussetzt. Ich überlasse es Ihnen zu entscheiden, welcher Ansatz sinnvoller ist.
Whuber

1
@Eli Dieser Kommentar bezog sich auf die verallgemeinerte CLR. Wie ich im Hauptteil dieser Antwort schrieb, "bewirkt die Skalierung, dass die Summe der Protokolle Null ist."
Whuber

5

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.

RD1D

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

Bildbeschreibung hier eingeben

Jede transformierte Variable kann wie folgt berechnet werden

bi=rsr+slng(Ri)g(Si)

iRiiSig ( . . . )ig(...)

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

                        /-A
            /(A|B)-----|
-(AB|C)----|            \-B
           |
            \-C

wobei Ader aufgewendeten Zeit Schlaf darstellt, Brepräsentiert die Zeit mit sitzender verbracht, Cstellt die Zeit der körperlichen Aktivität damit verbracht, (A|B)darstellt zwischen der normalisierten log - Verhältnis (dhB 1A B12lnAB(AB|C)ABC23lnABC

Zurü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.

        A  B  C
(A|B)   1 -1  0
(AB|C)  1  1 -1

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 balanceBasevon 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


4

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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.