WEIBULL_MIN
Overview
The WEIBULL_MIN
function provides a unified interface to the main methods of the Weibull minimum distribution, including PDF, CDF, inverse CDF, survival function, and distribution statistics.
Excel provides the WEIBULL.DIST function, which can compute the PDF and CDF for the Weibull distribution. However, the Python function in Excel provided here supports additional features such as the inverse CDF (quantile), survival function, inverse survival function, and distribution statistics (mean, median, variance, standard deviation).
The Weibull minimum distribution is widely used in reliability engineering, survival analysis, and extreme value theory. The PDF is given by:
for , , .
The shape parameter (c
) controls the form of the distribution, while the location (loc
) and scale (scale
) parameters shift and stretch the distribution, respectively.
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:
=WEIBULL_MIN(value, c, [loc], [scale], [method])
value
(float, required for pdf, cdf, icdf, sf, isf):- For
pdf
,cdf
,sf
: the value at which to evaluate the function (must be ) - For
icdf
,isf
: the probability (must be between 0 and 1) - For
mean
,median
,var
,std
: skip parameter
- For
c
(float, required): Shape parameter. Must be .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
.
Method | Description | Output |
---|---|---|
pdf | Probability Density Function: , the likelihood of a specific value . | Density at |
cdf | Cumulative Distribution Function: , the probability that is less than or equal to . | Probability |
icdf | Inverse CDF (Quantile Function): Returns such that for a given probability . | Value |
sf | Survival Function: , the probability that is greater than . | Probability |
isf | Inverse Survival Function: Returns such that for a given probability . | Value |
mean | Mean (expected value) of the distribution. | Mean value |
median | Median of the distribution. | Median value |
var | Variance of the distribution. | Variance |
std | Standard 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:
value | c | loc | scale | method |
---|---|---|---|---|
2 | 1.5 | 0 | 1 |
Excel formula:
=WEIBULL_MIN(2, 1.5, 0, 1, "pdf")
Expected output:
Result |
---|
0.125382 |
Example 2: CDF at x=2
Inputs:
value | c | loc | scale | method |
---|---|---|---|---|
2 | 1.5 | 0 | 1 | cdf |
Excel formula:
=WEIBULL_MIN(2, 1.5, 0, 1, "cdf")
Expected output:
Result |
---|
0.940894 |
Example 3: Inverse CDF (Quantile) at q=0.940894
Inputs:
value | c | loc | scale | method |
---|---|---|---|---|
0.940894 | 1.5 | 0 | 1 | icdf |
Excel formula:
=WEIBULL_MIN(0.940894, 1.5, 0, 1, "icdf")
Expected output:
Result |
---|
2.0 |
Example 4: Mean of the distribution
Inputs:
value | c | loc | scale | method |
---|---|---|---|---|
1.5 | 0 | 1 | mean |
Excel formula:
=WEIBULL_MIN( , 1.5, 0, 1, "mean")
Expected output:
Result |
---|
0.902745 |
Python Code
from scipy.stats import weibull_min as scipy_weibull_min
import math
def weibull_min(value=None, c=1.0, loc=0.0, scale=1.0, method="pdf"):
"""
Weibull minimum distribution function supporting multiple methods.
Args:
value: Input value (float), required for methods except 'mean', 'median', 'var', 'std'.
c: 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:
c = float(c)
loc = float(loc)
scale = float(scale)
except Exception:
return "Invalid input: c, loc, and scale must be numbers."
if c <= 0:
return "Invalid input: c must be > 0."
if scale <= 0:
return "Invalid input: scale must be > 0."
dist = scipy_weibull_min(c, 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:
return "Invalid input: value must be >= loc 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.weibull_min 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.weibull_min 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 .