Smyth-Broby Covariance

PortfolioOptimisers.SmythBrobyCovarianceType
struct SmythBrobyCovariance{T1, T2, T3, T4, T5, T6, T7, T8, T9, T10} <:
       BaseSmythBrobyCovariance
    me::T1
    ve::T2
    pdm::T3
    threshold::T4
    c1::T5
    c2::T6
    c3::T7
    n::T8
    alg::T9
    threads::T10
end

A flexible container type for configuring and applying Smyth-Broby covariance estimators in PortfolioOptimisers.jl.

SmythBrobyCovariance encapsulates all components required for Smyth-Broby-based covariance or correlation estimation, including the expected returns estimator, variance estimator, positive definite matrix estimator, algorithm parameters, and the specific Smyth-Broby algorithm variant. This enables modular and extensible workflows for robust covariance estimation using Smyth-Broby statistics.

Fields

  • me: Expected returns estimator.
  • ve: Variance estimator.
  • pdm: Positive definite matrix estimator.
  • threshold: Threshold parameter for Smyth-Broby covariance computation.
  • c1: Zone of confusion parameter.
  • c2: Zone of indecision lower bound.
  • c3: Zone of indecision upper bound.
  • n: Exponent parameter for the Smyth-Broby kernel.
  • alg: Smyth-Broby covariance algorithm variant.
  • threads: Parallel execution strategy.

Constructor

SmythBrobyCovariance(; me::AbstractExpectedReturnsEstimator = SimpleExpectedReturns(),
                     ve::StatsBase.CovarianceEstimator = SimpleVariance(),
                     pdm::Union{Nothing, <:Posdef} = Posdef(), threshold::Real = 0.5,
                     c1::Real = 0.5, c2::Real = 0.5, c3::Real = 4, n::Real = 2,
                     alg::SmythBrobyCovarianceAlgorithm = SmythBrobyGerber1(),
                     threads::FLoops.Transducers.Executor = ThreadedEx())

Keyword arguments correspond to the fields above.

Validation

  • 0 < threshold < 1.
  • 0 < c1 <= 1.
  • 0 < c2 <= 1.
  • c3 > c2.

Examples

julia> ce = SmythBrobyCovariance()
SmythBrobyCovariance
         me | SimpleExpectedReturns
            |   w | nothing
         ve | SimpleVariance
            |          me | SimpleExpectedReturns
            |             |   w | nothing
            |           w | nothing
            |   corrected | Bool: true
        pdm | Posdef
            |   alg | UnionAll: NearestCorrelationMatrix.Newton
  threshold | Float64: 0.5
         c1 | Float64: 0.5
         c2 | Float64: 0.5
         c3 | Int64: 4
          n | Int64: 2
        alg | SmythBrobyGerber1()
    threads | Transducers.ThreadedEx{@NamedTuple{}}: Transducers.ThreadedEx()

Related

source
Statistics.covMethod
cov(ce::SmythBrobyCovariance, X::AbstractMatrix; dims::Int = 1, mean = nothing, kwargs...)

Compute the Smyth-Broby covariance matrix.

This method computes the Smyth-Broby covariance matrix for the input data matrix X. The mean and standard deviation vectors are computed using the estimator's expected returns and variance estimators. The Smyth-Broby covariance is then computed via smythbroby.

Arguments

  • ce: Smyth-Broby covariance estimator.

    • ce::SmythBrobyCovariance{<:Any, <:Any, <:Any, <:Any, <:Any, <:Any, <:Any, <:Any, <:UnNormalisedSmythBrobyCovarianceAlgorithm, <:Any}: Compute the unnormalised Smyth-Broby covariance matrix.
    • ce::SmythBrobyCovariance{<:Any, <:Any, <:Any, <:Any, <:Any, <:Any, <:Any, <:Any, <:NormalisedSmythBrobyCovarianceAlgorithm, <:Any}: Compute the normalised Smyth-Broby covariance matrix.
  • X: Data matrix (observations × assets).

  • dims: Dimension along which to compute the covariance.

  • mean: Optional mean vector for centering. If not provided, computed using ce.me.

  • kwargs...: Additional keyword arguments passed to the mean and standard deviation estimators.

Returns

  • sigma::Matrix{<:Real}: The Smyth-Broby covariance matrix.

