Learn R Programming

MixMatrix

Provides sampling and density functions for matrix variate normal, t, and inverted t distributions; ML estimation
using the EM algorithm for matrix variate normal and t distributions including some restrictions on the parameters; and classification by linear and quadratic discriminant analysis for matrix variate normal and t distributions. Performs clustering with matrix variate normal and t mixture models.

See the vignettes for an example of how it works.

It is currently possible to constrain the mean matrices for normal and t distributed matrices to have a common mean across rows, columns, or both, as well as AR(1), compound symmetric, on identity covariance matrices across rows, columns, or both in the maximum likelihood estimation functions and the LDA and QDA functions. In the mixture model function, it is possible to have a common mean within groups across rows, columns, or both.

There are some other R packages you may be interested in if you are working with matrix-variate distributions. The excellent matrixsampling package has sampling and distribution functions for these and many other matrix distributions, as does LaplacesDemon. The MatrixLDA package performs LDA for normal distributions with penalized likelihood.

Install from CRAN by running:

install.packages('MixMatrix')

The development version of the software can be installed by running:

devtools::install_github("gzt/MixMatrix")

Usage

The various r* and d* functions return or take as input an array indexed by the third dimension.

meanmatrix = matrix(1:12, nrow = 3)
A = rmatrixnorm(n = 10, mean = meanmatrix, U = diag(3), V = diag(4))
A[,,1:2]
dmatrixnorm(A, mean = meanmatrix, U = diag(3), V = diag(4), log = TRUE)

The package presents a method of maximum likelihood estimation of the parameters of the matrix variate t distribution using ECME.

X = rmatrixt(n = 100, mean = meanmatrix, U = diag(3), V = diag(4), df = 10)
MLmatrixt(X, fixed = FALSE) # fixed = FALSE indicates to estimate the DF parameter

Because it might be useful in conjunction with the r* and d* functions, the package also includes some convenience functions for generating AR(1) and compound symmetry correlation matrices.

ARgenerate(5, .5)
CSgenerate(5, .5)

The package also presents linear discriminant analysis and quadratic discriminant analysis for matrix variate distributions in the case of the normal and the t-distribution. In the case of the t, linear and quadratic refer whether the covariance matrices are constrained to be the same between classes rather than the form of the classifier.

 A <- rmatrixnorm(30,mean=matrix(0,nrow=3,ncol=4))
 B <- rmatrixnorm(30,mean=matrix(1,nrow=3,ncol=4), U = 2 * ARgenerate(3, .8))
 C <- array(c(A,B), dim=c(3,4,60))
 groups <- c(rep(1,30),rep(2,30))
 prior <- c(.5,.5)
 D <- matrixqda(C, groups, prior)
 predict(D)$posterior[1:10,]

In the future, this will include a more comprehensive treatment of matrix variate mixture modeling, including complete specification of covariance matrices in mixture modeling after the style of Mclust, t-Eigen, and other similar work.

    ### set two different matrix variate populations and combine into one array
 A <- rmatrixnorm(30,mean=matrix(0,nrow=3,ncol=4))
 B <- rmatrixnorm(30,mean=matrix(1,nrow=3,ncol=4), U = 2 * ARgenerate(3, .8))
 C <- array(c(A,B), dim=c(3,4,60))
 groups <- c(rep(1,30),rep(2,30))
 prior <- c(.5,.5)
    ### set up the mixture model
 D <- matrixmixture(C, prior, row.mean = TRUE, tolerance = 1e-2)
    ### print the results, the final mixing proportion, the log-likelihood,
    ### the BIC, and a plot of the log-likelihood.
 print(D$centers) # the final centers
 print(D$pi) # the final mixing proportion
 logLik(D)
 BIC(logLik(D))
 plot(D) # the log likelihood by iteration

Contribution and contact information

Please let me know if you have any issues or suggestions here: https://github.com/gzt/MixMatrix/issues

Please note that the MixMatrix project is released with a Contributor Code of Conduct. By contributing to this project, you agree to abide by its terms.

Copy Link

Version

Install

install.packages('MixMatrix')

Monthly Downloads

519

Version

0.2.8

License

GPL-3

Issues

Pull Requests

Stars

Forks

Maintainer

Geoffrey Thompson

Last Published

September 30th, 2024

Functions in MixMatrix (0.2.8)

rmatrixinvt

Distribution functions for matrix variate inverted t distributions
MLmatrixt

Maximum likelihood estimation for matrix variate t distributions
MLmatrixnorm

Maximum likelihood estimation for matrix normal distributions
ARgenerate

Generate a unit AR(1) covariance matrix
matrixqda

Quadratic Discriminant Analysis for Matrix Variate Observations
MixMatrix-package

Classification with Matrix Variate Normal and t Distributions
init_matrixmixture

Initializing settings for Matrix Mixture Models
CSgenerate

Generate a compound symmetric correlation matrix
predict.matrixlda

Classify Matrix Variate Observations by Linear Discrimination
rmatrixnorm

Matrix variate Normal distribution functions
rmatrixt

Distribution functions for the matrix variate t distribution.
vardet

Determinant selector for chosen covariance matrix.
matrixmixture

Fit a matrix variate mixture model
matrixlda

LDA for matrix variate distributions
predict.matrixqda

Classify Matrix Variate Observations by Quadratic Discrimination