Class CovarianceShrinkage
The estimator shrinks toward the scaled identity mu·I
(mu = average sample variance):
Sigma* = delta · mu·I + (1 − delta) · S
with the intensity delta chosen FROM THE DATA to minimize expected Frobenius loss: delta = b̄²/d², where d² = ||S − mu·I||²_F measures how far the sample matrix is from the target and b̄² estimates how much of that distance is pure sampling noise (the average Frobenius distance of single-observation outer products from S, over T², clamped to d²). Intuition: when the data say the sample matrix is mostly noise (T small, N large), delta → 1 and you trust the boring target; when T is huge, delta → 0 and the sample matrix speaks for itself. No tuning parameter to pick — that is the whole appeal.
The result is always positive-definite for delta > 0 (a convex
combination with mu·I lifts every eigenvalue toward mu), which is what
makes it safe to hand to optimization.PortfolioOptimizer where
a raw sample matrix from short history can be singular. Identity
target, stated: the constant-correlation target variant trades a bit
of bias for structure; this is the well-conditioned workhorse.
Research lane, deterministic.
-
Nested Class Summary
Nested Classes -
Method Summary
Modifier and TypeMethodDescriptionstatic CovarianceShrinkage.ResultledoitWolf(double[][] returns) static double[][]shrink(double[][] returns) Convenience: the shrunk matrix only.
-
Method Details
-
ledoitWolf
- Parameters:
returns- T×N:returns[t][j]= period-t return of asset j; T ≥ 2, N ≥ 1, rectangular, finite
-
shrink
public static double[][] shrink(double[][] returns) Convenience: the shrunk matrix only.
-