reliability() calculates Cronbach's Alpha, McDonald's Omega, and
detailed item statistics to evaluate whether your survey items form a
reliable scale. This is the R
equivalent of SPSS's RELIABILITY /MODEL=ALPHA /STATISTICS=DESCRIPTIVE CORR
/SUMMARY=TOTAL.
For example, if you have 3 items measuring "trust", reliability analysis tells you whether these items consistently measure the same concept.
Arguments
- data
Your survey data (a data frame or tibble)
- ...
The items to analyze. Use bare column names separated by commas, or tidyselect helpers like
starts_with("trust").- weights
Optional survey weights for population-representative results. Give a column name (unquoted or as a string), an expression such as
sampling_weight * 2, or a numeric vector with one weight per row.- na.rm
Remove missing values before calculating? (Default: TRUE). Uses listwise deletion (only complete cases across all items).
Value
A reliability result object containing:
- alpha
Cronbach's Alpha (unstandardized)
- alpha_standardized
Cronbach's Alpha based on standardized items
- omega
McDonald's Omega (raw/total, one-factor ML model; NA for fewer than 3 items)
- omega_std
Standardized Omega (correlation metric)
- n_items
Number of items in the scale
- item_statistics
Mean, SD, and N for each item
- item_total
Corrected Item-Total Correlation, Alpha if Item Deleted, and Omega if Item Deleted
- inter_item_cor
Inter-item correlation matrix
- n
Sample size (listwise)
- variable_labels
Named character vector with the items' variable labels (
NAwhere an item has none);summary()lists them next to the item names- removed_items
Items removed for zero variance, or
NULL- negative_items
When alpha is negative: the items with a negative corrected item-total correlation (candidates for reverse-coding)
Use summary() for the full SPSS-style output with toggleable sections.
Details
Understanding the Results
Cronbach's Alpha tells you how internally consistent your scale is:
Alpha > 0.90: Excellent reliability
Alpha 0.80 - 0.90: Good reliability
Alpha 0.70 - 0.80: Acceptable reliability
Alpha 0.60 - 0.70: Questionable reliability
Alpha < 0.60: Poor reliability - reconsider items
Item-Total Correlation shows how well each item fits the scale:
Values > 0.40: Item fits well
Values 0.20 - 0.40: Item may need review
Values < 0.20: Consider removing the item
Alpha if Item Deleted shows what happens if you remove an item:
If alpha increases when removing an item, that item hurts reliability
If alpha decreases, the item contributes to the scale
McDonald's Omega
McDonald's Omega (omega total) is a factor-model-based reliability coefficient. Where alpha assumes every item measures the construct equally well (tau-equivalence), omega fits a one-factor model and lets each item carry its own loading. The two agree when items are roughly tau-equivalent; omega is typically slightly higher (and the more accurate estimate) when loadings differ across items, which is the common case in survey scales (Hayes & Coutts, 2020).
reliability() reports two variants, mirroring the two alpha
variants: omega from the covariance metric (analogous to raw
alpha) and omega_std from the correlation metric (analogous to
standardized alpha). Omega if Item Deleted refits the one-factor
model without each item, mirroring Alpha if Item Deleted.
A one-factor model needs at least 3 items to be identified: with fewer
than 3 items the omega fields are NA (alpha is still computed),
and Omega if Item Deleted is NA whenever the reduced scale would
fall below 3 items. Omega is also NA, with a warning, when the
items' correlation matrix is singular or the one-factor solution is a
Heywood case (an item's uniqueness at the lower bound, i.e. a loading
of about 1: the "factor" is then that single item, not the scale).
Items with zero variance are removed from the scale with a warning, as
SPSS RELIABILITY does ($removed_items).
Weighted analyses and SPSS comparison
Cronbach's alpha and the item statistics reproduce SPSS v29
RELIABILITY output, weighted and unweighted. McDonald's omega is
computed from a one-factor maximum-likelihood solution (the estimator of
efa with ML extraction) and is not compared with SPSS
output. The weighted omega uses the same weighted correlation and
covariance matrices as the weighted alpha and equals the unweighted omega
when all weights are 1; see vignette("spss-compatibility").
When to Use This
Run reliability() before creating scale scores with
row_means:
Select your items
Check reliability
If acceptable (alpha > .70), create the index
If not, review items and consider removing problematic ones
References
McDonald, R. P. (1999). Test Theory: A Unified Treatment. Mahwah, NJ: Lawrence Erlbaum.
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.
See also
row_means for creating mean indices after checking reliability.
pearson_cor for bivariate correlations.
summary.reliability for detailed output with toggleable sections.
Other scale:
efa(),
pomps(),
row_count(),
row_means(),
row_sums()
Examples
library(dplyr)
data(survey_data)
# Check reliability of trust items
reliability(survey_data, trust_government, trust_media, trust_science)
#> Reliability Analysis: 3 items
#> Cronbach's Alpha = 0.047 (Poor), McDonald's Omega = 0.047, N = 2135
#> Use summary() for detailed output.
# With survey weights
reliability(survey_data, trust_government, trust_media, trust_science,
weights = sampling_weight)
#> Reliability Analysis: 3 items [Weighted]
#> Cronbach's Alpha = 0.052 (Poor), McDonald's Omega = 0.053, N = 2150
#> Use summary() for detailed output.
# Using tidyselect helpers
reliability(survey_data, starts_with("trust"))
#> Reliability Analysis: 3 items
#> Cronbach's Alpha = 0.047 (Poor), McDonald's Omega = 0.047, N = 2135
#> Use summary() for detailed output.
# Grouped by region
survey_data %>%
group_by(region) %>%
reliability(trust_government, trust_media, trust_science)
#> Warning: McDonald's omega is not computed (group region = East): the one-factor solution
#> is a Heywood case.
#> ℹ `trust_media` has a uniqueness at the lower bound (a loading of about 1), so
#> the factor reflects this item rather than the scale.
#> ℹ This usually means the items share little common variance; Cronbach's alpha
#> is unaffected.
#> [region = East]
#> Reliability Analysis: 3 items
#> Cronbach's Alpha = 0.037 (Poor), McDonald's Omega = not computed, N = 422
#> [region = West]
#> Reliability Analysis: 3 items
#> Cronbach's Alpha = 0.050 (Poor), McDonald's Omega = 0.071, N = 1713
#> Use summary() for detailed output.
# --- Three-layer output ---
result <- reliability(survey_data, trust_government, trust_media, trust_science)
result # compact one-line overview
#> Reliability Analysis: 3 items
#> Cronbach's Alpha = 0.047 (Poor), McDonald's Omega = 0.047, N = 2135
#> Use summary() for detailed output.
summary(result) # full detailed output with all sections
#>
#> Reliability Analysis Results
#> ----------------------------
#> - Items:
#> trust_government Trust in government (1=none, 5=complete)
#> trust_media Trust in media (1=none, 5=complete)
#> trust_science Trust in science (1=none, 5=complete)
#> - N of Items: 3
#>
#> Reliability Statistics
#> ----------------------------------------
#> Cronbach's Alpha: 0.047
#> Alpha (standardized): 0.048
#> McDonald's Omega: 0.047
#> Omega (standardized): 0.048
#> N of Items: 3
#> N (listwise): 2135
#>
#> Item Statistics
#> ----------------------------------------------------------------------
#> Item Mean Std. Deviation N
#> ----------------------------------------------------------------------
#> trust_government Trust in government ... 2.621 1.162 2135
#> trust_media Trust in media (1=no... 2.430 1.156 2135
#> trust_science Trust in science (1=... 3.624 1.034 2135
#> ----------------------------------------------------------------------
#>
#> Inter-Item Correlation Matrix
#> -----------------------------------------
#> (1) (2) (3)
#> -----------------------------------------
#> (1) trust_government 1.000 0.014 0.020
#> (2) trust_media 0.014 1.000 0.015
#> (3) trust_science 0.020 0.015 1.000
#> -----------------------------------------
#>
#> Item-Total Statistics
#> ------------------------------------------------------------------------
#> Scale Mean Scale Var. Corrected Alpha if Omega if
#> Item if Deleted if Deleted Item-Total Deleted Deleted
#> ------------------------------------------------------------------------
#> trust_government 6.054 2.440 0.024 0.029
#> trust_media 6.245 2.467 0.020 0.040
#> trust_science 5.051 2.723 0.025 0.027
#> ------------------------------------------------------------------------
#> Note: Omega if item deleted requires at least 4 items
#> (a one-factor model on the remaining 2 items is not identified).
summary(result, inter_item_correlations = FALSE) # hide correlations
#>
#> Reliability Analysis Results
#> ----------------------------
#> - Items:
#> trust_government Trust in government (1=none, 5=complete)
#> trust_media Trust in media (1=none, 5=complete)
#> trust_science Trust in science (1=none, 5=complete)
#> - N of Items: 3
#>
#> Reliability Statistics
#> ----------------------------------------
#> Cronbach's Alpha: 0.047
#> Alpha (standardized): 0.048
#> McDonald's Omega: 0.047
#> Omega (standardized): 0.048
#> N of Items: 3
#> N (listwise): 2135
#>
#> Item Statistics
#> ----------------------------------------------------------------------
#> Item Mean Std. Deviation N
#> ----------------------------------------------------------------------
#> trust_government Trust in government ... 2.621 1.162 2135
#> trust_media Trust in media (1=no... 2.430 1.156 2135
#> trust_science Trust in science (1=... 3.624 1.034 2135
#> ----------------------------------------------------------------------
#>
#> Item-Total Statistics
#> ------------------------------------------------------------------------
#> Scale Mean Scale Var. Corrected Alpha if Omega if
#> Item if Deleted if Deleted Item-Total Deleted Deleted
#> ------------------------------------------------------------------------
#> trust_government 6.054 2.440 0.024 0.029
#> trust_media 6.245 2.467 0.020 0.040
#> trust_science 5.051 2.723 0.025 0.027
#> ------------------------------------------------------------------------
#> Note: Omega if item deleted requires at least 4 items
#> (a one-factor model on the remaining 2 items is not identified).
