psych (version 2.3.9)

reliability: Reports 7 different estimates of scale reliabity including alpha, omega, split half


Revelle and Condon, (2019) reviewed the problem of reliability in a tutorial meant to useful to the theoretician as well as the practitioner. Although there are a number of functions in psych for estimating reliability of single scales, (e.g. alpha and omega), for split half reliability splitHalf or for finding test-retest reliability testRetest or multilevel reliability mlr, the reliability function combines several of these functions to report these recommended measures for multiple scales.

To quote from Revelle and Condon (2019) ``Reliability is a fundamental problem for measurement in all of science for `(a)ll measurement is befuddled by error' (p 294 McNemar, 1946). Perhaps because psychological measures are more befuddled than those of the other natural sciences, psychologists have long studied the problem of reliability.

``Issues of reliability are fundamental to understanding how correlations between observed variables are (attenuated) underestimates of the relationships between the underlying constructs, how observed estimates of a person's score are biased estimates of their latent score, and how to estimate the confidence intervals around any particular measurement. Understanding the many ways to estimate reliability as well as the ways to use these estimates allows one to better assess individuals and to evaluate selection and prediction techniques. This is not just a problem for measurement specialists but for all who want to make theoretical inferences from observed data.

`` It is no longer acceptable to report one coefficient that is only correct if all items are exactly equally good measures of a construct. Researchers are encouraged to report at least two coefficients (e.g., omega_h and omega_t) and then discuss why each is appropriate for the inference that is being made. They are discouraged from reporting just alpha unless they can justify the assumptions implicit in using it (i.e., tau equivalence and unidimensionality)." Here we make it easy to do so.

Although the alpha and omega functions will find reliability estimates for a single scale, and scoreItems and scoreOverlap will find alpha for multiple scales, it sometimes is convenient to call omega and splitHalf for multiple scales. reliability takes a keys list (suitable for scoreItems ) and then finds hierarchical and total omega as well as split half reliabilities for each separate scale.

plot.reliability takes the output of reliability and displays it as a dot chart showing the values of both omegas as well as alpha and the distributions of split half reliabilities.


reliability(keys=NULL, items, nfactors = 2, split = TRUE, raw=TRUE, plot=FALSE,hist=FALSE,
  n.sample=10000,brute=FALSE, check.keys=TRUE)
# S3 method for reliability
xlim=NULL, main=NULL,...)



Omega_h is the (model based) hierarchical estimate of the general factor saturation of a scale.


The conventional alpha statistic (which is not model based)


A model based estimate of the total reliability of a scale


An experimental estimate of unidimensionality (from unidim)

How well does the average r of the correlations reproduce the matrix?

How well does a single factor reproduce the correlation matrix


The greatest split half reliability of the scale. Found by finding all possible splits (if this is < 10,000) or sampled from 10,000 possible splits.


The lowest split half reliability of the scale. An estimate of beta (see iclust).


The average correlation of the items in the scale


The median correlation of the items. If this differs from the mean, that is a sign of poor scale.


A list of the split half values for all possible splits.



A list of items to be scored (may be taken from a keys.list for scoreItems. This list may contain one or more keys. ) If keys are not specified, then all the items are used.


The matrix or data.frame of items to be scored. Can be substantially greater than the items included in keys. For just those items in each key are scored.


Omega is not well defined for two factors, but for small sets of items, two is the better choice. For larger number of items per scale, 3 is probably preferable.


By default, find splitHalf reliabilities as well as the omega statistics. When plotting, split implies that raw was called in reliability.


By default, suppress the omega plots for each scale.


If TRUE, return a list of all the possible splits (up to n.samples). Useful for graphic display.


If TRUE then split and raw are forced to TRUE and the histograms of the split half values are drawn. (Otherwise, just return the values for later plotting)


Normally defaults to 10,000. This means that for up to 16 item tests, all possible splits are found. choose(n,n/2)/2 explodes above that, eg. for all splits of the epi E scale requires 1,352,078 splits or 23.4 seconds on a MacBook Pro with a 2.4GHZ 8 core Intel Core I9. Can be done, but do you want to do so?


Do all possible splits rather than sampling. (see splitHalf for details)


By default, check that the keys are signe in the direction of the loadings on the first PCA.


The object returned from reliability


Add in the values of omega_h and omega_t


Show the unidimensionality value from unidim.


Add the value of alpha


Allows us to merge this figure with other ones


Defaults to "Split half distributions + omega, alpha"


The xlim of the plot


Other graphical parameters


William Revelle


reliability is basically just a wrapper for omegah, unidim and splitHalf. Revelle and Condon (2019) recommended reporting at least three reliability statistics for any scale, here we make it easy to do.

If the hist option is set to true, histgrams and density plots of the split half values for each test are also shown. The output from reliability can be passed to error.dots to show the reliability statistics for multiple scales graphically. It is however more useful to just call the plot.reliability function to show the basic information.

For detailed analysis of any one scale, it is recommended to do a complete omega analysis, perhaps combined with a splitHalf analysis. The reliability function is just meant for the case where the user has multiple scales (perhaps scored using scoreItems) and then wants to get more complete reliability information for all of the scales.

Following a suggestion, the ability to not bother with keys and just do omega and split half and draw the results has been added. Either specify that keys=NULL, or just specify the items to use. (See the first example.)

plot.reliability provides a dot chart summary of the distributions of the split half values, as well as the estimates of omega and alpha and unidimensionality. It can also be called by just issuing a plot command.


Revelle, William. (in prep) An introduction to psychometric theory with applications in R. Springer. Working draft available at

Revelle, W. and Condon, D.M. (2019) Reliability from alpha to omega: A tutorial. Psychological Assessment, 31, 12, 1395-1411. Preprint available from PsyArxiv

Revelle, W. and Condon, D.M (2023) Using undim rather than omega in estimating undimensionality. Working draft available at

See Also

See Also omega to find more complete output for the various omega analyses,splitHalf to show more detail on split half estimates, scoreItems to find scores on multiple scales using unit weights, testRetest to find test retest reliabilities, mlr to find multilevel reliabilities.

predicted.validity will call reliability and item.validity to use the average r information to find the asymptotic validity of a set of scales for a set of criteria.


Run this code
reliability(psychTools::ability) #an example of finding reliability for all items
rel <- reliability(psychTools::ability.keys,psychTools::ability)  #use keys to select scales
R <- cor(psychTools::ability,use="pairwise") #find the correlations to test 
rel.R <- reliability(psychTools::ability.keys,R) #this should be the same as rel
plot(rel.R) #versus all and subsets
all.equal(rel$result.df,rel.R$result.df ) #should be TRUE
reliability(psychTools::bfi.keys,psychTools::bfi)  #reliability when items are keyed negative

if (FALSE) {  
#this takes a few seconds but shows nice graphic displays

spi.rel <- reliability(psychTools::spi.keys,psychTools::spi,hist=TRUE) #graph them
spi.rel #show them

#plot them using plot.reliability
plot(spi.rel)  #draw the density distrbutions

plot(spi.rel,split=FALSE) #don't draw the split half density distribution
plot(spi.rel,omega=FALSE) # don't add omega values to the diagram
#or do this without the densities

#plot the first three values in a dot chart
error.dots(spi.rel$result.df[,1],sort=FALSE, xlim=c(.3,1),head=16,tail=16,
          main = expression(paste(omega[h], ~~~~ alpha,~~~~ omega[t])))
  #plot the omega_h values
       main="",labels="",add=TRUE)#add the alpha values
error.dots(spi.rel$result.df[,3],sort=FALSE, xlim=c(.3,1),head=16,tail=16, 
       pch=3,labels="", main="",add=TRUE) #and the omega_t values
#or, show the smallest and greatest split half, as well as alpha
error.dots(spi.rel$result.df[,4],sort=FALSE, xlim=c(.3,1),head=16,tail=16,
          main = expression(paste(beta, ~~~~ alpha,~~~~  glb)))
       main="",labels="",add=TRUE)#add the GLB values
       main="",labels="",add=TRUE)#add the alpha values


Run the code above in your browser using DataCamp Workspace