bashtage / arch

ARCH models in Python
Other
1.29k stars 247 forks source link

Can we introduce an user-defined optional lower-bound in the stationary constraint of the variance process? #724

Open sitmo opened 2 months ago

sitmo commented 2 months ago

Would it be possible to have a feature to set an EPSILON in the stationarity constraint?

Like:

1 - sum(alpha) - sum(beta) -0.5*sum(gamma) - EPSILON >= 0

The reason it that the optimiser sometimes give solution where the constraint is equal to zero, or very close like 1E-10, and that will give a crazy large long-term variance. This seems to sometimes happen when the return data covers a period of ever increasing variance.

By adding an EPSILON to the constraint we can force the variance process to have a minimal amount of mean reversion, e.g. EPSILON=1E-3 would give a variance half life of at most 1000 days, which is reasonable to impose?

Alternatively, we could also set an upper-bound on the long-term variance?

omega / [ 1 - sum(alpha) - sum(beta) - 0.5*sum(gamma) ] < max_LTV

edit: somewhere around here in the code https://github.com/bashtage/arch/blob/a61dc7d43a5ef123bee75eae3d3e12b6c472433e/arch/univariate/volatility.py#L1078