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)