Jak przeprowadzić izometryczną transformację logarytmiczną

18

Mam dane na temat zachowań ruchowych (czasu spania, siedzącego trybu życia i aktywności fizycznej), które wynoszą około 24 (jak w godzinach dziennie). Chcę utworzyć zmienną, która przechwytuje względny czas spędzony na każdym z tych zachowań - powiedziano mi, że dokonałaby tego izometryczna transformacja logarytmiczna.

Wygląda na to, że powinienem użyć funkcji ilr w R, ale nie mogę znaleźć żadnych rzeczywistych przykładów z kodem. Gdzie zaczynam?

Zmienne, które mam, to czas spędzony na spaniu, średni siedzący tryb życia, średnia średnia lekka aktywność fizyczna, średnia umiarkowana aktywność fizyczna i średnia intensywna aktywność fizyczna. Sen został zgłoszony przez siebie, podczas gdy pozostałe są średnimi z ważnych dni danych z akcelerometru. Zatem dla tych zmiennych przypadki nie sumują się dokładnie do 24.

Zgaduję: pracuję w SAS, ale wygląda na to, że R będzie znacznie łatwiejszy w użyciu dla tej części. Najpierw zaimportuj dane tylko z interesującymi zmiennymi. Następnie użyj funkcji acomp (). Wtedy nie mogę zrozumieć składni funkcji ilr (). Każda pomoc byłaby mile widziana.

Nicole
źródło

Odpowiedzi:

21

Transformacja ILR (Isometric Log-Ratio) służy do analizy danych dotyczących składu. Każda obserwacja jest zbiorem wartości dodatnich sumujących się do jedności, takich jak proporcje chemikaliów w mieszaninie lub proporcje całkowitego czasu spędzonego na różnych czynnościach. Niezmiennik suma do jedności oznacza, że ​​chociaż w każdej obserwacji może być k2) składowych, istnieją tylko k-1 funkcjonalnie niezależne wartości. (Geometrycznie obserwacje leżą na k-1 wymiarowym simpleksie w k wymiarowej przestrzeni Euklidesowej Rk. Ta prosta natura przejawia się w trójkątnych kształtach wykresów rozrzutu symulowanych danych pokazanych poniżej.)

Zazwyczaj rozkłady komponentów stają się „ładniejsze” po przekształceniu dziennika. Ta transformacja może być skalowana poprzez podzielenie wszystkich wartości w obserwacji przez ich średnią geometryczną przed pobraniem logów. (Odpowiednio dzienniki danych w dowolnej obserwacji są wyśrodkowane przez odjęcie ich średniej.) Jest to znane jako transformacja „wyśrodkowanego współczynnika log” lub CLR. Wynikowe wartości nadal leżą w hiperpłaszczyźnie w Rk , ponieważ skalowanie powoduje, że suma dzienników jest równa zero. ILR polega na wybraniu dowolnej ortonormalnej podstawy dla tej hiperpłaszczyzny: współrzędne k-1 każdej transformowanej obserwacji stają się jej nowymi danymi. Równolegle hiperpłaszczyzna jest obracana (lub odbijana), aby pokrywała się z płaszczyzną znikającego kth koordynować i używa pierwszak-1 współrzędnych. (Ponieważ obroty i odbicia zachowują odległość, są toizometria, stąd nazwa tej procedury).

Tsagris, Preston i Wood twierdzą, że „standardowym wyborem [macierzy rotacji] H. jest podmacierz Helmerta uzyskana przez usunięcie pierwszego rzędu z macierzy Helmerta”.

Macierz Helmerta rzędu k jest konstruowana w prosty sposób (patrz na przykład Harville, s. 86). Pierwszy rząd ma wszystkie 1 s. Następny rząd jest jednym z najprostszych, które można ustawić prostopadle do pierwszego rzędu, a mianowicie (1,-1,0,,0) . Rząd j jest jednym z najprostszych, który jest prostopadły do ​​wszystkich poprzednich wierszy: jego pierwsze wpisy j1 to 1 s, co gwarantuje, że jest prostopadły do ​​rzędów 2),3),,jot-1, a jej jotth wpis jest ustawiony na 1-jot aby był prostopadły do ​​pierwszego wiersza (to znaczy, że jego wpisy muszą sumować się do zera). Wszystkie wiersze są następnie przeskalowywane do długości jednostki.

Tutaj, aby zilustrować wzór, jest macierz Helmert 4×4 przed przeskalowaniem jej wierszy:

