Signature
rbar_ij = (r_i1j1 + r_i1j2 + r_i2j1 + r_i2j2) / 4; HTMT_ij = rbar_ij / sqrt(r_i1i2 * r_j1j2)
| Inputs | Definition | Unit |
|---|---|---|
r_i1j1 | Correlation between the first indicator of construct i and the first indicator of construct j, a heterotrait-heteromethod correlation; in the article's example the questionnaire physical and mood scores | correlation coefficient (dimensionless) |
r_i1j2 | Correlation between the first indicator of construct i and the second indicator of construct j; in the article's example the questionnaire physical score and the clinician mood rating | correlation coefficient (dimensionless) |
r_i2j1 | Correlation between the second indicator of construct i and the first indicator of construct j; in the article's example the clinician physical rating and the questionnaire mood score | correlation coefficient (dimensionless) |
r_i2j2 | Correlation between the second indicators of constructs i and j; in the article's example the two clinician ratings | correlation coefficient (dimensionless) |
r_i1i2 | Correlation between the two indicators of construct i, its monotrait-heteromethod correlation, above zero once score directions are aligned; in the article's example the questionnaire and clinician physical functioning scores | correlation coefficient (dimensionless) |
r_j1j2 | Correlation between the two indicators of construct j, above zero once score directions are aligned; in the article's example the questionnaire and clinician mood scores | correlation coefficient (dimensionless) |
rbar_ij | Mean of the four correlations between the indicators of construct i and those of construct j | correlation coefficient (dimensionless) |
|---|---|---|
HTMT_ij | rbar_ij divided by the geometric mean of r_i1i2 and r_j1j2, an estimate of the correlation between constructs i and j | ratio (dimensionless) |
Function
Heterotrait-monotrait ratio of indicator correlations for discriminant validity
Maps the correlation matrix of the indicators of two or more multi-item constructs, with each indicator assigned to one construct, to the heterotrait-monotrait ratio HTMT_ij for each pair of constructs, the mean correlation between the indicators of constructs i and j divided by the geometric mean of the mean correlations among the indicators within each construct, for comparison with a cut-off of 0.85 or 0.90. HE-FM-DISV-001 writes the ratio for two indicators per construct, the case of the article's worked example, and HE-CF-DISV-001 computes it for any numbers of indicators and every pair of constructs. The article's known-groups step is the live HE-FM-CD-001 applied to the mild and moderate groups (pooled standard deviations of 0.2102 and 17.03, standardised differences of 0.24 and 0.94), its QALY gains of 0.10 and 0.24 are HE-FM-QALY-001, the sum of utility times duration, for two constant-utility states over 2 years differenced, and its ratios of £30,000 and £12,500 per QALY are HE-FM-ICER-001, so none of them is restated. The factor of 2.4 by which the ratio would be overstated is two HE-FM-ICER-001 ratios with the same incremental cost divided, which equals the inverse ratio of the two QALY gains. The multitrait-multimethod checks in the article's steps 1 to 3 are differences of correlations set against the analyst's prespecified cut-offs and have no formula record. Correcting prevalence and cost for misclassification against a gold standard is HE-FN-CRV-001, a criterion-validity function and a different property. Notation follows the Discriminant Validity article.
Computational function
Computational function for HTMT ratios of every construct pair from an indicator correlation matrix
Computes the heterotrait-monotrait ratio of Eq. 6 of Henseler, Ringle and Sarstedt for every pair of constructs from a full indicator correlation matrix with any number of indicators per construct, and flags the pairs above 0.85 and above 0.90. For each pair it divides the mean of the block of correlations between the two constructs' indicators by the geometric mean of the two within-construct means of the off-diagonal correlations; the two-indicator case is HE-FM-DISV-001. The site calculator has no matrices, so the Math / Code line writes the case of three indicators against two term by term, and the loops over pairs are in the Excel, R and Python code. The bootstrap test of the ratio against 1 that the authors also propose needs respondent-level data and is not implemented here.
Inputs and outputs:
Ris the full symmetric indicator correlation matrix with ones on the diagonal, andgroupsgives the construct of each indicator in matrix order, with at least two indicators per construct. In the Math / Code line the six correlationsr_i1j1,r_i1j2,r_i2j1,r_i2j2,r_i3j1andr_i3j2link the three indicators of construct i with the two of construct j,r_i1i2,r_i1i3andr_i2i3are the correlations within construct i andr_j1j2the one within construct j,rbar_ij,rbar_iiandrbar_jjare the three means andHTMT_ijis the ratio, all dimensionless. The R function returns the matrix of ratios with two logical matrices of flags, and the Python function a dictionary of ratios keyed by construct pair.Assumption: As in HE-AS-DISV-001, HE-AS-DISV-002 and HE-AS-DISV-003, the constructs are reflectively measured, every indicator is coded in the same direction and all correlations come from the same respondents. In the Excel version the indicators of each construct sit in adjacent rows and columns of the matrix. A construct with one indicator has no within-construct correlation, and its ratio is undefined.
Worked example (Henseler and colleagues' Table 5, customer expectations and perceived value): With the published item correlations of the three customer expectation items (construct i) and the two perceived value items (construct j), the between-construct mean is 0.2997, the within-construct means are 0.409 and 0.774, and the ratio is 0.5326, the 0.53 the authors report as their lowest value.
r_i1j1 = 0.373; r_i1j2 = 0.326; r_i2j1 = 0.359; r_i2j2 = 0.310; r_i3j1 = 0.230; r_i3j2 = 0.200; r_i1i2 = 0.574; r_i1i3 = 0.318; r_i2i3 = 0.335; r_j1j2 = 0.774; rbar_ij = 0.2997; rbar_ii = 0.409; rbar_jj = 0.774; HTMT_ij = 0.5326Worked example (Henseler and colleagues' Table 5, all six pairs, for the R and Python code): Run on the full eleven-item matrix of Table 5 with three items each for ACSI, CUEX and PERQ and two for PERV, the functions return 0.6321 for ACSI and CUEX, 0.9516 for ACSI and PERQ, 0.8745 for ACSI and PERV, 0.7334 for CUEX and PERQ, 0.5326 for CUEX and PERV and 0.7608 for PERQ and PERV (computed here). Each rounds to the value in the authors' Table 6 (0.63, 0.95, 0.87, 0.73, 0.53 and 0.76), and the text reports two pairs above 0.85 (ACSI and PERQ, ACSI and PERV) and one above 0.90 (ACSI and PERQ). This example is for reading against the R and Python code, and the scalar line above runs on the site.
Excel: With the full matrix in a range named ItemCorr, the position of the first indicator of construct i in StartI and the number of its indicators in CountI, and likewise StartJ and CountJ, enter
=AVERAGE(OFFSET(ItemCorr,StartI-1,StartJ-1,CountI,CountJ))in a cell named MeanHeteroBlock,=(SUM(OFFSET(ItemCorr,StartI-1,StartI-1,CountI,CountI))-CountI)/(CountI*(CountI-1))in MeanMonoBlockI,=(SUM(OFFSET(ItemCorr,StartJ-1,StartJ-1,CountJ,CountJ))-CountJ)/(CountJ*(CountJ-1))in MeanMonoBlockJ and=MeanHeteroBlock/SQRT(MeanMonoBlockI*MeanMonoBlockJ)in HTMTBlock. The within-construct formula removes the ones on the diagonal and counts each pair twice, which its divisor allows for. OFFSET is available in all Excel versions.R:
htmt_matrix <- function(R, groups) { g <- unique(groups); k <- length(g); mono <- sapply(g, function(a) { B <- R[groups == a, groups == a, drop = FALSE]; mean(B[upper.tri(B)]) }); H <- matrix(NA, k, k, dimnames = list(g, g)); for (a in 1:k) for (b in 1:k) if (a != b) H[a, b] <- mean(R[groups == g[a], groups == g[b]])/sqrt(mono[a]*mono[b]); list(htmt = H, flag85 = H > 0.85, flag90 = H > 0.90) }With Table 5 asRandgroups <- rep(c("ACSI", "CUEX", "PERQ", "PERV"), c(3, 3, 3, 2)),round(htmt_matrix(R, groups)$htmt["CUEX", "PERV"], 4)is 0.5326.Python:
def htmt_matrix(R, groups): labs = list(dict.fromkeys(groups)); idx = {a: [n for n, x in enumerate(groups) if x == a] for a in labs}; mono = {a: sum(R[p][q] for p in idx[a] for q in idx[a] if p < q)/(len(idx[a])*(len(idx[a])-1)/2) for a in labs}; return {(a, b): sum(R[p][q] for p in idx[a] for q in idx[b])/(len(idx[a])*len(idx[b]))/math.sqrt(mono[a]*mono[b]) for k, a in enumerate(labs) for b in labs[k+1:]}Requires the math module;Ris a list of rows and the result for the pair ("CUEX", "PERV") is about 0.5326.Test (Table 5, customer expectations and perceived value): With Table 5 in ItemCorr, StartI 4, CountI 3, StartJ 10 and CountJ 2, HTMTBlock rounds to 0.53, the value the authors report. Expected result TRUE. FALSE shows the diagonal ones kept in the within-construct means (0.606 and 0.887), which gives 0.4087, and a doubled cell (1.0652) or a halved cell (0.2663) also gives FALSE. Excel check
=ROUND(HTMTBlock,2)=0.53Test (Table 5, customer satisfaction and perceived quality): With StartI 1, CountI 3, StartJ 7 and CountJ 3, HTMTBlock rounds to 0.95, the highest value the authors report and above both cut-offs. Expected result TRUE. FALSE shows a matrix with only its lower triangle filled and zeros above the diagonal, which gives 0 because the block between the constructs then lies in the upper triangle (with those cells left blank AVERAGE finds no numbers and the check returns #DIV/0! in place of TRUE), and a doubled cell (1.9033) or a halved cell (0.4758) also gives FALSE. Excel check
=ROUND(HTMTBlock,2)=0.95Common error (Lower triangle only): Published correlation tables such as Table 5 print only the lower triangle. Pasted as it stands, the OFFSET blocks find nothing above the diagonal, so every ratio with StartI below StartJ returns #DIV/0! (0 if the empty cells hold zeros), because AVERAGE has no numbers in the block between the constructs, and every ratio the other way round is exactly doubled, because SUM skips the empty cells and both within-construct means are halved (derived here). For customer expectations and perceived value the result is #DIV/0! (or 0) or 1.0652 against 0.5326 (computed here). Filling the upper triangle by symmetry first avoids it.
Source: Henseler J, Ringle CM, Sarstedt M. Journal of the Academy of Marketing Science. 2015;43(1):115-135. Eq. 6 in the section on the heterotrait-monotrait ratio, and the section Empirical example with Table 5, the item correlation matrix of the reduced ACSI model (N = 10,417), Table 6 with the six HTMT values, and the text reporting values between 0.53 for CUEX and PERV and 0.95 for ACSI and PERQ, with two of the six pairs above 0.85 and one above 0.90.
rbar_ij = (r_i1j1 + r_i1j2 + r_i2j1 + r_i2j2 + r_i3j1 + r_i3j2) / 6; rbar_ii = (r_i1i2 + r_i1i3 + r_i2i3) / 3; rbar_jj = r_j1j2; HTMT_ij = rbar_ij / sqrt(rbar_ii * rbar_jj)
Try this function
Implementations
Excel
HTMT ratio and cut-off flags from six named correlations
With the four between-construct correlations in cells named HeteroCorrAA, HeteroCorrAB, HeteroCorrBA and HeteroCorrBB (the first letter for the indicator of construct i and the second for that of construct j, A the first indicator and B the second) and the within-construct correlations in MonoCorrI and MonoCorrJ, the formulas return rbar_ij in a cell named MeanHeteroCorr, HTMT_ij in HTMTRatio, and TRUE in FlagStrictCutOff or FlagLiberalCutOff when the ratio is above 0.85 or above 0.90.
=(HeteroCorrAA+HeteroCorrAB+HeteroCorrBA+HeteroCorrBB)/4; =MeanHeteroCorr/SQRT(MonoCorrI*MonoCorrJ); =HTMTRatio>0.85; =HTMTRatio>0.9
Assumptions
Reflectively measured constructs for the HTMT ratio
Henseler and colleagues state that the HTMT-based criteria assume reflectively measured constructs, in which each indicator reflects its construct, and that for formative indicators neither the within-construct nor the between-construct correlations indicate discriminant validity.
Indicator scores coded in one direction before the HTMT ratio
Eq. 6 averages the correlations as they stand, so every indicator is coded in the same direction, as in the article's example where higher scores mean better health throughout. A reverse-coded indicator turns its correlations negative, and the product under the square root can then be negative (derived here; see HE-ER-DISV-001).
Correlations from the same respondents for the HTMT ratio
Henseler and colleagues note that the multitrait-multimethod approach from which the ratio is derived requires the constructs to be measured on the same respondents, so all six correlations come from one sample, such as the 200 patients of the article's example.
Cut-off rule and ties for the HTMT ratio
The authors conclude a lack of discriminant validity when the ratio is higher than the cut-off, so under that wording a value equal to 0.85 or 0.90 is not flagged. They call the 0.85 criterion the most conservative and regard a more liberal one, such as 0.90, as warranted for constructs that are conceptually different but hard to distinguish empirically. The cut-off is fixed before the data are seen, in line with the article's prespecified hypotheses.
Worked examples
Article's physical functioning and mood example of the HTMT ratio
The article's illustrative correlation matrix for 200 patients treats the questionnaire and the clinician rating as two indicators of physical functioning (construct i) and of mood (construct j). The four between-trait correlations 0.45, 0.18, 0.21 and 0.30 average 0.285, the within-trait correlations 0.64 and 0.52 have a geometric mean of 0.5769, and the ratio is 0.494, far below 0.85, as in the article. All inputs are illustrative.
r_i1j1 = 0.45; r_i1j2 = 0.18; r_i2j1 = 0.21; r_i2j2 = 0.30; r_i1i2 = 0.64; r_j1j2 = 0.52; rbar_ij = 0.285; HTMT_ij = 0.494
Equal correlations give an HTMT ratio of 1
With all six correlations set to 0.60 the indicators correlate as strongly across the constructs as within them, so rbar_ij is 0.60 and HTMT_ij is 1, the limiting case in which the indicators give no evidence that the constructs differ (illustrative inputs).
r_i1j1 = 0.6; r_i1j2 = 0.6; r_i2j1 = 0.6; r_i2j2 = 0.6; r_i1i2 = 0.6; r_j1j2 = 0.6; rbar_ij = 0.6; HTMT_ij = 1
HTMT ratio that lies above one cut-off and below the other
Illustrative between-construct correlations of 0.62, 0.58, 0.60 and 0.64 with within-construct correlations of 0.70 for each construct give rbar_ij of 0.61 and HTMT_ij of 0.8714, which is flagged under the 0.85 cut-off and not under 0.90, so the conclusion depends on the cut-off fixed in advance (computed here).
r_i1j1 = 0.62; r_i1j2 = 0.58; r_i2j1 = 0.60; r_i2j2 = 0.64; r_i1i2 = 0.70; r_j1j2 = 0.70; rbar_ij = 0.61; HTMT_ij = 0.8714
Common errors
Reverse-coded indicator left in the HTMT ratio
If the clinician mood rating in the article's example were scored so that higher means worse, its three correlations would change sign, the between-construct mean would fall to 0.045 and the product under the square root would be 0.64 times minus 0.52, so the ratio is undefined and Excel returns #NUM!. With both mood indicators reversed the ratio is minus 0.494, below any cut-off however much the constructs overlap (computed here).
Same-method correlations dropped from the HTMT numerator
Averaging only the different-method cells 0.18 and 0.21, the discriminant cells of the multitrait-multimethod matrix, gives 0.195 in place of 0.285 and a ratio of 0.338 in place of 0.494, 32% lower (computed here). Henseler and colleagues define the heterotrait-heteromethod part as all the correlations between the indicators of the two constructs, and in the article's example the dropped same-method value of 0.45 is where the shared method variance shows.
Arithmetic mean in the HTMT denominator
Eq. 6 uses the geometric mean of the two within-construct means, which for positive correlations is never larger than their arithmetic mean, so the arithmetic version understates the ratio (derived here). With the article's 0.64 and 0.52 the gap is small, 0.4914 against 0.494, but with illustrative within-construct correlations of 0.90 and 0.30 and a between-construct mean of 0.45 the ratio is 0.866, above 0.85, against 0.75 with the arithmetic mean, which misses the flag (computed here).
Passing HTMT ratio read as clean discriminant evidence
In the article's example the ratio of 0.494 passes easily, yet the questionnaire's two subscales correlate 0.45, only 0.07 below the mood validity value of 0.52, a method problem confined to the self-reports that the pooled ratio averages away. The article notes that if both subscales then enter a mapping function to EQ-5D as separate predictors, part of what each coefficient picks up is a shared reporting style, so the multitrait-multimethod table is read alongside the ratio.
Sources
Henseler, Ringle and Sarstedt on the definition of the heterotrait-monotrait ratio
Henseler J, Ringle CM, Sarstedt M. A new criterion for assessing discriminant validity in variance-based structural equation modeling. Journal of the Academy of Marketing Science. 2015;43(1):115-135. doi:10.1007/s11747-014-0403-8 (open access, full text read on the publisher page). The section on the heterotrait-monotrait ratio of the correlations approach, Eq. 6, which defines the HTMT of constructs i and j with K_i and K_j indicators as the average of the heterotrait-heteromethod correlations, those between the indicators of the two constructs, divided by the geometric mean of the average monotrait-heteromethod correlations, those among the indicators within each construct. The same section states that the HTMT is an estimate of the correlation between the constructs and that the multitrait-multimethod approach requires at least two constructs from the same respondents. The two-indicator form is Eq. 6 with K_i and K_j equal to 2 (derived here).
Henseler, Ringle and Sarstedt on the 0.85 and 0.90 cut-offs for the HTMT ratio
Henseler J, Ringle CM, Sarstedt M. A new criterion for assessing discriminant validity in variance-based structural equation modeling. Journal of the Academy of Marketing Science. 2015;43(1):115-135. doi:10.1007/s11747-014-0403-8 (open access, full text read on the publisher page). The section on the heterotrait-monotrait ratio, which states that a value higher than a predefined threshold indicates a lack of discriminant validity, that the exact threshold is debatable, and that some authors suggest 0.85 and others 0.90. The section Key findings and recommendations calls the 0.85 criterion the most conservative and regards a more liberal criterion as warranted for constructs that are conceptually different but hard to distinguish empirically, and the section Further research and concluding remarks states that the HTMT-based criteria assume reflectively measured constructs.
Canonical Identity
Stable URI · Machine-readable · Resolvable · CC BY 4.0
