File Exchange

image thumbnail

Johnson Curve Toolbox

version 1.5 (35.9 KB) by

Fit a Johnson distribution to non-normal data



View License

by David L. Jones, PhD
Johnson (1949) developed a flexible system of distributions, based on three families of transformations, that translate an observed, non-normal variate to one conforming to the standard normal distribution. The exponential, logistic, and hyperbolic sine transformations are used to generate log-normal (SL), unbounded (SU), and bounded (SB) distributions, respectively. This allows a unique distribution to be derived for whatever combination of mean, standard deviation, skewness, and kurtosis occurs for a given set of observed data. Once a variate is appropriately transformed, probability densities and percentage points may be derived based on the standard normal curve.

This TOOLBOX is a set of MATLAB functions for working with the Johnson system of distributions to analyze non-normal, univariate data sets. Portions of it are based on my MATLAB port of Hill et al.'s (1976) AS-99 and Hill's (1976) AS-100 FORTRAN-66 code.

f_johnson_M - use moments to estimate parameters of a Johnson distribution
f_johnson_Q - use quantiles to estimate parameters of a Johnson distribution
f_johnson_aic - calculate AIC, AICc, and BIC for a Johnson distribution
f_johnson_cdf - cumulative probability density function for a Johnson distribution
f_johnson_fit - fit a Johnson distribution to observed data
f_johnson_inv - inverse of the CDF for a Johnson distribution
f_johnson_lik - negative log-likelihood for a Johnson distribution
f_johnson_pdf - probability density function for a Johnson distribution
f_johnson_rnd - generate random numbers from a Johnson distribution
f_johnson_y2z - transform Johnson variates to standard normal variates
f_johnson_z2y - transform standard normal variates to Johnson variates

Jones, D. L. 2014. The Johnson Curve Toolbox for Matlab: analysis of non-normal data using the Johnson system of distributions. College of Marine Science, University of South Florida, St. Petersburg, Florida, USA.

Some functions have detailed documentation and references that can be viewed in the Matlab editor. The 'examples' folder includes demonstrations of how to use the functions to fit biological, environmental, demographic, and financial data sets.

Hill, I. D. 1976. Algorithm AS 100: Normal-Johnson and Johnson-Normal Transformations. Journal of the Royal Statistical Society. Series C (Applied Statistics) 25(2): 190-192.

Hill, I. D., R. Hill, and R. L. Holder, 1976. Algorithm AS 99: Fitting Johnson curves by moments. Journal of the Royal Statistical Society. Series C (Applied Statistics) 25(2): 180-189.

Johnson, N. L. 1949. Systems of frequency curves generated by methods of translation. Biometrika 36: 180-189.

Comments and Ratings (9)

Sevenbo Tan

Never mind. For the second question, I am not clear about the definition about Skewness.

Sevenbo Tan

this is an excellent work. However I have some questions Hope someone can help me. Thanks a lot.

In f_johnson_M, I guess there is mistake there. In the part of "test for position relative to Lognormal Line", the w=u+1/u-1; however in Hill's Algorithm, it should be w=(x+y)^(1/3)+(x-y)^(1/3)-1. Is there anyone who find this error or maybe I missed some information.

When we use sub_jnsn(mu,sd,skew,kurt), the input variables, skew and kurt, should be rb1 and bb2 which are not equal to skew and kurt. rb1=-sqrt(skew^2/sd^6); of course the sign depends on skew... bb2=kurt/sd^4;

Stephan Oppl

Excellent work. Thanks!

Amy Kovacs

Are there any users who are willing to help solve an input error for the johnson curve syntax we keep getting? Trying to use f_johnson_fit.

Jot We

Jot We (view profile)

Excellent work. Good documentation. Helpful examples. Thanks.


How would someone take these files and use the Anderson-Darling and Chi-Squared test to test for goodness-of-fit? I can't seem to get either working with this toolbox.


Da (view profile)

Excellent work. Thanks!



Updated *.zip file


Updated documentation with expanded examples. New functions for (1) calculating likelihoods, (2) goodness-of-fit measures, and (3) generating random numbers for Johnson distributions.


updated documentation


New functions: PDF, CDF, and inverse CDF of Johnson distributions.

New examples: use Johnson Curves to analyze non-normal biological, environmental, demographic, and financial data sets.


Minor updates: (1) more accurately scales the probability densities of the Johnson variates; (2) now allows optional output of normal and Johnson probability densities.

MATLAB Release
MATLAB 8.0 (R2012b)

Download apps, toolboxes, and other File Exchange content using Add-On Explorer in MATLAB.

» Watch video