R: Driver for Mixtures of Factor Analyzers

FLXMCfactanal {flexmix} | R Documentation

## Driver for Mixtures of Factor Analyzers

### Description

This driver for `flexmix` implements estimation of mixtures of factor analyzers using ML estimation of factor analysis implemented in `factanal` in each M-step.

### Usage

    FLXMCfactanal(formula = . ~ ., factors = 1, ...)

### Arguments

`formula` | 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.
`factors` | Integer specifying the number of factors in each component.
`...` | Passed to `factanal`

### Value

`FLXMCfactanal` returns an object of class `FLXM`.

### Warning

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.

### Author(s)

Bettina Gruen

### References

G. McLachlan and D. Peel. Finite Mixture Models, 2000. John Wiley and Sons Inc.

### See Also

`flexmix`

### Examples

    ## 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)
    }

[Package flexmix version 2.3-14 Index]