Agreement and Reliability
McDonald's Omega
McDonald's omega estimates how reliable a scale's total score is.
McDonald's omega takes a set of items that measure one trait and estimates how much of the variation in their total score reflects the factor they share.
How much of the variation in students' test-anxiety scores is shared by the anxiety items rather than specific to individual items? Two hundred fifty students rated eight test-anxiety statements from 1 to 5, and each student's total across the eight is their anxiety score.
- Estimates
- Reliability of a total score
- Observations
- Independent
- Parametric
- Yes
- Headline Statistic
- \omega
- Key Estimate
- McDonald's Omega
- Groups
- 1
The Basics
When to Use It
Use it when several items are added (or averaged) into one score, the items are meant to measure a single trait, and you want to know how much of the variation in that score reflects the trait rather than noise. The items can differ in how strongly they reflect the trait; that's the point of omega. For example:
- How much of the variation in students' test-anxiety scores is shared by the anxiety items rather than specific to individual items?
- Is a 10-item loneliness scale reliable enough to compare older adults living alone with those living with family?
- How reliable is the total score on a six-item workplace-burnout measure in a new sample of nurses?
Vocabulary You Need
Definition Reliability
The extent to which a measure's scores can be replicated: measured again, by another rater or with other items, would people get the same scores? Formally, it's the share of the differences between people's scores that reflects real differences in what's measured rather than measurement error, so it runs from 0 (all noise) to 1 (no noise). It belongs to scores from a particular group of people under particular conditions, not to the test itself: the same test can be more reliable in a group whose scores vary widely. There are several kinds, each asking about a different source of noise: test-retest (occasions), inter-rater (raters) and internal consistency (items). A measure has to be reliable to be valid, but reliable scores can still measure the wrong thing. 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 Unique Variance (\theta)
The part of an item's variance that the common factor leaves unexplained: random measurement error plus anything specific to that one item. In a one-factor model it's the item's variance minus its squared unstandardized loading; in standardized form it's 1 − λ², called the item's uniqueness. Reliability coefficients such as omega treat it as noise when items are added into a total score. Also called error variance or residual variance. Glossary →
Assumptions and Inference
1. One Underlying Trait Your items all measure one and the same trait.
- What It Means
- A single common factor is enough to reproduce how the items go together (with several constructs, each construct's items measure one trait). Coefficients built on a one-factor model, such as omega and alpha, and item-level models such as IRT, describe how well the items measure one trait only if there really is one. A scale made of distinct parts, such as worry and bodily symptoms, breaks it; score and analyze each part separately, or use a model with several factors.
- Applies To
- Items
- How to Check
- Start from the scale's content and theory. Then fit a one-factor model (or, with several constructs, one factor per construct) and look at its fit (the chi-square test, RMSEA, SRMR) and at the residual correlations it leaves between pairs of items. For right/wrong or yes/no items, fit that model to tetrachoric correlations (in lavaan, declare the items
ordered, which uses WLSMV) or as a one-factor IRT model with its own fit statistics (M2, RMSEA, SRMSR); fit indices from ordinary Pearson correlations are misleading for 0/1 items. An exploratory factor analysis or parallel analysis can suggest how many factors there are. A high omega or alpha is not evidence of unidimensionality: several correlated factors can produce one. - How Much It Matters
- A lot. With two or more distinct traits, omega from a one-factor model no longer describes how well the total measures any one of them, and a poorly fitting model gives unreliable loadings. Mild departures, such as a small residual correlation or two, matter little.
What to Do
- Alternative Test Exploratory Factor Analysis (EFA). Find out how many factors there are, then compute omega for each subscale.
- Correction If the items share a general factor plus subscale factors, fit a bifactor model and report omega hierarchical, the share of the total that reflects the general factor alone (Zinbarg et al., 2005).
- Design Change Score and report each distinct part of the scale separately.
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 between a few items inflates omega a little; many near-duplicate items can inflate it a lot, making the total look more reliable than it is.
What to Do
-
Correction
Confirmatory Factor Analysis (CFA). Add a residual correlation for the offending pair in a confirmatory factor analysis. That shared noise is error, so it belongs in omega's denominator: add twice the pair's residual covariance to Σθ (in the R code, label it
cand add+ 2*cto theomega :=line). Left out, omega comes out too high.semTools::compRelSEM(fit, obs.var = FALSE)counts it for you. - Design Change Replace near-duplicate items with ones that approach the trait from a different angle.
3. Independent Observations (for the Confidence Interval and Fit Tests) 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. With clustered respondents, such as students from a few classrooms, the confidence interval is too narrow. The estimate can also be off, because the items may hang together partly because of the cluster rather than the trait.
What to Do
- Alternative Test Multilevel SEM. A multilevel factor model estimates reliability 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…
- Your items measure more than one trait Exploratory Factor Analysis (EFA) →
- You want to test whether one factor fits Confirmatory Factor Analysis (CFA) →
- You gave the same measure twice to check stability Test-Retest Reliability →
- Raters, not items, score the same people Intraclass Correlation Coefficient (ICC) →
- Two raters sort people into categories Cohen's Kappa →
What It Doesn't Tell You
- Whether the items measure the right thing. Omega says the total is consistent, not that it measures test anxiety rather than, say, general worry. That's a question of validity.
- Whether there's one trait. Omega assumes a single factor. Here the one-factor model fit well; if it hadn't, .84 would describe a model that doesn't match the data.
- Whether the scores are stable over time. Consistency across items on one occasion says nothing about whether students would score the same next week. That's test-retest reliability.
- Who else. The .84 belongs to these 250 students' scores. With a group that varies less in anxiety, or in a different language or setting, the same items can be less reliable.
- Which omega. This is omega total from a one-factor model. With subscales under a general factor, omega hierarchical, the share that reflects the general factor alone, can be much lower.
Common Mistakes
-
Don'tRead a high omega as proof that the items measure one trait.
InsteadCheck unidimensionality with a factor analysis first. Omega assumes one trait; it doesn't test for it.
-
Don'tLeave reverse-worded items unreversed before the analysis.
InsteadReverse-score them so every item runs in the same direction and correlates positively with the others.
-
Don'tReport omega without saying how it was estimated.
InsteadName the model and method (a one-factor ML factor analysis, or SPSS's closed-form estimate) and give a confidence interval.
-
Don'tCompute one omega for a scale made of distinct subscales.
InsteadCompute omega for each subscale, or omega hierarchical if you need the general factor's share of the total.
-
Don'tDrop items because omega rose a little without them in your sample.
InsteadDecide on content as well as numbers, and check that the gain holds in new data.
Result Decoder
Interpretation Guidelines
Benchmarks McDonald's Omega
-
ω < .70
Low
More than 30% of the total score's variance is noise. Differences between people are hard to trust, and correlations with the score will be noticeably weakened.
-
.70 ≤ ω < .80
Acceptable
Usually treated as adequate for early-stage research, such as a new scale.
-
.80 ≤ ω < .90
Good
Usually treated as good for research that compares groups or relates the score to other variables.
-
ω ≥ .90
High
The level usually asked for when scores guide decisions about individuals, such as diagnosis or placement. Very high values can also mean the items are redundant.
All three lines trace to Nunnally (1978): about .70 for early-stage research, .80 for basic research, and .90 at minimum (.95 desirable) when important decisions rest on an individual's score. Nunnally tied each one to a purpose, and none was meant as a universal gold standard (Dunn et al., 2014). Read omega with its confidence interval, and judge it against what the scores will be used for.
How It's Reported
Equation Form
ω = .84, 95% CI [.81, .87]; α = .82
Table 1. One-Factor Model of the Eight Test-Anxiety Items
| M | SD | \lambda^* | \lambda | \theta | r_{it} | |
|---|---|---|---|---|---|---|
| 1. I check my answers over and over | 3.04 | 0.80 | .35 | 0.28 | 0.56 | .34 |
| 2. I lose sleep the night before an exam | 3.00 | 0.88 | .43 | 0.38 | 0.62 | .39 |
| 3. My stomach gets upset before a test | 3.00 | 1.00 | .47 | 0.47 | 0.77 | .43 |
| 4. My heart races during exams | 3.28 | 1.24 | .56 | 0.70 | 1.06 | .50 |
| 5. I think about failing while I'm taking a test | 3.07 | 1.28 | .64 | 0.82 | 0.97 | .59 |
| 6. I feel panicky when a test begins | 2.97 | 1.21 | .67 | 0.81 | 0.81 | .60 |
| 7. I worry about a test for days beforehand | 3.14 | 1.41 | .74 | 1.05 | 0.90 | .66 |
| 8. My mind goes blank during tests | 2.94 | 1.42 | .85 | 1.20 | 0.57 | .74 |
| Total score | 24.44 | 6.24 | 5.71 | 6.27 |
Note. N = 250. λ* = standardized loading; λ = loading in item points; θ = unique variance; rit = correlation of the item with the total of the other seven. The total score's loading is Σλ and its unique variance is Σθ. Maximum likelihood estimation.
Full Text (APA Style)
A one-factor model fit the eight test-anxiety items well, χ²(20) = 20.29, p = .440, RMSEA = .008, 90% CI [.000, .055], SRMR = .030, with no residual correlation above .08 and standardized loadings from .35 to .85 (Table 1). McDonald's omega for the total score (M = 24.44, SD = 6.24), from a one-factor maximum likelihood factor analysis, was .84, 95% CI [.81, .87], so about 84% of the variance in total scores reflects the factor the items share. Cronbach's alpha was slightly lower, α = .82, as expected when items differ in how strongly they reflect the trait.
- Say how omega was estimated (here, the loadings of a one-factor maximum likelihood factor analysis) and how well that model fit.
- Give a confidence interval, and say which kind (Wald or bootstrap).
- Report the loadings, so readers can see which items carry the scale.
- If you also give alpha for comparison, say which coefficient your conclusions rest on.
Reading Each Piece
The equation form above, piece by piece, in this order: how big, then how certain.
| ω = .84 | Under the fitted one-factor model, about 84% of the variation in students' total scores comes from the common factor the eight items share, and about 16% from variation specific to each item. The factor is meant to be test anxiety, but omega alone can't show that it is. That's good by the usual conventions for research use. Benchmarks ↑ |
| 95% CI [.81, .87] | The reliability in the population is plausibly anywhere from .81 to .87. Even the low end clears .80. |
| α = .82 | Alpha is .02 lower because it assumes all eight items reflect the trait equally strongly, in points, and they don't. As long as the items' noise is unrelated, alpha is a lower bound to reliability (Sijtsma, 2009) and reaches it only when the loadings are equal. Here the difference is small. Under the same one-factor model, loadings that differ more generally make alpha underestimate reliability by more, though the size of the gap also depends on the rest of the model. |
Calculations
The Running Example
The test-anxiety study: 250 students, eight items rated 1 to 5, added into one total score whose reliability we estimate.
There's no hypothesis to test. The target is \omega, the reliability of the eight-item total in the population of students like these: the share of its variance that reflects the common factor the items share, which is meant to be test anxiety. The sample's value estimates it, and the confidence interval says how precisely.
What Your Data Should Look Like
One row per person and one numeric column per item, with any reverse-worded items already reverse-scored so that higher always means more of the trait. Rating-scale items (1 to 5, 1 to 7) are treated as numbers. That gives the reliability of the observed total, which is usually what you want. “Ordinal” omega from polychoric correlations answers a different question, the reliability of the underlying continuous responses, and is typically higher. Use only the items that make up one scale or subscale; leave out the ID column and any other variables. By default, SPSS's RELIABILITY and lavaan drop any student with a missing item; in lavaan, missing = "fiml" uses every answer given. Report how many people were left out.
| student | check_answers | lose_sleep | upset_stomach | heart_races | think_failing | panicky | worry_days | mind_blank |
|---|---|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 1 | 2 | 2 | 1 | 1 |
| 2 | 3 | 2 | 3 | 5 | 3 | 4 | 4 | 3 |
| 3 | 3 | 4 | 4 | 4 | 5 | 4 | 3 | 4 |
| 4 | 3 | 3 | 5 | 3 | 3 | 4 | 5 | 3 |
| 5 | 3 | 3 | 5 | 4 | 5 | 3 | 5 | 5 |
| 6 | 3 | 3 | 1 | 2 | 5 | 3 | 4 | 3 |
| … 244 more rows | ||||||||
| Item | M | SD | Item–Total r |
|---|---|---|---|
| Check Answers | 3.04 | 0.80 | .34 |
| Lose Sleep | 3.00 | 0.88 | .39 |
| Upset Stomach | 3.00 | 1.00 | .43 |
| Heart Races | 3.28 | 1.24 | .50 |
| Think Failing | 3.07 | 1.28 | .59 |
| Panicky | 2.97 | 1.21 | .60 |
| Worry Days | 3.14 | 1.41 | .66 |
| Mind Blank | 2.94 | 1.42 | .74 |
| Total | 24.44 | 6.24 |
N = 250. The total adds the 8 items; each item's r is with the total of the other 7 (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 test-anxiety study's numbers. Collapse all to read just the headings: they tell the whole story on their own.
-
1. Estimate How Strongly Each Item Reflects the Common Factor
Omega starts from a model in which one unobserved factor, intended to represent test anxiety, influences the answers to all eight items, some more strongly than others. A one-factor factor analysis estimates that strength for each item; Table 1 lists all eight.
\lambda^*_8= .85
\lambda^*_8 is the standardized loading of item 8, “My mind goes blank during tests,” the strongest item at .85. The weakest, “I check my answers over and over,” loads only .35.
-
2. Check That One Trait Can Account for All Eight Items
Omega is only as good as the one-factor model behind it, so check first that the model describes how the items relate reasonably well. A poor fit can mean the items reflect more than one trait, share wording or break the model's other assumptions. A good fit supports using the model but doesn't prove there's only one trait; two highly correlated traits can fit one factor well, and the chi-square test can miss smaller problems.
\chi^2 = N \times F_{\text{ML}} =250 \times 0.08117\chi^2 = 20.29
df = 20
p = .440
F_{\text{ML}} measures the gap between the items' observed covariances and the ones the one-factor model predicts. 250 × 0.0812 = 20.29 on 20 df, If one factor described the population exactly, a gap at least this large would turn up about 44% of the time (p = .440), so the test finds no sign of misfit. That isn't proof of fit, since a test this size can miss real misfit; RMSEA (.008) and SRMR (.030) agree that the fit is close. (lavaan multiplies by N; some texts use N − 1, and lavaan's printed `fmin` is half of F_{\text{ML}}, 0.041.)
-
3. Put Each Loading in the Item's Own Units
The total score adds up raw answers, so omega needs the loadings in points on each item's own 1-to-5 scale. Multiply each standardized loading by the item's standard deviation.
\lambda_i = \lambda^*_i \times s_i =0.846 \times 1.416\lambda_8 = 1.20 points
\lambda^*_8 is item 8's .846 loading and s_8 its 1.416-point spread. 0.846 × 1.416 = 1.20 points: a student one standard deviation higher in anxiety tends to score 1.20 points higher on this item.
-
4. Find What Each Item Doesn't Share
Whatever part of an item's variance the common factor doesn't explain is its unique variance. It can be random error, or something real that only that item measures; omega's one-factor calculation counts both as outside the factor. In standardized terms that part is 1 − λ*²; multiplying by the item's variance puts it in points squared.
\theta_i = (1 - \lambda^{*2}_i) \times s_i^2 =(1 - 0.846^2) \times 1.416^2= 0.57
1 - \lambda^{*2}_8 = 1 − .716 = .284 is the share of item 8 the trait leaves unexplained, and s_8^2 = 2.00 is its variance. .284 × 2.00 = 0.57 points squared of unique variance.
-
5. Add Up What the Items Share and Square It
The factor's variance is fixed at 1, so an item with loading \lambda_i shares \lambda_i^2 of its variance with it, and any two items vary together by \lambda_i \lambda_j through it. The shared variance in the total is all of those pieces added up: each item's \lambda_i^2 plus every pair's \lambda_i \lambda_j, counted both ways. That sum is exactly (\sum \lambda_i)^2. The pair terms are why a total is more reliable than any one item: each added item brings some variation of its own, but it also reinforces the common factor through a pair term with every other item. When the items' own variation is unrelated, the factor accounts for a growing share of the total.
\left(\sum \lambda_i\right)^2 =(0.28 + 0.38 + \dots + 1.20)^2 = 5.71^2\sum \lambda_i = 5.71
\left(\sum \lambda_i\right)^2 = 32.60
\sum \lambda_i adds the eight loadings in Table 1, from 0.28 to 1.20 points, to 5.71. Squared, 5.71 × 5.71 = 32.60 points squared of shared variance in the total.
-
6. Add Up the Unique Variance
The model takes each item's unique variance to be unrelated to the others', so it has no pair terms. It just adds, while the shared part grows with every pair, which is why adding items raises reliability.
\sum \theta_i =0.56 + 0.62 + \dots + 0.57\sum \theta_i = 6.27
\sum \theta_i adds the eight unique variances in Table 1 to 6.27 points squared (the rounded values in the table add to 6.26).
-
7. Find the Reliable Share of the Total Score
The total's variance is the shared part plus the unique part. Omega is the shared part's share.
\omega = \dfrac{\left(\sum \lambda_i\right)^2}{\left(\sum \lambda_i\right)^2 + \sum \theta_i} =\dfrac{32.60}{32.60 + 6.27}= .84
(\sum \lambda_i)^2 is the 32.60 of shared variance and \sum \theta_i the 6.27 of unique variance, 38.87 in all (close to the 38.93 the total scores actually vary). 32.60 ÷ 38.87 = .84.
-
8. Give a Range of Plausible Values for the Reliability
Another sample of 250 students would give a somewhat different omega. The model's standard errors say how much, and the interval turns that into a range.
\omega \pm 1.96 \times SE_{\omega} =0.839 \pm 1.96 \times 0.0154= [.81, .87]
SE_{\omega} = .015
SE_{\omega} = .0154 comes from the fitted model's standard errors (the delta method, a standard way to turn the loadings' standard errors into one for omega). 1.96 × .0154 = .030, so the range is .839 ± .030, from .81 to .87. This Wald interval treats omega's sampling distribution as normal, with its standard error from the fitted model, and the maximum likelihood fit itself assumes roughly normal answers, which 1-to-5 items only approximate. A bootstrap interval, which refits the model to many resamples of the students, leans less on those assumptions and is often recommended (Dunn et al., 2014), though it doesn't fix a wrong model. Here it runs from just over .80 to about .86.
-
9. Compare with Cronbach's Alpha
Alpha uses only the item variances and the total's variance. With unrelated noise, it equals omega only if every item has the same loading in points; ours range from 0.28 to 1.20 points, so alpha comes out lower.
\alpha = \dfrac{k}{k - 1}\left(1 - \dfrac{\sum s_i^2}{s_X^2}\right) =\dfrac{8}{7}\left(1 - \dfrac{11.07}{38.93}\right)= .82
\sum s_i^2 = 11.07
s_X^2 = 38.93
k is our 8 items, \sum s_i^2 their variances added up, 11.07, and s_X^2 the total score's variance, 38.93. 8/7 × (1 − .284) = .82, about .02 below omega.
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 (version 30, as documented by IBM)
SPSS's built-in omega (Analyze → Scale → Reliability Analysis, Model: Omega) uses a closed-form shortcut for the loadings (Hancock & An, 2020), so it can differ slightly from the maximum likelihood value on this page. The OMEGA macro's own version of that shortcut (/ha=1) gives .837 for these data, against .839. To get the ML omega, use Hayes and Coutts' free OMEGA macro (afhayes.com), which runs SPSS's own maximum likelihood factor analysis with one factor:
- Open
omega.spsfrom the macro's download and run it once (Run → All). This defines the OMEGA command for the session. - Run the OMEGA command below on the eight items.
- For Cronbach's alpha, use Analyze → Scale → Reliability Analysis, move the eight items across, leave Model on Alpha, and click OK (the RELIABILITY syntax below).
Or paste this syntax:
OMEGA items=check_answers lose_sleep upset_stomach heart_races
think_failing panicky worry_days mind_blank.
RELIABILITY
/VARIABLES=check_answers lose_sleep upset_stomach heart_races
think_failing panicky worry_days mind_blank
/SCALE('Test anxiety') ALL
/MODEL=ALPHA.
Reading the Output
Read Omega first, then the loadings behind it, then alpha for comparison. The macro doesn't give an interval for the ML omega; get one from R (below). For the closed-form estimate, /ha=1/boot=10000 adds a percentile bootstrap interval.
OMEGA (forced single-factor maximum likelihood factor analysis)
| Omega | |
|---|---|
| Reliability | .839 |
| Mean | SD | Loading | ErrorVar | |
|---|---|---|---|---|
| check_answers | 3.044 | .803 | .283 | .565 |
| lose_sleep | 2.996 | .876 | .377 | .625 |
| upset_stomach | 3.000 | .998 | .473 | .772 |
| heart_races | 3.280 | 1.242 | .695 | 1.061 |
| think_failing | 3.068 | 1.283 | .821 | .971 |
| panicky | 2.968 | 1.212 | .814 | .806 |
| worry_days | 3.136 | 1.413 | 1.047 | .902 |
| mind_blank | 2.944 | 1.416 | 1.199 | .568 |
“Loading” is the loading in item points (λ) and “ErrorVar” the unique variance (θ). Add /stand=1 for the standardized loadings (λ*).
Reliability Statistics (RELIABILITY, Model: Alpha)
| Cronbach's Alpha | N of Items |
|---|---|
| .818 | 8 |
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)
anxiety <- read.csv("data.csv")
# One factor, its variance fixed at 1; labels let us define omega from the estimates.
model <- '
anxiety =~ l1*check_answers + l2*lose_sleep + l3*upset_stomach + l4*heart_races +
l5*think_failing + l6*panicky + l7*worry_days + l8*mind_blank
check_answers ~~ t1*check_answers
lose_sleep ~~ t2*lose_sleep
upset_stomach ~~ t3*upset_stomach
heart_races ~~ t4*heart_races
think_failing ~~ t5*think_failing
panicky ~~ t6*panicky
worry_days ~~ t7*worry_days
mind_blank ~~ t8*mind_blank
shared := (l1 + l2 + l3 + l4 + l5 + l6 + l7 + l8)^2
omega := shared / (shared + t1 + t2 + t3 + t4 + t5 + t6 + t7 + t8)
'
fit <- cfa(model, data = anxiety, std.lv = TRUE)
fitMeasures(fit, c("chisq", "df", "pvalue", "rmsea", "rmsea.ci.lower",
"rmsea.ci.upper", "srmr", "cfi"))
subset(standardizedSolution(fit), op == "=~")[, c("rhs", "est.std")]
subset(parameterEstimates(fit), label == "omega")
# Or with semTools (obs.var = FALSE uses the model's total variance, as above)
semTools::compRelSEM(fit, obs.var = FALSE)
# Cronbach's alpha
psych::alpha(anxiety[, -1])$total$raw_alpha
chisq df pvalue rmsea rmsea.ci.lower
20.293 20.000 0.440 0.008 0.000
rmsea.ci.upper srmr cfi
0.055 0.030 0.999
rhs est.std
1 check_answers 0.352
2 lose_sleep 0.431
3 upset_stomach 0.474
4 heart_races 0.559
5 think_failing 0.640
6 panicky 0.672
7 worry_days 0.741
8 mind_blank 0.846
lhs op rhs label est se z
19 omega := shared/(shared+t1+t2+t3+t4+t5+t6+t7+t8) omega 0.839 0.015 54.39
pvalue ci.lower ci.upper
19 0 0.808 0.869
$anxiety
[1] 0.839
[1] 0.8179149
The omega row's interval is a Wald interval from the delta method. lavaan's unstandardized loadings are a hair smaller than the table's (it divides variances by n rather than n − 1), but omega is the same. Left at its default, compRelSEM(fit) divides by the total score's observed variance instead and gives .837. (compRelSEM also prints a few lines describing the composite before its value; they're left out above.) Keep each := definition on one line: lavaan doesn't carry a formula over a line break after /.
psych::omega(), another common route, works from the correlation matrix, so it gives the reliability of a total of standardized items (.82 here, with nfactors = 1, fm = "ml"), not of the raw total (.84). Use lavaan or semTools for the raw-score total.
Output from a real run: R 4.6.1 (lavaan 0.7-2, semTools 0.5-9, psych 2.6.5), run 2026-09-29.
Python
import numpy as np
import pandas as pd
import pingouin as pg
from factor_analyzer import FactorAnalyzer
anxiety = pd.read_csv("data.csv")
items = anxiety.drop(columns="student")
fa = FactorAnalyzer(n_factors=1, method="ml", rotation=None).fit(items)
std_load = np.abs(fa.loadings_[:, 0]) # .352 .431 .474 .559 .640 .672 .741 .846
sd = items.std(ddof=1).to_numpy()
lam = std_load * sd # loadings in item points
theta = (1 - std_load**2) * sd**2 # unique variances
omega = lam.sum()**2 / (lam.sum()**2 + theta.sum())
omega # 0.8387
pg.cronbach_alpha(items) # (0.8179, array([0.782, 0.85 ]))
factor_analyzer fits the one-factor model to the correlation matrix, so its loadings are standardized; multiplying by each item's SD puts them in item points. pingouin's interval is for alpha, not omega. For an omega interval, bootstrap the students (resample rows, refit, recompute omega) or use R.
Output from a real run: Python 3.9.6 (factor_analyzer 0.5.1, pingouin 0.5.5, pandas 2.3.3), run 2026-10-03; results shown as comments.
Impact
Effect Size
Omega is itself the size measure here: the share of the total score's variance attributed to the common factor in the fitted model. When that model adequately describes the scale and its errors, that share estimates the total score's reliability. It has no units, so reliabilities can be compared across scales scored on different ranges, but each still depends on how varied the sample is.
Of all the ways students' total scores differ, about 84% reflects what the eight items share (meant to be test anxiety, though omega can't confirm that) and about 16% is variation specific to the individual items, which omega counts as error.
In practical terms, the noise shows up as a spread of about 2.5 points on the 8-to-40 total around the score each student would average over many parallel sets of items. That spread is the standard error of measurement: the total's 6.24-point standard deviation times √(1 − .84). The gap between two students' scores has about 1.4 times that spread, 3.5 points, so a gap of a point or two is small next to that uncertainty, while a 10-point gap, nearly three times it, is strong evidence of a real difference, if the measurement-error model holds. Whether .84 is good enough depends on the use: fine for comparing groups of students, thinner for deciding which individual student needs support.
Benchmarks McDonald's Omega at a Glance
Uncertainty
Omega comes with no p-value. You could test whether it's above 0, but for any usable scale that's never in doubt, so the useful question is how precise the estimate is. That's what the confidence interval answers.
Our interval runs from .81 to .87. If you had decided in advance that the scale needed a reliability of at least .80, the whole interval clears it.
The one test that does matter comes first: whether a single factor fits the items. Here the test found no sign of misfit, χ²(20) = 20.29, p = .440, and RMSEA and SRMR were small. With a large sample that test flags even trivial misfit, and with a small one it can miss real misfit, so read it alongside the residual correlations and indexes such as RMSEA, not on its own.
Precision and Sample Size
Power is the chance that a study detects an effect that's really there. Omega isn't tested against zero, so power in that sense doesn't apply. What you plan instead is precision: enough people that the confidence interval is narrow enough to be useful. The interval narrows with more people, with more items and with stronger loadings.
With our 250 students the interval reaches about .03 either side of the estimate. The standard error shrinks with the square root of the sample size, so with 60 students it would be roughly twice as wide, about ±.06: anywhere from the high .70s to about .90, too wide to say whether the scale clears .80.
Plan for precision: pick the narrowest interval you'd find useful and choose a sample big enough to reach it. Loadings are also estimated less stably in small samples, one more reason to prefer a few hundred people to a few dozen. 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
- McDonald, R. P. (1999). Test theory: A unified treatment. Lawrence Erlbaum Associates.
-
Dunn, T. J., Baguley, T., & Brunsden, V. (2014). From alpha to omega: A practical solution to the pervasive problem of internal consistency estimation. British Journal of Psychology, 105(3), 399–412.
https://doi.org/10.1111/bjop.12046
“Researchers should switch from alpha to omega.” (Conclusion and recommendations)
“Nunnally’s cut off of .70 was never intended as a gold standard for acceptable reliability.” (Point estimation)
“Unidimensionality is a requisite for all the models considered here.” (A practical alternative to alpha)
-
McNeish, D. (2018). Thanks coefficient alpha, we'll take it from here. Psychological Methods, 23(3), 412–433.
https://doi.org/10.1037/met0000144
“In many circumstances, violating these assumptions yields estimates of reliability that are too small, making measures look less reliable than they actually are.” (Abstract)
-
Hayes, A. F., & Coutts, J. J. (2020). Use omega rather than Cronbach's alpha for estimating reliability. But…. Communication Methods and Measures, 14(1), 1–24.
https://doi.org/10.1080/19312458.2020.1718629
“Yet methodologists have warned that α is not an optimal measure of reliability relative to its more general form, McDonald’s omega (ω).” (Abstract)
-
Hancock, G. R., & An, J. (2020). A closed-form alternative for estimating ω reliability under unidimensionality. Measurement: Interdisciplinary Research and Perspectives, 18(1), 1–14.
https://doi.org/10.1080/15366367.2019.1656049
“This study proposes and evaluates an easily-calculated ω estimate that does not rely on factor analysis, which is shown to be highly comparable to CFA-based ω estimates” (Abstract)
- Zinbarg, R. E., Revelle, W., Yovel, I., & Li, W. (2005). Cronbach's α, Revelle's β, and McDonald's ωH: Their relations with each other and two alternative conceptualizations of reliability. Psychometrika, 70(1), 123–133. https://doi.org/10.1007/s11336-003-0974-7
-
Koo, T. K., & Li, M. Y. (2016). A guideline of selecting and reporting intraclass correlation coefficients for reliability research. Journal of Chiropractic Medicine, 15(2), 155–163.
https://doi.org/10.1016/j.jcm.2016.02.012
“Reliability is defined as the extent to which measurements can be replicated.” (Introduction)
- Aldridge, V. K., Dovey, T. M., & Wade, A. (2017). Assessing test-retest reliability of psychological measures: Persistent methodological problems. European Psychologist, 22(4), 207–218. https://doi.org/10.1027/1016-9040/a000298
- Nunnally, J. C. (1978). Psychometric theory (2nd ed.). McGraw-Hill.
-
Taber, K. S. (2018). The use of Cronbach's alpha when developing and reporting research instruments in science education. Research in Science Education, 48(6), 1273–1296.
https://doi.org/10.1007/s11165-016-9602-2
“A value of around 0.70 or greater is widely considered desirable (although characterisation of the qualitative merits of specific values seems highly variable between studies).” (Key Findings Regarding the Use of Cronbach’s Alpha in Science Education Studies)
-
Cronbach, L. J. (1951). Coefficient alpha and the internal structure of tests. Psychometrika, 16(3), 297–334.
https://doi.org/10.1007/BF02310555
“is shown to be the mean of all split-half coefficients resulting from different splittings of a test” (Abstract, p. 297)
-
Sijtsma, K. (2009). On the use, the misuse, and the very limited usefulness of Cronbach's alpha. Psychometrika, 74(1), 107–120.
https://doi.org/10.1007/s11336-008-9101-0
“Alpha is a lower bound to the reliability, in many cases, even a gross underestimate” (Section 1, Introduction)
-
Streiner, D. L. (2003). Starting at the beginning: An introduction to coefficient alpha and internal consistency. Journal of Personality Assessment, 80(1), 99–103.
https://doi.org/10.1207/S15327752JPA8001_18
“(a) that it is a fixed property of the scale, (b) that it measures only the internal consistency of the scale, (c) that higher values are always preferred over lower ones, and (d) that it is restricted to the range of 0 to 1” (Abstract)
Spot an error? Something still confusing? Tell us at support@statsforpsychology.com.