Skip to main content

FittableCopula

Trait FittableCopula 

Source
pub trait FittableCopula: Copula {
    type Parameters: Clone + Debug;

    // Required methods
    fn fit(&mut self, pseudo_obs: &DMatrix<f64>) -> Result<Self::Parameters>;
    fn log_likelihood(&self, pseudo_obs: &DMatrix<f64>) -> Result<f64>;
    fn parameters(&self) -> Self::Parameters;
    fn set_parameters(&mut self, params: Self::Parameters) -> Result<()>;

    // Provided methods
    fn fit_moments(
        &mut self,
        pseudo_obs: &DMatrix<f64>,
    ) -> Result<Self::Parameters> { ... }
    fn standard_errors(
        &self,
        _pseudo_obs: &DMatrix<f64>,
    ) -> Result<Self::Parameters> { ... }
    fn confidence_intervals(
        &self,
        _pseudo_obs: &DMatrix<f64>,
        _confidence_level: f64,
    ) -> Result<(Self::Parameters, Self::Parameters)> { ... }
}
Available on crate feature estimation only.
Expand description

Trait for copulas that can be fitted to data.

This trait extends the basic Copula trait with parameter estimation capabilities. Copulas implementing this trait can learn their parameters from observed data.

§Examples

use copula_core::{ClaytonCopula, Copula, FittableCopula, GaussianCopula, to_pseudo_observations};
use rand::{rngs::StdRng, SeedableRng};

// Simulate dependent data, then fit a Gaussian copula to it.
let mut rng = StdRng::seed_from_u64(7);
let data = ClaytonCopula::new(2.0)?.sample(500, &mut rng)?;
let pseudo_obs = to_pseudo_observations(&data)?;

let mut copula = GaussianCopula::new_identity(2)?;
let params = copula.fit(&pseudo_obs)?;
println!("Fitted parameters: {:?}", params);

Required Associated Types§

Source

type Parameters: Clone + Debug

Type representing the copula’s parameters.

This could be a single value (for one-parameter families like Clayton), a matrix (for Gaussian copulas), or a more complex structure.

Required Methods§

Source

fn fit(&mut self, pseudo_obs: &DMatrix<f64>) -> Result<Self::Parameters>

Fit copula parameters to pseudo-observations using maximum likelihood estimation.

The input data should be transformed to pseudo-observations (uniform margins) before fitting. Use crate::to_pseudo_observations for this transformation.

§Arguments
  • pseudo_obs - Matrix of pseudo-observations where each row is an observation and each column is a variable. All values should be in (0,1).
§Returns

The estimated parameters.

§Errors

Returns CopulaError::OptimizationError if the optimization fails to converge. Returns CopulaError::DataError if the data is invalid.

Source

fn log_likelihood(&self, pseudo_obs: &DMatrix<f64>) -> Result<f64>

Compute the log-likelihood of the data given current parameters.

§Arguments
  • pseudo_obs - Matrix of pseudo-observations
§Returns

The log-likelihood value.

Source

fn parameters(&self) -> Self::Parameters

Get current parameters of the copula.

Source

fn set_parameters(&mut self, params: Self::Parameters) -> Result<()>

Set parameters of the copula.

§Arguments
  • params - New parameters to set
§Errors

Returns CopulaError::InvalidParameter if parameters are invalid.

Provided Methods§

Source

fn fit_moments(&mut self, pseudo_obs: &DMatrix<f64>) -> Result<Self::Parameters>

Fit parameters using method of moments.

This is often faster than MLE but may be less efficient statistically.

§Arguments
  • pseudo_obs - Matrix of pseudo-observations
§Returns

The estimated parameters.

Source

fn standard_errors( &self, _pseudo_obs: &DMatrix<f64>, ) -> Result<Self::Parameters>

Compute standard errors of parameter estimates.

This typically uses the Fisher information matrix from MLE.

§Arguments
  • pseudo_obs - The data used for estimation
§Returns

Standard errors corresponding to the parameters.

Source

fn confidence_intervals( &self, _pseudo_obs: &DMatrix<f64>, _confidence_level: f64, ) -> Result<(Self::Parameters, Self::Parameters)>

Compute confidence intervals for parameters.

§Arguments
  • pseudo_obs - The data used for estimation
  • confidence_level - Confidence level (e.g., 0.95 for 95% CI)
§Returns

Confidence intervals as (lower, upper) bounds.

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety".

Implementors§