def test_boxcox_transform(R, metadata, Lambda, threshold, zerovalue, inverse, expected): """Test the boxcox_transform.""" assert_array_almost_equal( transformation.boxcox_transform( R, metadata, Lambda, threshold, zerovalue, inverse )[0], expected, )
# # To find a suitable lambda, we will experiment with a range of values # and select the one that produces the most symmetric distribution, i.e., the # lambda associated with a value of skewness closest to zero. # To visually compare the results, the transformed data are standardized. # # .. _`Box and Cox (1964)`: https://doi.org/10.1111/j.2517-6161.1964.tb00553.x data = [] labels = [] skw = [] # Test a range of values for the transformation parameter Lambda Lambdas = np.linspace(-0.4, 0.4, 11) for i, Lambda in enumerate(Lambdas): R_, _ = transformation.boxcox_transform(R, metadata, Lambda) R_ = (R_ - np.mean(R_)) / np.std(R_) data.append(R_) labels.append("{0:.2f}".format(Lambda)) skw.append(skew(R_)) # skewness # Plot the transformed data distribution as a function of lambda plot_distribution(data, labels, skw) plt.title("Box-Cox transform") plt.tight_layout() plt.show() # Best lambda idx_best = np.argmin(np.abs(skw)) Lambda = Lambdas[idx_best]