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ć k≥2 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 j−1 to 1 s, co gwarantuje, że jest prostopadły do rzędów 2 , 3 , … , j - 1, a jej jotth wpis jest ustawiony na 1 - j 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- 11110- 21100- 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 ≤ j ≤ k ) odzwierciedla różnicę między zmienną jot a wszystkimi poprzednimi , zmiennymi 1 , 2 , … , j - 1. Pozostawia to pierwszą zmienną j = 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 R
implementacji ilr
poniżej wstawiłem wiersz, który nadaje zmiennym wyjściowym odpowiednie nazwy, które pomogą w tej interpretacji. (Koniec edycji.)
Ponieważ R
zapewnia funkcję contr.helmert
do 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 .
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:
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
1 / 2
To uogólnienie jest realizowane w ilr
funkcji 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 R
kod.
#
# 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)