fitMvdc {copula} | R Documentation |
Estimation of Multivariate Models Defined via Copulas
Description
Fitting copula-based multivariate distributions
("mvdc"
) to multivariate data,
estimating both the marginal and the copula parameters.
If you assume (non parametric) margins, in other words, take the
empirical distributions for all margins, you can use
fitCopula(*, pobs(x))
instead.
Usage
loglikMvdc(param, x, mvdc)
fitMvdc(data, mvdc, start, optim.control = list(), method = "BFGS",
lower = -Inf, upper = Inf,
estimate.variance = fit$convergence == 0, hideWarnings = TRUE)
## S3 method for class 'fittedMV'
coef(object, SE = FALSE, orig = TRUE, ...)
## S3 method for class 'fittedMV'
logLik(object, ...)
## S3 method for class 'fittedMV'
vcov(object, orig = TRUE, ...)
Arguments
param |
a vector of parameter values. When specifying parameters for
|
x |
a data matrix. |
mvdc |
a |
data |
a data matrix. |
start |
a vector of starting value for |
optim.control |
a list of controls to be passed to |
method |
the method for |
lower , upper |
bounds on each parameter, passed to
|
estimate.variance |
logical; if true (as by default, if the optimization converges), the asymptotic variance is estimated. |
hideWarnings |
logical indicating if warning messages from
likelihood maximization, e.g., from evaluating at invalid parameter
values, should be suppressed (via |
object |
an R object of class |
SE |
for the |
orig |
|
... |
potentially further arguments to methods. |
Value
The return value loglikMvdc()
is the log likelihood evaluated
for the given value of param
.
The return value of fitMvdc()
is an object of class
"fitMvdc"
(see there), containing slots (among others!):
estimate |
the estimate of the parameters. |
var.est |
large-sample (i.e., asymptotic) variance estimate of the parameter
estimator (filled with |
mvdc |
the fitted multivariate distribution, see
|
The summary()
method for "fitMvdc"
objects
returns a S3 “class” "summary.fitMvdc"
, simply a list
with components method
, loglik
, and convergence
,
all three from corresponding slots of the
"fitMvdc"
objects, and
coefficients |
a matrix of estimated coefficients, standard errors, t values and p-values. |
Note
User-defined marginal distributions can be used as long as the
"{dpq}"
functions are defined.
See vignette("AR_Clayton", package="copula")
.
When covariates are available for marginal distributions or for the copula,
one can construct the loglikelihood function and feed it to "optim"
to estimate all the parameters.
Finally, note that some of the fitting functions generate error
messages because invalid parameter values are tried during the
optimization process (see optim
). This should be rarer
since 2013, notably for likelihood based methods (as the likelihood
is now rather set to -Inf
than giving an error).
Previously, loglikMvdc()
had an argument hideWarnings
;
nowadays, do use suppressWarnings(..)
if you are sure
you do not want to see them.
See Also
mvdc
and mvdc
;
further, Copula
, fitCopula
,
gofCopula
.
For fitting univariate marginals, fitdistr()
.
Examples
G3 <- gumbelCopula(3, dim=2)
gMvd2 <- mvdc(G3, c("exp","exp"),
param = list(list(rate=2), list(rate=4)))
## with identical margins:
gMvd.I <- mvdc(G3, "exp",
param = list(rate=3), marginsIdentical=TRUE)
(Xtras <- copula:::doExtras()) # determine whether examples will be extra (long)
n <- if(Xtras) 10000 else 200 # sample size (realistic vs short for example)
set.seed(11)
x <- rMvdc(n, gMvd2)
## Default: hideWarnings = FALSE .. i.e. show warnings here
fit2 <- fitMvdc(x, gMvd2, start = c(1,1, 2))
fit2
confint(fit2)
summary(fit2) # slightly more
## The estimated, asymptotic var-cov matrix [was used for confint()]:
vcov(fit2)
## with even more output for the "identical margin" case:
fitI <- fitMvdc(x, gMvd.I, start = c(3, 2),
optim.control=list(trace= TRUE, REPORT= 2))
summary(fitI)
coef(fitI, SE = TRUE)
stopifnot(is.matrix(coef(fitI, SE = TRUE)),
is.matrix(print( confint(fitI) )) )
## a wrong starting value can already be *the* problem:
f2 <- try(fitMvdc(x, gMvd.I, start = c(1, 1),
optim.control=list(trace= TRUE, REPORT= 2)))
##--> Error in optim( ... ) : non-finite finite-difference value [2]
##==> "Solution" : Using a more robust (but slower) optim() method:
fI.2 <- fitMvdc(x, gMvd.I, start = c(1, 1), method = "Nelder",
optim.control=list(trace= TRUE))
fI.2