Latent profile analysis (LPA) searches for subgroups whose members have similar patterns across continuous indicators. The method is useful when the research question concerns combinations of characteristics rather than the effect of one variable while holding the others constant.
This workflow emphasizes model enumeration and uncertainty. It does not treat a lower BIC, higher entropy, or significant likelihood-ratio comparison as a self-interpreting answer. The retained solution must also converge repeatedly, avoid inadmissible parameters, contain usable class sizes, remain interpretable, and fit the study’s theory and purpose.
After completing the example, the user should be able to:
The primary fitted model allows profile-specific means and variances while setting within-profile covariances to zero. Alternative covariance structures, categorical indicators, missing-data handling, complex sampling, multilevel mixtures, and longitudinal latent-transition models require extensions.
| Stage | Main question | Evidence |
|---|---|---|
| Indicator preparation | Do indicators represent the intended person-centered question? | Theory, distributions, missingness, scale and redundancy |
| Enumeration | How many profiles are plausible? | Information criteria, BLRT, convergence, replicated likelihood, class size |
| Classification | How clearly are participants distinguished? | Entropy, posterior probabilities, uncertainty |
| Interpretation | Are profiles distinct and useful? | Standardized and raw means, theory, stability |
| External validation | Do profiles relate to variables not used to create them? | Probability-weighted descriptions and cautious modal-class models |
The four generating profiles are deliberately overlapping, and the
smallest population profile represents about 7% of participants.
generating_profile is retained only to evaluate the
synthetic exercise; it is never supplied to the fitted models.
| indicator | n | missing | mean | sd | min | max |
|---|---|---|---|---|---|---|
| academic_stress | 900 | 0 | 50.79 | 10.20 | 23.14 | 79.31 |
| advisor_support | 900 | 0 | 3.27 | 0.73 | 1.00 | 5.00 |
| research_confidence | 900 | 0 | 49.62 | 11.12 | 16.77 | 77.79 |
| belonging | 900 | 0 | 3.06 | 0.65 | 1.00 | 4.72 |
| burnout | 900 | 0 | 46.04 | 10.14 | 10.08 | 73.95 |
Indicators should be selected because their joint configuration answers the research question. Highly redundant indicators can overweight one construct, while variables with weak theoretical relevance can create profiles that are difficult to interpret or reproduce.
| indicator | original_mean | original_sd |
|---|---|---|
| academic_stress | 50.789 | 10.200 |
| advisor_support | 3.267 | 0.732 |
| research_confidence | 49.618 | 11.116 |
| belonging | 3.065 | 0.646 |
| burnout | 46.037 | 10.136 |
Standardization places the indicators on comparable units and makes each indicator contribute on an approximately equal variance scale. It does not make indicators equally reliable or equally important. Report the scaling rule and retain the original-score summaries for interpretation.
| classes | log_likelihood | parameters | AIC | BIC | adjusted_BIC | entropy | smallest_class_percent | average_max_posterior | replicated_best | next_best_gap | converged | admissible |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | -6382.722 | 10 | 12785.44 | 12833.47 | 12801.71 | 1.000 | 100.000 | 1.000 | 100 | 0.000 | TRUE | TRUE |
| 2 | -5769.724 | 21 | 11581.45 | 11682.30 | 11615.61 | 0.826 | 36.600 | 0.951 | 1 | 0.001 | TRUE | TRUE |
| 3 | -5595.006 | 32 | 11254.01 | 11407.69 | 11306.06 | 0.838 | 9.026 | 0.928 | 1 | 0.000 | TRUE | TRUE |
| 4 | -5513.811 | 43 | 11113.62 | 11320.12 | 11183.56 | 0.800 | 7.697 | 0.887 | 6 | 0.000 | TRUE | TRUE |
| 5 | -5498.880 | 54 | 11105.76 | 11365.09 | 11193.59 | 0.824 | 1.910 | 0.886 | 1 | 0.123 | TRUE | TRUE |
| 6 | -5486.524 | 65 | 11103.05 | 11415.20 | 11208.77 | 0.797 | 2.444 | 0.854 | 1 | 0.239 | TRUE | TRUE |
Each solution uses 100 random initializations. The retained likelihood should be replicated across independent starts. A solution that appears only once may be a local maximum or an unstable optimum even if its BIC is attractive.
BIC and adjusted BIC penalize model complexity differently. Entropy summarizes separation across the full posterior distribution; it should describe classification precision after a solution is substantively credible, not choose the number of profiles by itself.
| classes | observed_lrt | bootstrap_p | bootstrap_reps |
|---|---|---|---|
| 2 | 1225.996 | 0.048 | 20 |
| 3 | 349.436 | 0.048 | 20 |
| 4 | 162.391 | 0.048 | 20 |
| 5 | 29.862 | 0.143 | 20 |
| 6 | 24.713 | 0.524 | 20 |
The bootstrap comparison asks whether the improvement from
k − 1 to k profiles is larger than expected
when data are generated from the smaller fitted model. The p-value is
simulation-based and should be interpreted with the number of
replications, start quality, sample size, and other enumeration
evidence. Twenty replications keep this teaching example runnable;
publication work generally warrants substantially more replications and
starts.
| profile | assigned_n | assigned_percent | model_estimated_percent |
|---|---|---|---|
| 1 | 381 | 42.33 | 41.60 |
| 2 | 195 | 21.67 | 21.19 |
| 3 | 255 | 28.33 | 29.51 |
| 4 | 69 | 7.67 | 7.70 |
The automated rule identifies the admissible solution with the lowest BIC after excluding profiles smaller than 3%. That rule is a transparent starting point, not a substitute for reviewing neighboring solutions. In this synthetic example it retains 4 profiles.
| profile | academic_stress | advisor_support | research_confidence | belonging | burnout |
|---|---|---|---|---|---|
| Profile 1 | 42.99 | 3.68 | 57.10 | 3.44 | 38.05 |
| Profile 2 | 54.24 | 2.55 | 41.16 | 2.55 | 48.99 |
| Profile 3 | 55.08 | 3.52 | 50.15 | 3.16 | 50.93 |
| Profile 4 | 67.00 | 2.02 | 30.45 | 2.09 | 62.33 |
Profile names should be brief, descriptive, and nonstigmatizing. Report the indicator pattern before introducing a label. Avoid labels that imply clinical diagnosis, causality, permanence, or moral judgment.
| modal_profile | n | mean_max_posterior | percent_below_70 | mean_probability_gap |
|---|---|---|---|---|
| 1 | 381 | 0.923 | 6.824 | 0.851 |
| 2 | 195 | 0.855 | 20.513 | 0.719 |
| 3 | 255 | 0.845 | 20.392 | 0.705 |
| 4 | 69 | 0.931 | 8.696 | 0.864 |
Modal assignment discards the remaining probabilities. Report entropy for the solution and profile-specific posterior summaries, and retain the full probability matrix for downstream methods that account for classification error.
| modal_profile | n | milestone_mean | milestone_sd | support_seeking_percent | weighted_milestone_mean | weighted_support_seeking_percent | effective_n |
|---|---|---|---|---|---|---|---|
| 1 | 381 | 74.85 | 8.05 | 33.07 | 74.72 | 33.10 | 374.44 |
| 2 | 195 | 60.74 | 8.38 | 58.97 | 61.09 | 58.84 | 190.66 |
| 3 | 255 | 69.49 | 8.28 | 45.10 | 69.29 | 44.88 | 265.61 |
| 4 | 69 | 54.28 | 7.79 | 66.67 | 54.85 | 67.35 | 69.29 |
| term | estimate | std.error | statistic | p.value | conf.low | conf.high |
|---|---|---|---|---|---|---|
| (Intercept) | 76.387 | 0.572 | 133.491 | 0.000 | 75.264 | 77.510 |
| modal_profile2 | -14.054 | 0.716 | -19.638 | 0.000 | -15.458 | -12.649 |
| modal_profile3 | -5.390 | 0.660 | -8.164 | 0.000 | -6.685 | -4.094 |
| modal_profile4 | -20.439 | 1.063 | -19.225 | 0.000 | -22.525 | -18.352 |
| program_stageCoursework | -2.928 | 0.785 | -3.731 | 0.000 | -4.468 | -1.388 |
| program_stageData collection | -1.895 | 0.745 | -2.544 | 0.011 | -3.357 | -0.433 |
| program_stageProposal | -2.025 | 0.718 | -2.822 | 0.005 | -3.434 | -0.617 |
The modal-class regression is intentionally labeled naive: it treats the assigned profile as if it were observed without error and can attenuate or distort external associations. Posterior-weighted means retain more uncertainty but are still descriptive and are not a full three-step correction. For confirmatory distal-outcome inference, use an appropriate BCH, Vermunt, or one-step method, predefine the external model, and avoid allowing the distal outcome to redefine the profiles unless a one-step model is the scientific target.
| scaling | log_likelihood | smallest_profile_percent | modal_assignment_agreement |
|---|---|---|---|
| Mean/SD standardization | -5513.811 | 7.697 | 1 |
| Median/MAD standardization | -5257.457 | 7.726 | 1 |
The robust-scaling check asks whether unusual observations and scaling choices materially alter the profile solution. Direct likelihoods are not comparable across differently transformed data; focus on profile shapes, proportions, and assignment agreement. A stable result under one alternative does not establish population invariance or replication.
Latent profile models containing one through 6 profiles were estimated for 900 synthetic participants using five standardized continuous indicators. Each solution used 100 random starts. The retained 4-profile solution converged, reproduced the best log likelihood in 6 starts, and had BIC = 11320.1, compared with 11407.7 for the adjacent smaller solution. Its adjusted BIC was 11183.6, entropy was 0.800, and the smallest model-estimated profile contained 7.7% of participants. The bootstrap likelihood-ratio comparison with the adjacent smaller solution produced p = .048 using 20 replications. These indices were considered jointly with convergence, profile size, classification uncertainty, interpretability, and neighboring solutions. Posterior probabilities showed an average maximum assignment probability of 0.887. Profile-specific percentages below a .70 maximum posterior ranged from 6.8% to 20.5%. The profiles were interpreted from their indicator patterns and original-score means before descriptive labels were considered. External milestone and support-seeking summaries were examined using both modal assignment and posterior weighting; the modal regression was treated as exploratory because it ignores classification error.
| file |
|---|
| bootstrap_likelihood_ratio.csv |
| external_validation_summary.csv |
| indicator_audit.csv |
| indicator_scaling.csv |
| model_enumeration.csv |
| naive_modal_class_regression.csv |
| posterior_probabilities.csv |
| profile_means_original_scale.csv |
| profile_means_standardized.csv |
| profile_sizes.csv |
| random_start_loglikelihoods.csv |
| scaling_sensitivity.csv |
| synthetic_data_with_profile_probabilities.csv |
| synthetic_lpa_data.csv |