Skip to main content
v2026.11,986 entries · CC-BY 4.0

psych Package in R: Install, describe(), alpha() and fa()

Install the psych R package and run describe(), alpha(), fa.parallel() and fa() on the bfi dataset, with each output element explained.

Written and maintained by CASRAI Editorial Board

Published · Last updated

On this page

Who this is for: researchers and analysts who have item-level survey or test data in R and need descriptive statistics, a reliability coefficient and an exploratory factor analysis from one package. After reading you can install psych, run the four core steps on a built-in dataset, read the output and cite the package version you used.

Short answer: psych is a CRAN package maintained by William Revelle, described on CRAN as a general-purpose toolbox developed originally for personality, psychometric theory and experimental psychology, with a focus on multivariate analysis and scale construction. Install it with install.packages("psych") and load it with library(psych). The workflow below runs describe(), alpha(), fa.parallel() and fa() in that order.

What the psych package is used for in research

The package covers the routine steps of building and checking a questionnaire or test scale: descriptive statistics for every item, reliability estimates (Cronbach’s alpha and Guttman’s Lambda 6 through alpha(); omega coefficients through omega()), principal components (principal()) and exploratory factor analysis (fa()). The package home page at the Personality Project lists these as its main entry points, and CRAN lists the package vignette “Scoring scales with psych” for item scoring. For the underlying concepts see our dictionary entries on research questionnaires, operational definitions and survey research methods.

Rather than reproduce the reference manual, this page orders the functions by the decisions you face: check the items, estimate reliability, decide how many factors to keep, then fit the factor model.

Install and load psych

psych is distributed on CRAN, the official R package repository (version 2.6.9, published 2026-09-30, as read on 2026-11-12).

  1. Install once: install.packages("psych")
  2. Load in each session: library(psych)
  3. Optional companion: the psychTools package on CRAN supplies additional data and helper functions used in the psych vignettes.

If ggplot2 is also loaded, both packages provide a function named alpha. Call psych::alpha() explicitly so reliability analysis runs the function you intend.

Step-by-step: from item data to a factor solution

The example uses bfi, a dataset that ships with psych: 2,800 observations on 28 variables, made up of 25 personality items plus gender, education and age. The items are five sets of five (A1–A5 agreeableness, C1–C5 conscientiousness, E1–E5 extraversion, N1–N5 neuroticism, O1–O5 openness), answered on a 6-point scale from “Very Inaccurate” to “Very Accurate”. The data come from the International Personality Item Pool, collected through the Synthetic Aperture Personality Assessment web project.

Step 1. Describe your data with describe()

library(psych) data(bfi) describe(bfi[, 1:5])

describe() returns one row per variable with the number of valid cases, mean, standard deviation, median, trimmed mean (trim defaults to 0.1), mad (median absolute deviation), minimum, maximum, skew, kurtosis and standard error. Missing values are removed by default (na.rm = TRUE). To describe by group use the formula form, for example describe(SATV + SATQ ~ gender, data = sat.act), taken from the function’s help page.

Step 2. Reliability with alpha()

alpha(bfi[, 1:5], check.keys = TRUE)

The default is check.keys = FALSE: the function warns when some items may need reversing but does not reverse them, because the documentation says users missed reversed items even when warned. With check.keys = TRUE the function reverses items that load negatively on the first principal component. In the bfi data, the package’s example scoring key marks A1 as reverse-scored, so this is the case the argument exists for.

The result contains raw_alpha (based on covariances), std.alpha (based on correlations), G6(smc) (Guttman’s Lambda 6), average_r and median_r (inter-item correlations), item.stats (item-whole correlations) and alpha.drop, the statistics recomputed with each item dropped in turn. Set n.iter above 1 for bootstrap confidence intervals. For omega coefficients see the vignette “Finding omega coefficients” on the Personality Project site.

Step 3. Choose the number of factors with fa.parallel()

fa.parallel(bfi[, 1:25])

Parallel analysis plots the eigenvalues of your data against eigenvalues from resampled data and from a random normal matrix of the same size (n.iter trials, default 20). The help page states that sharp breaks in the plot suggest the number of components or factors to extract; in practice you retain those whose observed eigenvalues sit above the random-data line. Printing the result lists the observed eigenvalues that exceed the simulated ones. The default is fm = "minres" and fa = "both", so both principal components and factor eigenvalues are shown. If you only hold a correlation matrix, give the number of cases in n.obs.

Step 4. Fit the factor model with fa()

fa(bfi[, 1:25], nfactors = 5, rotate = "oblimin", fm = "minres")

