Computes the polyserial correlation (and its standard error) between a quantitative variable and an ordinal variables, based on the assumption that the joint distribution of the quantitative variable and a latent continuous variable underlying the ordinal variable is bivariate normal. Either the maximumlikelihood estimator or a quicker “twostep” approximation is available. For the ML estimator the estimates of the thresholds and the covariance matrix of the estimates are also available.
1  polyserial(x, y, ML = FALSE, control = list(), std.err = FALSE, maxcor=.9999, bins=4)

x 
a numerical variable. 
y 
an ordered categorical variable; can be numeric, logical, a factor, or an ordered factor, but if a factor, its levels should be in proper order. 
ML 
if 
control 
optional arguments to be passed to the 
std.err 
if 
maxcor 
maximum absolute correlation (to insure numerical stability). 
bins 
the number of bins into which to dissect 
The ML estimator is computed by maximizing the bivariatenormal likelihood with respect to the
thresholds for y (τ^y[j], j = 1,…, c  1) and
the population correlation (ρ). The likelihood is maximized numerically using the optim
function,
and the covariance matrix of the estimated parameters is based on the numerical Hessian computed by optim
.
The twostep estimator is computed by first estimating the thresholds
(τ^y[j], j = 1,…, c  1)
from the marginal distribution of y. Then if the standard error of ρ hat is requested, the
onedimensional likelihood for ρ is maximized numerically, using optim
if standard errors are
requested; the standard error computed treats the thresholds as fixed. If the standard error isn't request,
ρ hat is computed directly.
If std.err
is TRUE
,
returns an object of class "polycor"
with the following components:
type 
set to 
rho 
the polyserial correlation. 
cuts 
estimated thresholds for the ordinal variable ( 
var 
the estimated variance of the correlation, or, for the ML estimator, \ the estimated covariance matrix of the correlation and thresholds. 
n 
the number of observations on which the correlation is based. 
chisq 
chisquare test for bivariate normality. 
df 
degrees of freedom for the test of bivariate normality. 
ML 

Othewise, returns the polyserial correlation.
John Fox jfox@mcmaster.ca
Drasgow, F. (1986) Polychoric and polyserial correlations. Pp. 68–74 in S. Kotz and N. Johnson, eds., The Encyclopedia of Statistics, Volume 7. Wiley.
hetcor
, polychor
, print.polycor
,
optim
1 2 3 4 5 6 7 8 9 10 11 12 13 14  if(require(mvtnorm)){
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
}
if(require(mvtnorm)){
y < cut(y, c(Inf, 1, .5, 1.5, Inf))
polyserial(x, y) # 2step estimate
}
if(require(mvtnorm)){
polyserial(x, y, ML=TRUE, std.err=TRUE) # ML estimate
}

Questions? Problems? Suggestions? Tweet to @rdrrHQ or email at ian@mutexlabs.com.
Please suggest features or report bugs with the GitHub issue tracker.
All documentation is copyright its authors; we didn't write any of that.