Statistical Analytics · Data Validation

Macro-Financial Datasets

A regime analysis that tests bias, threshold sensitivity, uncertainty, and cross-system agreement.

Role Data Analyst
Tools Python · PostgreSQL · Tableau
Sample 1,111 trading days
Stability 6 threshold combinations
Control 5,000 resamples

My approach

Prevent look-ahead bias

I applied a one-day prior-close signal lag before assigning each regime.

Challenge the classification

I tested six VIX and yield threshold combinations and compared asset metrics by regime.

Make uncertainty visible

I used 5,000 moving-block bootstrap resamples and reconciled outputs across Python and PostgreSQL.

Analytical trust

A result is useful only when the method is stable.

The validation path challenges the finding before it is presented.

FINDING

GLD led in Tightening.

The initial result identifies a regime relationship.

CHALLENGE

Does one threshold create it?

Six threshold combinations test the classification.

RESULT

The pattern remained consistent.

The stability test supports the descriptive finding.

Decision evidence

Which findings survive challenge?

Point estimates are shown with method controls and uncertainty, not presented as forecasts.

01 · Regime comparison

How did assets behave by regime?

Why this visual exists. Return, risk, drawdown, Sharpe ratio, and correlation are read together across four lagged regimes.

Macro regime dashboard comparing annualised return, Sharpe ratio, volatility, drawdown, and correlations for SPY, IEF, and GLD.
Finding

GLD has the highest Sharpe ratio at 1.95 in Elevated risk. SPY has the deepest maximum drawdown at −13.3% in the same regime.

Interpretation

No single metric defines performance. Return must be read with volatility, drawdown, and cross-asset behaviour.

Decision

Use the dashboard to select claims for robustness checks, not to issue an investment recommendation.

02 · Point estimate

Which regime differences are largest?

Why this visual exists. A common return view makes direction and magnitude easy to compare before testing uncertainty.

Annualised stored-close returns for SPY, IEF, and GLD across calm, tightening, elevated-risk, and stress regimes.
Finding

SPY is 66.8% annualised in Stress, while IEF and GLD are −20.9% and −22.1%. GLD is 31.5% in Elevated risk.

Interpretation

These are descriptive annualised sample means. The Stress estimate can be unstable because regime samples are limited.

Decision

Do not use magnitude alone. Check sensitivity and sampling uncertainty before retaining the claim.

03 · Uncertainty

How precise are the estimates?

Why this visual exists. Moving-block bootstrap intervals preserve short time dependence and expose imprecise regime estimates.

Annualised return estimates with 95 percent moving-block bootstrap intervals by asset and macro regime.
Finding

Several intervals cross zero, and Stress intervals are especially wide across assets.

Interpretation

The point estimate can look strong while uncertainty remains too large for a confident directional claim.

Decision

Report ranges and evidence limits. Treat the analysis as descriptive, not predictive.

Source: original project dashboard and figures. Intervals use 5,000 deterministic moving-block resamples and are not forecast ranges.

Related concepts

Explore how the result is challenged.

Implementation proof · Python

Lag the signal before classifying the return.

The regime uses information available at the previous close. This prevents the current return from using a same-day closing signal.

View implementation on GitHub ↗
result["dgs10_change_63d_pp"] = (
    result["dgs10"] - result["dgs10"].shift(YIELD_LOOKBACK_DAYS)
)
result["signal_vix"] = result["vix"].shift(1)
result["signal_dgs10"] = result["dgs10"].shift(1)
result["signal_dgs10_change_63d_pp"] = (
    result["dgs10_change_63d_pp"].shift(1)
)