====== Marcel ====== ===== Maximização da correlação entre duas matrizes===== Considero importante disponibilizar no pacote uma função à parte como esta, que permita ao usuário explorar aspectos não contemplados pelos autores do programa. Isso dá uma liberdade muito maior ao usuário e condiz com o espírito do código livre. Seria ótimo se tivéssemos também funções para maximizar correlações parciais. ### MAXIMIZAÇÃO DE ro(BF) ## Dados # MATRIZ B (10 spp x 5 traits) B=data.frame(t1=sample(1:10,10,replace=TRUE),t2=sample(1:10,10,replace=TRUE), t3=sample(1:10,10,replace=TRUE),t4=sample(1:10,10,replace=TRUE), t5=sample(1:10,10,replace=TRUE)) # MATRIZ F (10 spp x 3 variáveis taxonômicas) F=data.frame(v1=c(1,1,2,2,2,3,3,4,5,5),v2=c(1,1,1,1,1,2,2,2,3,3),v3=c(1,1,1,1,1,1,1,1,2,2)) ## Distâncias library(vegan) Sb=vegdist(B,method="gower") Sf=vegdist(F,method="gower") ## ro(BF) cor(Sb,Sf) ## Combinações (5 atributos) n=length(B) k=1:length(B) bin=factorial(n)/(factorial(k)*factorial(n-k)) C=sum(bin) # número de combinações # Nomes comb=character() for(i in 1:n){ for(j in 1:bin[i]){ comb=c(comb,paste(combn(names(B),i)[,j],collapse=" ")) } } # Correlações corel=numeric() for(i in 1:n){ for(j in 1:bin[i]){ corel=c(corel,cor(vegdist(as.matrix(B[,combn(names(B),i)[,j]]),method="gower"),Sf)) } } # Resultado result=data.frame(subset=comb,ro.BF=corel,stringsAsFactors=FALSE) result[order(result[,2],decreasing=TRUE),] ## FUNÇÃO maxim=function(x,y,metric="gower"){ library(vegan) Sy=vegdist(y,method=metric) n=length(x) k=1:length(x) bin=factorial(n)/(factorial(k)*factorial(n-k)) comb=character() for(i in 1:n){ for(j in 1:bin[i]){ comb=c(comb,paste(combn(names(x),i)[,j],collapse=" ")) } } corel=numeric() for(i in 1:n){ for(j in 1:bin[i]){ corel=c(corel,cor(vegdist(as.matrix(x[,combn(names(x),i)[,j]]),method=metric),Sy)) } } result=data.frame(subset=comb,ro=corel,stringsAsFactors=FALSE) return(result[order(result[,2],decreasing=TRUE),]) } maxim(B,F)