normBoxCox: Computes (normalized) Box-Cox transformation

View source: R/normBoxCox.R

normBoxCoxR Documentation

Computes (normalized) Box-Cox transformation

Description

Computes (normalized) Box-Cox transformation

Usage

normBoxCox(
  X,
  Col2Tra,
  la,
  Jacobian = TRUE,
  inverse = FALSE,
  bsb,
  trace = FALSE,
  ...
)

Arguments

X

The data matrix: n observations and p variables. The rows of X represent observations, and the columns represent variables. Missing values (NA's) and infinite values (Inf's) are allowed, since observations (rows) with missing or infinite values will automatically be excluded from the computations.

Col2Tra

Which variables to transform. An integer vector of length k specifying the variables which must be transformed. If it is missing and length(la)=p all variables are transformed

la

Transformation parameters. A vector of lenghth k containing set of transformation parameters for the k Col2Tra variables.

Jacobian

Requested Jacobian of transformed values. If Jacobian=TRUE the default, the transformation is normalized to have Jacobian equal to 1. Note that this optional argument is ignored if inverse=TRUE.

inverse

Wheather to return the inverse transformation. The default is inverse=FALSE.

bsb

Units to be used in the computation of the Jacobian, a vector of length m or or a logical vector of length n. The default value is bsb=1:n, i.e. all units are used to compute the Jacobian. Note that this option takes effect only if Jacobian=TRUE.

trace

Whether to print intermediate results. Default is trace=FALSE.

...

potential further arguments passed to lower level functions.

Details

When \lambda \ne 0 if Jacobian=TRUE,

ytra = (y^\lambda-1)/ (G^{(\lambda-1)} \lambda)

else if Jacobian=FALSE

ytra = (y^\lambda-1)/ \lambda

where G is the geometric mean of the observations.

When \lambda = 0 if Jacobian=TRUE,

ytra = G log(y)

else if Jacobian=FALSE

ytra = log(y)

where G is the geometric mean of the observations.

Value

The transformed data matrix.

Author(s)

FSDA team, valentin.todorov@chello.at

References

Box, G.E.P. and Cox, D.R. (1964), An analysis of transformations (with Discussion), "Journal of the Royal Statistical Society Series B", Vol. 26, pp. 211-252.

Examples


 ## Not run: 
 ##  Mussels data.
 data(mussels)
 
 X <- mussels
 la <- c(0.5, 0, 0.5, 0, 0)
 
 ## Transform all columns of the matrix X according to the values of la
 (Y <- normBoxCox(X, la=la))
 
 ##  Check the inverse tranformation.
 data(mussels)
 X <- mussels
 la <- c(0.5, 0, 0.5, 0, 0)
 
 ## Transform all columns of matrix Y according to the values of la
 Ytra <- normBoxCox(X, la=la, Jacobian=FALSE)
 Ychk <- normBoxCox(Ytra, la=la, inverse=TRUE)
 
 print(max(max(abs(X-Ychk))))
 
 ## Comparison between Box-Cox and Yeo-Johnson transformation.
 y <- seq(from=-2, to=2, by=0.1)
 n <- length(y)
 la <- seq(from=-1, to=3, by=1) 
 nla <- length(la)
 YtraYJ <- matrix(0, nrow=n, ncol=nla)
 YtraBC <- matrix(NA, nrow=n, ncol=nla)
 
 posy <- y>0
 for(j in 1:nla) {
   YtraYJ[,j] <- normYJ(y, 1, la[j], Jacobian=FALSE)
   YtraBC[posy, j] <- normBoxCox(y[posy], 1, la[j],Jacobian=FALSE)
 }
 
 oldpar <- par(mfrow=c(1,2))
 plot(y, YtraYJ[,1], type="n", xlab="Original values", 
     ylab="Transformed values", main="Yeo-Johnson transformation")
 for(j in 1:nla)
     lines(y, YtraYJ[,j], col=j)
 for(j in 1:nla) {
     text(y[1], YtraYJ[1,j], paste0("la=", la[j]))
 }
     
 plot(y, YtraBC[,1], type="n", xlab="Original values", 
     ylab="Transformed values", main="Box-Cox transformation")
 for(j in 1:nla)
     lines(y, YtraBC[,j], col=j)
 for(j in 1:nla) {
     text(y[16], YtraBC[22,j], paste0("la=", la[j]))
 }
 
 par(oldpar)

 
## End(Not run)


fsdaR documentation built on May 20, 2026, 1:07 a.m.