Learn R Programming

polycor (version 0.5)

polychor: Polychoric Correlation

Description

Computes the polychoric correlation between two ordinal variables or from their contingency table, under the assumption that the ordinal variables dissect continuous latent variables that are bivariate normal. Either the maximum-likelihood estimator or a (possibly much) quicker ``two-step'' approximation are available. For the ML estimator the estimates of the thresholds and the covariance matrix of the estimates are also available.

Usage

polychor(x, y, ML = FALSE, control = list(), std.err = FALSE)

Arguments

x
a contingency table of counts or an ordered categorical variable; the latter can be numeric, a factor, or an ordered factor, but if a factor, its levels should be in proper order.
y
if x is a variable, a second ordered categorical variable.
ML
if TRUE, compute the maximum-likelihood estimate; if FALSE, the default, compute a quicker ``two-step'' approximation.
control
optional arguments to be passed to the optim function, which computes the ML estimate; for ML=TRUE only.
std.err
if TRUE, return the estimated covariance matrix of the correlation and thresholds; used only if ML=TRUE; the default is FALSE.

Value

  • If ML and std.err are both TRUE, returns an object of class "polycor" with the following components:
  • typeset to "polychoric".
  • rhothe polychoric correlation.
  • row.cutsestimated thresholds for the row variable (x).
  • col.cutsestimated thresholds for the column variable (y).
  • varthe estimated covariance matrix of the correlation and thresholds.
  • nthe number of observations on which the correlation is based.
  • Othewise, returns the polychoric correlation.

References

Drasgow, F. (1986) Polychoric and polyserial correlations. Pp. 68--74 in S. Kotz and N. Johnson, eds., The Encyclopedia of Statistics, Volume 7. Wiley. Olsson, U. (1979) Maximum likelihood estimation of the polychoric correlation coefficient. Psychometrika 44, 443-460.

See Also

hetcor, polyserial, print.polycor, optim

Examples

Run this code
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
x <- cut(x, c(-Inf, .75, Inf))
y <- cut(y, c(-Inf, -1, .5, 1.5, Inf))
polychor(x, y)  # 2-step estimate
polychor(x, y, ML=TRUE, std.err=TRUE)  # ML estimate

Run the code above in your browser using DataLab