Last chance! 50% off unlimited learning
Sale ends in
Density, distribution function, and random generator for a multivariate distribution via copula and parametric margins.
For likelihood and fitting these distributions to data, see
fitMvdc
.
mvdc(copula, margins, paramMargins, marginsIdentical = FALSE,
check = TRUE, fixupNames = TRUE)
dMvdc(x, mvdc, log=FALSE)
pMvdc(x, mvdc)
rMvdc(n, mvdc)
a character
vector specifying all the
parametric marginal distributions. See details below.
a list
whose each component is a
list (or numeric vectors) of named components, giving the parameter
values of the marginal distributions. See details below.
logical variable restricting the marginal distributions to be identical.
logical indicating to apply quick checks about existence of
margins
“p*” and “d*” functions.
logical indicating if the parameters of the margins
should get automatic names (from formals(p<mar_i>)
).
a numeric vector of length the copula dimension, say
logical indicating if the log
density should
be returned.
number of observations to be generated.
mvdc()
constructs an object of class "'>mvdc"
.
dMvdc()
gives the density, pMvdc()
gives the cumulative
distribution function, and rMvdc()
generates random variates.
The characters in argument margins
are used to construct
density, distribution, and quantile function names. For
example, norm
can be used to specify marginal distribution,
because dnorm
, pnorm
, and qnorm
are all
available.
A user-defined distribution, for example, fancy
, can be used as
margin provided that dfancy
, pfancy
, and
qfancy
are available.
Each component list in argument paramMargins
is a
list
with named components which are used to specify the
parameters of the marginal distributions. For example, the list
paramMargins = list(list(mean = 0, sd = 2), list(rate = 2))
can be used to specify that the first margin is normal with mean 0 and standard deviation 2, and the second margin is exponential with rate 2.
ellipCopula
,
archmCopula
;
the classes '>mvdc
and '>copula
.
# NOT RUN {
## construct a bivariate distribution whose marginals
## are normal and exponential respectively, coupled
## together via a normal copula
mv.NE <- mvdc(normalCopula(0.75), c("norm", "exp"),
list(list(mean = 0, sd =2), list(rate = 2)))
dim(mv.NE)
mv.NE # using its print() / show() method
persp (mv.NE, dMvdc, xlim = c(-4, 4), ylim=c(0, 2), main = "dMvdc(mv.NE)")
persp (mv.NE, pMvdc, xlim = c(-4, 4), ylim=c(0, 2), main = "pMvdc(mv.NE)")
contour(mv.NE, dMvdc, xlim = c(-4, 4), ylim=c(0, 2))
# }
# NOT RUN {
# Generate (bivariate) random numbers from that, and visualize
x.samp <- rMvdc(250, mv.NE)
plot(x.samp)
summary(fx <- dMvdc(x.samp, mv.NE))
summary(Fx <- pMvdc(x.samp, mv.NE))
op <- par(mfcol=c(1,2))
pp <- persp(mv.NE, pMvdc, xlim = c(-5,5), ylim=c(0,2),
main = "pMvdc(mv.NE)", ticktype="detail")
# }
# NOT RUN {
<!-- %% FIXME: provide "empiricalCopula" .. with persp() method, see ../TODO !! -->
# }
# NOT RUN {
px <- copula:::perspMvdc(x.samp, FUN = F.n, xlim = c(-5, 5), ylim = c(0, 2),
main = "F.n(x.samp)", ticktype="detail")
par(op)
all.equal(px, pp)# about 5% difference
# }
Run the code above in your browser using DataLab