The defaults are nfactors = 1, rotate = "oblimin" and fm = "minres", so set nfactors to the number you chose in step 3. Rotation options include orthogonal choices such as "varimax" and oblique choices such as "promax" and "oblimin"; factoring methods include "pa" (principal axis), "ml" (maximum likelihood) and "minres". Choose a method and rotation on theoretical grounds and report them.

Output and how to read it

Output element Function What it tells you (per the package documentation)
skew, kurtosis, se describe() Distribution shape and standard error for each item.
raw_alpha, std.alpha alpha() Alpha from covariances and from correlations.
alpha.drop alpha() The reliability statistics with each item dropped in turn.
Loadings fa() The factor loading matrix; for oblique rotations it is taken from the pattern matrix.
h2, u2 fa() Communalities and uniquenesses.
com fa() Hoffman’s complexity index for each item.
SS loadings fa() Variance accounted for by each factor.

For an item-level view of a scale, read alpha.drop alongside item.stats: an item whose removal raises alpha, or whose item-whole correlation is low, is a candidate for review, not automatic deletion. For descriptive statistics with other R tools see summary statistics in R, and see the mirt guide when you move from factor analysis to item response theory.

Troubleshooting

  • Warning about items that may need reversing. This is the alpha() check described above. Review the item wording, then either pass the reverse-scored items through keys or set check.keys = TRUE. warnings = FALSE suppresses the message, which hides a real problem if you have not checked the keying.
  • You only have a correlation matrix. alpha() accepts a covariance or correlation matrix, and fa.parallel() needs n.obs set to the number of cases behind it.
  • Missing data. alpha() and fa() use pairwise correlations by default (use = "pairwise"); state this in your methods section.
  • Wrong alpha function runs. Use psych::alpha() when ggplot2 is loaded.
  • Ordinal items. fa.parallel() accepts cor = "poly" for polychoric correlations, among other options listed on its help page.

Reporting and citing

For reproducibility, report the psych version (2.6.9 at the time of this page) and the R version, the factoring method (fm), the rotation, how the number of factors was chosen, and how missing values were handled. R generates the preferred reference when you run citation("psych"), and packageVersion("psych") returns the installed version.

Tool Relationship to psych Source
psychTools Companion CRAN package with data and helper functions for the psych vignettes. Personality Project; CRAN
GPArotation R package that psych imports for factor rotations. CRAN psych page (Imports field)
mirt Free R package for multidimensional item response theory, the next step after factor analysis of item data. CASRAI guide
jamovi Free statistics application with a point-and-click interface, for users who do not want to write R code. CASRAI dictionary

FAQ

What is the psych package in R?

psych is a CRAN package for psychometrics and multivariate analysis, maintained by William Revelle. CRAN describes it as a general-purpose toolbox developed originally for personality, psychometric theory and experimental psychology, focused on multivariate analysis and scale construction.

How do I install psych?

Run install.packages("psych") once, then library(psych) at the start of each session.

Which psych functions give Cronbach’s alpha and factor analysis?

alpha() returns Cronbach’s alpha and Guttman’s Lambda 6; fa() fits exploratory factor analysis; fa.parallel() helps choose the number of factors; principal() does principal components.

Should I use alpha or omega?

The package provides both; the vignette “Finding omega coefficients” explains omega. Report which coefficient you computed and with which function, and do not present alpha as evidence that a scale is unidimensional.

Sources

Follow CASRAI

Research-administration guidance, standards updates and independent tool reviews.

Ask CASRAI · free to try

Ask about psych Package in R: Install, describe(), alpha() and fa()

Ask your first 2 questions free below. Subscribers get 150 a day for $29 a month.

An AI assistant specialized in research administration. It cites the sources behind every answer, labels web answers and says when it can't answer.

Answers draw on CASRAI's guides and dictionary plus the federal and funder documents we index: Federal Register, Grants.gov, Regulations.gov and UKRI.

Works on this site and inside Claude, Cursor and the AI tools you already use.

Everything CASRAI publishes — this page, the dictionary, the guides and the news — stays free to read, with no account and no card.

Referenced across the research world

University of Cambridge logoColumbia University logoCrossref logoUniversity of Edinburgh logoHarvard University logoUniversity of Oxford logoPrinceton University logoStanford School of Medicine logoUniversity College London logoORCID logoUniversity of Cambridge logoColumbia University logoCrossref logoUniversity of Edinburgh logoHarvard University logoUniversity of Oxford logoPrinceton University logoStanford School of Medicine logoUniversity College London logoORCID logo
  • University of Cambridge logo
  • Columbia University logo
  • Crossref logo
  • University of Edinburgh logo
  • Harvard University logo
  • University of Oxford logo
  • Princeton University logo
  • Stanford School of Medicine logo
  • University College London logo
  • ORCID logo

View CASRAI adoption →