gofCopula {copula} | R Documentation |
Goodness-of-fit tests for copulas based on the empirical process comparing the empirical copula with a parametric estimate of the copula derived under the null hypothesis. The test statistic is the Cramer-von Mises functional Sn defined in equation (2) of Genest, Remillard and Beaudoin (2009). Approximate p-values for the test statistic can be obtained either using the parametric bootstrap (see the two first references) or by means of a fast multiplier approach (see the two last references).
gofCopula(copula, x, N = 1000, method = "mpl", simulation = "pb", print.every = 100, optim.method = "BFGS")
copula |
object of class "copula" representing the
hypothesized copula family. |
x |
a data matrix that will be transformed to pseudo-observations. |
N |
number of bootstrap or multiplier iterations to be used to simulate realizations of the test statistic under the null hypothesis. |
method |
estimation method to be used to estimate the
dependence parameter(s); can be either "mpl"
(maximum pseudo-likelihood), "itau" (inversion of
Kendall's tau) or "irho" (inversion of Spearman's rho). |
simulation |
simulation method for generating realizations
of the test statistic under the null hypothesis; can be either
"pb" (parametric bootstrap) or "mult" (multiplier). |
print.every |
progress is printed every "print.every"
iterations. No progress is printed if it is nonpositive. |
optim.method |
the method for "optim" . |
If the parametric bootstrap is used, the dependence parameters of the hypothesized copula family can be estimated either by maximizing the pseudo-likelihood or by inverting Kendall's tau or Spearman's rho. If the multiplier is used, any estimation method can be used in the bivariate case, but only maximum pseudo-likelihood estimation can be used in the multivariate (multiparameter) case.
For the normal and t copulas, several dependence structures can be
hypothesized: "ex"
for exchangeable, "ar1"
for AR(1),
"toep"
for Toeplitz, and "un"
for unstructured (see
ellipCopula
). For the t copula, "df.fixed"
has to
be set to TRUE
, which implies that the degrees of freedom are
not considered as a parameter to be estimated.
Thus far, the multiplier approach is implemented for six copula families: the Clayton, Gumbel, Frank, Plackett, normal and t.
Returns a list whose attributes are:
statistic |
value of the test statistic. |
pvalue |
corresponding approximate p-value. |
parameters |
estimates of the parameters for the hypothesized copula family. |
C. Genest and B. Remillard (2008). Validity of the parametric bootstrap for goodness-of-fit testing in semiparametric models. Annales de l'Institut Henri Poincare: Probabilites et Statistiques, 44, 1096-1127.
C. Genest, B. Remillard and D. Beaudoin (2009). Goodness-of-fit tests for copulas: A review and a power study. Insurance: Mathematics and Economics, 44, 199-214.
I. Kojadinovic and J. Yan (2009). Fast large-sample goodness-of-fit tests for copulas. Submitted.
I. Kojadinovic and J. Yan (2009). A goodness-of-fit test for multivariate multiparameter copulas based on multiplier central limit theorems. Submitted.
## the following example is available in batch through ## demo(gofCopula) ## Not run: ## A two-dimensional data example x <- rcopula(claytonCopula(3), 200) ## Does the Gumbel family seem to be a good choice? gofCopula(gumbelCopula(1), x) ## What about the Clayton family? gofCopula(claytonCopula(1), x) ## The same with a different estimation method gofCopula(gumbelCopula(1), x, method="itau") gofCopula(claytonCopula(1), x, method="itau") ## A three-dimensional example x <- rcopula(tCopula(c(0.5, 0.6, 0.7), dim = 3, dispstr = "un"),200) ## Does the Clayton family seem to be a good choice? gofCopula(gumbelCopula(1, dim = 3), x) ## What about the t copula? t.copula <- tCopula(rep(0, 3), dim = 3, dispstr = "un", df.fixed=TRUE) gofCopula(t.copula, x) ## The same with a different estimation method gofCopula(gumbelCopula(1, dim = 3), x, method="itau") gofCopula(t.copula, x, method="itau") ## The same using the multiplier approach gofCopula(gumbelCopula(1, dim = 3), x, simulation="mult") gofCopula(t.copula, x, simulation="mult") ## End(Not run)