Boa noite,
Estou com um problema que eu acho que deve ser super simples mas não estou conseguindo resolver:
> MatrizCorrelação<-array(c(1,0.9,0.7,0.9,1,0.3,0.7,0.3,1),dim=c(3,3))
> EigenMC<-eigen(MatrizCorrelação)
> EigenMC$values
[1] 2.296727793 0.710624647 -0.007352439
>
>
> NovaMatrizCorrelação<-MatrizCorrelação
> NovoEigenMC<-eigen(NovaMatrizCorrelação)
> int<-0
>
> while(NovoEigenMC$values<0){
+
+ int<-int + 1
+
+ NovoEigenMC.<-ifelse(NovoEigenMC$values<0, 0, NovoEigenMC$values)
+
+ NovaMatrizCorrelação<-NovoEigenMC$vectors %*% diag(NovoEigenMC.) %*% t(NovoEigenMC$vectors)
+
+ NovaMatrizCorrelação<- NovaMatrizCorrelação/sqrt(diag(NovaMatrizCorrelação) %*% t(diag(NovaMatrizCorrelação)))
+
+ eigen(NovaMatrizCorrelação)$values
+ int
+ }
Mensagens de aviso perdidas:
In while (NovoEigenMC$values < 0) { :
a condição tem comprimento > 1 e somente o primeiro elemento será usado
Eu pensei em colocar um for e fazer desta forma:
MatrizCorrelação<-array(c(1,0.9,0.7,0.9,1,0.3,0.7,0.3,1),dim=c(3,3))
EigenMC<-eigen(MatrizCorrelação)
EigenMC$values
NovaMatrizCorrelação<-MatrizCorrelação
NovoEigenMC<-eigen(NovaMatrizCorrelação)
int<-0
for(i in 1:3){
while(NovoEigenMC$values[i]<0){
int<-int + 1
NovoEigenMC.<-ifelse(NovoEigenMC$values<0, 0, NovoEigenMC$values)
NovaMatrizCorrelação<-NovoEigenMC$vectors %*% diag(NovoEigenMC.) %*% t(NovoEigenMC$vectors)
NovaMatrizCorrelação<- NovaMatrizCorrelação/sqrt(diag(NovaMatrizCorrelação) %*% t(diag(NovaMatrizCorrelação)))
eigen(NovaMatrizCorrelação)$values
int
}
}
Mas por algum motivo o programa fica rodando rodando e rodando e nada.
Muito obrigada,
Michelle