Using "complete.observations" could produce a correlation matrix based on zero data or on less than 1 percent of available data.

Have you considered "missMDA: a new package to handle missing values in PCA or MCA with FactoMineR" (http://factominer.free.fr)?


If the data are all multivariate normal and missing at random, it's straightforward to write a likelihood function for those data and estimate the mean and covariance matrix to maximize that likelihood. Moreover, one could further estimate a factor analysis model for said covariance matrix. (If it's not reasonable to assume multivariate normal, then I don't know if it's reasonable to estimate a correlation matrix.) I have not tried it, but I believe that "missMDA" should solve this problem assuming all the "uniquenesses" are equal.


      Hope this helps,
      Spencer Graves


On 10/21/2010 5:03 PM, Peter Langfelder wrote:
On Thu, Oct 21, 2010 at 3:50 PM, HAKAN DEMIRTAS<demir...@uic.edu>  wrote:
Hi,

If a matrix is not positive definite, make.positive.definite() function in 
corpcor library finds the nearest positive definite matrix by the method 
proposed by Higham (1988).

However, when I deal with correlation matrices whose diagonals have to be 1 by 
definition, how do I do it? The above-mentioned function seem to mess up the 
diagonal entries. [I haven't seen this complication, but obviously all entries 
must remain in (-1,1) range after conversion.]

Any R tools to handle this?

I'd appreciate any help.
Well, I can't provide immediate help, but I'm curious where the
correlation matrices are coming from. Autocorrelation matrices (i.e.,
cor(x)) are always positive semi-definite (unless you have missing
data and you specify use = "pairwise.complete.observations", in which
case you may get some negative eigenvalues).

The correlation matrix you provided seems to be inconsistent in the
sense that cor (x[, 1], x[, 2]) is -0.95, cor(x[, 2], x[, 3]) is
-0.81, but cor(x[, 1], x[, 3]) is only -0.25. Using basic geometry
arguments one can show that given the 1,2 and 2,3 correlations, the
1,3 correlation must be at least 0.58. Again, you may get such an
apparently inconsistent correlation matrix if you use
"pairwise.complete.observations" and you have enough missing data.

So one question is whether you do use "pairwise.complete.observations"
when you calculate the matrix. If yes, you may want to try specifying
"complete.observations" which will remove more observations but may
solve your problem.

Peter

______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.


______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to