mutualinf | R Documentation |
Computes the mutual information for pairwise x and y marginal values based on their multivariate distribution constructed from a copula.
mutualinf(
x,
y,
copula = NULL,
margins = NULL,
paramMargins = NULL,
method = "ml",
ties.method = "max"
)
x, y |
marginal variates |
copula |
A copula object from class |
margins |
A character vector specifying all the parametric marginal distributions. See details below. |
paramMargins |
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. |
method |
A character string specifying the estimation method to be used
to estimate the dependence parameter(s) (if the copula needs to be
estimated) see |
The mutual information of a pairwise x and y marginal values is defined as:
I{x, y} = log(P(x,y)) - (log(P_1(x)) + log(P_2(y)))
where P(x,y) is the multivariate distribution constructed from a copula, and P_1(x) and P_2(y) are the marginal CDFs.
The values I{x, y}
expresses a measurement of the relative
dependece/independece of x and y at the specified point value.
Notice that the above definition expresses the differences between two
uncertainty variations. So, for values I{x, y} > 0
, we shall say
that at point (x, y) there is a gain of information for the association
of the subjacent stochastic processes generating x and y in respect to
the independent processes. Otherwise, for values I{x, y} < 0
we
shall say that at point (x, y) there is a loss of information for the
association of the subjacent stochastic process generating x and y in
respect to the independent processes. Or, equivallently, there is a gain
of information for the independent processes in respect to
their association.
A list with a data frame carrying the estimated mutual information for each (x, y) pair, the joint and marginal probabilities, and the "mvdc" copula object.
ppCplot
, bicopulaGOF
,
gofCopula
, fitCDF
,
fitdistr
, and fitMixDist
.
require(stats)
set.seed(12) # set a seed for random number generation
## Random generation of a Normal distributed marginal variate
X <- rnorm(2000, mean = 1, sd = 0.2)
## Random generation of a Weibull-3P distributed marginal variate
Y <- X + rweibull3p(2000, shape = 2, scale = 0.85, mu = 1)
## Correlation test
cor.test(X, Y, method = "spearman")
## Non-linear model fit for 'Y' distribution values
fitY <- fitCDF(Y, distNames = 12) # 3P Weibull distribution model
coefs <- coef(fitY$bestfit) # model coefficients
## Goodness-of-fit test for the Weibull-3P distribution model
mcgoftest(
varobj = Y, distr = "weibull3p", pars = coefs, num.sampl = 99,
sample.size = 1999, stat = "chisq", num.cores = 4, breaks = 200,
seed = 123
)
## Settngs to estimate the Mutual information
margins <- c("norm", "weibull3p")
parMargins <- list(
list(mean = 1, sd = 0.2),
as.list(coefs)
) # Notice "as.list" is used here, not "list"
## Finally estimation of the mutual information
mutual.Inf <- mutualinf(
x = X, y = Y, copula = "normalCopula",
margins = margins, paramMargins = parMargins
)
head(mutual.Inf$stat)
## The fitted copula is also returned, so, it can be used in downstream
## analyses
mutual.Inf$copula@copula
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.