environmentaltools.temporal.negative_log_likelihood
- environmentaltools.temporal.negative_log_likelihood(par, df, imod, param, t_expans)[source]
Compute negative log-likelihood for time-varying distribution parameters.
Objective function for maximum likelihood estimation of non-stationary distribution models. Handles single, mixed, and piecewise distributions with time-varying parameters expanded using Fourier series.
- Parameters:
par (array-like) – Vector of parameters to optimize, containing Fourier coefficients for each distribution parameter
df (pd.DataFrame) – Time series data with columns for the variable and normalized time ‘n’
imod (tuple) – Fourier mode orders for each parameter component
param (dict) –
Configuration dictionary with keys:
- ’var’str
Variable name to fit
- ’fun’dict
scipy.stats distribution objects
- ’no_fun’int
Number of distribution functions
- ’reduction’bool
Whether using reduced parameter space for mixed models
- ’no_param’list
Number of parameters for each distribution
- ’constraints’bool
Whether to apply matching constraints
t_expans (np.ndarray) – Time expansion matrix for Fourier basis functions
- Returns:
Negative log-likelihood value (lower is better). Returns 1e10 for invalid parameter combinations.
- Return type:
float
Notes
The function computes NLLF as: -sum(log(pdf(x|theta(t))))
For reduced mixed models: - Body distribution for u1 <= x <= u2 - Lower tail (GPD) for x < u1 - Upper tail (GPD) for x > u2
Returns 1e10 (failure) if: - Parameters contain NaN - GPD shape parameter creates invalid support - Threshold ordering violated (u1 >= u2) - Negative values where positive required
The function is designed for use with scipy.optimize minimizers.
See also
get_paramsExpands Fourier coefficients to time-varying parameters
fitMain optimization wrapper
params_t_expansionConstructs Fourier basis matrix
Examples
>>> # Used internally by optimization routines >>> from scipy.optimize import minimize >>> result = minimize( ... negative_log_likelihood, ... initial_params, ... args=(df, mode, param, t_expans), ... method='L-BFGS-B' ... )