From: "Piotrovskij, Vladimir [JanBe]" <>

Subject: Box-Cox transformation in NONMEM

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

Dear NONMEM users,

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?

Kind regards,



Vladimir Piotrovsky

Clinical Pharmacokinetics

Janssen Research Foundation

2340 Beerse, Belgium



From: Mats Karlsson <>

Subject: Re: Box-Cox transformation in NONMEM

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

Dear Vladimir,

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.

Best regards,



Mats Karlsson, PhD

Uppsala University

Div. of Biopharmaceutics and Pharmacokinetics

Dept. of Pharmacy/

Box 580, SE-751 23 Uppsala, Sweden


Phone: +46 18 471 41 05

Fax: +46 18 471 40 03



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

Subject: Re: Box-Cox transformation in NONMEM

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

Subject: Transform-both-sides

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


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)

double precision cnt

call ncontr (2,cnt,ier1,ier2)



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

parameter (lth=40,lvr=30)

common /rocm0/ theta (lth)

common /rocm4/ y

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

dimension c2(*),c3(lvr,*)

data one,two/1.,2./

if (icall.le.1) return



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





in the NONMEM executable.