This implementation is a special case of the class of isometric log-ratio transformations.

ilr(x)
  invilr(x)

Arguments

x

A numeric vector. Naturally, the forward transformation is only sensible for vectors with all elements being greater than zero.

Value

The result of the forward or backward transformation. The returned components always sum to 1 for the case of the inverse log-ratio transformation.

References

Peter Filzmoser, Karel Hron (2008) Outlier Detection for Compositional Data Using Robust Methods. Math Geosci 40 233-248

See also

Another implementation can be found in R package robCompositions.

Examples

# Order matters ilr(c(0.1, 1, 10))
#> Error in ilr(c(0.1, 1, 10)): konnte Funktion "ilr" nicht finden
ilr(c(10, 1, 0.1))
#> Error in ilr(c(10, 1, 0.1)): konnte Funktion "ilr" nicht finden
# Equal entries give ilr transformations with zeros as elements ilr(c(3, 3, 3))
#> Error in ilr(c(3, 3, 3)): konnte Funktion "ilr" nicht finden
# Almost equal entries give small numbers ilr(c(0.3, 0.4, 0.3))
#> Error in ilr(c(0.3, 0.4, 0.3)): konnte Funktion "ilr" nicht finden
# Only the ratio between the numbers counts, not their sum invilr(ilr(c(0.7, 0.29, 0.01)))
#> Error in invilr(ilr(c(0.7, 0.29, 0.01))): konnte Funktion "invilr" nicht finden
invilr(ilr(2.1 * c(0.7, 0.29, 0.01)))
#> Error in invilr(ilr(2.1 * c(0.7, 0.29, 0.01))): konnte Funktion "invilr" nicht finden
# Inverse transformation of larger numbers gives unequal elements invilr(-10)
#> Error in invilr(-10): konnte Funktion "invilr" nicht finden
invilr(c(-10, 0))
#> Error in invilr(c(-10, 0)): konnte Funktion "invilr" nicht finden
# The sum of the elements of the inverse ilr is 1 sum(invilr(c(-10, 0)))
#> Error in invilr(c(-10, 0)): konnte Funktion "invilr" nicht finden
# This is why we do not need all elements of the inverse transformation to go back: a <- c(0.1, 0.3, 0.5) b <- invilr(a)
#> Error in invilr(a): konnte Funktion "invilr" nicht finden
length(b) # Four elements
#> Error in eval(expr, envir, enclos): Objekt 'b' nicht gefunden
ilr(c(b[1:3], 1 - sum(b[1:3]))) # Gives c(0.1, 0.3, 0.5)
#> Error in ilr(c(b[1:3], 1 - sum(b[1:3]))): konnte Funktion "ilr" nicht finden