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
_______________________________________________
R-br mailing list
[email protected]
https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br
Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código 
mínimo reproduzível.

Responder a