The polycor package computes polychoric and polyserial correlations by quick “two-step” methods or ML, optionally with standard errors; tetrachoric and biserial correlations are special cases.
It was originally written by Prof. John Fox, who passed away in November, 2025. I (Duncan Murdoch) have taken over as maintainer in order to keep the package available as R evolves.
Please submit bug reports as Github issues at https://github.com/dmurdoch/polycor/issues.
Installation
You can install polycor from CRAN using:
install.packages("polycor")You can install the development version of polycor from GitHub with:
# install.packages("pak") pak::pak("dmurdoch/polycor")
Example
library(mvtnorm) library(polycor) set.seed(12345) data <- rmvnorm(1000, c(0, 0), matrix(c(1, .5, .5, 1), 2, 2)) x <- data[,1] y <- data[,2] cor(x, y) # sample correlation #> [1] 0.5263698 x <- cut(x, c(-Inf, .75, Inf)) y <- cut(y, c(-Inf, -1, .5, 1.5, Inf)) polychor(x, y) # 2-step estimate #> [1] 0.5230474 polychor(x, y, ML=TRUE, std.err=TRUE) # ML estimate #> #> Polychoric Correlation, ML est. = 0.5231 (0.03819) #> Test of bivariate normality: Chisquare = 2.739, df = 2, p = 0.2543 #> #> Row Threshold #> Threshold Std.Err. #> 0.7537 0.04403 #> #> #> Column Thresholds #> Threshold Std.Err. #> 1 -0.9842 0.04746 #> 2 0.4841 0.04127 #> 3 1.5010 0.06118