Skip to Content

PARETO

Overview

The PARETO function provides a unified interface to the main methods of the Pareto distribution, including PDF, CDF, inverse CDF, survival function, and distribution statistics.

There are no similar native Excel functions for the Pareto distribution. The Python function in Excel here provides full support for the Pareto distribution, including PDF, CDF, quantile, survival, and distribution statistics.

The Pareto distribution is commonly used in economics, finance, and natural sciences to model phenomena with heavy tails, such as income distribution and city sizes. The PDF is given by:

f(x,b,loc,scale)=bscaleb(xloc)b+1f(x, b, loc, scale) = \frac{b \cdot scale^b}{(x - loc)^{b+1}}

for xloc+scalex \geq loc + scale, b>0b > 0, scale>0scale > 0.

The Pareto distribution is a continuous probability distribution characterized by its heavy tails, which make it suitable for modeling extreme values. The shape parameter (b) determines the steepness of the distribution, while the location (loc) and scale (scale) parameters shift and stretch the distribution, respectively.

Unlike the normal distribution, the Pareto distribution does not always have a finite mean or variance, depending on the value of the shape parameter (b). For example:

  • The mean exists if b>1b > 1.
  • The variance exists if b>2b > 2.

For more details, see the official SciPy documentation.

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

Usage

To use the function in Excel:

=PARETO(value, b, [loc], [scale], [method])
  • value (float, required for pdf, cdf, icdf, sf, isf):
    • For pdf, cdf, sf: the value xx at which to evaluate the function (must be loc+scale\geq loc + scale)
    • For icdf, isf: the probability qq (must be between 0 and 1)
    • For mean, median, var, std: skip parameter
  • b (float, required): Shape parameter. Must be >0> 0.
  • loc (float, optional, default=0.0): Location parameter.
  • scale (float, optional, default=1.0): Scale parameter. Must be >0> 0.
  • method (string, optional, default=“pdf”): One of pdf, cdf, icdf, sf, isf, mean, median, var, std.
MethodDescriptionOutput
pdfProbability Density Function: f(x)f(x), the likelihood of a specific value xx.Density at xx
cdfCumulative Distribution Function: P(Xx)P(X \leq x), the probability that XX is less than or equal to xx.Probability
icdfInverse CDF (Quantile Function): Returns xx such that P(Xx)=qP(X \leq x) = q for a given probability qq.Value xx
sfSurvival Function: P(X>x)P(X > x), the probability that XX is greater than xx.Probability
isfInverse Survival Function: Returns xx such that P(X>x)=qP(X > x) = q for a given probability qq.Value xx
meanMean (expected value) of the distribution.Mean value
medianMedian of the distribution.Median value
varVariance of the distribution.Variance
stdStandard deviation of the distribution.Standard deviation

The function returns a single value (float): the result of the requested method, or an error message (string) if the input is invalid.

Examples

Example 1: PDF at x=2

Inputs:

valueblocscalemethod
2301pdf

Excel formula:

=PARETO(2, 3, 0, 1, "pdf")

Expected output:

Result
0.1875

Example 2: CDF at x=2

Inputs:

valueblocscalemethod
2301cdf

Excel formula:

=PARETO(2, 3, 0, 1, "cdf")

Expected output:

Result
0.875

Example 3: Inverse CDF (Quantile) at q=0.875

Inputs:

valueblocscalemethod
0.875301icdf

Excel formula:

=PARETO(0.875, 3, 0, 1, "icdf")

Expected output:

Result
2.0

Example 4: Mean of the distribution

Inputs:

valueblocscalemethod
301mean

Excel formula:

=PARETO( , 3, 0, 1, "mean")

Expected output:

Result
1.5

Python Code

from scipy.stats import pareto as scipy_pareto import math def pareto(value=None, b=1.0, loc=0.0, scale=1.0, method="pdf"): """ Generalized Pareto distribution function supporting multiple methods. Args: value: Input value (float), required for methods except 'mean', 'median', 'var', 'std'. b: Shape parameter (float, >0). loc: Location parameter (float, default: 0.0). scale: Scale parameter (float, default: 1.0, >0). method: Which method to compute (str): 'pdf', 'cdf', 'icdf', 'sf', 'isf', 'mean', 'median', 'var', 'std'. Default is 'pdf'. Returns: Result of the requested method (float or str), or an error message (str) if input is invalid. This example function is provided as-is without any representation of accuracy. """ valid_methods = ['pdf', 'cdf', 'icdf', 'sf', 'isf', 'mean', 'median', 'var', 'std'] if not isinstance(method, str) or method.lower() not in valid_methods: return f"Invalid method: {method}. Must be one of {valid_methods}." method = method.lower() try: b = float(b) loc = float(loc) scale = float(scale) except Exception: return "Invalid input: b, loc, and scale must be numbers." if b <= 0: return "Invalid input: b must be > 0." if scale <= 0: return "Invalid input: scale must be > 0." dist = scipy_pareto(b, loc, scale) # Methods that require value if method in ['pdf', 'cdf', 'icdf', 'sf', 'isf']: if value is None: return f"Invalid input: missing required argument 'value' for method '{method}'." try: value = float(value) except Exception: return "Invalid input: value must be a number." if method in ['pdf', 'cdf', 'sf'] and value < loc + scale: return "Invalid input: value must be >= loc + scale for this method." try: if method == 'pdf': result = dist.pdf(value) elif method == 'cdf': result = dist.cdf(value) elif method == 'sf': result = dist.sf(value) elif method == 'isf': if not (0 <= value <= 1): return "Invalid input: value (probability) must be between 0 and 1 for isf." result = dist.isf(value) elif method == 'icdf': if not (0 <= value <= 1): return "Invalid input: value (probability) must be between 0 and 1 for icdf." result = dist.ppf(value) except Exception as e: return f"scipy.stats.pareto error: {e}" if isinstance(result, float): if math.isnan(result): return "Result is NaN (not a number)" if math.isinf(result): return "inf" if result > 0 else "-inf" return result # Methods that do not require value try: if method == 'mean': result = dist.mean() elif method == 'median': result = dist.median() elif method == 'var': result = dist.var() elif method == 'std': result = dist.std() except Exception as e: return f"scipy.stats.pareto error: {e}" if isinstance(result, float): if math.isnan(result): return "Result is NaN (not a number)" if math.isinf(result): return "inf" if result > 0 else "-inf" return result

Live Notebook

Edit this function in a live notebook.

Live Demo

Last updated on