Compute efficiently (via Fortran code) the means, covariance and scattering matrices conditioning on a weighted or indicator matrix

covw(X, Z, normalize = TRUE)

Arguments

X

A \((n x p)\) data matrix, with \(n\) observations on \(p\) variables.

Z

A \((n x G)\) matrix of weights, with \(G\) number of groups.

normalize

A logical indicating if rows of Z should be normalized to sum to one.

Value

A list with the following components:

mean

A \((p x G)\) matrix of weighted means.

S

A \((p x p x G)\) array of weighted covariance matrices.

W

A \((p x p x G)\) array of weighted scattering matrices.

Author

M. Fop and L. Scrucca

Examples

# Z as an indicator matrix X <- iris[,1:4] Z <- unmap(iris$Species) str(covw(X, Z))
#> List of 3 #> $ mean: num [1:4, 1:3] 5.006 3.428 1.462 0.246 5.936 ... #> $ S : num [1:4, 1:4, 1:3] 0.1218 0.0972 0.016 0.0101 0.0972 ... #> $ W : num [1:4, 1:4, 1:3] 6.088 4.862 0.801 0.506 4.862 ...
# Z as a matrix of weights mod <- Mclust(X, G = 3, modelNames = "VVV") str(covw(X, mod$z))
#> List of 3 #> $ mean: num [1:4, 1:3] 5.006 3.428 1.462 0.246 5.915 ... #> $ S : num [1:4, 1:4, 1:3] 0.1218 0.0972 0.016 0.0101 0.0972 ... #> $ W : num [1:4, 1:4, 1:3] 6.088 4.862 0.801 0.506 4.862 ...