Psychometrics and Measurement
Maximum Shared Variance (MSV)
Maximum shared variance checks that each construct is distinct from its neighbors.
Maximum shared variance takes a confirmatory factor analysis of several constructs and checks whether each construct explains more of its own items than it shares with its closest neighbor.
Are work engagement, job satisfaction and commitment to the organization really three different things to employees? Three hundred employees rated twelve statements from 1 to 7, four each for engagement, satisfaction and commitment, and we fitted a three-factor model to their answers.
- Estimates
- Largest variance a construct shares with another construct
- Observations
- Independent
- Parametric
- Yes
- Headline Statistic
- MSV
- Key Estimate
- Maximum Shared Variance
- Groups
- 1
The Basics
When to Use It
Use it when you've fitted a confirmatory factor analysis with two or more constructs, each measured by several items, and you want to check, construct by construct, that none of them overlaps with another more than it explains its own items. It's usually reported alongside AVE and, better, alongside the factor correlations and HTMT. For example:
- Are work engagement, job satisfaction and commitment to the organization really three different things to employees?
- Does a new loneliness scale measure something other than depressed mood on the PHQ-9 in a sample of older adults?
- Are test anxiety and general worry distinct enough in students' answers to be scored as separate subscales?
Vocabulary You Need
Definition Maximum Shared Variance (MSV)
For one construct in a measurement model, the largest of its squared correlations with the other constructs. Squaring a factor correlation turns it into shared variance: two constructs correlated .70 have 49% of their variance in common. MSV picks out a construct's closest neighbor and is compared with the construct's average variance extracted (AVE). If a construct shares more variance with another construct than it explains, on average, in its own items, the two may not be distinct. Checking MSV < AVE for every construct is the same as Fornell and Larcker's comparison of each AVE with each squared correlation, organized construct by construct. It should use factor correlations from a confirmatory factor analysis, not correlations between scale scores. Glossary →
Definition Average Variance Extracted (AVE)
The average, across a construct's items, of each item's squared standardized loading: how much of a typical item's variance the construct accounts for, with the rest being measurement error and whatever is specific to that item. It comes from a factor model, usually a confirmatory factor analysis in which each item reflects one construct. An AVE of .50 means the construct explains as much of the average item as everything else does. Because it is an average of single items, it doesn't grow with the number of items, unlike composite reliability; a construct can have reliable items as a set and still a low AVE. With standardized loadings it equals the average of the items' reliabilities, which is why Rönkkö and Cho (2022) suggest calling it average indicator reliability. Fornell and Larcker (1981) proposed it, together with a check for discriminant validity that compares each construct's AVE with the variance it shares with other constructs. Glossary →
Definition Factor Loading (\lambda)
How strongly one observed variable, such as a questionnaire item, reflects a factor: an unobserved trait that a set of variables is assumed to share. A standardized loading puts everything in standard deviations; when each item reflects only one factor, it is the item's correlation with that factor, and its square is the share of the item's variance the factor accounts for. An unstandardized loading is in the item's own units: how much the item's score rises, on average, for each one-unit rise in the factor: one standard deviation when the factor's variance is fixed at 1, or one point of the marker item when that item's loading is fixed at 1. Loadings come from a factor analysis, so they depend on the model, the estimation method and which items are analyzed together. Glossary →
Definition Factor Correlation (\phi)
How closely two factors go together, from −1 to 1, estimated from what their items share rather than from total scores. Because the items' unique noise is left out, it's usually larger in size than the correlation between the two total scores, which measurement error weakens. A correlation well below 1 supports treating the factors as distinct traits; one close to 1 means the two sets of items may be measuring one thing. In a model where each factor's variance is fixed at 1, it's the factors' covariance, written φ (“phi”). Glossary →
Definition Discriminant Validity
Evidence that a measure captures something different from measures of other, related traits. Two scales meant to measure different things, such as worry and rumination, should correlate less than perfectly once measurement error is set aside; if their traits correlate close to 1, they're effectively measuring the same thing, whatever their names say. It's one strand of construct validity, paired with convergent validity (measures of the same trait should agree). It's usually judged from an error-corrected correlation between the two traits, such as the heterotrait-monotrait ratio (HTMT) or the factor correlation from a confirmatory factor analysis, or from the Fornell-Larcker criterion. No cutoff settles it alone: theory about how related the traits should be matters too. Glossary →
Assumptions
1. Correctly Specified Model Your model includes the paths and correlations that really matter.
- What It Means
- The model's pattern is right in the ways that count: every path, loading or covariance that matters is included, and every one the model fixes at zero really is near zero. In a factor model, the items load on the factors you assigned them to and any residuals that share something (similar wording, a shared method) are allowed to correlate; in a path model, the arrows left out of the diagram really are absent. Every estimate, and every fit index, is conditional on that pattern. An omitted path, cross-loading or residual correlation doesn't just cost fit; the model makes up for it by bending the parameters it does have.
- Applies To
- Items
- How to Check
- Specify the model from theory (and, for a factor model, item content) before seeing the data. Then look beyond the overall fit: the residual correlations for pairs the model misses, the modification indices for where it misses most, and paths, loadings or factor correlations that look implausible. Compare the model with plausible alternatives specified in advance. Fit statistics can show a model is wrong; they can't show it's right.
- How Much It Matters
- A lot. MSV and AVE are read straight off the fitted model. An item that also reflects a second construct, or a missing factor, pushes loadings and factor correlations around, and with them both sides of the comparison. Here the three-factor model fit well.
If It's Violated
- Alternative Test Exploratory Factor Analysis (EFA). Find out how many factors the items form, and which items cross over, before fitting a confirmatory model.
- Correction Confirmatory Factor Analysis (CFA). Free a justified cross-loading or add the missing factor in the CFA, then recompute AVE and MSV from the model that fits, and say that you changed it.
- Design Change Replace items whose wording fits two constructs.
2. No Shared Noise between Items Your items don't share anything beyond the trait, such as near-identical wording.
- What It Means
- The part of each item that the trait doesn't explain is unrelated from item to item. Items that repeat the same wording, share a response format the others don't, or are all reverse-keyed can share a little variance of their own. The factor model then counts that shared noise as trait, so the loadings, and the coefficients built from them (omega, alpha, AVE, composite reliability), come out too high. If you model the shared noise as a residual correlation, count it as error: omega and composite reliability then need twice that covariance added to the noise in their denominator.
- Applies To
- Items
- How to Check
- Look at the item wording for near-duplicates and for clusters of reverse-keyed or differently formatted items. After fitting the factor model, check the residual correlations between items: pairs the factor leaves strongly correlated point to shared noise.
- How Much It Matters
- Some. Shared noise among one construct's items inflates its loadings and AVE, making MSV < AVE easier to pass. Shared noise across constructs, such as the same response format or a common rater, inflates the factor correlation and so MSV.
If It's Violated
- Correction Confirmatory Factor Analysis (CFA). Add residual correlations for item pairs with a clear shared source, or a method factor, and recompute from that model.
- Design Change Measure constructs with different formats or sources where you can, so a shared method doesn't look like a shared construct.
3. Independent Observations The people (or other units) in your study don't influence each other.
- What It Means
- Each person's data comes from a separate, unconnected source, so knowing one person's scores tells you nothing about anyone else's. In designs that measure people more than once, their own scores are meant to be related; it's different people who must be independent. Methods built for clustered data, such as multilevel models and GEE, also allow members of the same group to be related, as long as the analysis names the grouping; then it's the groups that must be independent.
- Applies To
- Observations
- How to Check
- By design, not by a test. Did each person contribute their own data, with no clusters such as roommates, couples, therapy groups or classrooms whose members influence each other? If there are clusters, does the analysis model every one of them?
- How Much It Matters
- Some. Employees clustered in teams leave the estimates roughly right but make the confidence interval for the factor correlation too narrow, and team-level differences can raise the correlation between constructs.
If It's Violated
- Alternative Test Multilevel SEM. Estimate the factor model separately within and between clusters.
- Proceed with Caveat Say how respondents were grouped and treat the interval as too narrow.
Limitations
This Is Not Your Test If…
- You want the recommended check that two constructs are distinct Discriminant Validity →
- You don't yet know how many factors your items form Exploratory Factor Analysis (EFA) →
- You haven't checked that your factor model fits Confirmatory Factor Analysis (CFA) →
- You're asking how well items measure their own construct Average Variance Extracted (AVE) →
- You have one scale and want its reliability McDonald's Omega →
What It Doesn't Tell You
- Whether the constructs are really different. MSV > AVE for engagement says its items don't separate it cleanly from satisfaction in these data. Whether engagement and satisfaction are one idea or two is a question for theory and item content; a different set of items could separate them better, or worse.
- Whether the overlap is the problem. A low AVE fails the check as surely as a high correlation; with stronger items, engagement's same .81 correlation would have passed.
- Whether the comparison itself can be trusted. MSV < AVE is Fornell and Larcker's comparison under another name, which Rönkkö and Cho (2022) found often flags problems that aren't there, so judge the pair on the factor correlation's interval, with HTMT as a cross-check (see Discriminant Validity).
- How certain the verdict is. MSV and AVE are estimates, and AVE − MSV has no standard interval. A percentile bootstrap (2,000 resamples of the 300 employees, refitting the CFA each time) puts engagement's margin of −.11 at 95% CI [−.21, −.01]: below zero, but only just. Satisfaction's +.06 runs from −.04 to .16, and it fails in about 1 resample in 8. A margin of a few hundredths can flip in another sample.
- Who else. The .81 belongs to these simulated employees. In a workplace where engagement and satisfaction vary more independently, or with different items, the constructs could separate more clearly.
- Whether ASV adds anything. Engagement's ASV of .44 passes, but only because its low overlap with commitment dilutes its high overlap with satisfaction. Any construct that passes MSV < AVE passes ASV < AVE automatically, so ASV never catches a problem MSV misses.
Common Mistakes
-
Don'tDeclare a pair of constructs distinct because one of them passes MSV < AVE.
InsteadCheck both constructs in the pair. They share one squared correlation, so the pair fails if either construct's AVE falls below it.
-
Don'tTake ASV < AVE as reassurance when MSV < AVE fails.
InsteadReport the MSV result. An average over several constructs can hide one that is far too close.
-
Don'tTreat MSV < AVE as a test of whether two constructs are distinct.
InsteadReport the factor correlation with its confidence interval and HTMT, and judge the pair on those and on theory.
-
Don'tCompute AVE from a partial least squares (PLS) model and compare it with MSV.
InsteadUse a confirmatory factor analysis. PLS overstates loadings, so its AVE is too high to catch real problems.
-
Don'tDrop low-loading items until MSV < AVE passes.
InsteadKeep the items the construct's definition calls for. Pruning to pass changes what the scale covers and fits this sample's quirks; if you revise the scale, test the revised version in new data.
-
Don'tSquare the correlation between two scale scores and compare it with AVE.
InsteadSquare the factor correlation from the CFA. Scale-score correlations are weakened by measurement error, so they make the check too easy to pass.
-
Don'tCompare AVE with a correlation instead of a squared correlation.
InsteadCompare AVE with the squared factor correlation, or √AVE with the correlation itself.
Result Decoder
Interpretation Guidelines
Benchmarks Maximum Shared Variance
-
MSV < AVE
Passes
The construct explains more of its own items' variance, on average, than it shares with any other construct in the model.
-
MSV ≥ AVE
Fails
Some other construct shares at least as much variance with this one as this one explains in its own items. The two may not be distinct, or this construct's items may be weak measures of it.
A pass/fail rule, not graded benchmarks. Tutorial materials such as Gaskin's StatWiki give it as “MSV < AVE” and ask users to cite Hair et al.'s Multivariate Data Analysis (2010); the comparison itself is Fornell and Larcker's (1981) AVE-versus-squared-correlation check. Rönkkö and Cho (2022) found that check biased: it can flag a problem when loadings are modest and the constructs are clearly distinct. Treat a failure as a reason to look at the factor correlation, its confidence interval and HTMT, not as a verdict on its own.
How It's Reported
Equation Form
Engagement: AVE = .55, MSV = .66, ASV = .44; engagement–satisfaction φ = .81, 95% CI [.75, .87], HTMT = .81, 95% bootstrap CI [.75, .87]
Table 1. Average Variance Extracted and Shared Variance for Each Construct
| AVE | MSV | ASV | MSV < AVE? | |
|---|---|---|---|---|
| Work engagement | .55 | .66 | .44 | No (satisfaction) |
| Job satisfaction | .72 | .66 | .48 | Yes |
| Affective commitment | .58 | .31 | .27 | Yes |
Note. N = 300. AVE = average variance extracted (mean squared standardized loading); MSV = maximum shared variance (largest squared factor correlation with another construct); ASV = average shared variance. A construct passes when MSV < AVE. Three-factor CFA, maximum likelihood.
Table 2. Shared Variance between Constructs
| 1 | 2 | 3 | |
|---|---|---|---|
| 1. Work engagement | .55 | ||
| 2. Job satisfaction | .66 | .72 | |
| 3. Affective commitment | .23 | .31 | .58 |
Note. Below the diagonal: squared factor correlations (shared variance). On the diagonal: each construct's AVE. Read along a construct's row and column: its largest off-diagonal value is its MSV, and a value larger than the diagonal entry fails. Factor correlations: engagement–satisfaction .81, engagement–commitment .48, satisfaction–commitment .55.
Full Text (APA Style)
A three-factor confirmatory factor analysis fit the twelve items well, χ²(51) = 57.37, p = .251, CFI = .997, RMSEA = .020, 90% CI [.000, .044], SRMR = .023. Work engagement shared more variance with job satisfaction than it explained in its own items: its maximum shared variance was .66, above its average variance extracted of .55 (ASV = .44; Table 1). Job satisfaction (AVE = .72, MSV = .66) and affective commitment (AVE = .58, MSV = .31) met MSV < AVE. Engagement's shortfall partly reflects its items being the weakest of the three sets. The engagement–satisfaction correlation was high, .81, 95% CI [.75, .87], with HTMT = .81, 95% bootstrap CI [.75, .87]. The correlation's upper limit falls in the .80 to .90 range that Rönkkö and Cho (2022) classify as a marginal problem: treating the constructs as distinct is probably safe, but their high overlap should be acknowledged and discussed.
- Report AVE, MSV and the factor correlations in one table, so readers can check every pair themselves.
- Say which construct fails and with which neighbor, not just that "discriminant validity was (not) established."
- Give the factor correlation with its confidence interval, and HTMT, next to the MSV result.
- Say how AVE was computed (the mean squared standardized loading from a CFA), since programs differ slightly.
Reading Each Piece
The equation form above, piece by piece, in this order: how big, then how certain.
| AVE = .55 | Engagement accounts for 55% of the variance in a typical engagement item; the other 45% is unique to the item or error. Its items are the weakest of the three sets. |
| φ = .81 | Employees higher in engagement tend strongly to be higher in satisfaction too. That's a strong correlation, but .81 is still short of the 1 that would make the two indistinguishable. |
| 95% CI [.75, .87] | The population correlation is plausibly anywhere from .75 to .87. The upper end sits in the .80 to .90 range that Rönkkö and Cho (2022) classify as a marginal problem: the constructs are probably safe to treat as distinct, but the overlap should be acknowledged. |
| φ² = .66 | Engagement and satisfaction share 66% of their variance: about two thirds of the differences between employees in one line up with differences in the other. |
| MSV = .66 | Engagement's closest neighbor is satisfaction, and the two share 66% of their variance. That is the number held against engagement's AVE. Benchmarks ↑ |
| ASV = .44 | On average, engagement shares 44% of its variance with the other two constructs. The average passes because commitment's low overlap dilutes satisfaction's high one. |
| HTMT = .81 | The point estimate is below the common cutoffs of .85 and .90, but a percentile bootstrap (20,000 resamples) puts its 95% interval at [.75, .87], which reaches past .85. That's the same marginal picture as the factor correlation's interval: not a clear pass or a clear failure. |
Calculations
The Running Example
The workplace survey study: 300 employees, twelve 1–7 items, three constructs of four items each, one confirmatory factor analysis.
There's no hypothesis to test. For each construct the question is whether MSV < AVE: whether it shares less variance with its closest neighbor than it explains in its own items. \phi (“phi”) is the correlation between two constructs in the population of employees like these, which the model's factor correlation estimates.
What Your Data Should Look Like
One row per person and one numeric column per item, for every construct in the model, with any reverse-worded items already reverse-scored. You also need to know which items belong to which construct: that's the model, and it's decided before the analysis, not from the data. The numbers on this page come from the fitted model, so the data box below only summarizes the items.
| employee | engagement_1 | engagement_2 | engagement_3 | engagement_4 | satisfaction_1 | satisfaction_2 | satisfaction_3 | satisfaction_4 | commitment_1 | commitment_2 | commitment_3 | commitment_4 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 7 | 6 | 6 | 4 | 6 | 6 | 5 | 5 | 4 | 3 | 7 | 2 |
| 2 | 4 | 4 | 4 | 4 | 3 | 4 | 4 | 4 | 4 | 5 | 2 | 3 |
| 3 | 5 | 5 | 5 | 5 | 3 | 3 | 4 | 4 | 4 | 4 | 3 | 4 |
| 4 | 3 | 4 | 4 | 5 | 5 | 5 | 3 | 3 | 5 | 5 | 6 | 5 |
| 5 | 6 | 6 | 5 | 4 | 3 | 3 | 3 | 5 | 4 | 5 | 4 | 5 |
| 6 | 4 | 6 | 6 | 4 | 6 | 6 | 6 | 6 | 5 | 5 | 7 | 6 |
| … 294 more rows | ||||||||||||
| Item | M | SD | Item–Total r |
|---|---|---|---|
| Engagement | |||
| Engagement 1 | 4.32 | 1.44 | .71 |
| Engagement 2 | 4.18 | 1.45 | .64 |
| Engagement 3 | 4.20 | 1.37 | .66 |
| Engagement 4 | 4.25 | 1.49 | .59 |
| Total | 16.95 | 4.66 | |
| Satisfaction | |||
| Satisfaction 1 | 4.25 | 1.47 | .83 |
| Satisfaction 2 | 4.17 | 1.44 | .80 |
| Satisfaction 3 | 4.15 | 1.41 | .78 |
| Satisfaction 4 | 4.25 | 1.46 | .76 |
| Total | 16.82 | 5.12 | |
| Commitment | |||
| Commitment 1 | 4.24 | 1.42 | .74 |
| Commitment 2 | 4.25 | 1.48 | .68 |
| Commitment 3 | 4.30 | 1.43 | .64 |
| Commitment 4 | 4.31 | 1.38 | .68 |
| Total | 17.09 | 4.73 | |
N = 300. Each construct has its own total, adding its own items; each item's r is with the total of the other items in its construct (the corrected item–total correlation).
Simulated data.
Napkin Math
The whole test, one idea at a time. Under each heading, a line says why the step matters, and the green note reads the equation in plain English with the workplace survey study's numbers. Collapse all to read just the headings: they tell the whole story on their own.
-
1. Fit One Model for All Three Constructs and Check That It Fits
Every number on this page comes from one confirmatory factor analysis in which each construct is a factor measured by its own four items and the three factors are free to correlate. If that model didn't fit, its loadings and correlations wouldn't be worth comparing.
\chi^2 = N \times F_{\text{ML}} =300 \times 0.19124\chi^2 = 57.37
df = 51
p = .251
CFI = .997
RMSEA = .020
\text{90\% CI}_{\text{RMSEA}} = [.000, .044]
SRMR = .023
F_{\text{ML}} measures the gap between the items' observed variances and covariances and the ones the three-factor model implies. 300 × 0.19124 = 57.37 on 51 df (p = .251). That's lavaan's convention; some programs multiply by N − 1 instead. CFI compares the model with one in which no items correlate, so near 1 is good; RMSEA and SRMR measure the misfit left over, so near 0 is good. Hu and Bentler's (1999) often-quoted guides are CFI of about .95 or more, RMSEA of about .06 or less and SRMR of about .08 or less: rules of thumb, not tests. CFI = .997, RMSEA = .020 (90% CI [.000, .044]) and SRMR = .023 are well inside all three, so by these conventions the model fits well.
-
2. Measure How Much Each Construct Explains in Its Own Items
A standardized loading is the correlation between an item and its construct, so its square is the share of the item's variance the construct accounts for. Square each item's loading, then average over the construct's items. That average, the AVE, is the yardstick for everything that follows.
AVE = \dfrac{\sum \lambda_i^2}{k} =\dfrac{.823^2 + .728^2 + .738^2 + .659^2}{4}= .55
AVE_{\text{sat}} = .72
AVE_{\text{com}} = .58
\lambda_i are engagement's four standardized loadings. Squared they're .68, .53, .54 and .43, which add to 2.19; divided by k = 4 items, engagement explains .55 of a typical item's variance. Satisfaction's AVE is .72 and commitment's .58 (Table 1).
-
3. Find How Strongly Each Pair of Constructs Correlates
The model estimates the correlation between each pair of constructs from what their items share, with each item's own noise set aside. That makes these factor correlations the right ones to judge overlap by, not correlations between total scores.
\phi_{\text{eng,sat}}= .81
\phi_{\text{eng,com}} = .48
\phi_{\text{sat,com}} = .55
95\%\ \text{CI} = [.75, .87]
\phi_{\text{eng,sat}} is the factor correlation between engagement and satisfaction, .81, with a 95% interval from .75 to .87. Engagement and commitment correlate .48, satisfaction and commitment .55.
-
4. Square Each Correlation to Get the Variance the Pair Shares
A correlation isn't a share of anything; its square is. Squaring puts the overlap between two constructs on the same scale as AVE, a proportion of variance.
\phi_{\text{eng,sat}}^2 =.810^2= .66
\phi_{\text{eng,com}}^2 = .23
\phi_{\text{sat,com}}^2 = .31
\phi_{\text{eng,sat}} is the .810 correlation. .810 × .810 = .66, so engagement and satisfaction have 66% of their variance in common. The other pairs share .23 (.48²) and .31 (.55²).
-
5. Pick Each Construct's Closest Neighbor
For each construct, keep only its largest shared variance. That's its maximum shared variance: the overlap with whichever other construct it's hardest to tell apart from.
MSV_j = \max_{k \neq j} \phi_{jk}^2 =\max(.66,\ .23)= .66
MSV_{\text{sat}} = .66
MSV_{\text{com}} = .31
\phi_{jk}^2 are engagement's shared variances with the other two constructs, .66 with satisfaction and .23 with commitment. The larger, .66, is engagement's MSV. It's satisfaction's MSV too, since .66 is also satisfaction's largest; commitment's is .31.
-
6. Average Each Construct's Overlap with All the Others
Some reports also give the average shared variance. It describes a construct's overlap with the model as a whole, and it can look fine when one neighbor is far too close.
ASV_j = \dfrac{1}{m - 1}\sum_{k \neq j} \phi_{jk}^2 =\dfrac{.656 + .231}{2}= .44
ASV_{\text{sat}} = .48
ASV_{\text{com}} = .27
m - 1 = 2 other constructs, and engagement shares .656 and .231 with them. (.656 + .231) ÷ 2 = .44, comfortably below its .55 AVE, even though one of the two is above it.
-
7. Compare Each Construct's Closest Overlap with What It Explains in Its Own Items
Now the rule: a construct should explain more of its own items than it shares with any other construct. Subtracting MSV from AVE gives the margin; a negative margin fails.
AVE_j - MSV_j =.546 - .656AVE_{\text{eng}} - MSV_{\text{eng}} = −.11
AVE_{\text{sat}} - MSV_{\text{sat}} = .06
AVE_{\text{com}} - MSV_{\text{com}} = .28
AVE_{\text{eng}} is .546 and MSV_{\text{eng}} .656, so the margin is .546 − .656 = −.11: engagement fails. Satisfaction passes by .72 − .66 = .06, and commitment by .58 − .31 = .28.
-
8. Check the Same Comparison on the Correlation Scale
Many papers show it another way: √AVE on the diagonal of the correlation table, compared with the correlations. Both sides are the square roots of the MSV < AVE comparison, so it's the same check: engagement fails either way, and a pair counts as distinct only if both AVEs exceed its squared correlation.
\sqrt{AVE_{\text{eng}}} \;\text{vs}\; |\phi_{\text{eng,sat}}| =\sqrt{.546} = .739 < .810\sqrt{AVE_{\text{eng}}} = .74
\sqrt{AVE_{\text{sat}}} = .85
\sqrt{AVE_{\text{eng}}} = √.546 = .74, below the .81 correlation, just as .55 is below .81² = .66. Satisfaction's √.72 = .85 clears .81, but one failure is enough to flag the pair.
-
9. Cross-Check the Pair with the Heterotrait-Monotrait Ratio
HTMT asks the same question from the item correlations, without a factor model: do engagement items correlate with satisfaction items nearly as strongly as they do with each other? Henseler et al. (2015) proposed it as a replacement for AVE comparisons. Rönkkö and Cho (2022) show it's a scale-score correlation corrected for measurement error on the assumption that all items are equally good, so treat it as a cross-check on the factor correlation, not a better answer.
\text{HTMT} = \dfrac{\bar{r}_{\text{eng,sat}}}{\sqrt{\bar{r}_{\text{eng}}\;\bar{r}_{\text{sat}}}}= .81
\bar{r}_{\text{eng,sat}} is the average correlation between an engagement item and a satisfaction item, and the bottom is the geometric mean of the average correlations within each set. The ratio is .81, almost exactly the factor correlation.
Run It in Software
The code below reads the running example's data from data.csv; save it in the same folder you run the code from.
SPSS Amos (version 30, as documented by IBM)
SPSS Statistics itself can't fit a confirmatory factor analysis, and no SPSS procedure prints MSV. Fit the model in IBM SPSS Amos, SPSS's structural equation modeling program, then do the squaring and comparing by hand or in a spreadsheet:
- In Amos Graphics, File → Data Files → File Name, and open the data file.
- Draw one latent variable (an oval) per construct, with its four items as indicators, and draw a two-headed arrow between every pair of latent variables. Amos fixes each factor's first loading to 1; that's fine, because the standardized estimates are what you need.
- View → Analysis Properties → Output, check Standardized estimates, and run the analysis (Analyze → Calculate Estimates).
- From Text Output → Estimates, copy the Standardized Regression Weights (the standardized loadings) and the Correlations between the three factors.
- For each construct, AVE is the mean of its squared standardized loadings. Square each correlation; each construct's MSV is its largest squared correlation and its ASV the mean of them. Compare MSV with AVE.
Reading the Output
Amos's standardized estimates don't depend on how the factors are scaled, so they match the R results below: standardized loadings from .66 to .82 for engagement, .81 to .88 for satisfaction and .70 to .85 for commitment, and factor correlations of .81 (engagement–satisfaction), .48 (engagement–commitment) and .55 (satisfaction–commitment). From these:
| AVE | MSV | ASV | MSV < AVE? | |
|---|---|---|---|---|
| engagement | .546 | .656 | .443 | No |
| satisfaction | .715 | .656 | .482 | Yes |
| commitment | .583 | .307 | .269 | Yes |
Read the AVE and MSV columns first, then go back to the correlation that produced each MSV. Amos gives no interval for a standardized correlation by default; bootstrap it (Analysis Properties → Bootstrap) or use R.
Output laid out from this page's computed results, not captured from a live run; labels and layout may differ slightly in your version.
R
library(lavaan)
library(semTools)
survey <- read.csv("data.csv")
model <- '
engagement =~ engagement_1 + engagement_2 + engagement_3 + engagement_4
satisfaction =~ satisfaction_1 + satisfaction_2 + satisfaction_3 + satisfaction_4
commitment =~ commitment_1 + commitment_2 + commitment_3 + commitment_4
'
fit <- cfa(model, data = survey, std.lv = TRUE)
fitMeasures(fit, c("chisq", "df", "pvalue", "cfi", "rmsea", "srmr"))
# AVE: mean squared standardized loading per construct
lam <- lavInspect(fit, "std")$lambda
ave <- colSums(lam^2) / colSums(lam != 0)
# Shared variance: squared factor correlations
r2 <- lavInspect(fit, "cor.lv")^2
diag(r2) <- NA
msv <- apply(r2, 1, max, na.rm = TRUE)
asv <- rowMeans(r2, na.rm = TRUE)
round(cbind(AVE = ave, MSV = msv, ASV = asv, pass = msv < ave), 3)
# The factor correlations with 95% CIs, and HTMT
subset(standardizedSolution(fit), op == "~~" & lhs != rhs)[, c("lhs", "rhs", "est.std", "ci.lower", "ci.upper")]
htmt(model, data = survey, htmt2 = FALSE)
chisq df pvalue cfi rmsea srmr
57.373 51.000 0.251 0.997 0.020 0.023
AVE MSV ASV pass
engagement 0.546 0.656 0.443 0
satisfaction 0.715 0.656 0.482 1
commitment 0.583 0.307 0.269 1
lhs rhs est.std ci.lower ci.upper
28 engagement satisfaction 0.810 0.753 0.868
29 engagement commitment 0.480 0.372 0.588
30 satisfaction commitment 0.554 0.461 0.648
enggmn stsfct cmmtmn
engagement 1.000
satisfaction 0.809 1.000
commitment 0.490 0.548 1.000
Check the fit first, then read AVE against MSV row by row (pass is 1 for MSV < AVE), then the correlation and interval behind each MSV, then HTMT. semTools also has AVE(fit), but it weights items by their observed variances, so it gives .545, .716 and .584 here instead of the plain average of squared standardized loadings. htmt() uses a geometric-mean version (HTMT2, .807 here) unless you set htmt2 = FALSE; discriminantValidity(fit) tests each correlation against 1 or a cutoff you choose.
cfa() uses maximum likelihood, which treats the 1–7 ratings as continuous. That's usually fine with five or more answer categories and roughly symmetric answers, as here; with fewer categories or skewed answers, refit with estimator = "MLR" or ordered = TRUE and say which you used. Here the verdict doesn't change: with ordered = TRUE, engagement's AVE is .57, still below its MSV of .65.
Output from a real run: R 4.6.1 (lavaan 0.7-2, semTools 0.5-9), run 2026-10-03.
Python
import numpy as np
import pandas as pd
import semopy
survey = pd.read_csv("data.csv")
desc = """
engagement =~ engagement_1 + engagement_2 + engagement_3 + engagement_4
satisfaction =~ satisfaction_1 + satisfaction_2 + satisfaction_3 + satisfaction_4
commitment =~ commitment_1 + commitment_2 + commitment_3 + commitment_4
"""
model = semopy.Model(desc)
model.fit(survey.drop(columns="employee"))
est = model.inspect(std_est=True)
factors = ["engagement", "satisfaction", "commitment"]
load = est[(est.op == "~") & est.rval.isin(factors)]
ave = load.groupby("rval")["Est. Std"].apply(lambda l: np.mean(l**2)).reindex(factors)
cor = est[(est.op == "~~") & est.lval.isin(factors) & est.rval.isin(factors) & (est.lval != est.rval)]
r2 = pd.DataFrame(np.nan, index=factors, columns=factors)
for _, row in cor.iterrows():
r2.loc[row.lval, row.rval] = r2.loc[row.rval, row.lval] = row["Est. Std"] ** 2
print(pd.DataFrame({"AVE": ave, "MSV": r2.max(axis=1), "ASV": r2.mean(axis=1)}).round(3))
AVE MSV ASV
engagement 0.546 0.656 0.443
satisfaction 0.715 0.656 0.482
commitment 0.583 0.308 0.269
semopy fixes each factor's first loading rather than its variance, but the standardized estimates are the same model. Its estimates differ from lavaan's around the fourth decimal, which is why commitment's MSV prints as .308 rather than .307. semopy.calc_stats(model) gives the fit (χ² = 57.373 on 51 df, CFI = .997, RMSEA = .020). semopy doesn't print intervals for standardized correlations; bootstrap them or use R.
Output from a real run: Python 3.9.6 (semopy 2.3.11, pandas 2.3.3), run 2026-10-03.
Impact
Effect Size
MSV is itself a size: the share of variance a construct has in common with its closest neighbor. It has no units, so it reads the same way whatever the items' response scales, and it's judged against the construct's own AVE rather than against fixed benchmarks.
Two thirds of the variation in engagement lines up with variation in satisfaction, while engagement explains only about half of what its own four items measure.
In practical terms, the margin matters more than the verdict. Engagement misses by .11, satisfaction clears by .06 and commitment by .28. What to do about a miss depends on the purpose: if engagement and satisfaction will be entered as separate predictors of turnover, expect their separate coefficients, each holding the other constant, to be unstable and hard to interpret; if the scale is new, look at which engagement items sit closest to satisfaction and whether stronger, more specific items would pull the two apart.
Benchmarks Maximum Shared Variance at a Glance
Uncertainty
MSV comes with no p-value. MSV < AVE is a comparison of two estimates, not a test, so it doesn't say how likely the verdict is to hold in another sample. The uncertainty worth reporting is in the factor correlation behind it.
Engagement and satisfaction correlate .81, 95% CI [.75, .87]. Rönkkö and Cho (2022) suggest judging the upper limit: below .80 is no problem, .80 to .90 a marginal problem, .90 to 1 a moderate one, and 1 or above a severe one, where the two can't be told apart. At .87 this pair is a marginal problem, which fits the MSV failure without making it a clear-cut one.
The one test that does come first is whether the three-factor model fits. Here it did, χ²(51) = 57.37, p = .251. With a large sample that test flags even trivial misfit, so read it alongside CFI, RMSEA and SRMR, and the residual correlations, not on its own.
Precision and Sample Size
Power is the chance that a study detects an effect that's really there. MSV isn't tested against anything, so power in that sense doesn't apply. What you plan instead is precision: enough people that the factor correlations, and the loadings behind AVE, are estimated tightly enough for the comparison to mean something. Precision improves with more people, more items per construct and stronger loadings.
With our 300 employees, the engagement–satisfaction correlation's interval runs about ±.06 around .81. Its width shrinks with the square root of the sample size, so with 100 employees it would be roughly ±.10, from about .71 to .91: wide enough to include both "clearly distinct" and "hard to tell apart."
Plan for precision: decide how narrow the interval for the key correlations needs to be, and choose a sample big enough to reach it. Fewer items per construct or weaker loadings call for more people. There's no calculator for this test.
Other Info
Follow-Up and Post Hoc Tests
None. This page estimates rather than tests, so there are no follow-up comparisons to run.
References
- Fornell, C., & Larcker, D. F. (1981). Evaluating structural equation models with unobservable variables and measurement error. Journal of Marketing Research, 18(1), 39–50. https://doi.org/10.1177/002224378101800104
- Hu, L., & Bentler, P. M. (1999). Cutoff criteria for fit indexes in covariance structure analysis: Conventional criteria versus new alternatives. Structural Equation Modeling, 6(1), 1–55. https://doi.org/10.1080/10705519909540118
-
Gaskin, J. (2022, December 4). CFA. Gaskination's StatWiki. https://statwiki.gaskination.com/index.php?title=CFA
https://statwiki.gaskination.com/index.php?title=CFA
“If you need to cite these suggested thresholds, please use the following:” (Validity and Reliability)
“MSV < AVE” (Validity and Reliability)
-
Henseler, J., Ringle, C. M., & Sarstedt, M. (2015). A new criterion for assessing discriminant validity in variance-based structural equation modeling. Journal of the Academy of Marketing Science, 43(1), 115–135.
https://doi.org/10.1007/s11747-014-0403-8
“To satisfy this requirement, each construct’s average variance extracted (AVE) must be compared with its squared correlations with other constructs in the model.” (Comparing average communality and shared variance, p. 116)
“The most commonly used approach, the Fornell-Larcker criterion, fails to identify discriminant validity issues in the vast majority of cases” (Sensitivity results, p. 124)
-
Rönkkö, M., & Cho, E. (2022). An updated guideline for assessing discriminant validity. Organizational Research Methods, 25(1), 6–47.
https://doi.org/10.1177/1094428120968614
“Fornell and Larcker (1981a) presented a decision rule that discriminant validity holds for two scales if the AVEs for both are higher than the squared factor correlation between the scales.” (AVE/SV or Fornell-Larcker Criterion, p. 12 (OnlineFirst))
“Therefore, AVE/SV has a high false positive rate, indicating a discriminant validity problem under conditions where most researchers would not consider one to exist” (AVE/SV or Fornell-Larcker Criterion, p. 12 (OnlineFirst))
“Thus, if there is a threshold, it is likely to fall between .8 and .9.” (On Choosing a Technique and a Cutoff, p. 29 (OnlineFirst))
“In the Marginal case, the interpretation of the scales as representations of distinct constructs is probably safe.” (A Guideline for Assessing Discriminant Validity, p. 31 (OnlineFirst))
“The most common misapplication is to compare the AVE values with the square of the scale score correlation, not the square of the factor correlation” (AVE/SV or Fornell-Larcker Criterion, p. 12 (OnlineFirst))
“Thus, the term “average indicator reliability” might be more informative than “average variance extracted.”” (AVE/SV or Fornell-Larcker Criterion)
- Campbell, D. T., & Fiske, D. W. (1959). Convergent and discriminant validation by the multitrait-multimethod matrix. Psychological Bulletin, 56(2), 81–105. https://doi.org/10.1037/h0046016
- Roemer, E., Schuberth, F., & Henseler, J. (2021). HTMT2—An improved criterion for assessing discriminant validity in structural equation modeling. Industrial Management & Data Systems, 121(12), 2637–2650. https://doi.org/10.1108/IMDS-02-2021-0082
-
MacCallum, R. C., Roznowski, M., & Necowitz, L. B. (1992). Model modifications in covariance structure analysis: The problem of capitalization on chance. Psychological Bulletin, 111(3), 490–504.
https://doi.org/10.1037/0033-2909.111.3.490
“The use of alternative a priori models is recommended as a preferred strategy.” (Abstract)
Spot an error? Something still confusing? Tell us at support@statsforpsychology.com.