Como executar a transformação isométrica da razão logarítmica

17

Eu tenho dados sobre comportamentos de movimento (tempo gasto dormindo, sedentário e fazendo atividade física) que soma aproximadamente 24 (como em horas por dia). Quero criar uma variável que capture o tempo relativo gasto em cada um desses comportamentos - me disseram que uma transformação isométrica da razão logarítmica conseguiria isso.

Parece que eu deveria usar a função ilr em R, mas não consigo encontrar nenhum exemplo real com código. Por onde começo?

As variáveis ​​que tenho são tempo gasto dormindo, tempo sedentário médio, atividade física leve média, atividade física moderada média e atividade física vigorosa média. O sono foi auto-relatado, enquanto os outros são médias de dias válidos de dados do acelerômetro. Portanto, para essas variáveis, os casos não somam exatamente 24.

Meu palpite: estou trabalhando no SAS, mas parece que o R será muito mais fácil de usar para esta parte. Então, primeiro importe os dados apenas com as variáveis ​​de interesse. Em seguida, use a função acomp (). Então não consigo descobrir a sintaxe da função ilr (). Qualquer ajuda seria muito apreciada.

Nicole
fonte

Respostas:

21

A transformação ILR (Isometric Log-Ratio) é usada na análise de dados composicionais. Qualquer observação é um conjunto de valores positivos somados à unidade, como as proporções de produtos químicos em uma mistura ou proporções do tempo total gasto em várias atividades. A invariante de soma para unidade implica que, embora possa haver k2 componentes para cada observação, existem apenas k1 valores funcionalmente independentes. (Geometricamente, as observações estão em um simplex k1 dimensional no espaço euclidiano k dimensional Rk. Essa natureza simples se manifesta nas formas triangulares dos gráficos de dispersão dos dados simulados mostrados abaixo.)

Normalmente, as distribuições dos componentes se tornam "mais agradáveis" quando o log é transformado. Essa transformação pode ser dimensionada dividindo todos os valores em uma observação por sua média geométrica antes de fazer os logs. (Equivalentemente, os logs dos dados em qualquer observação são centralizados subtraindo sua média.) Isso é conhecido como transformação "Razão do Log Centrado" ou CLR. Os valores resultantes ainda estão dentro de um hiperplano em Rk , porque o dimensionamento faz com que a soma dos logs seja zero. O ILR consiste em escolher qualquer base ortonormal para esse hiperplano: as coordenadas k1 de cada observação transformada se tornam seus novos dados. Equivalentemente, o hiperplano é girado (ou refletido) para coincidir com o plano com k desaparecendokth coordenada e uma usa as primeirascoordenadask1 . (Como rotações e reflexões preservam a distância, sãoisometrias, daí o nome desse procedimento.)

Tsagris, Preston e Wood afirmam que "uma escolha padrão da [matriz de rotação] H é a sub-matriz de Helmert obtida pela remoção da primeira linha da matriz de Helmert".

A matriz Helmert de ordem k é construída de maneira simples (veja Harville, p. 86, por exemplo). Sua primeira linha é composta por 1 s. A próxima linha é uma das mais simples que podem ser ortogonais à primeira linha, a saber (1,1,0,,0) . A linha j está entre as mais simples ortogonais a todas as linhas anteriores: suas primeiras entradas j-1 são 1 s, o que garante que é ortogonal às linhas 2,3,...,j-1, E sua jº entrada é definida para 1-j para torná-lo ortogonal à primeira linha (isto é, suas entradas devem somar zero). Todas as linhas são então redimensionadas para o tamanho da unidade.

Aqui, para ilustrar o padrão, é o 4×4 matriz Helmert antes de suas linhas foram redimensionadas:

(11111-10 00 011-20 0111-3).

(Edição adicionada em agosto de 2017) Um aspecto particularmente interessante desses "contrastes" (que são lidos linha por linha) é sua interpretabilidade. A primeira linha é descartada, deixando k-1 linhas restantes para representar os dados. A segunda linha é proporcional à diferença entre a segunda variável e a primeira. A terceira linha é proporcional à diferença entre a terceira variável e as duas primeiras. Geralmente, a linha j ( 2jk ) reflete a diferença entre a variável j e todas as que a precedem, variáveis 1,2,...,j-1. Isso deixa a primeira variável j=1 como uma "base" para todos os contrastes. Achei essas interpretações úteis ao seguir o ILR da Análise de Componentes Principais (PCA): permite que as cargas sejam interpretadas, pelo menos aproximadamente, em termos de comparações entre as variáveis ​​originais. Inseri uma linha na Rimplementação ilrabaixo que fornece às variáveis ​​de saída nomes adequados para ajudar nessa interpretação. (Fim da edição.)

Como Rfornece uma função contr.helmertpara criar essas matrizes (embora sem o dimensionamento e com linhas e colunas negadas e transpostas), você nem precisa escrever o código (simples) para fazê-lo. Usando isso, implementei o ILR (veja abaixo). Para exercitá-lo e testá-lo, geramos 1000 desenhos independentes a partir de uma distribuição de Dirichlet (com os parâmetros 1,2,3,4 ) e plotamos sua matriz de gráficos de dispersão. Aqui, k=4 .

Figura 1

Todos os pontos se agrupam perto dos cantos inferiores esquerdos e preenchem manchas triangulares de suas áreas de plotagem, como é característico dos dados de composição.

O ILR deles possui apenas três variáveis, novamente plotadas como uma matriz de gráfico de dispersão:

