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){
Boa noite, Estou com um problema que eu acho que deve ser super simples mas não estou conseguindo resolver: + + 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