# We now apply the Box-Cox transform using the best parameter lambda found above. R_, _ = transformation.boxcox_transform(R, metadata, Lambda) data.append((R_ - np.mean(R_)) / np.std(R_)) labels.append("Box-Cox\n($\lambda=$%.2f)" % Lambda) skw.append(skew(R_)) ############################################################################### # Normal quantile transform # ~~~~~~~~~~~~~~~~~~~~~~~~~ # At last, we apply the empirical normal quantile (NQ) transform as described in # `Bogner et al (2012)`_. # # .. _`Bogner et al (2012)`: http://dx.doi.org/10.5194/hess-16-1085-2012 R_, _ = transformation.NQ_transform(R, metadata) data.append((R_ - np.mean(R_)) / np.std(R_)) labels.append("NQ") skw.append(skew(R_)) ############################################################################### # By plotting all the results, we can notice first of all the strongly asymmetric # distribution of the original data (R) and that all transformations manage to # reduce its skewness. Among these, the Box-Cox transform (using the best parameter # lambda) and the normal quantile (NQ) transform provide the best correction. # Despite not producing a perfectly symmetric distribution, the square-root (sqrt) # transform has the strong advantage of being defined for zeros, too, while all # other transformations need an arbitrary rule for non-positive values. plot_distribution(data, labels, skw) plt.title("Data transforms")
def test_NQ_transform(R, metadata, inverse, expected): """Test the NQ_transform.""" assert_array_almost_equal( transformation.NQ_transform(R, metadata, inverse)[0], expected )