Validation

  • dims is either 1 or 2.

Related

source
Statistics.corMethod
cor(ce::SmythBrobyCovariance, X::AbstractMatrix; dims::Int = 1, mean = nothing, kwargs...)

Compute the Smyth-Broby correlation matrix.

This method computes the Smyth-Broby correlation matrix for the input data matrix X. The mean and standard deviation vectors are computed using the estimator's expected returns and variance estimators. The Smyth-Broby correlation is then computed via smythbroby.

Arguments

  • ce: Smyth-Broby covariance estimator.

    • ce::SmythBrobyCovariance{<:Any, <:Any, <:Any, <:Any, <:Any, <:Any, <:Any, <:Any, <:UnNormalisedSmythBrobyCovarianceAlgorithm, <:Any}: Compute the unnormalised Smyth-Broby correlation matrix.
    • ce::SmythBrobyCovariance{<:Any, <:Any, <:Any, <:Any, <:Any, <:Any, <:Any, <:Any, <:NormalisedSmythBrobyCovarianceAlgorithm, <:Any}: Compute the normalised Smyth-Broby correlation matrix.
  • X: Data matrix (observations × assets).

  • dims: Dimension along which to compute the correlation.

  • mean: Optional mean vector for centering. If not provided, computed using ce.me.

  • kwargs...: Additional keyword arguments passed to the mean and standard deviation estimators.

Returns

  • rho::Matrix{<:Real}: The Smyth-Broby correlation matrix.

Validation

  • dims is either 1 or 2.

Related

source
PortfolioOptimisers.SmythBrobyCovarianceAlgorithmType
abstract type SmythBrobyCovarianceAlgorithm <: AbstractMomentAlgorithm end

Abstract supertype for all Smyth-Broby covariance algorithm types in PortfolioOptimisers.jl.

All concrete types implementing specific Smyth-Broby covariance algorithms should subtype SmythBrobyCovarianceAlgorithm. This enables flexible extension and dispatch of Smyth-Broby covariance routines.

These types are used to specify the algorithm when constructing a SmythBrobyCovariance estimator.

Related

source
PortfolioOptimisers.UnNormalisedSmythBrobyCovarianceAlgorithmType
abstract type UnNormalisedSmythBrobyCovarianceAlgorithm <: SmythBrobyCovarianceAlgorithm end

Abstract supertype for all unnormalised Smyth-Broby covariance algorithm types.

Concrete types implementing unnormalised Smyth-Broby covariance algorithms should subtype UnNormalisedSmythBrobyCovarianceAlgorithm.

Related

source
PortfolioOptimisers.NormalisedSmythBrobyCovarianceAlgorithmType
abstract type NormalisedSmythBrobyCovarianceAlgorithm <: SmythBrobyCovarianceAlgorithm end

Abstract supertype for all normalised Smyth-Broby covariance algorithm types. These Z-transform the data before applying the Smyth-Broby covariance algorithm.

Concrete types implementing normalised Smyth-Broby covariance algorithms should subtype NormalisedSmythBrobyCovarianceAlgorithm.

Related

source
PortfolioOptimisers.sb_deltaFunction
sb_delta(xi::Real, xj::Real, mui::Real, muj::Real, sigmai::Real, sigmaj::Real, c1::Real,
         c2::Real, c3::Real, n::Real)

Smyth-Broby kernel function for covariance and correlation computation.

This function computes the kernel value for a pair of asset returns, applying the Smyth-Broby logic for zones of confusion and indecision. It is used to aggregate positive and negative co-movements in Smyth-Broby covariance algorithms.

Arguments

  • xi: Return for asset i.
  • xj: Return for asset j.
  • mui: Mean for asset i.
  • muj: Mean for asset j.
  • sigmai: Standard deviation for asset i.
  • sigmaj: Standard deviation for asset j.
  • c1: Zone of confusion parameter.
  • c2: Zone of indecision lower bound.
  • c3: Zone of indecision upper bound.
  • n: Exponent parameter for the kernel.

Returns

  • score::Real: The computed score for the pair (xi, xj).

Details

  1. If both returns are within the zone of confusion (abs(xi) < sigmai * c1 and abs(xj) < sigmaj * c1), returns zero.
  2. Computes centered and scaled returns ri, rj.
  3. If both are within the zone of indecision (ri < c2 && rj < c2) or both are above the upper bound (ri > c3 && rj > c3), returns zero.
  4. Otherwise, returns sqrt((1 + ri) * (1 + rj)) / (1 + abs(ri - rj)^n).

