Skip to content

non-positive definite matrix remedies?

4 messages · John Fox, Albyn Jones, Matthew Keller

#
Hi all,

For computational reasons, I need to estimate an 18x18 polychoric
correlation matrix two variables at a time (rather than trying to
estimate them all simultaneously using ML). The resulting polychoric
correlation matrix I am getting is non-positive definite, which is
problematic because I'm using this matrix later on as if it were a
legitimately estimated correlation matrix (in order to fit an SEM
model). I could add to the diagonal I suppose until it becomes
positive definite. Does anyone have any other ideas on how to deal
with this problem, and what the strengths and weaknesses of different
approaches are?

Thanks in advance,

Matt
#
Dear Matt,

See the pd argument to the hetcor() function in the polycor package.
hetcor() makes use of nearcor() in the sfsmisc package to ensure that a
matrix of pairwise polychoric, polyserial, and Pearson correlations is
positive-definite.

I hope this helps,
 John

------------------------------
John Fox, Professor
Department of Sociology
McMaster University
Hamilton, Ontario, Canada
web: socserv.mcmaster.ca/jfox
On
http://www.R-project.org/posting-guide.html
#
That's an interesting problem.  

My first thought was to choose the closest positive definite matrix to
the given matrix, say in the least squares sense.  However, the
2x2 diagonal matrix with diagonal (1,0) makes it clear that there
isn't a closest pd symmetric matrix.

Perhaps multiple imputation would work: impute a complete data
matrix X, compute polycor(X), and repeat.  Will the average of these
positive definite matrices be positive definite???? I think it would if
you were computing pearson correlations, but I am not sure about the
polychoric case.

   albyn
On Wed, Mar 11, 2009 at 04:20:27PM -0600, Matthew Keller wrote:
#
Many thanks John. Your suggestion was the type of thing I was looking
for and you got me on the right track:apparently there is a newer/more
sophisticated function in the matrix package called nearPD which
(according to the help page) "implements the algorithm of Higham
(2002), and then forces positive definiteness using code from
posdefify."
On Wed, Mar 11, 2009 at 5:39 PM, John Fox <jfox at mcmaster.ca> wrote: