arch.univariate.HARX¶
-
class arch.univariate.HARX(y: ndarray | DataFrame | Series | None =
None, x: ndarray | DataFrame | Series | ndarray[tuple[int, int], dtype[float64]] | None =None, lags: int | Sequence[int] | Sequence[Sequence[int]] | ndarray[tuple[int, ...], dtype[int32]] | ndarray[tuple[int, ...], dtype[int64]] | None =None, constant: bool =True, use_rotated: bool =False, hold_back: int | None =None, volatility: VolatilityProcess | None =None, distribution: Distribution | None =None, rescale: bool | None =None)[source]¶ Heterogeneous Autoregression (HAR) model with optional exogenous regressors.
Provides model estimation and simulation.
- Parameters:¶
- y: ndarray | DataFrame | Series | None =
None¶ Vector of nobs elements containing the dependent variable.
- x: ndarray | DataFrame | Series | ndarray[tuple[int, int], dtype[float64]] | None =
None¶ Array with nobs rows and k columns containing exogenous regressors. Must contain only finite values.
- lags: int | Sequence[int] | Sequence[Sequence[int]] | ndarray[tuple[int, ...], dtype[int32]] | ndarray[tuple[int, ...], dtype[int64]] | None =
None¶ Description of lag structure of the HAR.
Scalar included all lags between 1 and the value.
A 1-d n-element array includes the HAR lags 1:lags[0]+1, 1:lags[1]+1, … 1:lags[n]+1.
A 2-d (2,n)-element array that includes the HAR lags of the form lags[0,j]:lags[1,j]+1 for all columns of lags.
The lags must be integers (2.5, 5.0 and True are not accepted). A scalar must be at least 0, and the values of an array at least 1.
- constant: bool =
True¶ Flag whether the model should include a constant.
- use_rotated: bool =
False¶ Flag indicating to use the alternative rotated form of the HAR where HAR lags do not overlap.
- hold_back: int | None =
None¶ Number of observations at the start of the sample to exclude when estimating model parameters. Used when comparing models with different lag lengths to estimate on the common sample. Must be a non-negative integer.
- volatility: VolatilityProcess | None =
None¶ Volatility process to use in the model.
- distribution: Distribution | None =
None¶ Error distribution to use in the model.
- rescale: bool | None =
None¶ Flag indicating whether to automatically rescale data if the scale of the data is likely to produce convergence issues when estimating model parameters. If False, the model is estimated on the data without transformation. If True, then y is rescaled and the new scale is reported in the estimation results. If None, the data is not rescaled and a warning is issued when its scale is likely to produce convergence issues.
- y: ndarray | DataFrame | Series | None =
- Raises:¶
TypeError – If
lagsorhold_backis not an integer (a float, including 5.0, and a bool are not accepted), ifconstant,use_rotatedorrescaleis not a bool (rescalecan also be None), ifvolatilityordistributionis not an instance ofVolatilityProcessorDistribution, or ifxcannot be converted to numbers.ValueError – If
lagsis negative, empty or in an unsupported format, if the largest lag is not smaller than the number of observations, ifhold_backis negative, or ifxcontains NaN or inf or does not have a row for each observation ofy.
Notes
The HAR-X model is described by
\[y_t = \mu + \sum_{i=1}^p \phi_{L_{i}} \bar{y}_{t-L_{i,0}:L_{i,1}} + \gamma' x_t + \epsilon_t\]where \(\bar{y}_{t-L_{i,0}:L_{i,1}}\) is the average value of \(y_t\) between \(t-L_{i,0}\) and \(t - L_{i,1}\).
Examples
Standard HAR with average lags 1, 5 and 22
>>> import numpy as np >>> from arch.univariate import HARX >>> y = np.random.RandomState(1234).randn(100) >>> harx = HARX(y, lags=[1, 5, 22]) >>> res = harx.fit()A standard HAR with average lags 1 and 6 but holding back 10 observations
>>> from pandas import Series, date_range >>> index = date_range('2000-01-01', freq='ME', periods=y.shape[0]) >>> y = Series(y, name='y', index=index) >>> har = HARX(y, lags=[1, 6], hold_back=10)Models with equivalent parametrizations of lags. The first uses overlapping lags.
>>> harx_1 = HARX(y, lags=[1,5,22])The next uses rotated lags so that they do not overlap.
>>> harx_2 = HARX(y, lags=[1,5,22], use_rotated=True)The third manually specified overlapping lags.
>>> harx_3 = HARX(y, lags=[[1, 1, 1], [1, 5, 22]])The final manually specified non-overlapping lags
>>> harx_4 = HARX(y, lags=[[1, 2, 6], [1, 5, 22]])It is simple to verify that these are the equivalent by inspecting the R2.
>>> models = [harx_1, harx_2, harx_3, harx_4] >>> print([round(mod.fit().rsquared, 3) for mod in models]) [0.085, 0.085, 0.085, 0.085]Methods
append(y[, x])Append observations to the model in-place.
bounds()Construct bounds for parameters to use in non-linear optimization.
compute_param_cov(params[, backcast, robust])Compute parameter covariances using numerical derivatives.
Construct linear constraint arrays for use in non-linear optimization.
fit([update_freq, disp, starting_values, ...])Estimate model parameters.
fix(params[, first_obs, last_obs])Construct an ARCHModelFixedResult from fixed parameters.
forecast(params[, horizon, start, align, ...])Construct forecasts from estimated model.
Return the names of the parameters of the mean model.
resids(params[, y, regressors])Compute model residuals.
simulate(params, nobs[, burn, ...])Simulate data from a linear regression, AR or HAR models.
Return starting values for the mean model.
Properties
Get or set the error distribution.
The name of the model.
Number of parameters in the model.
Get or set the volatility process.
The exogenous regressors in the model.
The dependent variable.