Drought Metrics¶
SSI¶
SSI
dataclass
¶
SSI(dist: Union[str, ContinuousDist] = 'gamma', timescale: int = 12, fit_freq: str | None = None, fit_window: int = 0, prob_zero: bool = False, normal_scores_transform: bool = False, agg_func: Literal['sum', 'mean'] = 'sum')
Independent SSI calculator that separates training and scoring phases.
Uses the original spei.SI class internally for distribution fitting, then applies those fitted distributions to new data.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
dist
|
str or ContinuousDist
|
Probability distribution for SSI calculation. Can be string name: 'gamma', 'lognorm', 'pearson3', 'weibull', etc. Or scipy distribution object. |
'gamma'
|
timescale
|
int
|
Rolling window size for temporal aggregation. |
12
|
fit_freq
|
str
|
Frequency for seasonal fitting ('M' for monthly, 'D' for daily). If None, fits single distribution to entire dataset. |
None
|
fit_window
|
int
|
Moving window for distribution fitting. |
0
|
prob_zero
|
bool
|
Whether to handle zero probability separately. |
False
|
normal_scores_transform
|
bool
|
Whether to use normal scores transform instead of parametric fitting. |
False
|
agg_func
|
(sum, mean)
|
Aggregation function for rolling window. |
'sum'
|
Examples:
>>> # Basic usage with default gamma distribution
>>> ssi = SSI()
>>> ssi.fit(training_data)
>>> ssi_values = ssi.transform(new_data)
>>> # Using different distribution
>>> ssi = SSI(dist='lognorm', timescale=6)
>>> ssi.fit(training_data)
fitted_distributions
property
¶
Access to fitted distributions (read-only).
fit ¶
Fit distributions using training data.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
training_series
|
Series
|
Time series data for fitting distributions |
required |
Returns:
| Type | Description |
|---|---|
SSI
|
Self for method chaining |
transform ¶
Calculate SSI values for new data using fitted distributions.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
new_series
|
Series
|
New time series data to transform |
required |
Returns:
| Type | Description |
|---|---|
Series
|
SSI values for the new series |
fit_transform ¶
Fit on training data and transform new data in one step.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
training_series
|
Series
|
Data for fitting distributions |
required |
new_series
|
Series
|
Data to transform. If None, transforms training_series. |
None
|
Returns:
| Type | Description |
|---|---|
Series
|
SSI values |
get_training_ssi ¶
Get SSI values for the training data.
Returns:
| Type | Description |
|---|---|
Series
|
SSI values for training data |
Functions¶
get_drought_metrics ¶
Calculate drought metrics from standardized supply index (SSI) time series.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
ssi
|
Series
|
Time series of standardized supply index values |
required |
end_drought_threshold_months
|
int
|
Number of consecutive days with SSI > 0 required to end a critical drought |
3
|
Returns:
| Type | Description |
|---|---|
DataFrame
|
DataFrame containing drought metrics for each identified drought event |
Distribution Utilities¶
distributions ¶
Distribution management for drought analysis.
This module provides utilities for working with probability distributions in drought analysis, including a registry of common distributions and helper functions for distribution selection.
get_distribution ¶
Get a distribution object by name or pass through if already a distribution.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
name
|
str or ContinuousDist
|
Distribution name (e.g., 'gamma') or scipy distribution object. |
required |
Returns:
| Type | Description |
|---|---|
ContinuousDist
|
Scipy continuous distribution object. |
Raises:
| Type | Description |
|---|---|
ValueError
|
If distribution name is not recognized. |
Examples:
list_distributions ¶
List available distributions for drought analysis.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
include_info
|
bool
|
If True, returns detailed information about each distribution. If False, returns only distribution names. |
False
|
Returns:
| Type | Description |
|---|---|
list or dict
|
List of distribution names or dict with detailed information. |
Examples:
get_distribution_info ¶
Get detailed information about a specific distribution.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
name
|
str
|
Distribution name. |
required |
Returns:
| Type | Description |
|---|---|
dict
|
Dictionary with keys: name, description, best_for, parameters. |
Raises:
| Type | Description |
|---|---|
ValueError
|
If distribution name is not recognized. |
Examples:
print_distribution_guide ¶
validate_distribution ¶
Validate and normalize a distribution specification.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
dist
|
str or ContinuousDist
|
Distribution name or scipy distribution object. |
required |
Returns:
| Type | Description |
|---|---|
ContinuousDist
|
Validated scipy distribution object. |
Raises:
| Type | Description |
|---|---|
ValueError
|
If distribution is invalid. |
TypeError
|
If distribution type is not supported. |
Examples: