Computes the polychoric correlation (and its standard error) 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 is available. For the ML estimator, the estimates of the thresholds and the covariance matrix of the estimates are also available.

CorPolychor(x, y, ML = FALSE, control = list(), std.err = FALSE, maxcor=.9999)

# S3 method for class 'CorPolychor'
print(x, digits = max(3, getOption("digits") - 3), ...)

Arguments

x

a contingency table of counts or an ordered categorical variable; the latter can be numeric, logical, 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.

std.err

if TRUE, return the estimated variance of the correlation (for the two-step estimator) or the estimated covariance matrix (for the ML estimator) of the correlation and thresholds; the default is FALSE.

maxcor

maximum absolute correlation (to insure numerical stability).

digits

integer, determining the number of digits used to format the printed result

...

not used

Value

If std.err is TRUE, returns an object of class "polycor" with the following components:

type

set to "polychoric".

rho

the CorPolychoric correlation.

var

the estimated variance of the correlation, or, for the ML estimate, the estimated covariance matrix of the correlation and thresholds.

n

the number of observations on which the correlation is based.

chisq

chi-square test for bivariate normality.

df

degrees of freedom for the test of bivariate normality.

ML

TRUE for the ML estimate, FALSE for the two-step estimate.

Othewise, returns the polychoric correlation.

References

Drasgow, F. (1986) CorPolychoric 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 CorPolychoric correlation coefficient. Psychometrika 44, 443-460.

Note

This is a verbatim copy from polchor function in the package polycor.

Author

John Fox jfox@mcmaster.ca

See also

hetcor, polyserial, print.CorPolychor, optim

Examples

set.seed(12345)
z <- RndPairs(1000, 0.6)
x <- z[,1]
y <- z[,2]

cor(x, y)                                  # sample correlation
#> [1] 0.6161179
x <- cut(x, c(-Inf, .75, Inf))
y <- cut(y, c(-Inf, -1, .5, 1.5, Inf))

CorPolychor(x, y)                          # 2-step estimate
#> [1] 0.5911583
CorPolychor(x, y, ML=TRUE, std.err=TRUE)   # ML estimate
#> $type
#> [1] "polychoric"
#> 
#> $rho
#>           
#> 0.5911191 
#> 
#> $row.cuts
#> (-Inf,0.75] 
#>   0.7077541 
#> 
#> $col.cuts
#>  (-Inf,-1]   (-1,0.5]  (0.5,1.5] 
#> -1.0168617  0.5122542  1.4805999 
#> 
#> $var
#>                             (-Inf,0.75]    (-Inf,-1]      (-1,0.5]
#>              0.0012487057 -0.0001238037 0.0001830118 -0.0000473158
#> (-Inf,0.75] -0.0001238037  0.0018825207 0.0004473909  0.0006780769
#> (-Inf,-1]    0.0001830118  0.0004473909 0.0023096776  0.0005703172
#> (-1,0.5]    -0.0000473158  0.0006780769 0.0005703172  0.0017191902
#> (0.5,1.5]   -0.0004084741  0.0007663246 0.0003328309  0.0010402437
#>                 (0.5,1.5]
#>             -0.0004084741
#> (-Inf,0.75]  0.0007663246
#> (-Inf,-1]    0.0003328309
#> (-1,0.5]     0.0010402437
#> (0.5,1.5]    0.0036116108
#> 
#> $n
#> [1] 1000
#> 
#> $chisq
#> [1] 0.75265
#> 
#> $df
#> [1] 2
#> 
#> $ML
#> [1] TRUE
#> 
#> attr(,"class")
#> [1] "polycor"