psych (version 2.4.3)

psych.misc: Miscellaneous helper functions for the psych package


This is a set of minor, if not trivial, helper functions. lowerCor finds the correlation of x variables and then prints them using lowerMat which is a trivial, but useful, function to round off and print the lower triangle of a matrix. reflect reflects the output of a factor analysis or principal components analysis so that one or more factors is reflected. (Requested by Alexander Weiss.) progressBar prints out ... as a calling routine (e.g., tetrachoric) works through a tedious calculation. shannon finds the Shannon index (H) of diversity or of information. test.all tests all the examples in a package. best.items sorts a factor matrix for absolute values and displays the expanded items names. fa.lookup returns sorted factor analysis output with item labels. cor2 correlates two data.frames (of equal length). levels2numeric and char2numeric convert dataframe columns that are categorical/levels to numeric values.


lowerMat(R, digits = 2,minlength=5)
matMult(x,y) #multiply two matrices with missing data
      = c("Depends", "Imports", "LinkingTo"),find=FALSE,skip=NULL) 
 isCorrelation(x,na.rm=FALSE) #test if an object is a symmetric matrix 
    # with diagonals of 1 and  all values between -1 and 1
 isCovariance(x)  #test if an object is a symmetric matrix   
 fromTo(data,from,to=NULL) #convert character names to locations as specified in colnames
 #of data
 cs(...) #convert a list of text words to  character vector
 acs(...) #convert a list of text words to  a single string
 SAPAfy(x,y)  #sample y columns from x, replace other columns with NA


tableF is fast alternative to the table function for creating two way tables of numeric variables. It does not have any of the elegant checks of the table function and thus is much faster. Used in the tetrachoric and polychoric functions to maximize speed.

lowerCor Finds and prints (using lowerMat) the lower diagonal correlation matrix but returns (invisibly) the full correlation matrix found with the use, method and cor parameters. The default values are for pairwise deletion of variables, "pearson" correlations. Specify cor="tetrachoric", "polychoric", or "mixed" for alternatives. By default, digits is set to print to 2 decimal places. By default, it will change character variables to numeric and flag them.

lowerMatShows the lower triangle of a matrix, rounded to digits with titles abbreviated to digits + 3

progressBar Display a series of dots as we progress through a slow loop (removed from anything using multicores).

tableF (for tableFast) is a cut down version of table that does no error checking, nor returns pretty output, but is significantly faster than table. It will just work on two integer vectors. This is used in polychoric an tetrachoric for about a 50% speed improvement for large problems.

shannon finds Shannon's H index of information. Used for estimating the complexity or diversity of the distribution of responses in a vector or matrix. $$H = -\sum{p_i log(p_i) }$$

test.all allows one to test all the examples in specified package. This allows us to make sure that those examples work when other packages (e.g., psych) are also loaded. This is used when developing revisions to the psych package to make sure the the other packages work. Some packages will not work and/or crash the system (e.g., DeducerPlugInScaling requires Java and even with Java, crashes when loaded, even if psych is not there!). Alternatively, if testing a long list of dependencies, you can skip the first part by specifying them by name.

cor2 will find and display the correlations between two sets of variables, rounded to digits, using the other options. If x is a list of multiple sets (two or more), then all sets are correlated.

levels2numericconverts character data with levels to numeric data. Used in the SAPA analyses where we code some variables, (e.g., gender, education) with character codes to help in the documentation of files, but want to do analyses of correlations with other categorical variables.

char2numericconverts character data with levels to numeric data. Used for cases when data from questionnaires include the response categories rathere than numeric data. Unless the levels of the data are in meaningful order, the numeric results are not useful. Most useful if doing polychoric analyses. Note this is not suitable for recoding numeric data stored as characters, for it will force them to levels first. See nchar2numeric. Note that for very small data sets, because the recoding done by char2numeric is column wise, it might result in different numerical results for the same characters in different columns.

