La trasformazione ILR (Isometric Log-Ratio) viene utilizzata nell'analisi dei dati compositivi. Ogni data osservazione è un insieme di valori positivi che si sommano all'unità, come le proporzioni di sostanze chimiche in una miscela o le proporzioni del tempo totale trascorso in varie attività. L'invariante somma-unità implica che sebbene ci possano essere componenti di per ogni osservazione, ci sono solo valori funzionalmente indipendenti. (Dal punto di vista geometrico, le osservazioni si trovano su un simplex dimensionale nello spazio euclideo dimensionale . Questa natura simpliciale si manifesta nelle forme triangolari dei grafici a dispersione dei dati simulati mostrati di seguito.)k≥2k−1k−1kRk
In genere, le distribuzioni dei componenti diventano "più belle" quando il log viene trasformato. Questa trasformazione può essere ridimensionata dividendo tutti i valori in un'osservazione per la loro media geometrica prima di prendere i registri. (Equivalentemente, i registri dei dati in qualsiasi osservazione sono centrati sottraendo la loro media.) Questa è nota come trasformazione "Rapporto log logico centrato" o CLR. I valori risultanti si trovano ancora all'interno di un iperpiano in , poiché il ridimensionamento fa sì che la somma dei registri sia zero. L'ILR consiste nella scelta di qualsiasi base ortonormale per questo iperpiano: le coordinate di ogni osservazione trasformata diventano i suoi nuovi dati. Equivalentemente, l'iperpiano viene ruotato (o riflesso) in modo che coincida con il piano con evanescenzaRkk−1kth k-1coordinate e uno usa le prime coordinate . (Poiché rotazioni e riflessioni mantengono la distanza sono isometrie , da cui il nome di questa procedura.)k−1
Tsagris, Preston e Wood affermano che "una scelta standard di [la matrice di rotazione] è la sotto-matrice di Helmert ottenuta rimuovendo la prima riga dalla matrice di Helmert".H
La matrice di Helmert dell'ordine è costruita in modo semplice (vedi Harville p. 86 per esempio). La sua prima riga è tutta s. La riga successiva è una delle più semplici che possono essere rese ortogonali alla prima riga, ovvero . La riga è tra le più semplici ortogonali a tutte le righe precedenti: le sue prime voci sono s, il che garantisce che sia ortogonale alle righe e il suo voce è impostata su per renderla ortogonale alla prima riga (ovvero, le sue voci devono essere sommate a zero). Tutte le righe vengono quindi ridimensionate alla lunghezza dell'unità.k1(1,−1,0,…,0)jj−112,3,…,j−1jth1−j
Qui, per illustrare il modello, è la matrice Helmert prima che le sue righe siano state ridimensionate:4×4
⎛⎝⎜⎜⎜11111−11110−21100−3⎞⎠⎟⎟⎟.
(Modifica aggiunta agosto 2017) Un aspetto particolarmente bello di questi "contrasti" (che vengono letti riga per riga) è la loro interpretabilità. La prima riga viene eliminata, lasciando righe rimanenti per rappresentare i dati. La seconda riga è proporzionale alla differenza tra la seconda variabile e la prima. La terza riga è proporzionale alla differenza tra la terza variabile e le prime due. Generalmente, la riga ( ) riflette la differenza tra la variabile e tutte quelle che la precedono, variabili . Questo lascia la prima variabilek−1j2≤j≤kj1,2,…,j−1j=1come "base" per tutti i contrasti. Ho trovato queste interpretazioni utili quando ho seguito l'ILR di Principal Components Analysis (PCA): consente di interpretare i carichi, almeno approssimativamente, in termini di confronti tra le variabili originali. Ho inserito una riga R
nell'implementazione di ilr
seguito che fornisce alle variabili di output nomi adeguati per aiutare con questa interpretazione. (Fine della modifica.)
Poiché R
fornisce una funzione contr.helmert
per creare tali matrici (anche se senza il ridimensionamento e con righe e colonne negate e trasposte), non è nemmeno necessario scrivere il codice (semplice) per farlo. Usando questo, ho implementato l'ILR (vedi sotto). Per esercitarlo e testarlo, ho generato disegni indipendenti da una distribuzione di Dirichlet (con i parametri ) e ho tracciato la loro matrice scatterplot. Qui, .10001,2,3,4k=4
I punti si raggruppano tutti vicino agli angoli in basso a sinistra e riempiono le zone triangolari delle loro aree di disegno, come caratteristica dei dati compositivi.
Il loro ILR ha solo tre variabili, di nuovo tracciate come una matrice scatterplot:
Questo sembra davvero più bello: i grafici a dispersione hanno acquisito forme più caratteristiche di "nuvola ellittica", meglio suscettibili di analisi del secondo ordine come regressione lineare e PCA.
Tsagris et al. generalizzare il CLR usando una trasformazione Box-Cox, che generalizza il logaritmo. (Il registro è una trasformazione Box-Cox con il parametro ). È utile perché, come sostengono gli autori (correttamente IMHO), in molte applicazioni i dati dovrebbero determinarne la trasformazione. Per questi dati Dirichlet un parametro di (che è a metà strada tra nessuna trasformazione e una trasformazione del log) funziona magnificamente:01/2
"Bella" si riferisce alla semplice descrizione che questa immagine consente: invece di dover specificare la posizione, la forma, le dimensioni e l'orientamento di ciascuna nuvola di punti, dobbiamo solo osservare che (con un'approssimazione eccellente) tutte le nuvole sono circolari con raggi simili . In effetti, il CLR ha semplificato una descrizione iniziale che richiede almeno 16 numeri in uno che richiede solo 12 numeri e l'ILR lo ha ridotto a soli quattro numeri (tre posizioni univariate e un raggio), al prezzo di specificare il parametro ILR di - un quinto numero. Quando tali drammatiche semplificazioni si verificano con dati reali, di solito immaginiamo di essere su qualcosa: abbiamo fatto una scoperta o raggiunto un'intuizione.1/2
Questa generalizzazione è implementata nella ilr
funzione seguente. Il comando per produrre queste variabili "Z" era semplicemente
z <- ilr(x, 1/2)
Un vantaggio della trasformazione Box-Cox è la sua applicabilità alle osservazioni che includono veri zeri: è ancora definito a condizione che il parametro sia positivo.
Riferimenti
Michail T. Tsagris, Simon Preston e Andrew TA Wood, Una trasformazione di potenza basata su dati per dati compositivi . arXiv: 1106.1451v2 [stat.ME] 16 giu 2011.
David A. Harville, Matrix Algebra dal punto di vista di uno statistico . Springer Science & Business Media, 27 giu 2008.
Ecco il R
codice
#
# 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)