(11111-10011-2)0111-3)).

(Edycja dodana w sierpniu 2017 r.) Szczególnie interesującym aspektem tych „kontrastów” (które są odczytywane wiersz po rzędzie) jest ich interpretowalność. Pierwszy wiersz jest usuwany, pozostawiając k-1 pozostałych wierszy do przedstawienia danych. Drugi rząd jest proporcjonalny do różnicy między drugą zmienną a pierwszą. Trzeci rząd jest proporcjonalny do różnicy między trzecią zmienną a pierwszymi dwiema. Zasadniczo wiersz jot ( 2)jotk ) odzwierciedla różnicę między zmienną jot a wszystkimi poprzednimi , zmiennymi 1,2),,jot-1. Pozostawia to pierwszą zmienną jot=1 jako „bazę” dla wszystkich kontrastów. Uważam, że te interpretacje są pomocne przy śledzeniu ILR metodą analizy głównych składników (PCA): umożliwia interpretację obciążeń, przynajmniej w przybliżeniu, w kategoriach porównań między pierwotnymi zmiennymi. Do Rimplementacji ilrponiżej wstawiłem wiersz, który nadaje zmiennym wyjściowym odpowiednie nazwy, które pomogą w tej interpretacji. (Koniec edycji.)

Ponieważ Rzapewnia funkcję contr.helmertdo tworzenia takich macierzy (aczkolwiek bez skalowania, z wierszami i kolumnami zanegowanymi i transponowanymi), nie musisz nawet pisać (prostego) kodu, aby to zrobić. Korzystając z tego, wdrożyłem ILR (patrz poniżej). Aby to ćwiczyć i przetestować, wygenerowałem 1000 niezależnych losowań z rozkładu Dirichleta (z parametrami 1,2),3),4 ) i wykreśliłem ich macierz rozrzutu. Tutaj k=4 .

Rycina_1

Wszystkie punkty zbrylają się w pobliżu dolnych lewych narożników i wypełniają trójkątne plamki swoich obszarów kreślenia, co jest charakterystyczne dla danych kompozycyjnych.

Ich ILR ma tylko trzy zmienne, ponownie wykreślone jako macierz wykresu rozrzutu:

Rysunek 2

To rzeczywiście wygląda ładniej: wykresy rozproszone zyskały bardziej charakterystyczne kształty „eliptycznej chmury”, lepiej dostosowane do analiz drugiego rzędu, takich jak regresja liniowa i PCA.

01/2)

Rycina_3

1/2)


To uogólnienie jest realizowane w ilrfunkcji poniżej. Polecenie wygenerowania tych zmiennych „Z” było po prostu

z <- ilr(x, 1/2)

Jedną z zalet transformacji Boxa-Coxa jest możliwość jej zastosowania do obserwacji zawierających prawdziwe zera: jest ona nadal zdefiniowana, pod warunkiem, że parametr jest dodatni.

Bibliografia

Michail T. Tsagris, Simon Preston i Andrew TA Wood, Oparta na danych transformacja mocy dla danych kompozycyjnych . arXiv: 1106.1451v2 [stat.ME] 16 czerwca 2011 r.

David A. Harville, Matrix Algebra From a Statistician's Perspective . Springer Science & Business Media, 27 czerwca 2008.


Oto Rkod.

#
# 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)
Whuber
źródło
1
@Alex Nie rozumiem, co rozumiesz przez „fałszywe” korelacje. Tak, zmienne muszą być zależne - ale zadaniem PCA jest pomoc w scharakteryzowaniu i kwantyfikacji tych zależności. Należy również zauważyć, że suma CLR nie jest stała (nawet jeśli CLR są oparte na wartościach sumujących się do jedności).
whuber
1
@Alex Dlaczego nie po prostu przestudiować wynik PCA? Jeśli jest to skomplikowane i chcesz skupić się tylko na dwóch zmiennych, wykonaj PCA tych dwóch zmiennych. Ich wykres rozrzutu ujawni naturę i zasięg każdej kolinearności.
whuber
1
@Alex Sure - dlatego używam wykresów rozrzutu w tej odpowiedzi, aby zilustrować ILR!
whuber
2
@Alex To ciekawy cytat. Wydaje się, że odzwierciedla filozofię, która jest sprzeczna z EDA (między innymi), co sugeruje, że kiedy można znaleźć ponowne wyrażenie zmiennych, które wytwarzają użyteczne lub informacyjne relacje, jest to dobra rzecz, a nie problem. Zwolennicy EDA (jak John Tukey) twierdzą, że forma, w jakiej dane są pierwotnie wyrażane, niekoniecznie musi być formą, w której powinny być analizowane, podczas gdy cytat ten domyślnie zakłada coś wręcz przeciwnego. Sam zdecyduję, które podejście jest bardziej przydatne.
whuber
1
@Eli Ten komentarz miał odnosić się do ogólnego CLR. Jak napisałem w treści tej odpowiedzi, „skalowanie powoduje, że suma dzienników wynosi zero”.
whuber
5

