FLXmclust              package:flexmix              R Documentation

_F_l_e_x_M_i_x _C_l_u_s_t_e_r_i_n_g _D_e_m_o _D_r_i_v_e_r

_D_e_s_c_r_i_p_t_i_o_n:

     This is a demo driver for 'flexmix' implementing model-based
     clustering of Gaussian data.

_U_s_a_g_e:

     FLXmclust(formula = . ~ ., diagonal = TRUE)

_A_r_g_u_m_e_n_t_s:

 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.

diagonal: If 'TRUE', then the covariance matrix of the components is
          restricted to diagonal matrices.

_D_e_t_a_i_l_s:

     This is meant as a demo for FlexMix driver programming, use
     package mclust for real applications.

_V_a_l_u_e:

     Returns an object of class 'FLXmodel'.

_A_u_t_h_o_r(_s):

     Friedrich Leisch

_S_e_e _A_l_s_o:

     'flexmix'

_E_x_a_m_p_l_e_s:

     ## The function is currently defined as
     FLXmclust

     ## are packages mvtnorm and ellipse available?
     owarn = getOption("warn")
     options(warn=-1)
     have.mvtnorm=require("mvtnorm", quietly=TRUE)
     have.ellipse=require("ellipse", quietly=TRUE)
     options(warn=owarn)

     if(have.mvtnorm){
       require("MASS")

       ## generate some artificial data
       x <- rbind(rmvnorm(100, mean=rep(0,2)),
                  rmvnorm(100, mean=c(8,0), sigma=diag(1:2)),
                  rmvnorm(150, mean=c(-2,6), sigma=diag(2:1)),
                  rmvnorm(200, mean=c(4,4), sigma=matrix(c(1,.9,.9,1), 2)))

       eqscplot(x)

       ## define a utility function for visualization of results
       plot.ex.mbc = function(object, data){    
         eqscplot(data, col=object@cluster)
         if(have.ellipse){
           for(k in 1:length(object@components)){
               p = parameters(object, k)
               lines(ellipse(p$cov, centre=p$center), col=k)
           } 
         }
       }

       ## This model is wrong (one component has a non-diagonal cov matrix)
       ex.mbc <- flexmix(x~1, k=4, model=FLXmclust())
       print(ex.mbc)
       plot.ex.mbc(ex.mbc, x)

       ## True model, wrong number of components
       ex.mbc <- flexmix(x~1, k=6, model=FLXmclust(diag=FALSE))  
       print(ex.mbc)

       plot.ex.mbc(ex.mbc, x)

       print(parameters(ex.mbc, component=1))
     }else{
       cat("Sorry, I need package mvtnorm for these examples!\n\n")
     }

