qgarch is an R package for estimating and working with
quadratic GARCH-in-mean models in the Campbell and Hentschel (1992)
volatility-feedback framework.
We replicated and extended the original paper in: Jedrzej Bialkowski, Sanghyun Hong and Moritz Wagner (2025). “Is no news still good news? Volatility feedback revisited.” Pacific-Basin Finance Journal, Volume 91. https://doi.org/10.1016/j.pacfin.2025.102708.
In the Campbell and Hentschel model, expected returns vary with conditional variance, and stock returns include a volatility-feedback term that helps capture asymmetric return dynamics. The framework is designed to accommodate features such as predictive asymmetry, negative skewness, and excess kurtosis in stock returns. See, John Y. Campbell, Ludger Hentschel (1992). “No news is good news: An asymmetric model of changing volatility in stock returns.” Journal of Financial Economics, Volume 31, Issue 3, 281-318. https://doi.org/10.1016/0304-405X(92)90037-X.
qgarch provides tools to:
The main estimation function is qgarch_fit(). It
supports four model specifications:
model = "zero": sets lambda = 0,model = "restricted": links lambda to the
remaining parameters through the restricted mapping,model = "free": estimates lambda freely,
andmodel = "threshold": allows a state-dependent
lambda_t.You can install the development version of qgarch
directly from GitHub:
install.packages("remotes")
remotes::install_github("sho-125/qgarch")
library(qgarch)The example below installs the package from GitHub, loads the bundled
monthly U.S. dataset, fits a QGARCH(1,1) model with freely estimated
volatility-feedback parameter lambda, and then plots the
fitted conditional variance and standardized residuals.
```r # Install from GitHub install.packages(“remotes”) remotes::install_github(“sho-125/qgarch”)
library(qgarch)
data(“us_monthly”, package = “qgarch”)
x <- us_monthly$ER
fit11 <- qgarch_fit( x, model = “free”, arch_order = 1L, garch_order = 1L )
print(fit11) summary(fit11) coef(fit11) logLik(fit11)
plot(fit11, which = “sigma2”)
plot(fit11, which = “standardized”)