W twoim przypadku prawdopodobnie dobrze jest skalować wszystko do jednego. Fakt, że liczby nie sumują się dokładnie do 24, doda trochę dodatkowego szumu do danych, ale nie powinno to tak bardzo popsuć.

Rre-1re

Pomijając wszystkie szczegóły techniczne, ważne jest, aby wiedzieć, jak poprawnie interpretować dane przekształcone ilr. Na koniec transformacja ilr odnosi się tylko do logarytmicznych proporcji grup. Ale definiuje to w odniesieniu do jakiejś predefiniowanej hierarchii. Jeśli zdefiniujesz hierarchię w następujący sposób

wprowadź opis zdjęcia tutaj

każdą transformowaną zmienną można obliczyć jako

bja=rsr+slnsol(Rja)sol(S.ja)

jaRjajaS.jajasol(...)

Kolejne pytanie brzmi: jak zdefiniować swoją hierarchię zmiennych? To naprawdę zależy od ciebie, ale jeśli masz trzy zmienne, nie ma zbyt wielu kombinacji, z którymi można zadzierać. Na przykład możesz po prostu zdefiniować hierarchię

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

ABC(A|B)ZA b12)lnZAb(ZAb|do)ZAbdo2)3)lnZAbdo

Ale wracając do pierwotnego pytania, w jaki sposób można wykorzystać te informacje, aby faktycznie przeprowadzić transformację ILR?

Jeśli używasz R, kupiłbym pakiet kompozycji

Aby korzystać z tego pakietu, musisz zrozumieć, jak utworzyć sekwencyjną partycję binarną (SBP), czyli jak zdefiniować hierarchię. Dla hierarchii zdefiniowanej powyżej możesz reprezentować SBP za pomocą następującej macierzy.

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

gdzie wartości dodatnie reprezentują zmienne w liczniku, wartości ujemne reprezentują zmienne w mianowniku, a zera oznaczają brak tej zmiennej w bilansie. Możesz zbudować podstawę ortonormalną za pomocą balanceBasezdefiniowanego przez siebie SBP.
Gdy już to zrobisz, powinieneś być w stanie przekazać tabelę proporcji wraz z podstawą, którą obliczyłeś powyżej.

Sprawdziłbym to odniesienie dla oryginalnej definicji sald

mortonjt
źródło
4

Powyższe posty odpowiedzieć na pytanie, w jaki sposób skonstruować takie podstawy ILR i dostać salda ILR. Aby dodać do tego, wybór którego podstawą może ułatwić interpretację wyników.

Możesz być zainteresowany partycją następującą partycję:

(1) (spanie, siedzący tryb życia | aktywność fizyczna) (2) (spanie | siedzący tryb życia).

Ponieważ masz trzy części w swoim składzie, otrzymasz dwa salda ILR do analizy. Konfigurując partycję jak wyżej, można uzyskać salda odpowiadające „aktywnej czy nie” (1) i „która forma nieaktywności” (2).

Jeśli analizujesz oddzielnie każdy bilans ILR, na przykład przeprowadzając regresję w stosunku do pory dnia lub pory roku, aby sprawdzić, czy są jakieś zmiany, możesz zinterpretować wyniki w kategoriach zmian w „aktywnym lub nie” i zmianach w „która forma nieaktywności”.

Jeśli natomiast wykonasz techniki takie jak PCA, które uzyskają nową podstawę w przestrzeni ILR, Twoje wyniki nie będą zależeć od wyboru partycji. Wynika to z faktu, że dane istnieją w przestrzeni CLR, płaszczyźnie D-1 prostopadłej do jednego wektora, a równowagi ILR to różne wybory osi jednostka-norma do opisania pozycji danych na płaszczyźnie CLR.

WashburneAD
źródło