clr1 {norMmix} | R Documentation |
The centered log ratio transformation is Maechler's solution to allowing unconstrained mixture weights optimization.
It has been inspired by Aitchison's centered log ratio,
see also CRAN package compositions' clr()
, and typically
other references on modelling proportions.
clr1(w)
clr1inv(lp)
w |
numeric vector of length |
lp |
numeric vector of length |
Aitchison's clr transformation is slightly different, as it does not drop one coordinate, as we do. Hence the extra ‘1’ in the name of our version.
a numeric vector of length k-1
or k
, see above.
Martin Maechler
Aitchison, J., 1986. The Statistical Analysis of Compositional Data Monographs on Statistics and Applied Probability. Chapman & Hall Ltd., London (UK).
More in the CRAN package compositions vignette ‘UsingCompositions.pdf’
The first implementation of these was in nor1mix, June 2019, in its
par2norMix()
and
nM2par()
functions.
## Apart from error checking and very large number cases, the R implementation is simply
..clr1 <- function (w) {
ln <- log(w)
ln[-1L] - mean(ln)
}
## and its inverse
..clr1inv <- function(lp) {
p1 <- exp(c(-sum(lp), lp))
p1/sum(p1)
}
lp <- clr1( (1:3)/6 )
clr1inv(lp)
stopifnot(all.equal(clr1inv(lp), (1:3)/6))
for(n in 1:100) {
k <- 2 + rpois(1, 3) # #{components}
lp <- rnorm(k-1) # arbitrary unconstrained
## clr1() and clr1inv() are inverses :
stopifnot(all.equal(lp, clr1(clr1inv(lp))))
}
wM <- clr1inv(c(720,720,720))
w2 <- clr1inv(c(720,718,717))
stopifnot(is.finite(wM), all.equal(wM, c(0, 1/3, 1/3, 1/3))
, is.finite(w2), all.equal(w2, c(0, 0.84379473, 0.1141952, 0.042010066))
)