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 ...