Package 'RMFM'

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: 2024-11-27 05:30:26 UTC
Source: https://github.com/feiyoung/rmfm

Help Index


Select the structure dimension of factor matrix

Description

Select the structure dimension of factor matrix in the high-dimensional robust matrix factor model

Usage

ER.RMFM(
  X,
  r_max = 10,
  epsELBO = 1e-09,
  maxIter = 20,
  verbose = FALSE,
  seed = 1
)

Arguments

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.

Details

None

Value

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.

References

None

See Also

None

Examples

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)
res

Generate simulated data

Description

Generate simulated data from robust matrix factor models

Usage

gendata_rmfm(
  i = 1,
  Tt = 100,
  p1 = 50,
  p2 = 40,
  r1 = 4,
  r2 = 3,
  rho = 0.01,
  type = c("MatrixT", "MatrixN"),
  nu = 1
)

Arguments

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 type='MatrixN'; supportint matrix t distribution 'MatrixT' and matrix normal distribution 'MatrixN'.

nu

a positive integer, specify the degree freedom of the matrix t distribution when type='MatrixT'.

Value

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.

Examples

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

Description

Fit the high-dimensional robust matrix factor model via variational inference.

Usage

RMFM(
  X,
  r1 = 10,
  r2 = 10,
  epsELBO = 1e-09,
  maxIter = 30,
  verbose = TRUE,
  seed = 1,
  cal_eigs = FALSE
)

Arguments

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

Details

None

Value

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;

References

None

See Also

None

Examples

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)