Related

source
PortfolioOptimisers.smythbrobyMethod
smythbroby(ce::SmythBrobyCovariance{<:Any, <:Any, <:Any, <:Any, <:Any, <:Any, <:Any, <:Any,
                                    <:SmythBroby0, <:Any}, X::AbstractMatrix,
           mean_vec::AbstractArray, std_vec::AbstractArray)

Implements the original Smyth-Broby covariance/correlation algorithm (unnormalised variant).

This method computes the Smyth-Broby correlation or covariance matrix for the input data matrix X using the original SmythBroby0 algorithm. The computation is based on thresholding the data, applying the Smyth-Broby kernel, and aggregating positive and negative co-movements.

Arguments

  • ce: Smyth-Broby covariance estimator configured with the SmythBroby0 algorithm.
  • X: Data matrix (observations × assets).
  • mean_vec: Vector of means for each asset, used for centering.
  • std_vec: Vector of standard deviations for each asset, used for scaling and thresholding.

Returns

  • rho::Matrix{<:Real}: The Smyth-Broby correlation matrix, projected to be positive definite using the estimator's pdm field.

Details

The algorithm proceeds as follows:

  1. For each pair of assets (i, j), iterate over all observations.
  2. For each observation, compute the centered and scaled returns for assets i and j.
  3. Apply the threshold to classify joint positive and negative co-movements.
  4. Use the sb_delta kernel to accumulate positive (pos) and negative (neg) contributions.
  5. The correlation is computed as (pos - neg) / (pos + neg) if the denominator is nonzero, otherwise zero.
  6. The resulting matrix is projected to the nearest positive definite matrix using posdef!.

Related

source
PortfolioOptimisers.smythbrobyMethod
smythbroby(ce::SmythBrobyCovariance{<:Any, <:Any, <:Any, <:Any, <:Any, <:Any, <:Any, <:Any,
                                    <:NormalisedSmythBroby0, <:Any}, X::AbstractMatrix)

Implements the original Smyth-Broby covariance/correlation algorithm on Z-transformed data (normalised variant).

This method computes the Smyth-Broby correlation or covariance matrix for the input data matrix X using the original NormalisedSmythBroby0 algorithm. The computation is performed on data that has already been Z-transformed (mean-centered and standardised), and is based on thresholding the data, applying the Smyth-Broby kernel, and aggregating positive and negative co-movements.

Arguments

  • ce: Smyth-Broby covariance estimator configured with the NormalisedSmythBroby0 algorithm.
  • X: Z-transformed data matrix (observations × assets).

Returns

  • rho::Matrix{<:Real}: The Smyth-Broby correlation matrix, projected to be positive definite using the estimator's pdm field.

Details

The algorithm proceeds as follows:

  1. For each pair of assets (i, j), iterate over all observations.
  2. For each observation, use the Z-transformed returns for assets i and j.
  3. Apply the threshold to classify joint positive and negative co-movements.
  4. Use the sb_delta kernel (with mean 0 and standard deviation 1) to accumulate positive (pos) and negative (neg) contributions.
  5. The correlation is computed as (pos - neg) / (pos + neg) if the denominator is nonzero, otherwise zero.
  6. The resulting matrix is projected to the nearest positive definite matrix using posdef!.

Related

source
PortfolioOptimisers.smythbrobyMethod
smythbroby(ce::SmythBrobyCovariance{<:Any, <:Any, <:Any, <:Any, <:Any, <:Any, <:Any, <:Any,
                                    <:NormalisedSmythBroby0, <:Any}, X::AbstractMatrix)

Implements the original Smyth-Broby covariance/correlation algorithm on Z-transformed data (normalised variant).

This method computes the Smyth-Broby correlation or covariance matrix for the input data matrix X using the original NormalisedSmythBroby0 algorithm. The computation is performed on data that has already been Z-transformed (mean-centered and standardised), and is based on thresholding the data, applying the Smyth-Broby kernel, and aggregating positive and negative co-movements.

Arguments

  • ce: Smyth-Broby covariance estimator configured with the NormalisedSmythBroby0 algorithm.
  • X: Z-transformed data matrix (observations × assets).

