ILR(Isometric Log-Ratio)変換は、組成データの分析に使用されます。特定の観測値は、混合物中の化学物質の割合やさまざまな活動に費やされた合計時間の割合など、1つに合計される正の値のセットです。和・ツー・ユニティ不変があるかもしれないがあることを意味K ≥ 2の各観察の成分のみが存在するk − 1機能的に独立した値。(幾何学的には、観測はk次元ユークリッド空間R kのk − 1次元シンプレックスにありますkRk。この単純な性質は、以下に示すシミュレーションデータの散布図の三角形の形に現れています。
Rkk−1kthk−1
H
k1(1,−1,0,…,0)jj−112,3,…,j−1jth1−j
4×4
⎛⎝⎜⎜⎜11111−11110−21100−3⎞⎠⎟⎟⎟.
k−1j2≤j≤kj1,2,…,j−1j=1R
ilr
R
contr.helmert
10001,2,3,4k=4
組成データの特徴であるように、ポイントはすべて左下隅の近くに集まって、プロット領域の三角形のパッチを塗りつぶします。
ILRには3つの変数のみがあり、散布図行列としてプロットされます。
これは確かに見栄えがよくなります。散布図はより特徴的な「楕円雲」形状を取得し、線形回帰やPCAなどの2次解析に適しています。
01/2
1/2
この一般化は、ilr
以下の関数で実装されます。これらの「Z」変数を生成するコマンドは単純に
z <- ilr(x, 1/2)
Box-Cox変換の利点の1つは、真のゼロを含む観測値への適用可能性です。つまり、パラメーターが正の場合でも定義されます。
参照資料
Michail T. Tsagris、Simon Preston、Andrew TA Wood、組成データのデータベースの電力変換。 arXiv:1106.1451v2 [stat.ME] 2011年6月16日。
David A. Harville、マトリックス代数統計学者の視点から。Springer Science&Business Media、2008年6月27日。
これがR
コードです。
#
# 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)