Perform the Vuong Procedure following Joe (2014, pp. 257--258). Consider two copula densities \(f_1 = c_1(u,v; \Theta_1)\) and \(f_2 = c_2(u,v; \Theta_2)\) for two different bivariate copulas \(\mathbf{C}_1(\Theta_1)\) and \(\mathbf{C}_2(\Theta_2)\) having respective parameters \(\Theta_1\) and \(\Theta_2\) that provide the “closest” Kullback--Leibler Divergence from the true copula density \(g(u,v)\).
The difference of the Kullback--Leibler Divergence (kullCOP
) of the two copulas from the true copula density can be measured for a sample of size \(n\) and bivariate sample realizations \(\{u_i, v_i\}\) by
$$\hat{D}_{12} = n^{-1}\sum_{i=1}^n D_i\mbox{,}$$
where \(\hat{D}_{12}\) is referred to in the copBasic package as the “Vuong \(D\)” and \(D_i\) is defined as
$$D_i = \log\biggl[\frac{f_1(u_i, v_i; \Theta_2)}{f_2(u_i, v_i; \Theta_1)}\biggr]\mbox{.}$$
The variance of \(\hat{D}_{12}\) can be estimated by
$$\hat\sigma^2_{12} = (n-1)^{-1}\sum_{i=1}^n (D_i - \hat{D}_{12})^2\mbox{.}$$
The sample estimate and variance are readily turned into the \(100{{\times}}(1 - \alpha)\) confidence interval by
$$\hat{D}^{(\mathrm{lo})}_{12} < \hat{D}_{12} < \hat{D}^{(\mathrm{hi})}_{12}\mbox{,}$$
where, using the quantile (inverse) function of the t-distribution \(\sim\) \(\mathcal{T}^{(-1)}(F; \mathrm{df}{=}(n-2))\) for nonexceedance probability \(F\) and \(n-2\) degrees of freedom for \(n\) being the sample size, the confidence interval is
$$\hat{D}_{12}-\mathcal{T}^{(-1)}(1-\alpha/2){\times}\hat\sigma_{12}/\sqrt{n} < \hat{D}_{12} < \hat{D}_{12}+\mathcal{T}^{(-1)}(1-\alpha/2){\times}\hat\sigma_{12}/\sqrt{n}\mbox{.}$$
Joe (2014, p. 258) reports other interval forms based (1) on the Akaike (AIC) correction and (2) on the Schwarz (BIC) correction, which are defined for AIC as
$$\mathrm{AIC} = \hat{D}_{12} - (2n)^{-1}\log(n)\biggl[\mathrm{dim}(\Theta_2) - \mathrm{dim}(\Theta_1)\biggr]\pm \mathcal{T}^{(-1)}(1-\alpha/2){\times}\hat\sigma_{12}/\sqrt{n}\mbox{,}$$
and for BIC as
$$\mathrm{BIC} = \hat{D}_{12} - (2n)^{-1}\log(n)\biggl[\mathrm{dim}(\Theta_2) - \mathrm{dim}(\Theta_1)\biggr]\pm \mathcal{T}^{(-1)}(1-\alpha/2){\times}\hat\sigma_{12}/\sqrt{n}\mbox{.}$$
The AIC and BIC corrections incorporate the number of parameters in the copula and for all else being equal the copula with the fewer parameters is preferable. If the two copulas being compared have equal number of parameters than the AIC and BIC equate to \(\hat{D}_{12}\) and the same confidence interval because the difference \([\mathrm{dim}(\Theta_2) - \mathrm{dim}(\Theta_1)]\) is zero.
Joe (2014, p. 258) reports that these three intervals can be used for diagnostic inference as follows. If an interval contains 0 (zero), then copulas \(\mathbf{C}_1(\Theta_1)\) and \(\mathbf{C}_2(\Theta_2)\) are not considered significantly different. If the interval does not contain 0, then copula \(\mathbf{C}_1(\Theta_1)\) or \(\mathbf{C}_2(\Theta_2)\) is the better fit depending on whether the interval is completely below 0 (thus \(\mathbf{C}_1(\Theta_1)\) better fit) or above 0 (thus \(\mathbf{C}_2(\Theta_2)\) better fit), respectively. Joe (2014) goes on the emphasize that “the procedure compares different [copulas] and assesses whether they provide similar fits to the data. [The procedure] does not assess whether [either copula] is a good enough fit.”
vuongCOP(u, v=NULL, cop1=NULL, cop2=NULL, para1=NULL, para2=NULL,
alpha=0.05, method=c("D12", "AIC", "BIC"),
the.zero=.Machine$double.eps^0.25, ...)
An R
list
is returned having the following components:
A descriptive title of the procedure;
A textual description of the method
setting;
A textual description of the result of the Vuong Procedure;
A value 1 if \(\mathbf{C}_1(\Theta_1)\) is better fit, 2 if copula \(\mathbf{C}_2(\Theta_2)\) is better fit, and 0
if neither is better (\(\hat{D}_{12} = 0\)), and NA
including the likely(?) erroneous situation of \(\mathbf{C}_1(\Theta_1) \equiv \mathbf{C}_2(\Theta_2)\);
The two-sided p-values of the Vuong Procedure inclusive of \(\mathrm{AIC}\) and \(\mathrm{BIC}\);
A named vector of the lower and upper bounds of Vuong \(D\) at the respective confidence interval percentage along with \(\hat{D}_{12}\) and \(\sigma^2_{12}\);
A named vector of the lower and upper bounds of Vuong \(\mathrm{AIC}\) at the respective confidence interval percentage;
A named vector of the lower and upper bounds of Vuong \(\mathrm{BIC}\) at the respective confidence interval percentage; and
A named vector of the alpha, sample size, value for the t-distribution quantile qt(1-alpha/2, df=n)
, and \(\hat\sigma_{12}\).
Nonexceedance probability \(u\) in the \(X\) direction;
Nonexceedance probability \(v\) in the \(Y\) direction and if NULL
then u
is treated as a two column R data.frame
;
A copula function corresponding to copula \(f_1\) in the Vuong Procedure;
Vector of parameters or other data structure, if needed, to pass to the copula \(f_1\);
A copula function corresponding to copula \(f_2\) in the the Vuong Procedure;
Vector of parameters or other data structure, if needed, to pass to the copula \(f_2\);
The \(\alpha\) in the Vuong Procedure, which results in the \(100{\times}(1 - \alpha)\) confidence interval (two sided);
The interval to evaluate as to position of the respective statistic form the comparison of the two copulas;
The value for “the zero” of the copula density function. This argument is the argument of the same name for densityCOP
. The default here is intended to suggest that a tiny nonzero value for density will trap the numerical zero densities; and
Additional arguments to pass to the densityCOP
function.
W.H. Asquith
Joe, H., 2014, Dependence modeling with copulas: Boca Raton, CRC Press, 462 p.
Nelsen, R.B., 2006, An introduction to copulas: New York, Springer, 269 p.
Salvadori, G., De Michele, C., Kottegoda, N.T., and Rosso, R., 2007, Extremes in Nature---An approach using copulas: Springer, 289 p.
densityCOP
, kullCOP
, simCOP
, statTn
, mleCOP
# See extended code listings and discussion in the Note section
# See Examples in mleCOP() (Last example therein might suggest a problem in the
# implied 95th percentile associated with n_fg above.
Run the code above in your browser using DataLab