Returns

  • rho::Matrix{<:Real}: The Smyth-Broby correlation matrix, projected to be positive definite using the estimator's pdm field.

Details

The algorithm proceeds as follows:

  1. For each pair of assets (i, j), iterate over all observations.
  2. For each observation, use the Z-transformed returns for assets i and j.
  3. Apply the threshold to classify joint positive and negative co-movements.
  4. Use the sb_delta kernel (with mean 0 and standard deviation 1) to accumulate positive (pos) and negative (neg) contributions.
  5. The correlation is computed as (pos - neg) / (pos + neg) if the denominator is nonzero, otherwise zero.
  6. The resulting matrix is projected to the nearest positive definite matrix using posdef!.

Related

source
PortfolioOptimisers.smythbrobyMethod
smythbroby(ce::SmythBrobyCovariance{<:Any, <:Any, <:Any, <:Any, <:Any, <:Any, <:Any, <:Any,
                                    <:NormalisedSmythBroby1, <:Any}, X::AbstractMatrix)

Implements the first variant of the Smyth-Broby covariance/correlation algorithm on Z-transformed data (normalised).

This method computes the Smyth-Broby correlation or covariance matrix for the input data matrix X using the NormalisedSmythBroby1 algorithm. The computation is performed on data that has already been Z-transformed (mean-centered and standardised), and is based on thresholding the data, applying the Smyth-Broby kernel, and aggregating positive, negative, and neutral (non-exceedance) co-movements.

Arguments

  • ce: Smyth-Broby covariance estimator configured with the NormalisedSmythBroby1 algorithm.
  • X: Z-transformed data matrix (observations × assets).

Returns

  • rho::Matrix{<:Real}: The Smyth-Broby correlation matrix, projected to be positive definite using the estimator's pdm field.

Details

The algorithm proceeds as follows:

  1. For each pair of assets (i, j), iterate over all observations.
  2. For each observation, use the Z-transformed returns for assets i and j.
  3. Apply the threshold to classify joint positive, negative, and neutral co-movements.
  4. Use the sb_delta kernel (with mean 0 and standard deviation 1) to accumulate positive (pos), negative (neg), and neutral (nn) contributions.
  5. The correlation is computed as (pos - neg) / (pos + neg + nn) if the denominator is nonzero, otherwise zero.
  6. The resulting matrix is projected to the nearest positive definite matrix using posdef!.

Related

source
PortfolioOptimisers.smythbrobyMethod
smythbroby(ce::SmythBrobyCovariance{<:Any, <:Any, <:Any, <:Any, <:Any, <:Any, <:Any, <:Any,
                                    <:SmythBroby2, <:Any}, X::AbstractMatrix,
           mean_vec::AbstractArray, std_vec::AbstractArray)

Implements the second variant of the Smyth-Broby covariance/correlation algorithm (unnormalised).

This method computes the Smyth-Broby correlation or covariance matrix for the input data matrix X using the SmythBroby2 algorithm. The computation is based on thresholding the data, applying the Smyth-Broby kernel, and aggregating positive and negative co-movements. The resulting matrix is then normalised by the geometric mean of its diagonal elements.

Arguments

  • ce: Smyth-Broby covariance estimator configured with the SmythBroby2 algorithm.
  • X: Data matrix (observations × assets).
  • mean_vec: Vector of means for each asset, used for centering.
  • std_vec: Vector of standard deviations for each asset, used for scaling and thresholding.

Returns

  • rho::Matrix{<:Real}: The Smyth-Broby correlation matrix, normalised and projected to be positive definite using the estimator's pdm field.

Details

The algorithm proceeds as follows:

  1. For each pair of assets (i, j), iterate over all observations.
  2. For each observation, compute the centered and scaled returns for assets i and j.
  3. Apply the threshold to classify joint positive and negative co-movements.
  4. Use the sb_delta kernel to accumulate positive (pos) and negative (neg) contributions.
  5. The raw correlation is computed as pos - neg.
  6. The resulting matrix is normalised by dividing each element by the geometric mean of the corresponding diagonal elements.
  7. The matrix is projected to the nearest positive definite matrix using posdef!.

Related

