psych (version 2.3.3)

mixedCor: Find correlations for mixtures of continuous, polytomous, and dichotomous variables


For data sets with continuous, polytomous and dichotmous variables, the absolute Pearson correlation is downward biased from the underlying latent correlation. mixedCor finds Pearson correlations for the continous variables, polychorics for the polytomous items, tetrachorics for the dichotomous items, and the polyserial or biserial correlations for the various mixed variables. Results include the complete correlation matrix, as well as the separate correlation matrices and difficulties for the polychoric and tetrachoric correlations.


mixed.cor(x = NULL, p = NULL, d=NULL,smooth=TRUE, correct=.5,global=TRUE, 
        ncat=8,use="pairwise",method="pearson",weight=NULL)  #deprecated



The complete matrix


The Pearson correlation matrix for the continuous items


the polychoric correlation (poly$rho) and the item difficulties (poly$tau)


the tetrachoric correlation (tetra$rho) and the item difficulties (tetra$tau)



The data set to be analyzed (either a matrix or dataframe)


The names (or locations) of the continuous variables) (may be missing)


A set of continuous variables (may be missing) or, if p and d are missing, the variables to be analyzed.


A set of polytomous items (may be missing)


A set of dichotomous items (may be missing)


If TRUE, then smooth the correlation matix if it is non-positive definite


When finding tetrachoric correlations, what value should be used to correct for continuity?


For polychorics, should the global values of the tau parameters be used, or should the pairwise values be used. Set to local if errors are occurring.


The number of categories beyond which a variable is considered "continuous".


The various options to the cor function include "everything", "all.obs", "complete.obs", "na.or.complete", or "pairwise.complete.obs". The default here is "pairwise"


The correlation method to use for the continuous variables. "pearson" (default), "kendall", or "spearman"


If specified, this is a vector of weights (one per participant) to differentially weight participants. The NULL case is equivalent of weights of 1 for all cases.


William Revelle


This function is particularly useful as part of the Synthetic Apeture Personality Assessment (SAPA) ( data sets where continuous variables (age, SAT V, SAT Q, etc) and mixed with polytomous personality items taken from the International Personality Item Pool (IPIP) and the dichotomous experimental IQ items that have been developed as part of SAPA (see, e.g., Revelle, Wilt and Rosenthal, 2010 or Revelle, Dworak and Condon, 2020.).

This is a very computationally intensive function which can be speeded up considerably by using multiple cores and using the parallel package. (See the note for timing comparisons.) This adjusts the number of cores to use when doing polychoric or tetrachoric. The greatest step in speed is going from 1 core to 2. This is about a 50% savings. Going to 4 cores seems to have about at 66% savings, and 8 a 75% savings. The number of parallel processes defaults to 2 but can be modified by using the options command: options("mc.cores"=4) will set the number of cores to 4.

Item response analyses using irt.fa may be done separately on the polytomous and dichotomous items in order to develop internally consistent scales. These scale may, in turn, be correlated with each other using the complete correlation matrix found by mixed.cor and using the score.items function.

This function is not quite as flexible as the hetcor function in John Fox's polychor package.

Note that the variables may be organized by type of data: continuous, polytomous, and dichotomous. This is done by simply specifying c, p, and d. This is advantageous in the case of some continuous variables having a limited number of categories because of subsetting.

mixedCor is essentially a wrapper for cor, polychoric, tetrachoric, polydi and polyserial. It first identifies the types of variables, organizes them by type (continuous, polytomous, dichotomous), calls the appropriate correlation function, and then binds the resulting matrices together.


W.Revelle, J.Wilt, and A.Rosenthal. Personality and cognition: The personality-cognition link. In A.Gruszka, G. Matthews, and B. Szymura, editors, Handbook of Individual Differences in Cognition: Attention, Memory and Executive Control, chapter 2, pages 27-49. Springer, 2010.

W Revelle, D. M. Condon, J. Wilt, J.A. French, A. Brown, and L G. Elleman(2016) Web and phone based data collection using planned missing designs in Nigel G. Fielding and Raymond M. Lee and Grant Blank (eds) SAGE Handbook of Online Research Methods, Sage Publications, Inc.

W. Revelle, E.M. Dworak and D.M. Condon (2020) Exploring the persome: The power of the item in understanding personality structure. Personality and Individual Differences, tools:::Rd_expr_doi("/10.1016/j.paid.2020.109905")

See Also

polychoric, tetrachoric, scoreItems, scoreOverlap scoreIrt


Run this code
r <- mixedCor(data=psychTools::bfi[,c(1:5,26,28)])
#this is the same as
r <- mixedCor(data=psychTools::bfi,p=1:5,c=28,d=26)
r #note how the variable order reflects the original order in the data
#compare to raw Pearson
#note that the biserials and polychorics are not attenuated
rp <- cor(psychTools::bfi[c(1:5,26,28)],use="pairwise")

Run the code above in your browser using DataLab