Multiple transformations of data to Gaussian distribution

I am working with a fairly small dataset (20 < N < 40) and I would like to compute a Reference Interval. As per this field's guidelines, the preferred method is to test for normality or transform the data to a Gaussian distribution, then compute the reference interval -- as opposed to using non-parametric methods like [1].

Assuming that the data is log-normal is not sufficient to "pass" an omnibus test for normality; but applying the log and then a Box-Cox transform is. Then the final procedure looks like:

1. Take the log of each sample -- i.e. f(x) = log(x)
2. Apply a Box-Cox transform to each sample -- i.e. g(x) = boxcox(x); f(g(x)) = boxcox(log(x))
3. Compute the reference interval on transformed data assuming a normal distribution
4. Compute the inverse of Box-Cox and log transformations on the reference interval to get back the desired range

My question is: does applying both the log and the Box-Cox transformations affect the validity of the resulting reference interval?

I'd also be interested in possible side effects of multiple transformations to the data to be able to analyze it assuming a Gaussian distribution, beyond computing reference interval.

[1] Horowitz GL, Altaie S, Boyd J, Ceriotti F, Gard U, Horn P, Pesce A, Sine H, Zakowski J. Clinical and Laboratory Standards Institute (CLSI). Defining, establishing, and verifying reference intervals in the clinical laboratory; approved guidelines, 3rd ed, CLSI document C28-A3, Vol. 28, No. 3, 2008.

• It is extremely rare to find an application that needs this double transformation and for which it has any meaning. One reason for this is simple: the result depends heavily on the units in which you express the data values. When you change the units you multiply the values by a constant, which adds a constant (possibly negative) to their logarithms. Since the Box-Cox transformations typically apply, and are intended only for, positive values, the fact you can even get away with the second transformation is purely a matter of happenstance: your unit of measurement is tiny.
– whuber
Oct 2, 2017 at 19:28
• I'm not sure that I understand your point about values being positive -- in this case all measurements are positive to begin with anyway. The main reason to do the double transformation is to establish normality via omnibus test so I can apply analyses that rely on the underlying distribution being Gaussian. My question is if doing the double transformation affects the distribution in a way that could potentially skew the resulting reference interval. Oct 2, 2017 at 22:11
• Although the measurements might be positive, their logarithms do not have to be. This is why the second transformation is problematic. Extremely few analyses require that the underlying distribution be Gaussian. The double transformation therefore places a double obstacle to carrying out and justifying your analysis: it has considerable arbitrariness and it's unlikely to have a meaningful interpretation. (There are exceptions, such as when there is a unique choice of units of measurement, but that is relatively rare.)
– whuber
Oct 3, 2017 at 13:02
• All measurements are normalized in a way, so it's safe to assume that the logarithms of each sample will also be positive -- but thank you for pointing that out, I had not considered that case. I disagree about very few analyses requirement underlying distribution to be Gaussian-like and, in any case, this particular analysis does strongly prefer the underlying distribution to be Gaussian as per the field guidelines. Oct 6, 2017 at 20:02
• The point is that the only reason your double transformation works is an accident of the units of measurement you have chosen. That gives considerable reason to doubt that the transformation has any meaning whatsoever. Although you're welcome to disagree about Gaussian assumptions, you're likely failing to distinguish assumptions about the distributions of sample statistics from distributions of the underlying data. This confusion is at the base of thousands of threads on this site, so you can find lots to read about it.
– whuber
Oct 6, 2017 at 20:47

As it turns out, there is a bug in the Box-Cox implementation in Scipy which prevented me from applying the Box-Cox transformation to the original data. For more information, take a look at this: https://github.com/scipy/scipy/issues/6873

Somehow, applying the log before the Box-Cox transformation allowed me to work around this bug. But a much better workaround is to call the function like this:

scipy.stats.boxcox_normmax(X, brack=(-1.9, 1.9), method='mle')
T = scipy.stats.boxcox(X, lmax)


Then I can apply just a single transformation and the data passes the omnibus test!