Learn R Programming

fungible (version 2.2)

smoothBY: Smooth an NPD R matrix to PD using the Bentler Yuan 2011 method

Description

Smooth a NPD correlation matrix to PD using the Bentler and Yuan method.

Usage

smoothBY(R, const = 0.98, eps = 0.001)

Arguments

R

Indefinite Matrix.

const

const is a user-defined parameter that is defined as k in Bentler and Yuan (2011). If 0 < const < 1, then const is treated as a fixed value. If const = 1 then the program will attempt to find the highest value of const such that R is positive (semi) definite.

eps

If const = 1 then the program will iteratively reduce const by eps until either (a) the program converges or (b) const < = 0.

Value

RBY

smoothed correlation matrix.

constant

The final value of const.

convergence

(Logical) a value of TRUE indicates that the function converged.

outStatus

Convergence state for Rcsdp::csdp function. 0: Success. Problem solved to full accuracy 1: Success. Problem is primal infeasible 2: Success. Problem is dual infeasible 3: Partial Success. Solution found but full accuracy was not achieved 4: Failure. Maximum number of iterations reached 5: Failure. Stuck at edge of primal feasibility 6: Failure. Stuch at edge of dual infeasibility 7: Failure. Lack of progress 8: Failure. X or Z (or Newton system O) is singular 9: Failure. Detected NaN or Inf values

glb

Greatest lower bound reliability estimates.

eps

Default value (eps = 1E-03) or user-supplied value of eps.

References

Bentler, P. M. & Yuan, K. H. (2011). Positive definiteness via off-diagonal scaling of a symmetric indefinite matrix. Psychometrika, 76(1), 119--123.

Debelak, R. & Tran, U. S. (2013). Principal component analysis of smoothed tetrachoric correlation matrices as a measure of dimensionality. Educational and Psychological Measurement, 73(1), 63--77.

Examples

Run this code
# NOT RUN {
data(BadRBY)

out<-smoothBY(R = BadRBY, const = .98)
cat("\nSmoothed Correlation Matrix\n")
print( round(out$RBY,8) )
cat("\nEigenvalues of smoothed matrix\n")
print( eigen(out$RBY)$val  )

# }

Run the code above in your browser using DataLab