# Evaluating goodness-of-fit for GARCH models in R with QQ-plots (rugarch package)

I'm currently working with multivariate GARCH representations of time-series for financial data using the rmgarch R package. This package in turn uses the well-known rugarch package to fit the 'marginal' GARCH processes.

Right now I'm evaluating the goodness-of-fit and parameter estimates when using different conditional distributions for the variance innovations. It seems that (skewed) student's t and skewed normal fit my data better as they present heavier-than-normal tails, skew, and excess kurtosis. In addition, the parameter estimates seem to become more significant (particularly the estimate for $$\alpha_1$$) when using non-normal distributions.

Typically, I would analyse the standardised residuals of my model (available in "fit object"@mfit\$stdresid for a DCC-fitted model), and use for example a QQ plot against the theoretical distribution to examine the behaviour, along with an ACF plot to examine autocorrelations. This is easily done when assuming normal innovations as the standard qqnorm in R does the trick, however I'm less sure how to do this procedure for the skewed normal and (skewed) $$t$$ distributions.

Is there a good way to produce these kinds of QQ-plots in R? The GARCH package(s) will readily output estimates for skew and shape, but I'm not sure how to incorporate these into QQ-plots.

Also, as a side question: currently I'm fitting three time series. Two of them seem to want Student's $$t$$ distribution, and one skewed normal. For the joint innovations, however, I'm currently using a multivariate normal distribution. Does this make sense from a mathematical perspective? As you might tell, I'm relatively inexperienced with time-series models, but this seems akin to fitting a joint distribution normally but with non-normal marginal distributions, which seems odd.

Thanks for any help! :)

• What do you think about my answer? If it is helpful and clear, you may accept it by clicking on the tick mark to the left. Otherwise, you may ask for further clarification. A helpful answer can also be upvoted by clicking on the upward-pointing arrow. This is how Cross Validated works. Commented Apr 15, 2023 at 15:44

To assess the distributional assumption of a GARCH model, you can look at the probability integral transform (PIT) of the standardized residuals. It can be obtained by pit(fit) where fit is a fitted model object from rugarch. If the model is a good approximation of the data, the PIT should be roughly Uniform[0,1]. If you want to do a QQ plot, you can use the qnorm function to go from uniform to standard normal and then use the qnorm function for the QQ plot. See p. 41-43 of the rugarch vignette for a more detailed discussion.

library(rugarch)
data(dmbp) # example data
spec=ugarchspec()
fit=ugarchfit(data=dmbp[,1], spec=spec)
pit=pit(fit)
hist(pit) # this should be approximately Uniform[0,1]
norm=qnorm(pit)
hist(norm) # this should be approximately standard normal
qqnorm(norm); abline(a=0, b=1) # this is your QQ plot


As to your side question, multivariate normal distribution does not make sense if the marginals are not normal. A possible fix for that is to use a copula-GARCH model (available in rmgarch). It does not yield a DCC-type dynamic, though.

On the other hand, I guess it should be possible to have different distributional assumptions for the different marginals in a DCC model in rmgarch (I have by now forgotten how these things are implemented there). After all, the DCC structure is built on top of the univariate GARCH models; it takes them as the starting point. The estimation might also be carried out in two steps: first the marginals and then the DCC part. So the "multivariate normal assumption" might be used for fitting the DCC structure, and it might act as a normal copula without affecting the marginals. But I am not sure about this.