source
PortfolioOptimisers.smythbrobyMethod
smythbroby(ce::SmythBrobyCovariance{<:Any, <:Any, <:Any, <:Any, <:Any, <:Any, <:Any, <:Any,
                                    <:NormalisedSmythBroby2, <:Any}, X::AbstractMatrix)

Implements the second variant of the Smyth-Broby covariance/correlation algorithm on Z-transformed data (normalised).

This method computes the Smyth-Broby correlation or covariance matrix for the input data matrix X using the NormalisedSmythBroby2 algorithm. The computation is performed on data that has already been Z-transformed (mean-centered and standardised), and is based on thresholding the data, applying the Smyth-Broby kernel, and aggregating positive and negative co-movements. The resulting matrix is then normalised by the geometric mean of its diagonal elements.

Arguments

  • ce: Smyth-Broby covariance estimator configured with the NormalisedSmythBroby2 algorithm.
  • X: Z-transformed data matrix (observations × assets).

Returns

  • rho::Matrix{<:Real}: The Smyth-Broby correlation matrix, normalised and projected to be positive definite using the estimator's pdm field.

Details

The algorithm proceeds as follows:

  1. For each pair of assets (i, j), iterate over all observations.
  2. For each observation, use the Z-transformed returns for assets i and j.
  3. Apply the threshold to classify joint positive and negative co-movements.
  4. Use the sb_delta kernel (with mean 0 and standard deviation 1) to accumulate positive (pos) and negative (neg) contributions.
  5. The raw correlation is computed as pos - neg.
  6. The resulting matrix is normalised by dividing each element by the geometric mean of the corresponding diagonal elements.
  7. The matrix is projected to the nearest positive definite matrix using posdef!.

Related

source
PortfolioOptimisers.smythbrobyMethod
smythbroby(ce::SmythBrobyCovariance{<:Any, <:Any, <:Any, <:Any, <:Any, <:Any, <:Any, <:Any,
                                    <:SmythBrobyGerber0, <:Any}, X::AbstractMatrix,
           mean_vec::AbstractArray, std_vec::AbstractArray)

Implements the original Gerber-style variant of the Smyth-Broby covariance/correlation algorithm (unnormalised).

This method computes the Smyth-Broby correlation or covariance matrix for the input data matrix X using the SmythBrobyGerber0 algorithm. The computation is based on thresholding the data, applying the Smyth-Broby kernel, and aggregating positive and negative co-movements, with additional weighting by the count of co-movements.

Arguments

  • ce: Smyth-Broby covariance estimator configured with the SmythBrobyGerber0 algorithm.
  • X: Data matrix (observations × assets).
  • mean_vec: Vector of means for each asset, used for centering.
  • std_vec: Vector of standard deviations for each asset, used for scaling and thresholding.

Returns

  • rho::Matrix{<:Real}: The Smyth-Broby correlation matrix, projected to be positive definite using the estimator's pdm field.

Details

The algorithm proceeds as follows:

  1. For each pair of assets (i, j), iterate over all observations.
  2. For each observation, compute the centered and scaled returns for assets i and j.
  3. Apply the threshold to classify joint positive and negative co-movements.
  4. Use the sb_delta kernel to accumulate positive (pos) and negative (neg) contributions, and count the number of positive (cpos) and negative (cneg) co-movements.
  5. The correlation is computed as (pos * cpos - neg * cneg) / (pos * cpos + neg * cneg) if the denominator is nonzero, otherwise zero.
  6. The resulting matrix is projected to the nearest positive definite matrix using posdef!.

Related

source
PortfolioOptimisers.smythbrobyMethod
smythbroby(ce::SmythBrobyCovariance{<:Any, <:Any, <:Any, <:Any, <:Any, <:Any, <:Any, <:Any,
                                    <:NormalisedSmythBrobyGerber0, <:Any},
           X::AbstractMatrix)

Implements the original Gerber-style variant of the Smyth-Broby covariance/correlation algorithm on Z-transformed data (normalised).

This method computes the Smyth-Broby correlation or covariance matrix for the input data matrix X using the NormalisedSmythBrobyGerber0 algorithm. The computation is performed on data that has already been Z-transformed (mean-centered and standardised), and is based on thresholding the data, applying the Smyth-Broby kernel, and aggregating positive and negative co-movements, with additional weighting by the count of co-movements.

