nirs4all.data.synthetic.reconstruction.distributions module

Parameter distribution fitting and sampling for variance modeling.

Learns distributions of physical parameters from inverted samples, then samples from these distributions for synthetic generation.

class nirs4all.data.synthetic.reconstruction.distributions.DistributionResult(param_names: ~typing.List[str], distributions: ~typing.Dict[str, ~typing.Dict[str, ~typing.Any]], correlations: ~numpy.ndarray | None = None, factor_loadings: ~numpy.ndarray | None = None, transform_params: ~typing.Dict[str, ~typing.Dict[str, ~typing.Any]] = <factory>, n_samples_fitted: int = 0)[source]

Bases: object

Result of parameter distribution fitting.

param_names

Names of parameters.

Type:

List[str]

distributions

Dict of distribution parameters for each param.

Type:

Dict[str, Dict[str, Any]]

correlations

Correlation matrix of transformed parameters.

Type:

numpy.ndarray | None

factor_loadings

Low-rank factor model loadings (optional).

Type:

numpy.ndarray | None

transform_params

Parameters for transformations (log, etc.).

Type:

Dict[str, Dict[str, Any]]

n_samples_fitted

Number of samples used for fitting.

Type:

int

correlations: ndarray | None = None
distributions: Dict[str, Dict[str, Any]]
factor_loadings: ndarray | None = None
n_samples_fitted: int = 0
param_names: List[str]
summary() str[source]

Generate human-readable summary.

transform_params: Dict[str, Dict[str, Any]]
class nirs4all.data.synthetic.reconstruction.distributions.ParameterDistributionFitter(positive_params: List[str] = <factory>, bounded_params: Dict[str, ~typing.Tuple[float, float]]=<factory>, use_factor_model: bool = False, n_factors: int = 3, min_std: float = 1e-06)[source]

Bases: object

Fit distributions to parameter samples.

For positive parameters (concentrations, path_length):
  • Use log-normal or gamma distributions

  • Transform to log space for correlation modeling

For shift parameters (wl_shift):
  • Use Gaussian distributions

For bounded parameters:
  • Use truncated normal or beta distributions

positive_params

Names of parameters that must be positive.

Type:

List[str]

bounded_params

Dict of param_name -> (lower, upper) bounds.

Type:

Dict[str, Tuple[float, float]]

use_factor_model

Use low-rank factor model for correlations.

Type:

bool

n_factors

Number of factors for factor model.

Type:

int

min_std

Minimum standard deviation to avoid degenerate distributions.

Type:

float

bounded_params: Dict[str, Tuple[float, float]]
fit(params: Dict[str, ndarray], param_names: List[str] | None = None) DistributionResult[source]

Fit distributions to parameter samples.

Parameters:
  • params – Dict of parameter arrays. Each array has shape (n_samples,) or (n_samples, n_features) for multi-dimensional params.

  • param_names – Optional list of parameter names to fit.

Returns:

DistributionResult with fitted distributions.

min_std: float = 1e-06
n_factors: int = 3
positive_params: List[str]
use_factor_model: bool = False
class nirs4all.data.synthetic.reconstruction.distributions.ParameterSampler(distribution_result: DistributionResult, use_correlations: bool = True)[source]

Bases: object

Sample parameters from fitted distributions.

Uses Gaussian copula to maintain correlations between parameters while respecting marginal distributions.

distribution_result

Fitted DistributionResult.

Type:

nirs4all.data.synthetic.reconstruction.distributions.DistributionResult

use_correlations

Whether to model parameter correlations.

Type:

bool

distribution_result: DistributionResult
sample(n_samples: int, random_state: int | None = None) Dict[str, ndarray][source]

Sample parameters from fitted distributions.

Parameters:
  • n_samples – Number of samples to generate.

  • random_state – Random seed.

Returns:

Dict of parameter arrays with same structure as fit input.

sample_single(random_state: int | None = None) Dict[str, ndarray][source]

Sample a single parameter set.

use_correlations: bool = True
nirs4all.data.synthetic.reconstruction.distributions.fit_parameter_distributions(inversion_results: List['InversionResult'], component_names: List[str] | None = None, include_environmental: bool = False) Tuple[DistributionResult, ParameterSampler][source]

Fit distributions from inversion results.

Parameters:
  • inversion_results – List of InversionResult from batch inversion.

  • component_names – Optional component names for concentrations.

  • include_environmental – Whether to include environmental parameter distributions.

Returns:

Tuple of (DistributionResult, ParameterSampler).