Testing the d-Invariance Hypothesis for the Fixed-Width Fractional Differentiation Operator Across Volatility States Using VIX
Author: T. Niero Project page: https://bgltn.github.io/d-invariance-ffd/
This repository is a research compendium for testing whether the order d* selected for the fixed-width fractional differentiation (FFD) operator remains stable across volatility segmentation conditioned on the VIX. The FFD specification (implementation, truncation threshold, grid and ADF rule) is fixed in advance; only the data subset changes, and the object under test is the selected order d*.
The workflow first identifies volatility states by applying cumulative‑sum (CUSUM) structural‑break tests to VIX, then segments each state using the NP‑MOJO change‑point method. Within this fixed segmentation, it evaluates how d* varies across segments using a stationary bootstrap (Politis and Romano 1994). A separate forecasting experiment, run under a train‑only frozen‑operator protocol and a sealed out‑of‑sample design, assesses how any instability in d* affects model calibration.
| Term | Definition |
|---|---|
| Fractional differencing parameter in an ARFIMA model. It characterises the persistence of the assumed data-generating process. | |
| Fractional differentiation operator. The minimum |
|
| Volatility state (Regimes) | Time interval delimited by CUSUM-detected structural breaks on VIX. Parent partition, exogenous to the feature. |
| Segment | Contiguous child interval within a volatility state, delimited by an NP-MOJO change point. |
| Admissible partition | Fixed collection of ordered, non-overlapping units supplied to the test. In the empirical analysis, it comprises the four segments nested within the two VIX-defined volatility states. |
The hypothesis is formulated for the selected order
Does the selected order
The operator specification is held fixed across segments: the FFD implementation, truncation, threshold
For a fixed admissible partition
The test statistic is the maximum pairwise absolute difference between segment-specific selected orders:
The stationary-bootstrap procedure of Politis and Romano (1994) is applied independently within each fixed segment. Each bootstrap order is recentred around docs/methodology.md.
The public repository reports anonymised registry outputs and bucketed bootstrap evidence. Raw p-values and private calibration are excluded.
- CUSUM-based structural-break detection on VIX defines the parent volatility states.
- NP-MOJO segmentation within each state defines the child segments.
- The FFD operator is applied with fixed specification.
- The minimum admissible order
$d^{*}$ is selected per segment under the ADF rule. - The feature-level statistic
$\hat T_i$ is computed across the admissible partition. - The stationary bootstrap evaluates the statistic under fixed segment boundaries.
- Selected operators are recorded in an anonymised frozen-operator registry. State construction is a retrospective in-sample characterisation. Downstream operator use is separate, under train-only freezing, causal alignment, and sealed evaluation.
The test is conditional on the supplied boundaries. The segment partition is treated as an input to the stability test for
Caveats:
-
$d^{*}$ is grid-valued;$\hat T_j$ inherits the grid resolution. - The bootstrap resamples independently within segments; changepoint uncertainty is not propagated.
- Per-feature tests are reported. No multiplicity adjustment is applied.
results/frozen_operators.csv contains the following anonymised fields:
feature_id, feature_class, scope, window_id, window_order,
d_star, adf_rejects, operator_status,
bootstrap_p_value_bucket, used_for_operator_selection, n_obs_bin
This file is a publication registry, not an operational registry.
The default is fill_method=None. Missing observations remain in the indexed series; FFD windows containing missing values are not transformed. The output index is aligned with the input index by timestamp.
Forward fill (fill_method="ffill") is available only as an explicit sensitivity specification. It is not the baseline.
d-invariance-ffd/
├── README.md
├── src/
├── notebooks/
├── docs/
├── config/
├── results/
├── tests/
└── paper/
With Conda:
conda env create -f environment.yml
conda activate d-invariance-ffdOtherwise:
pip install -r requirements.txtdocs/public_api.md— public-safe module interface.docs/methodology.md— formal hypothesis, test statistic, and bootstrap procedure.docs/research_mapping.md— mapping between the research design and source code.
The public source code exposes methodology utilities only. It excludes private data, private feature names, raw paths, empirical calibration values, forecasting target logic, and out-of-sample model code.
examples/synthetic_d_invariance.py demonstrates segment construction,
The manuscript, private notebooks, raw data, feature-name decoder, and calibration files are confidential and are not part of the public repository. The public repository releases only anonymised derived artefacts suitable for methodological review.
The compendium is under preparation. The current release is intended for methodological review and reproducibility support, not for trading replication.
A CITATION.cff file will be provided before public release.
Code: Apache 2.0. Documentation and public manuscript material: CC BY 4.0 unless otherwise stated. Private data, private notebooks, and confidential manuscript drafts are excluded.