Arguments

  • ce: Smyth-Broby covariance estimator configured with the NormalisedSmythBrobyGerber0 algorithm.
  • X: Z-transformed data matrix (observations × assets).

Returns

  • rho::Matrix{<:Real}: The Smyth-Broby correlation matrix, projected to be positive definite using the estimator's pdm field.

Details

The algorithm proceeds as follows:

  1. For each pair of assets (i, j), iterate over all observations.
  2. For each observation, use the Z-transformed returns for assets i and j.
  3. Apply the threshold to classify joint positive and negative co-movements.
  4. Use the sb_delta kernel (with mean 0 and standard deviation 1) to accumulate positive (pos) and negative (neg) contributions, and count the number of positive (cpos) and negative (cneg) co-movements.
  5. The correlation is computed as (pos * cpos - neg * cneg) / (pos * cpos + neg * cneg) if the denominator is nonzero, otherwise zero.
  6. The resulting matrix is projected to the nearest positive definite matrix using posdef!.

Related

source
PortfolioOptimisers.smythbrobyMethod
smythbroby(ce::SmythBrobyCovariance{<:Any, <:Any, <:Any, <:Any, <:Any, <:Any, <:Any, <:Any,
                                    <:SmythBrobyGerber1, <:Any}, X::AbstractMatrix,
           mean_vec::AbstractArray, std_vec::AbstractArray)

Implements the first Gerber-style variant of the Smyth-Broby covariance/correlation algorithm (unnormalised).

This method computes the Smyth-Broby correlation or covariance matrix for the input data matrix X using the SmythBrobyGerber1 algorithm. The computation is based on thresholding the data, applying the Smyth-Broby kernel, and aggregating positive, negative, and neutral co-movements, with additional weighting by the count of co-movements.

Arguments

  • ce: Smyth-Broby covariance estimator configured with the SmythBrobyGerber1 algorithm.
  • X: Data matrix (observations × assets).
  • mean_vec: Vector of means for each asset, used for centering.
  • std_vec: Vector of standard deviations for each asset, used for scaling and thresholding.

Returns

  • rho::Matrix{<:Real}: The Smyth-Broby correlation matrix, projected to be positive definite using the estimator's pdm field.

Details

The algorithm proceeds as follows:

  1. For each pair of assets (i, j), iterate over all observations.
  2. For each observation, compute the centered and scaled returns for assets i and j.
  3. Apply the threshold to classify joint positive, negative, and neutral co-movements.
  4. Use the sb_delta kernel to accumulate positive (pos), negative (neg), and neutral (nn) contributions, and count the number of positive (cpos), negative (cneg), and neutral (cnn) co-movements.
  5. The correlation is computed as (pos * cpos - neg * cneg) / (pos * cpos + neg * cneg + nn * cnn) if the denominator is nonzero, otherwise zero.
  6. The resulting matrix is projected to the nearest positive definite matrix using posdef!.

Related

source
PortfolioOptimisers.smythbrobyMethod
smythbroby(ce::SmythBrobyCovariance{<:Any, <:Any, <:Any, <:Any, <:Any, <:Any, <:Any, <:Any,
                                    <:NormalisedSmythBrobyGerber1, <:Any},
           X::AbstractMatrix)

Implements the first Gerber-style variant of the Smyth-Broby covariance/correlation algorithm on Z-transformed data (normalised).

This method computes the Smyth-Broby correlation or covariance matrix for the input data matrix X using the NormalisedSmythBrobyGerber1 algorithm. The computation is performed on data that has already been Z-transformed (mean-centered and standardised), and is based on thresholding the data, applying the Smyth-Broby kernel, and aggregating positive, negative, and neutral co-movements, with additional weighting by the count of co-movements.

Arguments

  • ce: Smyth-Broby covariance estimator configured with the NormalisedSmythBrobyGerber1 algorithm.
  • X: Z-transformed data matrix (observations × assets).

Returns

  • rho::Matrix{<:Real}: The Smyth-Broby correlation matrix, projected to be positive definite using the estimator's pdm field.

Details

