car (version 3.0-10)

# bcPower: Box-Cox, Box-Cox with Negatives Allowed, Yeo-Johnson and Basic Power Transformations

## Description

Transform the elements of a vector or columns of a matrix using, the Box-Cox, Box-Cox with negatives allowed, Yeo-Johnson, or simple power transformations.

## Usage

bcPower(U, lambda, jacobian.adjusted=FALSE, gamma=NULL)bcnPower(U, lambda, jacobian.adjusted = FALSE, gamma)bcnPowerInverse(z, lambda, gamma)yjPower(U, lambda, jacobian.adjusted = FALSE)basicPower(U,lambda, gamma=NULL)

## Arguments

U

A vector, matrix or data.frame of values to be transformed

lambda

Power transformation parameter with one element for each column of U, usuallly in the range from $$-2$$ to $$2$$.

jacobian.adjusted

If TRUE, the transformation is normalized to have Jacobian equal to one. The default FALSE is almost always appropriate.

gamma

For bcPower or basicPower, the transformation is of U + gamma, where gamma is a positive number called a start that must be large enough so that U + gamma is strictly positive. For the bcnPower, Box-cox power with negatives allowed, see the details below.

z

a numeric vector the result of a call to bcnPower with jacobian.adjusted=FALSE

## Value

Returns a vector or matrix of transformed values.

## Details

The Box-Cox family of scaled power transformations equals $$(x^{\lambda}-1)/\lambda$$ for $$\lambda \neq 0$$, and $$\log(x)$$ if $$\lambda =0$$. The bcPower function computes the scaled power transformation of $$x = U + \gamma$$, where $$\gamma$$ is set by the user so $$U+\gamma$$ is strictly positive for these transformations to make sense.

The Box-Cox family with negatives allowed was proposed by Hawkins and Weisberg (2017). It is the Box-Cox power transformation of $$z = .5 (U + \sqrt{U^2 + \gamma^2)})$$ where for this family $$\gamma$$ is either user selected or is estimated. gamma must be positive if $$U$$ includes negative values and non-negative otherwise, ensuring that $$z$$ is always positive. The bcnPower transformations behave similarly to the bcPower transformations, and introduce less bias than is introduced by setting the parameter $$\gamma$$ to be non-zero in the Box-Cox family.

The function bcnPowerInverse computes the inverse of the bcnPower function, so U = bcnPowerInverse(bcnPower(U, lambda=lam, jacobian.adjusted=FALSE, gamma=gam), lambda=lam, gamma=gam) is true for any permitted value of gam and lam.

If family="yeo.johnson" then the Yeo-Johnson transformations are used. This is the Box-Cox transformation of $$U+1$$ for nonnegative values, and of $$|U|+1$$ with parameter $$2-\lambda$$ for $$U$$ negative.

The basic power transformation returns $$U^{\lambda}$$ if $$\lambda$$ is not 0, and $$\log(\lambda)$$ otherwise for $$U$$ strictly positive.

If jacobian.adjusted is TRUE, then the scaled transformations are divided by the Jacobian, which is a function of the geometric mean of $$U$$ for skewPower and yjPower and of $$U + gamma$$ for bcPower. With this adjustment, the Jacobian of the transformation is always equal to 1. Jacobian adjustment facilitates computing the Box-Cox estimates of the transformation parameters.

Missing values are permitted, and return NA where ever U is equal to NA.

## References

Fox, J. and Weisberg, S. (2019) An R Companion to Applied Regression, Third Edition, Sage.

Hawkins, D. and Weisberg, S. (2017) Combining the Box-Cox Power and Generalized Log Transformations to Accomodate Nonpositive Responses In Linear and Mixed-Effects Linear Models South African Statistics Journal, 51, 317-328.

Weisberg, S. (2014) Applied Linear Regression, Fourth Edition, Wiley Wiley, Chapter 7.

Yeo, In-Kwon and Johnson, Richard (2000) A new family of power transformations to improve normality or symmetry. Biometrika, 87, 954-959.

## See Also

powerTransform, testTransform

## Examples

# NOT RUN {
U <- c(NA, (-3:3))
# }
# NOT RUN {
bcPower(U, 0)
# }
# NOT RUN {
# produces an error as U has negative values
bcPower(U, 0, gamma=4)
bcPower(U, .5, jacobian.adjusted=TRUE, gamma=4)
bcnPower(U, 0, gamma=2)
basicPower(U, lambda = 0, gamma=4)
yjPower(U, 0)
V <- matrix(1:10, ncol=2)
bcPower(V, c(0, 2))
basicPower(V, c(0,1))
# }