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.
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")
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
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.