Smyth-Broby Covariance
PortfolioOptimisers.SmythBroby0 Type
struct SmythBroby0 <: SmythBrobyCovarianceAlgorithmImplements the original Smyth-Broby covariance algorithm.
Constructors
SmythBroby0() -> SmythBroby0Examples
julia> SmythBroby0()
SmythBroby0()Related
sourcePortfolioOptimisers.SmythBroby1 Type
struct SmythBroby1 <: SmythBrobyCovarianceAlgorithmImplements the first variant of the Smyth-Broby covariance algorithm.
Constructors
SmythBroby1() -> SmythBroby1Examples
julia> SmythBroby1()
SmythBroby1()Related
sourcePortfolioOptimisers.SmythBroby2 Type
struct SmythBroby2 <: SmythBrobyCovarianceAlgorithmImplements the second variant of the Smyth-Broby covariance algorithm.
Constructors
SmythBroby2() -> SmythBroby2Examples
julia> SmythBroby2()
SmythBroby2()Related
sourcePortfolioOptimisers.SmythBrobyGerber0 Type
struct SmythBrobyGerber0 <: SmythBrobyCovarianceAlgorithmImplements the original Smyth-Broby covariance algorithm scaled by vote counts.
Constructors
SmythBrobyGerber0() -> SmythBrobyGerber0Examples
julia> SmythBrobyGerber0()
SmythBrobyGerber0()Related
sourcePortfolioOptimisers.SmythBrobyGerber1 Type
struct SmythBrobyGerber1 <: SmythBrobyCovarianceAlgorithmImplements the first variant of the Smyth-Broby covariance algorithm scaled by vote counts.
Constructors
SmythBrobyGerber1() -> SmythBrobyGerber1Examples
julia> SmythBrobyGerber1()
SmythBrobyGerber1()Related
sourcePortfolioOptimisers.SmythBrobyGerber2 Type
struct SmythBrobyGerber2 <: SmythBrobyCovarianceAlgorithmImplements the second variant of the Smyth-Broby covariance algorithm scaled by vote counts.
Constructors
SmythBrobyGerber2() -> SmythBrobyGerber2Examples
julia> SmythBrobyGerber2()
SmythBrobyGerber2()Related
sourcePortfolioOptimisers.SmythBrobyCount0 Type
struct SmythBrobyCount0 <: SmythBrobyCovarianceAlgorithmImplements the original Smyth-Broby covariance algorithm using vote counts only.
Constructors
SmythBrobyCount0() -> SmythBrobyCount0Examples
julia> SmythBrobyCount0()
SmythBrobyCount0()Related
sourcePortfolioOptimisers.SmythBrobyCount1 Type
struct SmythBrobyCount1 <: SmythBrobyCovarianceAlgorithmImplements the first variant of the Smyth-Broby covariance algorithm using vote counts only.
Constructors
SmythBrobyCount1() -> SmythBrobyCount1Examples
julia> SmythBrobyCount1()
SmythBrobyCount1()Related
sourcePortfolioOptimisers.SmythBrobyCount2 Type
struct SmythBrobyCount2 <: SmythBrobyCovarianceAlgorithmImplements the second variant of the Smyth-Broby covariance algorithm using vote counts only.
Constructors
SmythBrobyCount2() -> SmythBrobyCount2Examples
julia> SmythBrobyCount2()
SmythBrobyCount2()Related
sourcePortfolioOptimisers.SmythBrobyCovariance Type
struct SmythBrobyCovariance{__T_ve, __T_me, __T_pdm, __T_c1, __T_c2, __T_c3, __T_n, __T_alg, __T_ex} <: BaseSmythBrobyCovarianceA 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.
Fields
ve: Variance estimator.me: Expected returns estimator. Used for optionally centering the returns.pdm: Positive definite matrix estimator.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.ex: Parallel execution strategy.
Constructors
SmythBrobyCovariance(;
ve::StatsBase.CovarianceEstimator = SimpleVariance(),
me::AbstractExpectedReturnsEstimator = SimpleExpectedReturns(),
pdm::Option{<:Posdef} = Posdef(),
c1::Number = 0.5,
c2::Number = 0.5,
c3::Number = 4,
n::Number = 2,
alg::SmythBrobyCovarianceAlgorithm = SmythBrobyGerber1(),
ex::FLoops.Transducers.Executor = ThreadedEx()
) -> SmythBrobyCovarianceKeywords correspond to the struct's fields.
Validation
c3 > c2.
Examples
julia> SmythBrobyCovariance()
SmythBrobyCovariance
ve ┼ SimpleVariance
│ me ┼ SimpleExpectedReturns
│ │ w ┴ nothing
│ w ┼ nothing
│ corrected ┴ Bool: true
me ┼ SimpleExpectedReturns
│ w ┴ nothing
pdm ┼ Posdef
│ alg ┼ UnionAll: NearestCorrelationMatrix.Newton
│ kwargs ┴ @NamedTuple{}: NamedTuple()
c1 ┼ Float64: 0.5
c2 ┼ Float64: 0.5
c3 ┼ Int64: 4
n ┼ Int64: 2
alg ┼ SmythBrobyGerber1()
ex ┴ Transducers.ThreadedEx{@NamedTuple{}}: Transducers.ThreadedEx()Related
PortfolioOptimisers.factory Method
factory(ce::SmythBrobyCovariance, w::ObsWeights) -> SmythBrobyCovarianceReturn a new SmythBrobyCovariance estimator with observation weights w applied to the underlying variance estimator.
Arguments
ce: Covariance estimator.w: Observation weights vectorobservations × 1.
Returns
ce: New covariance estimator of the same type as the argument, with the new weights applied.
Examples
julia> ce = SmythBrobyCovariance();
julia> factory(ce, StatsBase.Weights([0.2, 0.3, 0.5]))
SmythBrobyCovariance
ve ┼ SimpleVariance
│ me ┼ SimpleExpectedReturns
│ │ w ┴ StatsBase.Weights{Float64, Float64, Vector{Float64}}: [0.2, 0.3, 0.5]
│ w ┼ StatsBase.Weights{Float64, Float64, Vector{Float64}}: [0.2, 0.3, 0.5]
│ corrected ┴ Bool: true
me ┼ SimpleExpectedReturns
│ w ┴ StatsBase.Weights{Float64, Float64, Vector{Float64}}: [0.2, 0.3, 0.5]
pdm ┼ Posdef
│ alg ┼ UnionAll: NearestCorrelationMatrix.Newton
│ kwargs ┴ @NamedTuple{}: NamedTuple()
c1 ┼ Float64: 0.5
c2 ┼ Float64: 0.5
c3 ┼ Int64: 4
n ┼ Int64: 2
alg ┼ SmythBrobyGerber1()
ex ┴ Transducers.ThreadedEx{@NamedTuple{}}: Transducers.ThreadedEx()Related
sourceStatistics.cov Method
Statistics.cov(ce::SmythBrobyCovariance, X::MatNum; dims::Int = 1, 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: Compute the unstandardised Smyth-Broby covariance matrix.
X: Data matrix (observations × assets).dims: Dimension along which to perform the computation.kwargs...: Additional keyword arguments passed to the mean and standard deviation estimators.
Returns
sigma::Matrix{<:Number}: The Smyth-Broby covariance matrix.
Validation
dimsis either1or2.
Related
sourceStatistics.cor Method
Statistics.cor(ce::SmythBrobyCovariance, X::MatNum; dims::Int = 1, 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: Compute the unstandardised Smyth-Broby correlation matrix.
X: Data matrix (observations × assets).dims: Dimension along which to perform the computation.kwargs...: Additional keyword arguments passed to the mean and standard deviation estimators.
Returns
rho::Matrix{<:Number}: The Smyth-Broby correlation matrix.
Validation
dimsis either1or2.
Related
sourcePortfolioOptimisers.port_opt_view Method
port_opt_view(
ce::SmythBrobyCovariance,
i,
args...
) -> Union{SmythBrobyCovariance{<:CovarianceEstimator, <:AbstractExpectedReturnsEstimator, Nothing, <:Number, <:Number, <:Number, <:Number, <:SmythBrobyCovarianceAlgorithm, <:Transducers.Executor}, SmythBrobyCovariance{var"#s179", var"#s1791", Posdef{__T_alg, __T_kwargs}, <:Number, <:Number, <:Number, <:Number, <:SmythBrobyCovarianceAlgorithm, <:Transducers.Executor} where {var"#s179"<:CovarianceEstimator, var"#s1791"<:AbstractExpectedReturnsEstimator, __T_alg, __T_kwargs}}Gets the view of the covariance estimator for the i-th element(s).
Arguments
ce: Covariance estimator.i: Index or indices to view.
Returns
ce: New covariance estimator of the same type as the argument, for the new view.
Related
sourcePortfolioOptimisers.BaseSmythBrobyCovariance Type
abstract type BaseSmythBrobyCovariance <: BaseGerberCovarianceAbstract supertype for all Smyth-Broby covariance estimators in PortfolioOptimisers.jl.
All concrete and/or abstract types implementing Smyth-Broby covariance estimation algorithms should be subtypes of BaseSmythBrobyCovariance.
Related
sourcePortfolioOptimisers.SmythBrobyCovarianceAlgorithm Type
abstract type SmythBrobyCovarianceAlgorithm <: AbstractMomentAlgorithmAbstract supertype for all Smyth-Broby covariance algorithm types in PortfolioOptimisers.jl.
All concrete and/or abstract types implementing specific Smyth-Broby covariance algorithms should be subtypes of SmythBrobyCovarianceAlgorithm.
These types are used to specify the algorithm when constructing a SmythBrobyCovariance estimator.
Related
sourcePortfolioOptimisers.sb_delta Function
sb_delta(ri::Number, rj::Number, n::Number) -> NumberSmyth-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. It assumes the returns are centered around zero.
Mathematical definition
Where:
: Amplitude kernel. : Divergence measure between returns. : Absolute standardised returns for assets and .
Where:
: Smyth-Broby kernel value. : Exponent parameter controlling kernel sharpness.
Arguments
ri: Absolute standardised return for asseti.rj: Absolute standardised return for assetj.n: Exponent parameter for the kernel.
Returns
score::Number: The computed score for the pair(xi, xj).
Details
- Returns
(sqrt((1 + ri) * (1 + rj)) / (1 + abs(ri - rj)^n), 1).
Related
sourcePortfolioOptimisers.smythbroby Function
smythbroby(ce::SmythBrobyCovariance{<:Any, <:Any, <:Any, <:Any, <:Any, <:Any,
<:Any, <:SmythBroby0}, X::MatNum, mu::ArrNum,
sd::ArrNum)Implements the original Smyth-Broby covariance/correlation algorithm.
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.
Mathematical definition
For each pair
Where:
, : Weighted concordant and discordant pair counts. : Standardised centered return of asset at time . : Indicator weighting function from the Smyth-Broby template. : Smyth-Broby template parameter.
Where:
: Smyth-Broby correlation between assets and . , : Weighted concordant and discordant pair counts. : Standardised centered return of asset at time .
Arguments
ce: Smyth-Broby covariance estimator configured with theSmythBroby0algorithm.X: Data matrix (observations × assets).sd: Vector of standard deviations for each asset, used for scaling and thresholding.
Returns
rho::Matrix{<:Number}: The Smyth-Broby correlation matrix, projected to be positive definite using the estimator'spdmfield.
Details
The algorithm proceeds as follows:
For each pair of assets
(i, j), iterate over all observations.For each observation, compute the centered and scaled returns for assets
iandj.Apply the threshold to classify joint positive and negative co-movements.
Use the
sb_deltakernel to accumulate positive (pos) and negative (neg) contributions.The correlation is computed as
(pos - neg) / (pos + neg)if the denominator is nonzero, otherwise zero.The resulting matrix is projected to the nearest positive definite matrix using
posdef!.
Related
sourcesmythbroby(ce::SmythBrobyCovariance{<:Any, <:Any, <:Any, <:Any, <:Any, <:Any,
<:Any, <:SmythBroby1}, X::MatNum, mu::ArrNum,
sd::ArrNum)Implements the first variant of the Smyth-Broby covariance/correlation algorithm.
This method computes the Smyth-Broby correlation or covariance matrix for the input data matrix X using the original SmythBroby1 algorithm. The computation is based on thresholding the data, applying the Smyth-Broby kernel, and aggregating positive, negative, and neutral co-movements.
Arguments
ce: Smyth-Broby covariance estimator configured with theSmythBroby1algorithm.X: Data matrixobservations × featuresif thedimskeyword does not exist ordims = 1,features × observationswhendims = 2.
Returns
rho::Matrix{<:Number}: The Smyth-Broby correlation matrix, projected to be positive definite using the estimator'spdmfield.
Details
The algorithm proceeds as follows:
For each pair of assets
(i, j), iterate over all observations.For each observation, use the returns for assets
iandj.Apply the threshold to classify joint positive, negative, and neutral co-movements.
Use the
sb_deltakernel to accumulate positive (pos), negative (neg), and neutral (nn) contributions.The correlation is computed as
(pos - neg) / (pos + neg + nn)if the denominator is nonzero, otherwise zero.The resulting matrix is projected to the nearest positive definite matrix using
posdef!.
Related
sourcesmythbroby(ce::SmythBrobyCovariance{<:Any, <:Any, <:Any, <:Any, <:Any, <:Any,
<:Any, <:SmythBroby2}, X::MatNum, mu::ArrNum,
sd::ArrNum)Implements the second variant of the Smyth-Broby covariance/correlation algorithm.
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 standardised by the geometric mean of its diagonal elements.
Arguments
ce: Smyth-Broby covariance estimator configured with theSmythBroby2algorithm.X: Data matrix (observations × assets).sd: Vector of standard deviations for each asset, used for scaling and thresholding.
Returns
rho::Matrix{<:Number}: The Smyth-Broby correlation matrix, standardised and projected to be positive definite using the estimator'spdmfield.
Details
The algorithm proceeds as follows:
For each pair of assets
(i, j), iterate over all observations.For each observation, compute the centered and scaled returns for assets
iandj.Apply the threshold to classify joint positive and negative co-movements.
Use the
sb_deltakernel to accumulate positive (pos) and negative (neg) contributions.The raw correlation is computed as
pos - neg.The resulting matrix is standardised by dividing each element by the geometric mean of the corresponding diagonal elements.
The matrix is projected to the nearest positive definite matrix using
posdef!.
Related
sourcesmythbroby(ce::SmythBrobyCovariance{<:Any, <:Any, <:Any, <:Any, <:Any, <:Any,
<:Any, <:SmythBrobyGerber0}, X::MatNum,
mu::ArrNum, sd::ArrNum)Implements the original Gerber-style variant of the Smyth-Broby covariance/correlation algorithm.
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 theSmythBrobyGerber0algorithm.X: Data matrix (observations × assets).sd: Vector of standard deviations for each asset, used for scaling and thresholding.
Returns
rho::Matrix{<:Number}: The Smyth-Broby correlation matrix, projected to be positive definite using the estimator'spdmfield.
Details
The algorithm proceeds as follows:
For each pair of assets
(i, j), iterate over all observations.For each observation, compute the centered and scaled returns for assets
iandj.Apply the threshold to classify joint positive and negative co-movements.
Use the
sb_deltakernel to accumulate positive (pos) and negative (neg) contributions, and count the number of positive (cpos) and negative (cneg) co-movements.The correlation is computed as
(pos * cpos - neg * cneg) / (pos * cpos + neg * cneg)if the denominator is nonzero, otherwise zero.The resulting matrix is projected to the nearest positive definite matrix using
posdef!.
Related
sourcesmythbroby(ce::SmythBrobyCovariance{<:Any, <:Any, <:Any, <:Any, <:Any, <:Any,
<:Any, <:SmythBrobyGerber1}, X::MatNum,
mu::ArrNum, sd::ArrNum)Implements the first Gerber-style variant of the Smyth-Broby covariance/correlation algorithm.
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 theSmythBrobyGerber1algorithm.X: Data matrix (observations × assets).sd: Vector of standard deviations for each asset, used for scaling and thresholding.
Returns
rho::Matrix{<:Number}: The Smyth-Broby correlation matrix, projected to be positive definite using the estimator'spdmfield.
Details
The algorithm proceeds as follows:
For each pair of assets
(i, j), iterate over all observations.For each observation, compute the centered and scaled returns for assets
iandj.Apply the threshold to classify joint positive, negative, and neutral co-movements.
Use the
sb_deltakernel to accumulate positive (pos), negative (neg), and neutral (nn) contributions, and count the number of positive (cpos), negative (cneg), and neutral (cnn) co-movements.The correlation is computed as
(pos * cpos - neg * cneg) / (pos * cpos + neg * cneg + nn * cnn)if the denominator is nonzero, otherwise zero.The resulting matrix is projected to the nearest positive definite matrix using
posdef!.
Related
sourcesmythbroby(ce::SmythBrobyCovariance{<:Any, <:Any, <:Any, <:Any, <:Any, <:Any,
<:Any, <:SmythBrobyGerber2}, X::MatNum,
mu::ArrNum, sd::ArrNum)Implements the second Gerber-style variant of the Smyth-Broby covariance/correlation algorithm.
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 standardised by the geometric mean of its diagonal elements.
Arguments
ce: Smyth-Broby covariance estimator configured with theSmythBrobyGerber2algorithm.X: Data matrix (observations × assets).sd: Vector of standard deviations for each asset, used for scaling and thresholding.
Returns
rho::Matrix{<:Number}: The Smyth-Broby correlation matrix, standardised and projected to be positive definite using the estimator'spdmfield.
Details
The algorithm proceeds as follows:
For each pair of assets
(i, j), iterate over all observations.For each observation, compute the centered and scaled returns for assets
iandj.Apply the threshold to classify joint positive and negative co-movements.
Use the
sb_deltakernel to accumulate positive (pos) and negative (neg) contributions, and count the number of positive (cpos) and negative (cneg) co-movements.The raw correlation is computed as
pos * cpos - neg * cneg.The resulting matrix is standardised by dividing each element by the geometric mean of the corresponding diagonal elements.
The matrix is projected to the nearest positive definite matrix using
posdef!.
Related
sourcesmythbroby(ce::SmythBrobyCovariance{<:Any, <:Any, <:Any, <:Any, <:Any, <:Any,
<:Any, <:SmythBrobyCount0}, X::MatNum,
mu::ArrNum, sd::ArrNum)Implements the original Gerber-style variant of the Smyth-Broby covariance/correlation algorithm.
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 theSmythBrobyGerber0algorithm.X: Data matrix (observations × assets).sd: Vector of standard deviations for each asset, used for scaling and thresholding.
Returns
rho::Matrix{<:Number}: The Smyth-Broby correlation matrix, projected to be positive definite using the estimator'spdmfield.
Details
The algorithm proceeds as follows:
For each pair of assets
(i, j), iterate over all observations.For each observation, compute the centered and scaled returns for assets
iandj.Apply the threshold to classify joint positive and negative co-movements.
Use the
sb_deltakernel to accumulate positive (pos) and negative (neg) contributions, and count the number of positive (cpos) and negative (cneg) co-movements.The correlation is computed as
(pos * cpos - neg * cneg) / (pos * cpos + neg * cneg)if the denominator is nonzero, otherwise zero.The resulting matrix is projected to the nearest positive definite matrix using
posdef!.
Related
sourcesmythbroby(ce::SmythBrobyCovariance{<:Any, <:Any, <:Any, <:Any, <:Any, <:Any,
<:Any, <:SmythBrobyCount1}, X::MatNum,
mu::ArrNum, sd::ArrNum)Implements the first Gerber-style variant of the Smyth-Broby covariance/correlation algorithm.
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 theSmythBrobyGerber1algorithm.X: Data matrix (observations × assets).sd: Vector of standard deviations for each asset, used for scaling and thresholding.
Returns
rho::Matrix{<:Number}: The Smyth-Broby correlation matrix, projected to be positive definite using the estimator'spdmfield.
Details
The algorithm proceeds as follows:
For each pair of assets
(i, j), iterate over all observations.For each observation, compute the centered and scaled returns for assets
iandj.Apply the threshold to classify joint positive, negative, and neutral co-movements.
Use the
sb_deltakernel to accumulate positive (pos), negative (neg), and neutral (nn) contributions, and count the number of positive (cpos), negative (cneg), and neutral (cnn) co-movements.The correlation is computed as
(pos * cpos - neg * cneg) / (pos * cpos + neg * cneg + nn * cnn)if the denominator is nonzero, otherwise zero.The resulting matrix is projected to the nearest positive definite matrix using
posdef!.
Related
sourcesmythbroby(ce::SmythBrobyCovariance{<:Any, <:Any, <:Any, <:Any, <:Any, <:Any,
<:Any, <:SmythBrobyCount2}, X::MatNum,
mu::ArrNum, sd::ArrNum)Implements the second Gerber-style variant of the Smyth-Broby covariance/correlation algorithm.
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 standardised by the geometric mean of its diagonal elements.
Arguments
ce: Smyth-Broby covariance estimator configured with theSmythBrobyGerber2algorithm.X: Data matrix (observations × assets).sd: Vector of standard deviations for each asset, used for scaling and thresholding.
Returns
rho::Matrix{<:Number}: The Smyth-Broby correlation matrix, standardised and projected to be positive definite using the estimator'spdmfield.
Details
The algorithm proceeds as follows:
For each pair of assets
(i, j), iterate over all observations.For each observation, compute the centered and scaled returns for assets
iandj.Apply the threshold to classify joint positive and negative co-movements.
Use the
sb_deltakernel to accumulate positive (pos) and negative (neg) contributions, and count the number of positive (cpos) and negative (cneg) co-movements.The raw correlation is computed as
pos * cpos - neg * cneg.The resulting matrix is standardised by dividing each element by the geometric mean of the corresponding diagonal elements.
The matrix is projected to the nearest positive definite matrix using
posdef!.
Related
source