A fast implementation of polychoric correlations in C. Uses the Beasley-Springer-Moro algorithm (Boro & Springer, 1977; Moro, 1995) to estimate the inverse univariate normal CDF, the Drezner-Wesolosky approximation (Drezner & Wesolosky, 1990) to estimate the bivariate normal CDF, and Brent's method (Brent, 2013) for optimization of rho
Arguments
- data
Matrix or data frame. A dataset with all ordinal values (rows = cases, columns = variables). Data are required to be between
0and11. Proper adjustments should be made prior to analysis (e.g., scales from -3 to 3 in increments of 1 should be shifted by added 4 to all values)- na.data
Character (length = 1). How should missing data be handled? Defaults to
"pairwise". Available options:"pairwise"— Computes correlation for all available cases between two variables"listwise"— Computes correlation for all complete cases in the dataset
- empty.method
Character (length = 1). Method for empty cell correction. Available options:
"none"— Adds no value (empty.value = "none") to the empirical joint frequency table between two variables"zero"— Addsempty.valueto the cells with zero in the joint frequency table between two variables"all"— Addsempty.valueto all in the joint frequency table between two variables
- empty.value
Character (length = 1). Value to add to the joint frequency table cells. Accepts numeric values between 0 and 1 or specific methods:
"none"— Adds no value (0) to the empirical joint frequency table between two variables"point_five"— Adds0.5to the cells defined byempty.method"one_over"— Adds1 / nwhere n equals the number of cells based onempty.method. Forempty.method = "zero", n equals the number of zero cells
- ...
Not used but made available for easier argument passing
References
Beasley-Moro-Springer algorithm
Beasley, J. D., & Springer, S. G. (1977).
Algorithm AS 111: The percentage points of the normal distribution.
Journal of the Royal Statistical Society. Series C (Applied Statistics), 26(1), 118-121.
Moro, B. (1995). The full monte. Risk 8 (February), 57-58.
Brent optimization
Brent, R. P. (2013).
Algorithms for minimization without derivatives.
Mineola, NY: Dover Publications, Inc.
Drezner-Wesolowsky bivariate normal approximation
Drezner, Z., & Wesolowsky, G. O. (1990).
On the computation of the bivariate normal integral.
Journal of Statistical Computation and Simulation, 35(1-2), 101-107.
Examples
# Load data (ensure matrix for missing data example)
wmt <- as.matrix(wmt2[,7:24])
# Compute polychoric correlation matrix
correlations <- polychoric.matrix(wmt)
# Randomly assign missing data
wmt[sample(1:length(wmt), 1000)] <- NA
# Compute polychoric correlation matrix
# with pairwise missing
pairwise_correlations <- polychoric.matrix(
wmt, na.data = "pairwise"
)
# Compute polychoric correlation matrix
# with listwise missing
pairwise_correlations <- polychoric.matrix(
wmt, na.data = "listwise"
)