| Title: | Robust Matrix Factor Model |
|---|---|
| Description: | We introduce a robust matrix factor model that explicitly incorporates tail behavior and employs a mean-shift term to avoid efficiency losses through pre-centering of observed matrices. More details on the methods related to our paper are currently under submission. A full reference to the paper will be provided in future versions once the paper is published. |
| Authors: | Wei Liu [aut, cre], Xiaolu Jiang [aut], Jinyu Nie [aut] |
| Maintainer: | Wei Liu <[email protected]> |
| License: | GPL-3 |
| Version: | 1.1.0 |
| Built: | 2026-05-25 08:09:27 UTC |
| Source: | https://github.com/feiyoung/rmfm |
Select the structure dimension of factor matrix in the high-dimensional robust matrix factor model
ER.RMFM( X, r_max = 10, epsELBO = 1e-09, maxIter = 20, verbose = FALSE, seed = 1 )ER.RMFM( X, r_max = 10, epsELBO = 1e-09, maxIter = 20, verbose = FALSE, seed = 1 )
X |
a p1* p2*T array, which is the observed matrix from each individual, where T is the sample size. |
r_max |
an optional positive integer, specify the upper bound of row and column factors; default as 10. |
epsELBO |
an optional positive value, tolerance of relative variation rate of the variational lower bound value, default as '1e-9'. |
maxIter |
the maximum iteration of the VEM algorithm. The default is 30. |
verbose |
a logical value, whether output the information in iteration. |
seed |
an optional integer, specify the random seed for reproducibility in initialization. |
None
return a list including the following components:
rvec - a two-dimensional vector, the estimated row and column numbers of factors.
svrMat - a r_max-by-2 matrix, the singular value ratios.
None
None
r1 <- 4; r2 <- 3; Tt <- 100; type <- 'MatrixT' p1 <- 50; p2 <- 50 datlist <- gendata_rmfm(i = 1, Tt = Tt,p1 =p1, p2=p2, r1=r1, r2=r2, rho=1, type= 'MatrixT', nu=3) str(datlist) res <- ER.RMFM(datlist$X, r_max=10, epsELBO=1e-9, maxIter=10, verbose=FALSE, seed=1) resr1 <- 4; r2 <- 3; Tt <- 100; type <- 'MatrixT' p1 <- 50; p2 <- 50 datlist <- gendata_rmfm(i = 1, Tt = Tt,p1 =p1, p2=p2, r1=r1, r2=r2, rho=1, type= 'MatrixT', nu=3) str(datlist) res <- ER.RMFM(datlist$X, r_max=10, epsELBO=1e-9, maxIter=10, verbose=FALSE, seed=1) res
Generate simulated data from robust matrix factor models
gendata_rmfm( i = 1, Tt = 100, p1 = 50, p2 = 40, r1 = 4, r2 = 3, rho = 0.01, type = c("MatrixT", "MatrixN"), nu = 1 )gendata_rmfm( i = 1, Tt = 100, p1 = 50, p2 = 40, r1 = 4, r2 = 3, rho = 0.01, type = c("MatrixT", "MatrixN"), nu = 1 )
i |
a positive integer, the random seed for reproducibility of data generation process. |
Tt |
a positive integer, specify the sample size. |
p1 |
a positive integer, specify the row dimension of the observed matrix. |
p2 |
a positive integer, specify the column dimension of the observed matrix. |
r1 |
a positive integer, specify the number of row factors; default as 4 |
r2 |
a positive integer, specify the number of column factors; default as 3. |
rho |
a positive real, specify the signal strength of factor matrices. |
type |
a string, specify the type of error matrix, default as |
nu |
a positive integer, specify the degree freedom of the matrix t distribution when |
return a list including the following components:
X - p1* p2*T array, which is the observed matrix from each individual, where T is the sample size.
CC - p1* p2*T array, which is the common component matrix for each individual.
F0 - r1* r2*T array, which is the generated factor matrix for each individual, where T is the sample size.
R0 - a p1-by-r1 matrix, the row loading matrix.
C0 - a p2-by-r2 matrix, the column loading matrix.
mu0 - a p1-by-p2 matrix, the mean matrix.
r1 <- 4; r2 <- 3; Tt <- 100; type <- 'MatrixT' p1 <- 100; p2 <- 50 datlist <- gendata_rmfm(i = 1, Tt = Tt,p1 =p1, p2=p2, r1=r1, r2=r2, rho=0.01, type=type, nu=1) str(datlist)r1 <- 4; r2 <- 3; Tt <- 100; type <- 'MatrixT' p1 <- 100; p2 <- 50 datlist <- gendata_rmfm(i = 1, Tt = Tt,p1 =p1, p2=p2, r1=r1, r2=r2, rho=0.01, type=type, nu=1) str(datlist)
Fit the high-dimensional robust matrix factor model via variational inference.
RMFM( X, r1 = 10, r2 = 10, epsELBO = 1e-09, maxIter = 30, verbose = TRUE, seed = 1, cal_eigs = FALSE )RMFM( X, r1 = 10, r2 = 10, epsELBO = 1e-09, maxIter = 30, verbose = TRUE, seed = 1, cal_eigs = FALSE )
X |
a p1* p2*T array, which is the observed matrix from each individual, where T is the sample size. |
r1 |
an optional positive integer, specify the number of row factors; default as 10. |
r2 |
an optional positive integer, specify the number of column factors; default as 10. |
epsELBO |
an optional positive value, tolerance of relative variation rate of the variational lower bound value, default as '1e-9'. |
maxIter |
the maximum iteration of the VEM algorithm. The default is 30. |
verbose |
a logical value, whether output the information in iteration. |
seed |
an optional integer, specify the random seed for reproducibility in initialization. |
cal_eigs |
an optional logical value, specify whether calculate the eigenvalues of covariance matrix, default as |
None
return a list including the following components:
hF - a r1* r2*T array, which is the estimated factor matrix for each individual, where T is the sample size.
hmu - a p1-by-p2 matrix, the estimated mean matrix.
hR - the estimated row loading matrix.
hC - the estimated column loading matrix.
hnu - the estimated degree of freedom for the error term.
hLambda1 - a p1 vector, the estimated row scatter matrix for error.
hLambda2 - a p2 vector, the estimated column scatter matrix for error.
dR - NULL if cal_eigs=FALSE; a group of eigenvalues of the sample covariance across rows if cal_eigs=TRUE.
dC - NULL if cal_eigs=FALSE; a group of eigenvalues of the sample covariance across columns if cal_eigs=TRUE.
ELBO - the ELBO value when algorithm stops;
ELBO_seq - the sequence of ELBO values.
time_use - the running time in model fitting of RMFM;
None
None
r1 <- 4; r2 <- 3; Tt <- 100; type <- 'MatrixT' p1 <- 50; p2 <- 50 datlist <- gendata_rmfm(i = 1, Tt = Tt,p1 =p1, p2=p2, r1=r1, r2=r2, rho=1, type= 'MatrixT', nu=1) str(datlist) reslist <- RMFM(X=datlist$X, r1=r1, r2=r2, verbose = TRUE, maxIter = 6)r1 <- 4; r2 <- 3; Tt <- 100; type <- 'MatrixT' p1 <- 50; p2 <- 50 datlist <- gendata_rmfm(i = 1, Tt = Tt,p1 =p1, p2=p2, r1=r1, r2=r2, rho=1, type= 'MatrixT', nu=1) str(datlist) reslist <- RMFM(X=datlist$X, r1=r1, r2=r2, verbose = TRUE, maxIter = 6)