| Type: | Package |
| Title: | Winsorized ARMA Estimation for Higher-Order Stochastic Volatility Models |
| Version: | 0.1.0 |
| Description: | Estimation, simulation, hypothesis testing, and forecasting for univariate higher-order stochastic volatility SV(p) models. Supports Gaussian, Student-t, and Generalized Error Distribution (GED) innovations, with optional leverage effects. Estimation uses closed-form Winsorized ARMA-SV (W-ARMA-SV) moment-based methods that avoid numerical optimization. Hypothesis testing includes Local Monte Carlo (LMC) and Maximized Monte Carlo (MMC) procedures for leverage effects, heavy tails, and autoregressive order selection. Forecasting is based on Kalman filtering and smoothing. See Ahsan and Dufour (2021) <doi:10.1016/j.jeconom.2020.01.018>, Ahsan, Dufour, and Rodriguez Rondon (2025) for details. |
| License: | GPL (≥ 3) |
| URL: | https://github.com/roga11/wARMASVp |
| BugReports: | https://github.com/roga11/wARMASVp/issues |
| Encoding: | UTF-8 |
| Imports: | Rcpp (≥ 1.0.0), gsignal, stats |
| Suggests: | pso, GenSA, testthat (≥ 3.0.0), knitr, rmarkdown |
| LinkingTo: | Rcpp, RcppArmadillo |
| RoxygenNote: | 7.3.3 |
| VignetteBuilder: | knitr |
| NeedsCompilation: | yes |
| Packaged: | 2026-04-21 20:58:28 UTC; gabrielrodriguez |
| Author: | Gabriel Rodriguez Rondon
|
| Maintainer: | Gabriel Rodriguez Rondon <gabriel.rodriguezrondon@mail.mcgill.ca> |
| Repository: | CRAN |
| Date/Publication: | 2026-04-22 08:20:08 UTC |
wARMASVp: Winsorized ARMA Estimation for Higher-Order Stochastic Volatility Models
Description
Estimation, simulation, hypothesis testing, and forecasting for univariate higher-order stochastic volatility SV(p) models. Supports Gaussian, Student-t, and GED innovations with optional leverage effects.
Details
The main user-facing functions are:
-
svp– Estimate SV(p) model with optional leverage -
svpSE– Simulation-based standard errors -
sim_svp– Simulate SV(p) processes -
filter_svp– Kalman/mixture/particle filtering -
forecast_svp– Multi-step volatility forecasts
Author(s)
Maintainer: Gabriel Rodriguez Rondon gabriel.rodriguezrondon@mail.mcgill.ca (ORCID)
Authors:
Nazmul Ahsan
Jean-Marie Dufour
References
Ahsan, N. and Dufour, J.-M. (2021). Simple estimators and inference for higher-order stochastic volatility models. Journal of Econometrics, 224(1), 181-197.
Ahsan, N., Dufour, J.-M., and Rodriguez Rondon, G. (2025). Estimation and inference for higher-order stochastic volatility models with leverage. Journal of Time Series Analysis.
Ahsan, N., Dufour, J.-M., and Rodriguez Rondon, G. (2025). Estimation and inference for stochastic volatility models with heavy-tailed distributions.
See Also
Useful links:
Add leverage estimation to a fitted SV(p) model (post-processing) Works for all error distributions: Gaussian, Student-t, GED. - Gaussian: closed form (C_F = 1) - Student-t: closed form with C_t(nu) correction - GED: exact 1D root-finding via uniroot + Gauss-Hermite quadrature
Description
Add leverage estimation to a fitted SV(p) model (post-processing) Works for all error distributions: Gaussian, Student-t, GED. - Gaussian: closed form (C_F = 1) - Student-t: closed form with C_t(nu) correction - GED: exact 1D root-finding via uniroot + Gauss-Hermite quadrature
Usage
.add_leverage(out, y, p, rho_type, del, trunc_lev, wDecay, errorType)
Arguments
out |
Model object from .svp_gaussian/.svp_t/.svp_ged (without leverage) |
y |
Numeric vector of observations |
p |
AR order |
rho_type |
"pearson", "kendall", or "both" |
del |
Small constant for log transform |
trunc_lev |
Logical: truncate rho to [-0.999, 0.999] |
wDecay |
Logical: decaying weights (passed from original estimation) |
errorType |
"Gaussian", "Student-t", or "GED" |
Value
Updated model object with leverage fields added
Compute EH cross-moment for leverage estimation
Description
EH = demeaned sample cross-moment (1/(T-2)) \sum(|y_t| - \bar{|y|})(y_{t-1} - \bar{y}).
Usage
.compute_EH(y, rho_type = "pearson")
Arguments
y |
Numeric vector of observations |
rho_type |
"pearson" or "kendall" |
Value
EH value
Gauss-Hermite quadrature nodes and weights for N(0,1) integration Computes nodes z_i and weights w_i such that sum(w_i * f(z_i)) approximates E[f(Z)] where Z ~ N(0,1). Uses the Golub-Welsch algorithm.
Description
Gauss-Hermite quadrature nodes and weights for N(0,1) integration Computes nodes z_i and weights w_i such that sum(w_i * f(z_i)) approximates E[f(Z)] where Z ~ N(0,1). Uses the Golub-Welsch algorithm.
Usage
.gauss_hermite_normal(n = 200L)
Arguments
n |
Number of quadrature points (default 200) |
Value
List with components nodes and weights
Get cached Gauss-Hermite nodes/weights for N(0,1)
Description
Get cached Gauss-Hermite nodes/weights for N(0,1)
Usage
.get_gh(n = 200L)
Arguments
n |
Number of nodes (default 200) |
Value
List with nodes and weights
GMM moments for SVL(p)-GED with fixed A matrix (p+4 conditions) Uses exact GED leverage moment.
Description
GMM moments for SVL(p)-GED with fixed A matrix (p+4 conditions) Uses exact GED leverage moment.
Usage
LRT_moment_lev_ged(y, mdl_out, Amat, rho_type, del = 1e-10)
GMM moments for SVL(p)-GED with HAC weighting (p+4 conditions)
Description
GMM moments for SVL(p)-GED with HAC weighting (p+4 conditions)
Usage
LRT_moment_lev_ged_Amat(y, mdl_out, rho_type, del = 1e-10, Bartlett = TRUE)
GMM moments for SVL(p)-Student-t with fixed A matrix (p+4 conditions)
Description
GMM moments for SVL(p)-Student-t with fixed A matrix (p+4 conditions)
Usage
LRT_moment_lev_t(y, mdl_out, Amat, rho_type, del = 1e-10)
GMM moments for SVL(p)-Student-t with HAC weighting (p+4 conditions)
Description
GMM moments for SVL(p)-Student-t with HAC weighting (p+4 conditions)
Usage
LRT_moment_lev_t_Amat(y, mdl_out, rho_type, del = 1e-10, Bartlett = TRUE)
Construct Companion Matrix for AR(p) Process
Description
Builds the companion matrix representation for an AR(p) process, which is used in the state-space formulation of SV(p) models.
Usage
companionMat(phi, p, q)
Arguments
phi |
Numeric vector of AR coefficients (length p). |
p |
Integer. Order of the AR process. |
q |
Integer. Dimension of each block (typically 1 for univariate). |
Value
A (q*p) x (q*p) companion matrix.
Approximate correction factor C_g(nu) for GED leverage (diagnostic use only)
Description
C_g(\nu) = E[|u|] \cdot \textrm{Cov}(z, F_{GED}^{-1}(\Phi(z))) / \sqrt{2/\pi}.
This is a first-order approximation; estimation uses the exact implicit equation.
Usage
correction_factor_ged_approx(nu, n_nodes = 200L)
Arguments
nu |
GED shape parameter (nu > 0) |
n_nodes |
Number of GH quadrature nodes (default 200) |
Value
Approximate C_g(nu)
Correction factor C_t(nu) for Student-t leverage estimation
Description
Under scale mixture u_t = z_t \lambda_t^{-1/2},
C_t(\nu) = [E[\lambda^{-1/2}]]^2 = (\nu/2) [\Gamma((\nu-1)/2) / \Gamma(\nu/2)]^2.
Exact, parameter-free.
Usage
correction_factor_t(nu)
Arguments
nu |
Degrees of freedom (nu > 1) |
Value
C_t(nu), always > 1 for finite nu (approaches 1 as nu -> Inf)
Density of Centered log-GED^2 Measurement Noise
Description
Density of Centered log-GED^2 Measurement Noise
Usage
density_eps_ged(y, nu)
Arguments
y |
Numeric vector. Evaluation points (centered: E[eps] = 0). |
nu |
Numeric. GED shape parameter. |
Value
Density values.
Density of Centered log-F(1,nu) Measurement Noise (Student-t)
Description
Density of Centered log-F(1,nu) Measurement Noise (Student-t)
Usage
density_eps_t(y, nu)
Arguments
y |
Numeric vector. Evaluation points (centered: E[eps] = 0). |
nu |
Numeric. Student-t degrees of freedom. |
Value
Density values.
Filter Latent Volatility from an Estimated SV(p) Model
Description
Applies Kalman filtering (corrected or Gaussian mixture) and RTS smoothing to extract the latent log-volatility process from an estimated SV(p) model.
Usage
filter_svp(
object,
method = c("corrected", "mixture", "particle"),
K = 7,
M = 1000,
seed = 42,
del = 1e-10
)
Arguments
object |
An |
method |
Character. Filter method: |
K |
Integer. Number of mixture components for GMKF. Default 7. |
M |
Integer. Number of particles for BPF. Default 1000. |
seed |
Integer. Random seed for BPF. Default 42. |
del |
Numeric. Small constant for log transformation. Default |
Value
An object of class "svp_filter", a list containing:
- w_filtered
Filtered log-volatility (T-vector).
- w_smoothed
Smoothed log-volatility (T-vector).
- zt
Filtered standardized residuals.
- zt_smoothed
Smoothed standardized residuals.
- P_filtered
Filtered MSE of first state component.
- P_predicted
Predicted MSE of first state component.
- xi_filtered
Full filtered state vectors (p x T matrix).
- xi_smoothed
Full smoothed state vectors (p x T matrix).
- loglik
Approximate log-likelihood.
- method
Filter method used.
- model
The input model object.
Examples
y <- sim_svp(1000, phi = 0.95, sigy = 1, sigv = 0.2)$y
fit <- svp(y, p = 1)
filt <- filter_svp(fit)
plot(filt$w_smoothed, type = "l")
Fit K-Component Gaussian Mixture to Measurement Noise Density
Description
Uses EM algorithm to approximate the measurement noise density with a Gaussian mixture. For Gaussian SV, returns the pre-computed KSC (1998) 7-component table.
Usage
fit_ksc_mixture(
distribution = c("gaussian", "student_t", "ged"),
nu = NULL,
K = 7,
n_sample = 10000,
max_iter = 500,
tol = 1e-08,
seed = 42
)
Arguments
distribution |
Character: |
nu |
Numeric. Shape parameter (ignored for Gaussian). |
K |
Integer. Number of mixture components. Default 7. |
n_sample |
Integer. Sample size for EM fitting. Default 10000. |
max_iter |
Integer. Maximum EM iterations. Default 500. |
tol |
Numeric. Convergence tolerance. Default 1e-8. |
seed |
Integer. Random seed. Default 42. |
Value
List with weights, means, vars, KL_div.
Multi-Step Ahead Volatility Forecast
Description
Applies Kalman filtering/smoothing to an estimated SV(p) model and produces multi-step ahead volatility forecasts with uncertainty quantification.
Usage
forecast_svp(
object,
H = 1,
output = c("log-variance", "variance", "volatility"),
filter_method = "corrected",
K = 7,
M = 1000,
seed = 42,
del = 1e-10
)
Arguments
object |
An |
H |
Integer. Maximum forecast horizon. Default 1. |
output |
Character. Primary output scale: |
filter_method |
Character. Filter method: |
K |
Integer. Number of mixture components for GMKF. Default 7. |
M |
Integer. Number of particles for BPF. Default 1000. |
seed |
Integer. Random seed for BPF. Default 42. |
del |
Numeric. Small constant for log transformation. Default |
Value
An object of class "svp_forecast", a list containing:
- w_forecasted
Primary forecast (scale determined by
output).- log_var_forecast
Log-volatility forecasts
w_{T+h|T}.- var_forecast
Conditional variance forecasts
\sigma^2_{T+h|T}.- vol_forecast
Conditional volatility forecasts
\sigma_{T+h|T}.- P_forecast
Forecast MSE
P_{T+h|T}for each horizon.- w_estimated
Filtered log-volatility.
- w_smoothed
Smoothed log-volatility.
- zt
Filtered standardized residuals.
- zt_smoothed
Smoothed standardized residuals.
- ys
Demeaned log-squared returns.
- mdl
The estimated model object.
- H
The forecast horizon.
- output
The chosen output scale.
- filter_output
The
"svp_filter"object from filtering.
Examples
sim <- sim_svp(1000, phi = 0.95, sigy = 1, sigv = 0.2,
leverage = TRUE, rho = -0.3)
fit <- svp(sim$y, p = 1, leverage = TRUE)
fc <- forecast_svp(fit, H = 10)
plot(fc)
E[|u|] for standardized GED(nu) with Var = 1 Closed form: sqrt(Gamma(1/nu)/Gamma(3/nu)) * Gamma(2/nu) / Gamma(1/nu)
Description
E[|u|] for standardized GED(nu) with Var = 1 Closed form: sqrt(Gamma(1/nu)/Gamma(3/nu)) * Gamma(2/nu) / Gamma(1/nu)
Usage
ged_E_abs_u(nu)
Arguments
nu |
GED shape parameter (nu > 0) |
Value
E[|u|]
LMC Test for AR Order in SV(p) Models
Description
Performs a Local Monte Carlo (LMC) test of the null hypothesis
H_0: \phi_{p_0+1} = \cdots = \phi_p = 0 (i.e., that an SV(p_0)
model is sufficient against an SV(p) alternative).
Usage
lmc_ar(
y,
p_null,
p_alt,
J = 10,
N = 99,
burnin = 500,
del = 1e-10,
wDecay = FALSE,
Bartlett = FALSE,
Amat = NULL,
sigvMethod = "factored"
)
Arguments
y |
Numeric vector. Observed returns. |
p_null |
Integer. Order under the null hypothesis. |
p_alt |
Integer. Order under the alternative ( |
J |
Integer. Winsorizing parameter. Default 10. |
N |
Integer. Number of Monte Carlo replications. Default 99. |
burnin |
Integer. Burn-in for simulation. Default 500. |
del |
Numeric. Small constant for log transformation. Default |
wDecay |
Logical. Use decaying weights. Default |
Bartlett |
Logical. If |
Amat |
Weighting matrix specification. |
sigvMethod |
Character. Method for |
Details
When Bartlett = FALSE (default), the test statistic is
T \sum_{j=p_0+1}^{p} \hat\phi_j^2, i.e., the sum of squared extra
AR coefficients scaled by sample size.
When Bartlett = TRUE, the test statistic is based on the GMM-LRT
approach with a Bartlett kernel HAC weighting matrix:
S = T \times (M_{H_0} - M_{H_1}), where M denotes the
GMM criterion evaluated at the null and alternative estimates. Simulations
yielding negative test statistics are discarded and re-drawn.
Value
An object of class "svp_test", a list containing:
- s0
Test statistic from observed data.
- sN
Simulated null distribution (vector of length N).
- pval
Monte Carlo p-value.
- test_type
Character string identifying the test.
- null_param
Name of the parameter(s) tested.
- null_value
Value(s) under the null hypothesis.
- call
The matched call.
Examples
y <- sim_svp(1000, phi = 0.95, sigy = 1, sigv = 0.2)$y
test <- lmc_ar(y, p_null = 1, p_alt = 2, J = 10, N = 49)
print(test)
LMC Test for GED Shape Parameter
Description
Performs a Local Monte Carlo (LMC) test of the null hypothesis
H_0: \nu = \nu_0 for the shape parameter in an SV(p) model
with GED errors. Testing \nu_0 = 2 corresponds to testing normality.
Usage
lmc_ged(
y,
p = 1,
J = 10,
N = 99,
nu_null,
burnin = 500,
del = 1e-10,
wDecay = FALSE,
Bartlett = FALSE,
Amat = NULL,
direction = c("two-sided", "less", "greater"),
sigvMethod = "factored",
winsorize_eps = 0
)
Arguments
y |
Numeric vector. Observed returns. |
p |
Integer. AR order of the volatility process. Default 1. |
J |
Integer. Winsorizing parameter. Default 10. |
N |
Integer. Number of Monte Carlo replications. Default 99. |
nu_null |
Numeric. Value of |
burnin |
Integer. Burn-in for simulation. Default 500. |
del |
Numeric. Small constant for log transformation. Default |
wDecay |
Logical. Use decaying weights. Default |
Bartlett |
Logical. Use Bartlett kernel HAC for weighting matrix.
Default |
Amat |
Weighting matrix specification. |
direction |
Character. Test direction: |
sigvMethod |
Character. Method for |
winsorize_eps |
Numeric. Winsorization threshold for moment conditions. Default 0 (no winsorization). |
Value
An object of class "svp_test".
Examples
y <- sim_svp(1000, phi = 0.95, sigy = 1, sigv = 0.2, errorType = "GED", nu = 1.5)$y
test <- lmc_ged(y, p = 1, J = 10, N = 49, nu_null = 2)
print(test)
LMC Test for Leverage in SV(p) Models
Description
Performs a Local Monte Carlo (LMC) test of the null hypothesis
H_0: \rho = \rho_0 (typically \rho_0 = 0, i.e., no leverage)
using a GMM likelihood-ratio type statistic.
Usage
lmc_lev(
y,
p = 1,
J = 10,
N = 99,
rho_null = 0,
burnin = 500,
rho_type = "pearson",
del = 1e-10,
trunc_lev = TRUE,
wDecay = FALSE,
Bartlett = FALSE,
Amat = NULL,
errorType = "Gaussian",
logNu = FALSE,
sigvMethod = "factored",
winsorize_eps = 0
)
Arguments
y |
Numeric vector. Observed returns. |
p |
Integer. Order of the volatility process. Default 1. |
J |
Integer. Winsorizing parameter. Default 10. |
N |
Integer. Number of Monte Carlo replications. Default 99. |
rho_null |
Numeric. Value of |
burnin |
Integer. Burn-in for simulation. Default 500. |
rho_type |
Character. Correlation type. Default |
del |
Numeric. Small constant for log transformation. Default |
trunc_lev |
Logical. Truncate leverage correlation estimate to
|
wDecay |
Logical. Use decaying weights. Default |
Bartlett |
Logical. If |
Amat |
Weighting matrix specification. |
errorType |
Character. Error distribution: |
logNu |
Logical. Use log-space for nu estimation (Student-t only).
Default |
sigvMethod |
Method for sigma_v estimation: |
winsorize_eps |
Number of extreme autocovariance lags to winsorize (0 = none). Default 0. |
Value
An object of class "svp_test", a list containing:
- s0
Test statistic from observed data.
- sN
Simulated null distribution (vector of length N).
- pval
Monte Carlo p-value.
- test_type
Character string identifying the test.
- null_param
Name of the parameter tested.
- null_value
Value under the null hypothesis.
- call
The matched call.
Examples
y <- sim_svp(1000, phi = 0.95, sigy = 1, sigv = 0.2, leverage = TRUE, rho = -0.3)$y
test <- lmc_lev(y, p = 1, J = 10, N = 99)
print(test)
LMC Test for Student-t Tail Parameter
Description
Performs a Local Monte Carlo (LMC) test of the null hypothesis
H_0: \nu = \nu_0 for the degrees of freedom parameter in an
SV(p) model with Student-t errors. Testing \nu_0 = \infty
(or a large value) corresponds to testing for normality.
Usage
lmc_t(
y,
p = 1,
J = 10,
N = 99,
nu_null,
burnin = 500,
del = 1e-10,
wDecay = FALSE,
Bartlett = FALSE,
Amat = NULL,
logNu = TRUE,
direction = c("two-sided", "less", "greater"),
sigvMethod = "factored",
winsorize_eps = 0
)
Arguments
y |
Numeric vector. Observed returns. |
p |
Integer. AR order of the volatility process. Default 1. |
J |
Integer. Winsorizing parameter. Default 10. |
N |
Integer. Number of Monte Carlo replications. Default 99. |
nu_null |
Numeric. Value of |
burnin |
Integer. Burn-in for simulation. Default 500. |
del |
Numeric. Small constant for log transformation. Default |
wDecay |
Logical. Use decaying weights. Default |
Bartlett |
Logical. Use Bartlett kernel HAC for weighting matrix.
Default |
Amat |
Weighting matrix specification. |
logNu |
Logical. Use log-space for nu estimation. Default |
direction |
Character. Test direction: |
sigvMethod |
Character. Method for |
winsorize_eps |
Numeric. Winsorization threshold for moment conditions. Default 0 (no winsorization). |
Value
An object of class "svp_test".
Examples
y <- sim_svp(1000, phi = 0.95, sigy = 1, sigv = 0.2, errorType = "Student-t", nu = 5)$y
test <- lmc_t(y, p = 1, J = 10, N = 49, nu_null = 5)
print(test)
MMC Test for AR Order in SV(p) Models
Description
Performs a Maximized Monte Carlo (MMC) test of
H_0: \phi_{p_0+1} = \cdots = \phi_p = 0
by maximizing the MC p-value over nuisance parameters
(\phi_1, \ldots, \phi_{p_0}, \sigma_y, \sigma_v).
Usage
mmc_ar(
y,
p_null,
p_alt,
J = 10,
N = 99,
burnin = 500,
eps = NULL,
threshold = 1,
method = "pso",
maxit = NULL,
del = 1e-10,
wDecay = FALSE,
Bartlett = FALSE,
Amat = NULL,
sigvMethod = "factored"
)
Arguments
y |
Numeric vector. Observed returns. |
p_null |
Integer. Order under the null hypothesis. |
p_alt |
Integer. Order under the alternative ( |
J |
Integer. Winsorizing parameter. Default 10. |
N |
Integer. Number of Monte Carlo replications. Default 99. |
burnin |
Integer. Burn-in for simulation. Default 500. |
eps |
Numeric vector. Half-width of search region around estimated
nuisance parameters. Default |
threshold |
Numeric. Target p-value. Default 1. |
method |
Character. Optimization method: |
maxit |
Integer. Maximum iterations/evaluations. Default depends on method. |
del |
Numeric. Small constant for log transformation. Default |
wDecay |
Logical. Use decaying weights. Default |
Bartlett |
Logical. If |
Amat |
Weighting matrix specification. |
sigvMethod |
Character. Method for |
Value
A list with optimization output including value (maximized p-value)
and par (nuisance parameters at the maximum).
Examples
y <- sim_svp(1000, phi = 0.95, sigy = 1, sigv = 0.2)$y
mmc <- mmc_ar(y, p_null = 1, p_alt = 2, J = 10, N = 19,
method = "pso", maxit = 10)
mmc$value
MMC Test for GED Shape Parameter
Description
Performs a Maximized Monte Carlo (MMC) test of H_0: \nu = \nu_0
for the GED shape parameter.
Usage
mmc_ged(
y,
p = 1,
J = 10,
N = 99,
nu_null,
burnin = 500,
eps = NULL,
threshold = 1,
method = "pso",
maxit = NULL,
del = 1e-10,
wDecay = FALSE,
Bartlett = FALSE,
Amat = NULL,
direction = c("two-sided", "less", "greater"),
sigvMethod = "factored",
winsorize_eps = 0
)
Arguments
y |
Numeric vector. Observed returns. |
p |
Integer. AR order of the volatility process. Default 1. |
J |
Integer. Winsorizing parameter. Default 10. |
N |
Integer. Number of Monte Carlo replications. Default 99. |
nu_null |
Numeric. Value of |
burnin |
Integer. Burn-in for simulation. Default 500. |
eps |
Numeric vector. Half-width of search region around estimated nuisance
parameters. Must have length |
threshold |
Numeric. Target p-value. Default 1. |
method |
Character. Optimization method: |
maxit |
Integer. Maximum iterations/evaluations. Default depends on method. |
del |
Numeric. Small constant for log transformation. Default |
wDecay |
Logical. Use decaying weights. Default |
Bartlett |
Logical. Use Bartlett kernel HAC for weighting matrix.
Default |
Amat |
Weighting matrix specification. |
direction |
Character. Test direction: |
sigvMethod |
Character. Method for |
winsorize_eps |
Numeric. Winsorization threshold for moment conditions. Default 0 (no winsorization). |
Value
A list with optimization output including value (maximized p-value)
and par (nuisance parameters at the maximum).
Examples
y <- sim_svp(1000, phi = 0.95, sigy = 1, sigv = 0.2, errorType = "GED", nu = 1.5)$y
mmc <- mmc_ged(y, p = 1, J = 10, N = 19, nu_null = 2, method = "pso", maxit = 10)
mmc$value
MMC Test for Leverage in SV(p) Models
Description
Performs a Maximized Monte Carlo (MMC) test of the null hypothesis
H_0: \rho = \rho_0 by maximizing the MC p-value over nuisance
parameters (phi, sigma_y, sigma_v).
Usage
mmc_lev(
y,
p = 1,
J = 10,
N = 99,
rho_null = 0,
burnin = 500,
eps = NULL,
threshold = 1,
method = "pso",
maxit = NULL,
rho_type = "pearson",
del = 1e-10,
trunc_lev = TRUE,
wDecay = FALSE,
Bartlett = FALSE,
Amat = NULL,
errorType = "Gaussian",
logNu = FALSE,
sigvMethod = "factored",
winsorize_eps = 0
)
Arguments
y |
Numeric vector. Observed returns. |
p |
Integer. Order of the volatility process. Default 1. |
J |
Integer. Winsorizing parameter. Default 10. |
N |
Integer. Number of Monte Carlo replications. Default 99. |
rho_null |
Numeric. Value of |
burnin |
Integer. Burn-in for simulation. Default 500. |
eps |
Numeric vector. Half-width of the search region around the
estimated nuisance parameters. For Gaussian: length |
threshold |
Numeric. Target p-value (optimization stops if reached). Default 1. |
method |
Character. Optimization method: |
maxit |
Integer or list. Maximum iterations/evaluations for the optimizer. Default depends on method. |
rho_type |
Character. Correlation type. Default |
del |
Numeric. Small constant for log transformation. Default |
trunc_lev |
Logical. Truncate leverage correlation estimate to
|
wDecay |
Logical. Use decaying weights. Default |
Bartlett |
Logical. If |
Amat |
Weighting matrix specification. |
errorType |
Character. Error distribution: |
logNu |
Logical. Use log-space for nu estimation (Student-t only).
Default |
sigvMethod |
Method for sigma_v estimation: |
winsorize_eps |
Number of extreme autocovariance lags to winsorize (0 = none). Default 0. |
Value
A list with the optimization output including:
- value
Maximized p-value.
- par
Nuisance parameter values at the maximum.
Additional fields depend on the optimization method used.
Examples
y <- sim_svp(1000, phi = 0.95, sigy = 1, sigv = 0.2, leverage = TRUE, rho = -0.3)$y
mmc <- mmc_lev(y, p = 1, J = 10, N = 19, method = "pso", maxit = 10)
mmc$value
MMC Test for Student-t Tail Parameter
Description
Performs a Maximized Monte Carlo (MMC) test of H_0: \nu = \nu_0
by maximizing the MC p-value over nuisance parameters (phi, sigma_y, sigma_v).
Usage
mmc_t(
y,
p = 1,
J = 10,
N = 99,
nu_null,
burnin = 500,
eps = NULL,
threshold = 1,
method = "pso",
maxit = NULL,
del = 1e-10,
wDecay = FALSE,
Bartlett = FALSE,
Amat = NULL,
logNu = TRUE,
direction = c("two-sided", "less", "greater"),
sigvMethod = "factored",
winsorize_eps = 0
)
Arguments
y |
Numeric vector. Observed returns. |
p |
Integer. AR order of the volatility process. Default 1. |
J |
Integer. Winsorizing parameter. Default 10. |
N |
Integer. Number of Monte Carlo replications. Default 99. |
nu_null |
Numeric. Value of |
burnin |
Integer. Burn-in for simulation. Default 500. |
eps |
Numeric vector. Half-width of search region around estimated nuisance
parameters. Must have length |
threshold |
Numeric. Target p-value. Default 1. |
method |
Character. Optimization method: |
maxit |
Integer. Maximum iterations/evaluations. Default depends on method. |
del |
Numeric. Small constant for log transformation. Default |
wDecay |
Logical. Use decaying weights. Default |
Bartlett |
Logical. Use Bartlett kernel HAC for weighting matrix.
Default |
Amat |
Weighting matrix specification. |
logNu |
Logical. Use log-space for nu estimation. Default |
direction |
Character. Test direction: |
sigvMethod |
Character. Method for |
winsorize_eps |
Numeric. Winsorization threshold for moment conditions. Default 0 (no winsorization). |
Value
A list with optimization output including value (maximized p-value)
and par (nuisance parameters at the maximum).
Examples
y <- sim_svp(1000, phi = 0.95, sigy = 1, sigv = 0.2, errorType = "Student-t", nu = 5)$y
mmc <- mmc_t(y, p = 1, J = 10, N = 19, nu_null = 5, method = "pso", maxit = 10)
mmc$value
CDF of Standardized GED
Description
Computes the CDF of the standardized GED(\nu) distribution with
unit variance.
Usage
pged_std(u, nu)
Arguments
u |
Numeric vector. Evaluation points. |
nu |
Numeric. GED shape parameter ( |
Value
Numeric vector of probabilities.
Quantile function for standardized GED(nu) with Var = 1 Uses the relationship between GED CDF and incomplete gamma function.
Description
Quantile function for standardized GED(nu) with Var = 1 Uses the relationship between GED CDF and incomplete gamma function.
Usage
qged_std(p, nu)
Arguments
p |
Probability (0 < p < 1). Clamped to [1e-15, 1-1e-15] internally. |
nu |
GED shape parameter (nu > 0) |
Value
Quantile value
Simulate from a Stochastic Volatility Model
Description
Master simulation function for SV(p) models. Supports Gaussian, Student-t,
and GED error distributions, with optional leverage effects. This mirrors
the interface of svp for estimation.
Usage
sim_svp(
n,
phi,
sigy,
sigv,
errorType = "Gaussian",
leverage = FALSE,
rho = 0,
nu = NULL,
burnin = 500
)
Arguments
n |
Integer. Length of the simulated series. |
phi |
Numeric vector. AR coefficients for log-volatility (length p). |
sigy |
Numeric. Unconditional standard deviation of returns. |
sigv |
Numeric. Standard deviation of volatility innovations. |
errorType |
Character. Error distribution: |
leverage |
Logical. If |
rho |
Numeric. Leverage parameter (correlation between return and
volatility shocks). Must be in |
nu |
Numeric. Shape parameter for heavy-tailed distributions.
Degrees of freedom for Student-t (must be > 2) or GED shape (must be > 0).
Required when |
burnin |
Integer. Number of initial observations to discard. Default 500. |
Details
The model is:
y_t = \sigma_y \exp(w_t / 2) z_t
w_t = \phi_1 w_{t-1} + \cdots + \phi_p w_{t-p} + \sigma_v v_t
where z_t follows a distribution specified by errorType
(Gaussian, Student-t, or GED), and v_t is i.i.d. standard normal.
When leverage = TRUE, the correlation between z_t and
v_{t+1} is \rho.
For Student-t errors with leverage, the scale-mixture representation
z_t = \zeta_t \lambda_t^{-1/2} is used, where leverage operates through
the Gaussian component \zeta_t. For GED errors with leverage, a Gaussian
copula construction z_t = F_{\mathrm{GED}}^{-1}(\Phi(\zeta_t)) is used.
In both cases the returned z is the effective return innovation
(not the latent \zeta_t), with marginal distribution matching the
errorType.
Value
A named list of four length-n numeric vectors:
yObserved returns
y_t.hLog-volatility process
w_t(equivalentlyh_t).zReturn innovation such that
y_t = \sigma_y \exp(h_t/2)\, z_t. Marginal distribution matcheserrorType: N(0,1) for Gaussian, t(\nu) for Student-t, unit-variance GED(\nu) for GED.vVolatility innovation such that
h_t - \sum_{j=1}^p \phi_j h_{t-j} = \sigma_v\, v_t. Always N(0,1); under leverage,v_t = \rho\, \zeta_{t-1} + \sqrt{1-\rho^2}\, \epsilon_t.
See Also
svp for estimation.
Examples
# Gaussian SV(1), no leverage
sim <- sim_svp(1000, phi = 0.95, sigy = 1, sigv = 0.2)
plot(sim$y, type = "l")
# Gaussian SV(1) with leverage
sim_lev <- sim_svp(1000, phi = 0.95, sigy = 1, sigv = 0.2,
leverage = TRUE, rho = -0.5)
plot(sim_lev$y, type = "l")
# Student-t SV(1)
sim_t <- sim_svp(1000, phi = 0.95, sigy = 1, sigv = 0.2,
errorType = "Student-t", nu = 5)
plot(sim_t$y, type = "l")
# GED SV(1)
sim_ged <- sim_svp(1000, phi = 0.95, sigy = 1, sigv = 0.2,
errorType = "GED", nu = 1.5)
plot(sim_ged$y, type = "l")
Solve Discrete Lyapunov Equation
Description
Solves X = F X t(F) + Q for X using the vectorization approach.
Usage
solve_lyapunov_discrete(F_mat, Q)
Arguments
F_mat |
Square matrix. |
Q |
Square matrix (same dimensions as |
Value
Solution matrix X.
Estimate a Stochastic Volatility Model
Description
Master estimation function for SV(p) models using the Winsorized ARMA-SV (W-ARMA-SV) method. Supports Gaussian, Student-t, and GED error distributions, with optional leverage effects.
Usage
svp(
y,
p = 1,
J = 10,
leverage = FALSE,
errorType = "Gaussian",
rho_type = "pearson",
del = 1e-10,
trunc_lev = TRUE,
wDecay = FALSE,
logNu = FALSE,
sigvMethod = "factored",
winsorize_eps = 0
)
Arguments
y |
Numeric vector. Observed returns (e.g., de-meaned log returns). |
p |
Integer. Order of the volatility process. Default is 1. |
J |
Integer. Winsorizing parameter controlling the number of autocovariance blocks used. Default is 10. |
leverage |
Logical. If |
errorType |
Character. Error distribution: |
rho_type |
Character. Correlation type for leverage estimation. One of
|
del |
Numeric. Small constant for log transformation:
|
trunc_lev |
Logical. If |
wDecay |
Logical. Use linearly decaying weights in the WLS estimation.
Default is |
logNu |
Logical. Solve for |
sigvMethod |
Character. Method for estimating |
winsorize_eps |
Integer. Number of extreme autocovariance lags to
winsorize ( |
Details
The model is:
y_t = \sigma_y \exp(w_t / 2) z_t
w_t = \phi_1 w_{t-1} + \cdots + \phi_p w_{t-p} + \sigma_v v_t
where z_t follows a distribution specified by errorType
(Gaussian, Student-t, or GED), and v_t is i.i.d. standard normal.
When leverage = TRUE, the correlation between z_t and
v_t is estimated as \rho.
For Student-t errors with leverage, the correction factor
C_t(\nu) from the scale-mixture representation is applied.
For GED errors with leverage, the exact implicit equation is solved
via 1D root-finding with Gauss-Hermite quadrature.
Value
Depending on errorType:
-
"Gaussian": An object of class"svp"(see below). -
"Student-t": An object of class"svp_t". -
"GED": An object of class"svp_ged".
The "svp" class contains:
- mu
Mean of
\log(y_t^2 + \delta).- phi
Numeric vector of AR coefficients.
- sigv
Standard deviation of volatility innovations.
- sigy
Unconditional standard deviation.
- rho
Leverage parameter (if estimated, otherwise
NA).- y
The original data.
- p, J
Model order and winsorizing parameter.
- errorType
The error distribution used.
- call
The matched call.
References
Ahsan, N. and Dufour, J.-M. (2021). Simple estimators and inference for higher-order stochastic volatility models. Journal of Econometrics, 224(1), 181-197.
Ahsan, N., Dufour, J.-M., and Rodriguez Rondon, G. (2025). Estimation and inference for stochastic volatility models with heavy-tailed distributions.
See Also
svpSE for standard errors.
Examples
# Gaussian SV(1) without leverage (default)
y <- sim_svp(1000, phi = 0.95, sigy = 1, sigv = 0.2)$y
fit <- svp(y)
summary(fit)
# With leverage
y2 <- sim_svp(1000, phi = 0.95, sigy = 1, sigv = 0.2, leverage = TRUE, rho = -0.3)$y
fit2 <- svp(y2, leverage = TRUE)
coef(fit2)
# Student-t errors
y3 <- sim_svp(1000, phi = 0.9, sigy = 1, sigv = 0.2, errorType = "Student-t", nu = 5)$y
fit3 <- svp(y3, errorType = "Student-t")
summary(fit3)
Simulation-Based Standard Errors for SV(p) Models
Description
Computes standard errors and confidence intervals for estimated parameters
by simulating from the fitted model and re-estimating. Supports all model
types returned by svp: Gaussian (with or without leverage),
Student-t, and GED.
Usage
svpSE(object, n_sim = 199, alpha = 0.05, burnin = 500, logNu = FALSE)
Arguments
object |
A fitted model object from |
n_sim |
Integer. Number of Monte Carlo replications. Default 199. |
alpha |
Numeric. Significance level for confidence intervals. Default 0.05. |
burnin |
Integer. Burn-in period for simulation. Default 500. |
logNu |
Logical. Solve for |
Value
A list with:
- CI
2 x k matrix of confidence intervals (lower, upper).
- SEsim0
Standard errors relative to true parameter values.
- SEsim
Standard errors relative to sample mean.
- ISEconservative
Conservative interval-based standard errors.
- ISEliberal
Liberal interval-based standard errors.
- thetamat
Matrix of parameter estimates from simulations.
Examples
# Gaussian SV(1)
y <- sim_svp(1000, phi = 0.95, sigy = 1, sigv = 0.2)$y
fit <- svp(y)
se <- svpSE(fit, n_sim = 49)
se$CI