Problems with char2numeric can be solved by using the psychTools::recode function.

nchar2numericconverts numbers coded as characters (quoted) to numeric without forcing them to factors first.

fromTo selects the columns in data from to (see the examples)

cs concatenates strings without the need to identify variables by " ".



A rectangular matrix or data frame (probably a correlation matrix)


A data matrix or data frame or a vector depending upon the function.


A data matrix or data frame or a vector


The object returned from either a factor analysis (fa) or a principal components analysis (principal)


round to digits


Abbreviate to minlength in lowerCor


Display the correlations from lowerCor or cor2 (default is TRUE)


Should pairwise deletion be done, or one of the other options to cor


Should we check for NA on the diagonal of a correlation matices


"pearson", "kendall", "spearman"


defaults to the normal cor function, but can also do tetrachoric, polychoric or covariances (cov)


the current value of some looping variable


The maximum value the loop will achieve


what function is looping


The factor or components to be reversed keyed (by factor number)


flag=TRUE in char2numeric will flag (with *) those variables that had been numeric. This changes the variable name. flag = FALSE does not mark those variables.


Correct for the maximum possible information in this item


What is the base for the log function (default=2, e implies base = exp(1))


The name of a package (or list of packages) to be activated and then have all the examples tested.


Find the dependencies for this package, e.g., psych


Which type of dependency to examine?


Look up the dependencies, and then test all of their examples


Do not test these dependencies


A dataframe or matrix to choose from


select from column with name from to column with name to


select from column from to column to


Any string of legitimate objects


lowerCor prints out the lower off diagonal matrix rounded to digits with column names abbreviated to digits + 3 characters, but also returns the full and unrounded matrix. By default, it uses pairwise deletion of variables. It in turn calls

lowerMat which does the pretty printing.

It is important to remember to not call lowerCor when all you need is lowerMat!

cs is a direct copy of the Cs function in the Hmisc package by Frank Harrell. Added to psych to avoid the overhead of the Hmisc package.

See Also

corr.test to find correlations, count the pairwise occurrences, and to give significance tests for each correlation. r.test for a number of tests of correlations, including tests of the difference between correlations. lowerUpper will display the differences between two matrices.


Run this code
lb <- lowerCor(psychTools::bfi[1:10])  #finds and prints the lower correlation matrix, 
  # returns the square matrix.
lowerCor(psychTools::ability[,1:5]) #the Pearson correlations, compare with
#fiml <- corFiml(psychTools::bfi[1:10])     #FIML correlations require lavaan package
#lowerMat(fiml)  #to get pretty output
f3 <- fa(Thurstone,3)
f3r <- reflect(f3,2)  #reflect the second factor
#find the complexity of the response patterns of the iqitems.
#test.all('BinNor')  #Does the BinNor package work when we are using other packages
#to make this a latex table 
f2 <- fa(psychTools::bfi[1:10],2)

sa1 <-sat.act[1:2]
sa2 <- sat.act[3:4]
sa3 <- sat.act[5:6]
cor2(list(sa1,sa2))  #show within set and between set cors
lowerCor(fromTo(sat.act,"ACT","SATQ")) #show some correlations
vect <- cs(ACT,SATQ)  #skip the quotes
vect   #they are in this vector
#to combine longer terms
vect <- cs("Here is a longish",vector, that, we ,"want to combine", into, several)
temp <- acs("Here is a longish",vector, that, we ,"want to combine", into, one)
lowerCor(fromTo(bfi,cs(A3,C4)),cor="poly") #compare with

temp <- SAPAfy(bfi[1:10],3)  #30 % sample from bfi
f2 <- fa(bfi[1:10],2)
 f2s <- fa(temp,2)
 fa.congruence(f2s,f2)  #the two factor structure are almost identical
 #although the scores are not identical
cor2(f2$scores, f2s$scores)

Run the code above in your browser using DataLab