The algorithm proceeds as follows:

  1. For each pair of assets (i, j), iterate over all observations.
  2. For each observation, use the Z-transformed returns for assets i and j.
  3. Apply the threshold to classify joint positive, negative, and neutral co-movements.
  4. Use the sb_delta kernel (with mean 0 and standard deviation 1) to accumulate positive (pos), negative (neg), and neutral (nn) contributions, and count the number of positive (cpos), negative (cneg), and neutral (cnn) co-movements.
  5. The correlation is computed as (pos * cpos - neg * cneg) / (pos * cpos + neg * cneg + nn * cnn) if the denominator is nonzero, otherwise zero.
  6. The resulting matrix is projected to the nearest positive definite matrix using posdef!.

Related

source
PortfolioOptimisers.smythbrobyMethod
smythbroby(ce::SmythBrobyCovariance{<:Any, <:Any, <:Any, <:Any, <:Any, <:Any, <:Any, <:Any,
                                    <:SmythBrobyGerber2, <:Any}, X::AbstractMatrix,
           mean_vec::AbstractArray, std_vec::AbstractArray)

Implements the second Gerber-style variant of the Smyth-Broby covariance/correlation algorithm (unnormalised).

This method computes the Smyth-Broby correlation or covariance matrix for the input data matrix X using the SmythBrobyGerber2 algorithm. The computation is based on thresholding the data, applying the Smyth-Broby kernel, and aggregating positive and negative co-movements, with additional weighting by the count of co-movements. The resulting matrix is then normalised by the geometric mean of its diagonal elements.

Arguments

  • ce: Smyth-Broby covariance estimator configured with the SmythBrobyGerber2 algorithm.
  • X: Data matrix (observations × assets).
  • mean_vec: Vector of means for each asset, used for centering.
  • std_vec: Vector of standard deviations for each asset, used for scaling and thresholding.

Returns

  • rho::Matrix{<:Real}: The Smyth-Broby correlation matrix, normalised and projected to be positive definite using the estimator's pdm field.

Details

The algorithm proceeds as follows:

  1. For each pair of assets (i, j), iterate over all observations.
  2. For each observation, compute the centered and scaled returns for assets i and j.
  3. Apply the threshold to classify joint positive and negative co-movements.
  4. Use the sb_delta kernel to accumulate positive (pos) and negative (neg) contributions, and count the number of positive (cpos) and negative (cneg) co-movements.
  5. The raw correlation is computed as pos * cpos - neg * cneg.
  6. The resulting matrix is normalised by dividing each element by the geometric mean of the corresponding diagonal elements.
  7. The matrix is projected to the nearest positive definite matrix using posdef!.

Related

source
PortfolioOptimisers.smythbrobyMethod
smythbroby(ce::SmythBrobyCovariance{<:Any, <:Any, <:Any, <:Any, <:Any, <:Any, <:Any, <:Any,
                                    <:NormalisedSmythBrobyGerber2, <:Any},
           X::AbstractMatrix)

Implements the second Gerber-style variant of the Smyth-Broby covariance/correlation algorithm on Z-transformed data (normalised).

This method computes the Smyth-Broby correlation or covariance matrix for the input data matrix X using the NormalisedSmythBrobyGerber2 algorithm. The computation is performed on data that has already been Z-transformed (mean-centered and standardised), and is based on thresholding the data, applying the Smyth-Broby kernel, and aggregating positive and negative co-movements, with additional weighting by the count of co-movements. The resulting matrix is then normalised by the geometric mean of its diagonal elements.

Arguments

  • ce: Smyth-Broby covariance estimator configured with the NormalisedSmythBrobyGerber2 algorithm.
  • X: Z-transformed data matrix (observations × assets).

Returns

  • rho::Matrix{<:Real}: The Smyth-Broby correlation matrix, normalised and projected to be positive definite using the estimator's pdm field.

Details

The algorithm proceeds as follows:

  1. For each pair of assets (i, j), iterate over all observations.
  2. For each observation, use the Z-transformed returns for assets i and j.
  3. Apply the threshold to classify joint positive and negative co-movements.
  4. Use the sb_delta kernel (with mean 0 and standard deviation 1) to accumulate positive (pos) and negative (neg) contributions, and count the number of positive (cpos) and negative (cneg) co-movements.
  5. The raw correlation is computed as pos * cpos - neg * cneg.
  6. The resulting matrix is normalised by dividing each element by the geometric mean of the corresponding diagonal elements.
  7. The matrix is projected to the nearest positive definite matrix using posdef!.

Related

source