CAUCHY
Overview
The CAUCHY
function provides a unified interface to the main methods of the Cauchy distribution, including PDF, CDF, inverse CDF, survival function, and distribution statistics. The Cauchy distribution has heavier tails compared to the normal distribution, meaning extreme values are more likely. Unlike the normal distribution, the mean and variance of the Cauchy distribution are undefined due to its heavy tails. The median and mode of the distribution are equal to the location parameter (loc
).
There are no similar native Excel functions for the Cauchy distribution. The Python function in Excel here provides full support for the Cauchy distribution, including PDF, CDF, quantile, survival, and distribution statistics.
The Cauchy distribution is a continuous probability distribution with the following PDF:
for .
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:
=CAUCHY(value, [loc], [scale], [method])
value
(float, required for pdf, cdf, icdf, sf, isf):- For
pdf
,cdf
,sf
: the value at which to evaluate the function - For
icdf
,isf
: the probability (must be between 0 and 1) - For
mean
,median
,var
,std
: skip parameter
- For
loc
(float, optional, default=0.0): Location parameter.scale
(float, optional, default=1.0): Scale parameter. Must be .method
(string, optional, default=“pdf”): One ofpdf
,cdf
,icdf
,sf
,isf
,mean
,median
,var
,std
.
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:
value | loc | scale | method |
---|---|---|---|
2 | 0 | 1 |
Excel formula:
=CAUCHY(2, 0, 1, "pdf")
Expected output:
Result |
---|
0.06366 |
Example 2: CDF at x=2
Inputs:
value | loc | scale | method |
---|---|---|---|
2 | 0 | 1 | cdf |
Excel formula:
=CAUCHY(2, 0, 1, "cdf")
Expected output:
Result |
---|
0.85242 |
Example 3: Inverse CDF (Quantile) at q=0.85242
Inputs:
value | loc | scale | method |
---|---|---|---|
0.85242 | 0 | 1 | icdf |
Excel formula:
=CAUCHY(0.85242, 0, 1, "icdf")
Expected output:
Result |
---|
2.00006 |
Example 4: Median of the distribution
Inputs:
value | loc | scale | method |
---|---|---|---|
0 | 1 | median |
Excel formula:
=CAUCHY( , 0, 1, "median")
Expected output:
Result |
---|
0.0 |
Python Code
from scipy.stats import cauchy as scipy_cauchy
import math
def cauchy(value=None, loc=0.0, scale=1.0, method="pdf"):
"""
Cauchy distribution function supporting multiple methods.
Args:
value: Input value (float), required for methods except 'mean', 'median', 'var', 'std'.
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:
loc = float(loc)
scale = float(scale)
except Exception:
return "Invalid input: loc and scale must be numbers."
if scale <= 0:
return "Invalid input: scale must be > 0."
dist = scipy_cauchy(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."
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.cauchy 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 round(result, 5)
# 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.cauchy 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 round(result, 5)
Live Notebook
Edit this function in a live notebook .