Come eseguire la trasformazione isometrica del rapporto log


17

Ho dati sui comportamenti del movimento (tempo trascorso dormendo, sedentario e facendo attività fisica) che ammontano a circa 24 (come in ore al giorno). Voglio creare una variabile che catturi il tempo relativo speso in ciascuno di questi comportamenti - mi è stato detto che una trasformazione isometrica del rapporto log avrebbe raggiunto questo obiettivo.

Sembra che dovrei usare la funzione ilr in R, ma non riesco a trovare alcun esempio reale con il codice. Da dove comincio?

Le variabili che ho sono il tempo trascorso a dormire, il tempo medio sedentario, l'attività fisica media media, l'attività fisica media moderata e l'attività fisica mediamente vigorosa. Il sonno è stato auto-riferito, mentre gli altri sono medie dai giorni validi di dati dell'accelerometro. Quindi, per queste variabili, i casi non si sommano esattamente a 24.

La mia ipotesi: sto lavorando in SAS, ma sembra che R sarà molto più facile da usare per questa parte. Quindi prima importa i dati con solo le variabili di interesse. Quindi utilizzare la funzione acomp (). Quindi non riesco a capire la sintassi della funzione ilr (). Qualsiasi aiuto sarebbe molto apprezzato.

Risposte:


21

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

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 evanescenzaRkk1kth k-1coordinate e uno usa le prime coordinate . (Poiché rotazioni e riflessioni mantengono la distanza sono isometrie , da cui il nome di questa procedura.)k1

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

Qui, per illustrare il modello, è la matrice Helmert prima che le sue righe siano state ridimensionate:4×4

(1111110011201113).

(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 variabilek1j2jkj1,2,,j1j=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 Rnell'implementazione di ilrseguito che fornisce alle variabili di output nomi adeguati per aiutare con questa interpretazione. (Fine della modifica.)

Poiché Rfornisce una funzione contr.helmertper 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

Figura 1

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:

Figura 2

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

Figure_3

"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 ilrfunzione 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 Rcodice

#
# 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 Non capisco cosa intendi per correlazioni "spurie". Sì, le variabili devono essere dipendenti, ma il compito di PCA è aiutarti a caratterizzare e quantificare tali dipendenze. Si noti inoltre che la somma dei CLR non è costante (anche se i CLR sono basati su valori che si sommano all'unità).
whuber

1
@Alex Perché non studiare solo l'uscita PCA? Se è complicato e vuoi concentrarti solo su due variabili, fai PCA di quelle due variabili. Un loro diagramma rivelerà la natura e l'estensione di ogni collinearità.
whuber

1
@Alex Certo - è per questo che uso i grafici a dispersione in questa risposta per illustrare l'ILR!
whuber

2
@Alex Questa è una citazione interessante. Sembra riflettere una filosofia che vola di fronte all'EDA (tra le altre cose), il che suggerisce che quando si può trovare una ri-espressione di variabili che producano relazioni utili o informative, questa è una buona cosa, non un problema. I sostenitori dell'EDA (come John Tukey) sostengono che la forma in cui i dati sono originariamente espressi non è necessariamente la forma in cui dovrebbero essere analizzati, mentre questa citazione suppone implicitamente il contrario. Lascio a te decidere quale sia l'approccio più utile.
whuber

1
@Eli Quel commento doveva riferirsi al CLR generalizzato. Come ho scritto nel corpo di questa risposta, "il ridimensionamento fa sì che la somma dei registri sia zero."
whuber

5

Per il tuo caso d'uso, probabilmente è ok ridimensionare tutto a uno. Il fatto che i numeri non si sommino esattamente a 24 aggiungerà un po 'di rumore in più ai dati, ma non dovrebbe rovinare così tanto le cose.

Come affermato correttamente da @whuber, dato che abbiamo a che fare con le proporzioni, dobbiamo tenere conto delle dipendenze tra le variabili (dato che ne sommano una). La trasformazione ilr si occupa in modo appropriato di ciò, poiché trasforma le variabili in per le proporzioni DRD1D

A parte tutti i dettagli tecnici, è importante sapere come interpretare correttamente i dati trasformati. Alla fine, la trasformazione ilr si riferisce solo ai rapporti di registro dei gruppi. Ma lo definisce rispetto ad alcune gerarchie predefinite. Se si definisce una gerarchia come segue

inserisci qui la descrizione dell'immagine

ogni variabile trasformata può essere calcolata come

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

dove rappresenta un nodo interno nella gerarchia, definisce una partizione di variabili corrispondente a , definisce l'altra partizione di variabili corrispondente a e riferisce alla media geometrica. Queste variabili trasformate sono anche note come saldi.iRiiSiig(...)

Quindi la domanda successiva è: come definisci la tua gerarchia di variabili? Questo dipende davvero da te, ma se hai tre variabili, non ci sono troppe combinazioni con cui fare confusione. Ad esempio, potresti semplicemente definire la gerarchia

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

dove Arappresenta il tempo trascorso a dormire, Brappresenta il tempo trascorso con il sedentario, Crappresenta il tempo trascorso facendo attività fisica (A|B)rappresenta il rapporto logaritmico normale tra (cioè ) e riferisce al rapporto log normalizzato tra , e (cioè ) . Se ci sono molte variabili, controllo alcune delle attività svolte con i saldi principaliA B12lnAB(AB|C)ABC23lnABC

Ma tornando alla tua domanda originale, come puoi utilizzare queste informazioni per eseguire effettivamente la trasformazione ilr?

Se stai usando R, verificherei il pacchetto di composizioni

Per usare quel pacchetto, devi capire come creare una partizione binaria sequenziale (SBP), che è come definire la gerarchia. Per la gerarchia sopra definita, è possibile rappresentare SBP con la seguente matrice.

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

dove i valori positivi rappresentano le variabili nel numeratore, i valori negativi rappresentano le variabili nel denominatore e gli zeri rappresentano l'assenza di quella variabile nel saldo. È possibile creare la base ortonormale utilizzando balanceBasedall'SBP definito.
Una volta che hai questo dovresti essere in grado di passare nella tabella delle proporzioni insieme alla base che hai calcolato sopra.

Verificherei questo riferimento per la definizione originale di saldi


4

I post precedenti rispondono alla domanda su come costruire una base ILR e ottenere i saldi ILR. Per aggiungere a ciò, la scelta di quale base può facilitare l'interpretazione dei risultati.

Potresti essere interessato a una partizione la seguente partizione:

(1) (addormentato, sedentario | attività fisica) (2) (addormentato | sedentario).

Dato che hai tre parti nella tua composizione, otterrai due saldi ILR da analizzare. Impostando la partizione come sopra, è possibile ottenere i saldi corrispondenti a "attivo o no" (1) e "quale forma di inattività" (2).

Se si analizza ciascun saldo ILR separatamente, ad esempio eseguendo la regressione rispetto all'ora del giorno o al periodo dell'anno per vedere se ci sono cambiamenti, è possibile interpretare i risultati in termini di cambiamenti in "attivo o no" e cambiamenti in "quale forma di inattività".

Se, d'altra parte, eseguirai tecniche come la PCA che ottengono una nuova base nello spazio ILR, i tuoi risultati non dipenderanno dalla tua scelta di partizione. Questo perché i tuoi dati esistono nello spazio CLR, il piano D-1 ortogonale al vettore singolo e i saldi ILR sono diverse scelte di assi unit-standard per descrivere la posizione dei dati sul piano CLR.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.