»  Home »  Stata News »  Vol 32 No 4 »  fmm

## In the spotlight: Uncovering unobserved groups in your data with fmm

Often, data come from distinct and observable groups such as males and females, single and married, or new and old manufacturing processes. If these groups behave differently, we observe heterogeneity in the data.

But in many cases we cannot observe groups directly. Examples include individuals with good and poor health, risk-averse and risk-seeking investors, and apples from different orchards.

Here I show one way of addressing unobserved heterogeneity with finite mixture models.

We have data on individuals' standardized cholesterol levels (chol) and their mean-centered monthly red wine consumption (wine).

A linear fit line superimposed on the scatterplot of the data suggests there is a positive relationship between the two.

And a simple regression model confirms the positive relationship.

. regress chol wine

chol        Coef.   Std. Err.      t    P>|t|     [95% Conf. Interval]

wine     .7243775   .0553511    13.09   0.000     .6158387    .8329162
_cons     .2408989   .0267081     9.02   0.000     .1885266    .2932712


Let's see what happens when we add to our model a variable recording whether either parent had high cholesterol (pchol).

. regress chol wine pchol

chol        Coef.   Std. Err.      t    P>|t|     [95% Conf. Interval]

wine    -.1469443   .0632583    -2.32   0.020    -.2709885   -.0229001
pchol     .5037735   .0221205    22.77   0.000     .4603971      .54715
_cons    -.0488678   .0274366    -1.78   0.075    -.1026686     .004933


Now we find that wine consumption has a slight negative effect on cholesterol and that parents' cholesterol has a positive effect.

We hypothesize that an individual may inherit a "high cholesterol" gene and that we have two types of individuals in the population—those with the cholesterol gene and those without. However, we do not know who belongs to each group.

We use fmm to probabilistically classify the sample into groups. By adding the fmm prefix followed by 2, we indicate that we want to fit a model for two underlying subpopulations. We use the lcprob(pchol) option to include parents' cholesterol history as the predictor of the unobserved group, also called the latent class.

. fmm 2, lcprob(pchol): regress chol wine

The output below shows a regression model for each class. Wine consumption has a negative effect on cholesterol level in each class.

Class          : 1
Response       : chol
Model          : regress

Coef.   Std. Err.      z    P>|z|     [95% Conf. Interval]

chol
wine    -.6850974   .0783981    -8.74   0.000    -.8387549   -.5314399
_cons    -.7401758   .0443478   -16.69   0.000    -.8270959   -.6532557

var(e.chol)    .6152073   .0219867                      .5735887    .6598457

Class          : 2
Response       : chol
Model          : regress

Coef.   Std. Err.      z    P>|z|     [95% Conf. Interval]

chol
wine    -.4798618   .1319125    -3.64   0.000    -.7384056    -.221318
_cons     .8343004   .0323813    25.76   0.000     .7708342    .8977667

var(e.chol)    .6720669   .0383181                       .601009    .7515261


The table below gives the coefficients for the latent class membership on the logit scale.


Coef.   Std. Err.      z    P>|z|     [95% Conf. Interval]

1.Class         (base outcome)

2.Class
pchol     7.473592   .8977705     8.32   0.000     5.713994     9.23319
_cons    -3.228661   .3939579    -8.20   0.000    -4.000804   -2.456518


We use estat lcprob to display marginal class probabilities on the probability scale.

. estat lcprob

Delta-method
Margin   Std. Err.     [95% Conf. Interval]

Class
1      .6743291   .0055936      .6632719    .6851956
2      .3256709   .0055936      .3148044    .3367281


About 67% of individuals are expected to be in group 1 and 33% in group 2. But which group is which? To find out, we use estat lcmean to calculate the marginal means for each class. The reported mean for class 1 is lower than the reported mean for class 2. Therefore, class 1 corresponds to individuals with no cholesterol gene, and class 2 to those with the gene.

. estat lcmean

Delta-method
Margin   Std. Err.      z    P>|z|     [95% Conf. Interval]

1
chol    -.5123399    .024033   -21.32   0.000    -.5594438    -.465236

2
chol     .9938833   .0601744    16.52   0.000     .8759435    1.111823


We can even classify the individuals in our dataset into the two groups by predicting posterior latent-class probabilities and using a cutpoint (we will use 0.5) to assign each observation to a group.

. predict c1, classposteriorpr

. summarize c2

Variable          Obs        Mean    Std. Dev.       Min        Max

c1        2,500    .6743291    .4538173   6.22e-09          1

. generate lgroup = c1 < 0.5

. tabulate lgroup

lgroup        Freq.     Percent        Cum.

0        1,690       67.60       67.60
1          810       32.40      100.00

Total        2,500      100.00


From the tabulation of predicted group membership, we see that our classification is close to the output produced by estat lcprob above.

Finally, we draw a scatterplot with the linear fit line for each group.

Some of you may recognize this graph as an illustration of Simpson's paradox, where a trend present in the data reverses when the data are divided into subgroups.

— Rafal Raciborski
Senior Statistical Developer