Skip to contents

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.

Usage

reliability(data, ..., weights = NULL, na.rm = TRUE)

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 (NA where 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:

  1. Select your items

  2. Check reliability

  3. If acceptable (alpha > .70), create the index

  4. 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).