====== Ordenação ======
Ordenação é um método de re-descrição dos dados multivariados de forma a apresentá-los em poucas dimensões, geralmente 2 ou 3, com minima perda de informação. Veja o exemplo da representação gráfica de duas amostras em um espaço dimensional de duas espécies.
{{:mod1:mat_apoio:eucldist.jpeg?400| }}
Quando temos apenas duas dimensões de atributos (no caso duas espécies) a representação gráfica dos objetos, no nosso caso as parcelas, é direta.
Vamos reapresentar nossa comunidade pelas duas primeiras espécies:
sp2=com1.cont[c(1,2),]
duas.sp=sp2[,apply(sp2,2,sum)>0]
plot(t(duas.sp), pch=20, col=rainbow(dim(duas.sp)[2]), xlab="sp1", ylab="sp2")
text(duas.sp[1,]+0.1, duas.sp[2,]+0.4, colnames(duas.sp),col=rainbow(dim(duas.sp)[2]) )
Conforme vamos acrescentando informações de novos atributos (espécies) aos nossos objetos (parcelas), a representação gráfica torna-se mais difícil. Com três dimensões ainda conseguimos representar nossas parcelas em um gráfico.
{{:mod1:mat_apoio:graf3sp.jpeg?400 |}}
Os muitos métodos de ordenação como Análise de Componentes Principais (PCA), Análise de Correspondência (CA), tem como base a redução das dimensões descritivas para melhor visualizar as relações entre os objetos.
===== Ordenação Polar =====
Foi um dos primeiros métodos de ordenação e devido a sua simplicidade foi amplamente usado por ecólogos. Apesar de suas limitações e de ter sido preterido por outros métodos mais sofisticados, a Ordenação Polar (OP) produz resultados com interpretação ecologica relevante.
O objetivo da OP é representar as parcelas em um sistema de coordenadas de forma que a distância entre as parcelas representem suas similaridades e que revelem o gradiente ambiental subjacente. Aqui vamos usar o algorítmo de OP desenvolvido por Bray e Curtis (1957), especificamente para a análise de dados de comunidades de plantas.
Para inciar a análise, primeiro calculamos a dissimilaridade de Bray-Curtis como nossa medida de distânca. Abaixo a modificação da função que usamos para a similaridade, agora calculando a dissimilaridade (distância).
dis.bc<-function(dados)
{
nplot=dim(dados)[2]
similar=matrix(NA,ncol=nplot,nrow=nplot)
rownames(similar)<-paste("plot", c(1:nplot))
colnames(similar)<-paste("plot", c(1:nplot))
for(i in 1:(nplot-1))
{
m=i+1
for(m in m:nplot)
{
bc.dist=sum(abs(dados[,i]-dados[,m]))/(sum (dados[,c(i,m)]))
similar[m,i]=bc.dist
}
}
return(round(similar,3))
}
==== Algorítmo da Ordenação Polar ====
*1. usar a função acima para produzir a matriz de dissimilaridade:
dis1.cont=dis.bc(com1.cont)
*2. Calcular a soma das distâncias de cada uma das parcelas:
somadist1.cont=apply(dis1.cont, 1, sum, na.rm=TRUE)+ apply(dis1.cont,2,sum, na.rm=TRUE)
somadist1.cont
*3. Assinalar a parcela com a maior soma de distâncias ((aquela mais diferente de todas as outras)) e guarda o seu valor como o ínicio do primeiro eixo. Essa é nossa primeira referência no espaço de descrição das nossa parcelas (**ax**).
max(somadist1.cont)
nomes.parc = names(somadist1.cont)
parc.ax = nomes.parc[somadist1.cont==max(somadist1.cont)][1]
parc.ax
*4 Encontre agora a parcela que tem a maior distância da primeira referência. Caso tenham várias, ficaremos com aquela que tem maior soma de distâncias. Essa é nossa segunda referência no nosso espaço de descrição (**bx**)
dis1.cont[,parc.ax]
dis1.cont[parc.ax,]
dist.ax=rbind(dis1.cont[,parc.ax], dis1.cont[parc.ax,])
dist.ax
dist.ax=apply(dist.ax,2,sum, na.rm=TRUE)
dist.ax
max.ax=max(dist.ax)
max.ax
parc.bx=nomes.parc[dist.ax==max.ax]
parc.bx
*4a. Verificando se há mais parcela com a maior distância da parc.ax e selecionando aquela com maior soma de distâncias.
max(somadist1.cont[parc.bx])
somamax.bx=max(somadist1.cont[parc.bx])
parc.bx=parc.bx[somadist1.cont==somamax.bx][1]
parc.bx
* 5. Agora que temos duas referências do primeiro eixo (**ax** e **bx**), podemos calcular os valores para esse eixo x de todas as outras parcelas. Isso funciona como a triangulação que usada em telemetria para encontrar um animal que está usando um emissor de rádio. Colocando receptores em dois pontos conhecidos e com a informação da distância do emissor (o animal com um rádio colar por exemplo) aos dois receptores, é possível calcular as coordenadas em que o animal está. Veja a representação gráfica do que estamos dizendo:
{{:mod1:mat_apoio:bealsform.jpeg|}}
Para o calculo utilizamos a fórmula de Beal (1965) que nada mais é do que resolver a equação da hipotenusa dos dois triangulas acima, mais ou menos nessa sequência:
Para o triangulo da direita:
$$ dist_{ax_i}^2 = x_i^2 + y_i^2$$
portanto:
$$ y_i^2 = dist_{ax_i}^2 - x_i^2 $$ **(1)**
Para o triangulo da esquerda:
$$ dist_{ay_i}^2 = (L-x_i)^2 + y_i^2 $$
Podemos agora substituir o $$y_i^2$$ da expressão acima pela ** (1)** e isolar o $$ x_i$$:
$$ dist_{ay_i}^2 = (L-x_i)^2 + dist_{ax_i}^2 - x_i^2 $$
$$ dist_{ay_i}^2 = L^2 - 2Lx_i + x_i^2 + dist_{ax_i}^2 - x_i^2 $$
$$ x_i^2 - x_i^2 - 2Lx_i = L^2 + dist_{ax_i}^2 - dist_{ay_i}^2 $$
Simplificando a expressão chegamos finalmente à formula de Beal:
$$ x_i \ = \ ( L^2 \ + \ dist_{ax_i}^2 \ - \ dist_{bx_i}^2 )/ (2L) $$
* 5.1.Vamos primeiro organizar os valores de distância das parcela em relação à nossas referências para o primeiro eixo: //parc.ax// e //parc.bx//. Para a parc.ax já organizamos, agora faça o mesmo para a parc.bx
dist.ax
dist.bx=rbind(dis1.cont[,parc.bx], dis1.cont[parc.bx,])
dist.bx
dist.bx=apply(dist.bx,2,sum, na.rm=TRUE)
dist.bx
* 5.2. Aplique a fórmula para encontrar o valor do eixo x:
xi= (max.ax^2 + dist.ax^2 - dist.bx^2)/(2*max.ax)
xi
* 6. Agora que tem os valores do eixo x de todas as parcelas podemos calcular o valor do segundo eixo dado pelo teorema de pitágoras:
$$ y_i = sqrt(dist_{ax_i}^2 - x_i^2) $$
yi=sqrt((dist.ax)^2-xi^2)
yi
* 6.1. Ajuste o valor da //parc.bx// no eixo //yi//:
yi[parc.bx]=max.ax
yi
*7. Temos agora os valores do eixo x e y, vamos organizá-los em um único objeto e fazer um gráfico:
op1.cont=data.frame(xi,yi)
op1.cont
plot(op1.cont)
===== Função Ordenação Polar =====
Agora vamos preparar uma função que faça essas operações para não termos que fazer tudo novamente passo a passo.
ordena.polar=function(dist)
{
somadist1.cont=apply(dist, 1, sum, na.rm=TRUE) + apply(dist,2,sum, na.rm=TRUE)
nomes.parc=names(somadist1.cont)
parc.ax=nomes.parc[somadist1.cont==max(somadist1.cont)][1]
dist.ax=rbind(dist[,parc.ax], dist[parc.ax,])
dist.ax=apply(dist.ax,2,sum, na.rm=TRUE)
max.ax=max(dist.ax)
parc.bx=nomes.parc[dist.ax==max.ax]
if(length(parc.bx)>1)
{
somamax.bx=max(somadist1.cont[parc.bx])
parc.bx=nomes.parc[somadist1.cont==somamax.bx][1]
parc.bx
}
dist.bx=rbind(dist[,parc.bx], dist[parc.bx,])
dist.bx=apply(dist.bx,2,sum, na.rm=TRUE)
xi= (max.ax^2 + dist.ax^2 - dist.bx^2)/(2*max.ax)
yi=sqrt((dist.ax)^2-xi^2)
yi[parc.bx]=max(dist.ax)
op.xy=data.frame(xi,yi)
plot(op.xy, pch=19, col=rainbow(length(xi)), xlim=c(-0.1, 1), ylim=c(-0.1,1), main="Ordenação Polar", sub="Distância Bray-Curtis")
text(op.xy-0.05, labels=rownames(op.xy))
return(op.xy)
}
Vamos aplicar a função para os dados da comunidade virtual contínua e ver se nossos cálculos estão corretos.
dist1=dis.bc(com1.cont)
ordena.polar(dist1)
===== Agora é por sua conta! =====
Agora que já temos a função, vamos aplicá-la para as suas comunidades virtuais. Em seguida interprete os padrões abservado tendo em vista a sua comunidade virtual e as características com que a construiu.
===== Interpretação de Ordenações =====
Algumas dicas de interpretação de resultados de ordenações, não só da Ordenação Polar, baseadas no material produzido por Michael Palmer em seu, visualmente não muito atraente, mas ótimo [[http://ordination.okstate.edu/overview.htm|site sobre ordenação]]:
- A direção dos eixos é arbitraria e não deve afetar a interpretação
- A escala numerica do eixos não é muito útil para a interpretação (existem algumas exceções como DCA, onde a escala é em unidades de beta diversidade)
- Na OP, assim como muitas outras técnicas de ordenação, a ordem dos eixos é importante. Assim o eixo 1 é mais importante para a interpretação dos gradientes ambientais que o segundo.
- A experiência prévia do sistema estudado e conhecimento da literatura pertinente são as ferramentas mais poderosas para a interpretação dos gradientes subjacentes ao padrão revelado pela ordenação.
- A interpretação de outros eixos além dos dois primeiros(quando a análise produz) é possível e a decisão de onde parar é uma questão arbitrária e dependente da quantidade e qualidade dos dados. Em algumas técnicas há estatísticas que ajudam a tomar essa decisão.
- É desejável que os eixos não sejam correlacionadas, o que é garantido por alugmas técnicas. Dessa forma é possível interpretar os eixos como gradientes diferentes.