From: "Piotrovskij, Vladimir [JanBe]" <VPIOTROV@janbe.jnj.com>

Subject: Box-Cox transformation in NONMEM

Date: 25 Sep 1998 03:56:48 -0400

If residuals are highly skewed log transformation of observations and model predictions may help. There is, however, a more general approach in regression called Transform Both Side (TBS) approach (see Carroll & Ruppert 'Transformation and weighting in regression'). Log transformation is a particular case of Box-Cox modified power transformation (y^lambda-1)/lambda for lambda=0. Generally, lambda is a parameter which can be estimated together with other parameters of a regression model. Has anybody experience in applying Box-Cox transformation in NONMEM?

e-mail: vpiotrov@janbe.jnj.com

From: Mats Karlsson <Mats.Karlsson@biof.uu.se>

Subject: Re: Box-Cox transformation in NONMEM

Date: 25 Sep 1998 10:20:16 -0400

We applied a Box-Cox transformation when analyzing leucopenia data that were highly skewed (Clin. Pharm&Ther 1995;57:325-34). We didn't try to estimate lambda as part of the model though.

________________________________________________________

Div. of Biopharmaceutics and Pharmacokinetics

Box 580, SE-751 23 Uppsala, Sweden

Internet: mats.karlsson@biof.uu.se

________________________________________________________

From: stuart@c255.ucsf.EDU (S.Beal)

Subject: Re: Box-Cox transformation in NONMEM

Date: 29 Sep 1998 19:01:54 -0400

We do have some experience with this. Here is a set-up using the Box-Cox power transformation and homoscedastic (uncorrelated, univariate) epsilon

error on the transformed scale. It can be modified for other transformations.

The set-up requires two user-routines, the use of which is not supported by the NPG. These routines are included.

If X gives the prediction for an observation (based on the eta values) Use the statement

Y=(X**THETA(xxx)-1)/THETA(xxx)+ERR(1)

to set Y in abbreviated code, where xxx is the index of that element of theta serving as the lambda parameter. Include the options

in the $SUBROUTINES record, and the two user routines:

subroutine contr (icall,cnt,ier1,ier2)

subroutine ccontr (icall,c1,c2,c3,ier1,ier2)

double precision c1,c2,c3,theta,y,w,one,two

y=(y**theta(xxx)-one)/theta(xxx)

call cels (c1,c2,c3,ier1,ier2)