Box-Cox transformations for linexp fits

R
advanced
gastric emptying
nonlinear fit
nlme
Author

Dieter Menne

Published

November 27, 2024

The coefficients of linexp fits to gastric emptying curves are generally used in mixed-models to analyze group and meal difference. The distribution of the extracted parameters is often highly skewed, so before using linear models or estimates of reference ranges with functions in package referenceInterval or Hmisc, a transformation might be required.

From a large corpus of gastric emptying curves analyzed with nonlinear fits of the linexp function, the following recommendations for transformation were obtained using the boxcox and the logtrans function in package MASS:

Linexp parameter tempt

Stable recommendation: log(tempt)

Overshoot parameter kappa

Try the logarithmic transformation log(kappa), but make sure that you have no non-positive values of kappa. Values of kappa near zero anyway are not very useful, so a prior when using Stan to fit might help. Even better, fit the logarithm of both kappa and tempt with nlme instead of the untransformed variables.

Half-emptying time t50

Stable recommendation: t50^(-0.5), or 1/sqrt(t50)

Initial volumeParameter v0

Surprising, and possibly not stable: v0^(-1), or 1/v0

I had expected that no transformation would be required, but in the existing records the tails were quit asymmetric due to early emptying.

Slope in t50 slope_t50

Try : log(slope_t50)

The log transformation is moderately stable, an offset might be required.

Caveat

A transformation is required if you want to determine reference intervals, and you have data from fewer than 120 subjects or patients, so that the non-parametric method cannot be used. The robust method proposed in the official guideline C28-A3 gets around problems with outliers, but cannot graciously handle systematic skewness. For example, with untransformed t50 and tempt, negative lower limits for reference ranges are not uncommon.

If you use lme or lmer to compare between treatment averages, using transformations is not as important, since mixed models behave reasonably with moderate skewness.

The above are recommendations - your data may need different transformations. Use MASS::boxcox for interactive checks or one of the functions in package car. However, do not go overboard; if you find a power transformation of -0.6 or -0.7 for t50, check if the above rounded suggestion of -0.5 would also be reasonable. Using arbitrary transformation always runs into the risk of giving irreproducible result.