Figura 2

Isso realmente parece mais agradável: os gráficos de dispersão adquiriram formas mais características de "nuvem elíptica", mais passíveis de análises de segunda ordem, como regressão linear e PCA.

0 01/2

Figura 3

1/2


Essa generalização é implementada na ilrfunção abaixo. O comando para produzir essas variáveis ​​"Z" era simplesmente

z <- ilr(x, 1/2)

Uma vantagem da transformação Box-Cox é sua aplicabilidade a observações que incluem zeros verdadeiros: ela ainda é definida desde que o parâmetro seja positivo.

Referências

Michail T. Tsagris, Simon Preston e Andrew TA Wood, uma transformação de poder baseada em dados para dados composicionais . arXiv: 1106.1451v2 [stat.ME] 16 de junho de 2011.

David A. Harville, álgebra matricial da perspectiva de um estatístico . Springer Science & Business Media, 27 de junho de 2008.


Aqui está o Rcódigo.

#
# 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
fonte
1
@ Alex Eu não entendo o que você quer dizer com correlações "espúrias". Sim, as variáveis ​​devem ser dependentes - mas o trabalho do PCA é ajudá-lo a caracterizar e quantificar essas dependências. Observe também que a soma dos CLRs não é constante (mesmo que os CLRs sejam baseados em valores que somam a unidade).
whuber
1
@ Alex Por que não apenas estudar a saída do PCA? Se é complicado e você deseja se concentrar em apenas duas variáveis, faça o PCA dessas duas variáveis. Um gráfico de dispersão deles revelará a natureza e extensão de qualquer colinearidade.
whuber
1
@ Alex Claro - é por isso que eu uso gráficos de dispersão nesta resposta para ilustrar o ILR!
whuber
2
@ Alex Essa é uma citação interessante. Parece refletir uma filosofia que se opõe à EDA (entre outras coisas), o que sugere que, quando se pode encontrar uma re-expressão de variáveis ​​que produzem relações úteis ou informativas, isso é uma coisa boa, não um problema. Os defensores da EDA (como John Tukey) argumentam que a forma na qual os dados são originalmente expressos não é necessariamente a forma na qual eles devem ser analisados, enquanto essa citação supõe implicitamente o oposto. Deixo para você decidir qual é a abordagem mais útil.
whuber
1
@ Eli Esse comentário pretendia se referir ao CLR generalizado. Como escrevi no corpo desta resposta, "a escala faz com que a soma dos logs seja zero".
whuber
5

Para o seu caso de uso, provavelmente não há problema em apenas reduzir tudo para um. O fato de os números não somarem exatamente 24 adicionará um pouco de ruído extra aos dados, mas não deve atrapalhar tanto as coisas.

RD-1D

Com todos os detalhes técnicos à parte, é importante saber como interpretar corretamente os dados transformados do ilr. No final, a transformação ilr refere-se apenas às relações de log dos grupos. Mas o define com relação a alguma hierarquia predefinida. Se você definir uma hierarquia da seguinte maneira

insira a descrição da imagem aqui

cada variável transformada pode ser calculada como

bEu=rsr+semg(REu)g(SEu)

EuREuEuSEuEug(...)

Portanto, a próxima pergunta é: como você define sua hierarquia de variáveis? Isso depende de você, mas se você tiver três variáveis, não haverá muitas combinações para mexer. Por exemplo, você pode apenas definir a hierarquia a ser

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

ABC(A|B)UMA B12emUMAB(UMAB|C)UMABC23emUMABC

Mas voltando à sua pergunta original, como você pode usar essas informações para realmente executar a transformação ilr?

Se você estiver usando R, eu faria o checkout do pacote de composições

Para usar esse pacote, você precisará entender como criar uma partição binária seqüencial (SBP), que é como você define a hierarquia. Para a hierarquia definida acima, você pode representar o SBP com a seguinte matriz.

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

onde os valores positivos representam as variáveis ​​no numerador, os valores negativos representam as variáveis ​​no denominador e os zeros representam a ausência dessa variável na balança. Você pode construir a base ortonormal usando balanceBaseo SBP que você definiu.
Depois de conseguir isso, você poderá passar sua tabela de proporções junto com a base que você calculou acima.

Eu verificaria esta referência para a definição original de saldos

mortonjt
fonte
4

As postagens acima respondem à pergunta sobre como construir uma base de ILR e obter seus saldos de ILR. Para adicionar a isso, a escolha de qual base pode facilitar a interpretação dos seus resultados.

Você pode estar interessado em uma partição, a seguinte partição:

(1) (adormecido, sedentário | atividade física) (2) (adormecido | sedentário).

Como você tem três partes em sua composição, você obterá dois saldos de ILR para analisar. Ao configurar a partição como acima, você pode obter saldos correspondentes a "ativo ou não" (1) e "qual forma de inatividade" (2).

Se você analisar cada saldo de ILR separadamente, por exemplo, executando uma regressão em relação à hora do dia ou época do ano para verificar se há alguma alteração, você poderá interpretar os resultados em termos de alterações em "ativo ou não" e alterações em "qual forma de inatividade".

Se, por outro lado, você executar técnicas como PCA que obtêm uma nova base no espaço ILR, seus resultados não dependerão da sua escolha de partição. Isso ocorre porque seus dados existem no espaço CLR, o plano D-1 ortogonal ao vetor único e os saldos ILR são opções diferentes de eixos de norma de unidade para descrever a posição dos dados no plano CLR.

WashburneAD
fonte