LOGNORM

Overview

The LOGNORM function computes statistics and evaluations for the lognormal distribution, a continuous probability distribution of a random variable whose logarithm is normally distributed. If a random variable X follows a lognormal distribution, then Y = \ln(X) has a normal distribution. This distribution is widely used in finance, biology, hydrology, and reliability engineering to model quantities that are inherently positive and exhibit multiplicative growth processes.

This implementation uses the SciPy library’s scipy.stats.lognorm module. For detailed documentation, see the SciPy lognorm reference. The lognormal distribution is also discussed extensively on Wikipedia.

The probability density function (PDF) for the lognormal distribution in SciPy’s standardized form is:

f(x, s) = \frac{1}{s x \sqrt{2\pi}} \exp\left(-\frac{\ln^2(x)}{2s^2}\right)

for x > 0 and shape parameter s > 0. The shape parameter s corresponds to the standard deviation of the underlying normal distribution (\sigma). The relationship between normal and lognormal distributions is fundamental: if Y \sim N(\mu, \sigma^2), then X = e^Y is lognormally distributed with s = sigma and scale = exp(mu).

Key statistical properties of the lognormal distribution include:

  • Mean: E[X] = e^{\mu + \sigma^2/2}
  • Median: e^\mu (equal to the scale parameter)
  • Variance: (e^{\sigma^2} - 1) e^{2\mu + \sigma^2}
  • Mode: e^{\mu - \sigma^2}

The distribution is positively skewed and commonly arises in phenomena governed by multiplicative processes, such as stock prices (forming the basis of the Black-Scholes model), particle size distributions, income distributions, and biological measurements.

This example function is provided as-is without any representation of accuracy.

Excel Usage

=LOGNORM(value, s, loc, scale, lognorm_method)
  • value (float, optional, default: null): Input value for PDF/CDF/SF, or probability for ICDF/ISF methods
  • s (float, optional, default: 1): Shape parameter, the standard deviation of the underlying normal distribution (must be > 0)
  • loc (float, optional, default: 0): Location parameter for shifting the distribution
  • scale (float, optional, default: 1): Scale parameter (must be > 0)
  • lognorm_method (str, optional, default: “pdf”): Statistical method to compute

Returns (float): Result of the requested method (float), or error message string.

Example 1: PDF at x=2 with s=0.954

Inputs:

value s loc scale lognorm_method
2 0.954 0 1 pdf

Excel formula:

=LOGNORM(2, 0.954, 0, 1, "pdf")

Expected output:

0.160583

Example 2: CDF at x=2 with s=0.954

Inputs:

value s loc scale lognorm_method
2 0.954 0 1 cdf

Excel formula:

=LOGNORM(2, 0.954, 0, 1, "cdf")

Expected output:

0.766255

Example 3: Inverse CDF at probability 0.736686

Inputs:

value s loc scale lognorm_method
0.736686 0.954 0 1 icdf

Excel formula:

=LOGNORM(0.736686, 0.954, 0, 1, "icdf")

Expected output:

1.82949

Example 4: Mean of lognormal distribution with s=0.954

Inputs:

s loc scale lognorm_method
0.954 0 1 mean

Excel formula:

=LOGNORM(0.954, 0, 1, "mean")

Expected output:

1.57626

Python Code

Show Code
from scipy.stats import lognorm as scipy_lognorm
import math

def lognorm(value=None, s=1, loc=0, scale=1, lognorm_method='pdf'):
    """
    Compute lognormal distribution statistics and evaluations.

    See: https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.lognorm.html

    This example function is provided as-is without any representation of accuracy.

    Args:
        value (float, optional): Input value for PDF/CDF/SF, or probability for ICDF/ISF methods Default is None.
        s (float, optional): Shape parameter, the standard deviation of the underlying normal distribution (must be > 0) Default is 1.
        loc (float, optional): Location parameter for shifting the distribution Default is 0.
        scale (float, optional): Scale parameter (must be > 0) Default is 1.
        lognorm_method (str, optional): Statistical method to compute Valid options: PDF, CDF, ICDF, SF, ISF, Mean, Median, Var, Std. Default is 'pdf'.

    Returns:
        float: Result of the requested method (float), or error message string.
    """
    try:
      valid_methods = {'pdf', 'cdf', 'icdf', 'sf', 'isf', 'mean', 'median', 'var', 'std'}

      if not isinstance(lognorm_method, str):
        return "Error: lognorm_method must be a string."

      method = lognorm_method.lower()
      if method not in valid_methods:
        return f"Error: Invalid method: {lognorm_method}. Must be one of {', '.join(sorted(valid_methods))}."

      try:
        s = float(s)
        loc = float(loc)
        scale = float(scale)
      except (ValueError, TypeError):
        return "Error: s, loc, and scale must be numbers."

      if s <= 0:
        return "Error: s must be > 0."
      if scale <= 0:
        return "Error: scale must be > 0."

      dist = scipy_lognorm(s, loc=loc, scale=scale)

      if method in {'pdf', 'cdf', 'sf', 'icdf', 'isf'}:
        if value is None:
          return f"Error: missing required argument 'value' for method '{method}'."
        try:
          val = float(value)
        except (ValueError, TypeError):
          return "Error: value must be a number."

        if method == 'pdf':
          result = dist.pdf(val)
        elif method == 'cdf':
          result = dist.cdf(val)
        elif method == 'sf':
          result = dist.sf(val)
        elif method == 'icdf':
          if not (0 <= val <= 1):
            return "Error: value (probability) must be between 0 and 1."
          result = dist.ppf(val)
        elif method == 'isf':
          if not (0 <= val <= 1):
            return "Error: value (probability) must be between 0 and 1."
          result = dist.isf(val)
      else:
        if method == 'mean':
          result = dist.mean()
        elif method == 'median':
          result = dist.median()
        elif method == 'var':
          result = dist.var()
        elif method == 'std':
          result = dist.std()

      result = float(result)
      if math.isnan(result):
        return "Error: Result is NaN."
      if math.isinf(result):
        return "Error: Result is infinite."

      return result

    except Exception as e:
      return f"Error: {str(e)}"

Online Calculator

Input value for PDF/CDF/SF, or probability for ICDF/ISF methods
Shape parameter, the standard deviation of the underlying normal distribution (must be > 0)
Location parameter for shifting the distribution
Scale parameter (must be > 0)
Statistical method to compute