Repository navigation
Use the skew partial moment in analytic GJR forecasts - #870
Open
shaneraphel wants to merge 1 commit into
Open
shaneraphel wants to merge 1 commit into
shaneraphel wants to merge 1 commit into
Conversation
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #870 +/- ##
=======================================
Coverage 99.59% 99.59%
=======================================
Files 79 79
Lines 18154 18188 +34
Branches 1492 1496 +4
=======================================
+ Hits 18081 18115 +34
Misses 40 40
Partials 33 33
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
bashtage
force-pushed
the
gjr-skew-forecast
branch
2 times, most recently
from
October 7, 2026 20:40
4a84f0d to
04a8f9d
Compare
bashtage
force-pushed
the
gjr-skew-forecast
branch
from
October 9, 2026 14:20
04a8f9d to
3e43243
Compare
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Multi-step analytic GJR forecasts filled the future asymmetric shock with
sqrt(0.5 * sigma^2). That isE[z^2 1(z<0)] = 1/2, which is right for a symmetric distribution and wrong for a skewed one.SkewStudent.partial_moment(2, 0)is about 0.55 for a typical equity skew, so the persistence should bealpha + k * gamma + beta, notalpha + 0.5 * gamma + beta.MIDASHyperbolicwith asymmetry wrote the same0.5into future indicator rows. Simulation and bootstrap forecasts already draw the sign from the shock, and those paths are unchanged.What changed
ARCHModel.forecastpassesdistribution.partial_moment(2, 0)when the volatility model is asymmetric and the method is analytic.GARCH._analytic_forecastandMIDASHyperbolic._analytic_forecastuse that weight. The default stays0.5, so a normal GJR forecast is the same recursion as before.Verification
Parameters
[mu, omega, alpha, gamma, beta, eta, lambda] = [0.05, 0.02, 0.0, 0.20, 0.88, 7.6, -0.16], skew-t, horizon 30:alpha + k gamma + beta,k = 0.55260.5recursion0.5recursionHorizon 20, 30,000 simulations: analytic 1.318, simulation 1.317, the old half-moment path 1.11.
pytest arch/tests/univariate/test_variance_forecasting.py -k "midas_analytical or midas_asym or gjr_analytic": 4 passed.