FLXMCfactanal.RdThis driver for flexmix implements estimation of mixtures of
factor analyzers using ML estimation of factor analysis implemented in
factanal in each M-step.
FLXMCfactanal(formula = . ~ ., factors = 1, ...)A formula which is interpreted relative to the formula
specified in the call to flexmix using
update.formula. Only the left-hand side (response) of
the formula is used. Default is to use the original
flexmix model
formula.
Integer specifying the number of factors in each component.
Passed to factanal
FLXMCfactanal returns an object of class FLXM.
G. McLachlan and D. Peel. Finite Mixture Models, 2000. John Wiley and Sons Inc.
This does not implement the AECM framework presented in McLachlan and Peel (2000, p.245), but uses the available functionality in R for ML estimation of factor analyzers. The implementation therefore is only experimental and has not been well tested.
Please note that in general a good initialization is crucial for the EM algorithm to converge to a suitable solution for this model class.
## Reproduce (partly) Table 8.1. p.255 (McLachlan and Peel, 2000)
if (require("gclus")) {
data("wine", package = "gclus")
wine_data <- as.matrix(wine[,-1])
set.seed(123)
wine_fl_diag <- initFlexmix(wine_data ~ 1, k = 3, nrep = 10,
model = FLXMCmvnorm(diagonal = TRUE))
wine_fl_fact <- lapply(1:4, function(q) flexmix(wine_data ~ 1, model =
FLXMCfactanal(factors = q, nstart = 3),
cluster = posterior(wine_fl_diag)))
sapply(wine_fl_fact, logLik)
## FULL
set.seed(123)
wine_full <- initFlexmix(wine_data ~ 1, k = 3, nrep = 10,
model = FLXMCmvnorm(diagonal = FALSE))
logLik(wine_full)
## TRUE
wine_true <- flexmix(wine_data ~ 1, cluster = wine$Class,
model = FLXMCmvnorm(diagonal = FALSE))
logLik(wine_true)
}
#> Loading required package: gclus
#> Loading required package: cluster
#> 3 : * * * * * * * * * *
#> 3 : * * * * * * * * * *
#> 'log Lik.' -2781.497 (df=314)