2013-09-16 6 views
1

У меня есть корреляционная матрица:Собственное значение разложения корреляционной матрицы

cor.table <- matrix(sample(c(0.9,-0.9) , 2500 , prob = c(0.8 , 0.2) , repl = TRUE) , 50 , 50) 
diag(cor.table) <- 1 

я пытаюсь сделать собственное значение разложения:

library(psych) 
fit<-principal(cor.table, nfactors=50,rotate="none") 

или

stopifnot(eigen(cor.table)$values > 0) 

В обоих случаях я получаю сообщение об ошибке :

Error in eigens$values < .Machine$double.eps : 
    invalid comparison with complex values 

Что я делаю неправильно?

+2

Возможно, вам понадобится симметричная матрица, которой у вас нет в вашем примере. – dayne

+0

Сделав матрицу симметричной - используя тот же метод в ответе, который я дал вам ранее (http://stackoverflow.com/questions/18763723/create-covariance-matrix-from-correlation-table-with-both-positively-and -negativ/18764141 # 18764141) - Я не получил ошибку с 'eigen (cor.table)'. – dayne

+1

Чтобы иметь действительную корреляционную матрицу, вам также необходимо убедиться, что собственные значения неотрицательны. –

ответ

1

Это та самая проблема, о которой вы задали ранее question. Вам нужна симметричная матрица.

set.seed(1) 
cor.table <- matrix(sample(c(0.9,-0.9),2500,prob=c(0.8,0.2),repl=TRUE),50,50) 
ind <- lower.tri(cor.table) 
cor.table[ind] <- t(cor.table)[ind] 
diag(cor.table) <- 1 

Теперь, когда вы пытаетесь с помощью eigen вы не получите сообщение об ошибке.

your.eigen <- eigen(cor.table) 
> summary(your.eigen) 
Length Class Mode 
values 50 -none- numeric 
vectors 2500 -none- numeric 
+0

Да, это создает симметричную матрицу, но главная (cor.table, nfactors = 50, rotate = "none") все еще дает ошибку, потому что некоторые из собственных значений неотрицательны. есть ли способ исправить это? – user1723765

Смежные вопросы