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 k ≥ 2 componentes para cada observação, existem apenas k - 1 valores funcionalmente independentes. (Geometricamente, as observações estão em um simplex k - 1 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 k - 1 de cada observação transformada se tornam seus novos dados. Equivalentemente, o hiperplano é girado (ou refletido) para coincidir com o plano com k desaparecendokº coordenada e uma usa as primeirascoordenadask - 1 . (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- 11110 0- 2110 00 0- 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 ( 2 ≤ j ≤ k ) 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 R
implementação ilr
abaixo que fornece às variáveis de saída nomes adequados para ajudar nessa interpretação. (Fim da edição.)
Como R
fornece uma função contr.helmert
para 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 .
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:
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
1 / 2
Essa generalização é implementada na ilr
funçã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 R
có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)