Capítulo 5 Análise de Procrustes

O passo primário fundamental em morfometria geométrica é a Análise Generalizada de Procrustes (GPA - Generalized Procrustes Analysis), que remove os efeitos de rotação/orientação, translação/posição e tamanho dos objetos. O resultado é uma matriz com as variáveis de forma. Outros métodos de superposição de marcos anatômicos foram propostos, para revisões, veja (monteiro1999?); (adams2004?); (zelditch2012?), mas a GPA é o mais popular e mais adequado na maioria dos casos.

Na GPA, os efeitos de translação/posição são removidos pois (i) o centróide de cada configuração é transladado para a origem: as coordenadas do centróide de cada configuração são subtraídas da coordenada correspondente de cada landmark, gerando a centralização ou superposição das configurações. Os efeitos de tamanho são removidos pois (ii) as configurações são escaladas/proporcionalizadas para um tamanho de centróide único após a divisão das coordenadas dos landmarks pelo seu tamanho do centróide. E os efeitos de rotação/orientação são removidos pois (iii) a raiz quadrada da soma das distâncias ao quadrado entre os landmarks correspondentes é minimizada usando rotação otimizada por quadrados mínimos; o processo inicia rotacionando as configurações em relação à uma forma de referência, em seguida, uma nova forma de referência (a média da configuração de landmarks) é calculada, e o processo se repete iterativamente até que as diferenças de orientação sejam minimizadas.

Em duas dimensões, dois graus de liberdade são perdidos com a translação, um grau de liberdade é perdido com o escalonamento e um grau de liberdade é perdido com a rotação, totalizando quatro graus de liberdade perdidos. Em três dimensões, três graus de liberdade são perdidos com a translação, um grau de liberdade é perdido com o escalonamento, e três graus de liberdade são perdidos com a rotação, totalizando sete graus de liberdade perdidos.

5.1 O objeto .tps no R

O arquivo .tps criado no TPSDig2 pode ser lido no R com a função readland.tps do pacote geomorph. Antes, lembre-se de colocar o arquivo .tps na pasta dadosmg e definir essa pasta como diretório de trabalho no R.

# Carregar geomorph 
require(geomorph) 
#> Le chargement a nécessité le package : geomorph
#> Warning: le package 'geomorph' a été compilé avec la
#> version R 4.3.2
#> Le chargement a nécessité le package : RRPP
#> Warning: le package 'RRPP' a été compilé avec la version R
#> 4.3.2
#> Le chargement a nécessité le package : rgl
#> Le chargement a nécessité le package : Matrix
# Importar arquivo .tps 
# lembre-se de substituir por "nomequevocêdeu.tps"
tps<-readland.tps("dadosmg/mandibula.dig_curso.tps",specID = "ID", readcurves = FALSE) 
dim(tps) 
tps

Podemos visualizar os dados brutos com a função plotAllSpecimens.

Os círculos maiores representam a posição média do landmark, e os círculos menores representam a posição de cada landmark.

Use indexação com [] para localizar certos landmarks ou indivíduos. Por exemplo.

# Deletar espécimes
tps.new<-tps[,,-7] # deleta espécime n 7
# Deletar landmarks
tps.new<-tps[-5,,] # deleta landmark n 5

5.2 Estimar landmarks faltantes

A função estimate.missing do pacote geomorph implementa dois métodos para estimar landmarks faltantes.

tps.missing<-readland.tps("dadosmg/mandibula.dig_curso_missing.tps",specID="ID",readcurves=FALSE)
tps.missing
tps.estimated<-estimate.missing(tps.missing, method = "TPS")
tps.estimated

writeland.tps(tps.estimated, "dadosmg/tps.estimated.tps") # exportar arquivo tps com landmarks estimados

5.3 Análise Generalizada de Procrustes

Aqui, faremos a análise de Procrustes (GPA) em dados sem simetria de objeto e atribuiremos nomes para os outputs de forma e tamanho do centróide.

gpa.object<-gpagen(tps)
#> 
#> Performing GPA
#> 
  |                                                        
  |                                                  |   0%
  |                                                        
  |============                                      |  25%
  |                                                        
  |=========================                         |  50%
  |                                                        
  |==================================================| 100%
#> 
#> Making projections... Finished!
gpa.object
#> 
#> Call:
#> gpagen(A = tps) 
#> 
#> 
#> 
#> Generalized Procrustes Analysis
#> with Partial Procrustes Superimposition
#> 
#> 13 fixed landmarks
#> 0 semilandmarks (sliders)
#> 2-dimensional landmarks
#> 2 GPA iterations to converge
#> 
#> 
#> Consensus (mean) Configuration
#> 
#>                X           Y
#> 1  -0.3600904084 -0.03209176
#> 2  -0.3838537500  0.08920190
#> 3  -0.2678074781  0.01674324
#> 4  -0.2101661423  0.05684845
#> 5  -0.0001796958  0.03565707
#> 6   0.1873051760  0.14767796
#> 7   0.1660719417  0.08697077
#> 8   0.2984433258  0.09285954
#> 9   0.3486394512  0.01069463
#> 10  0.2335846883 -0.07886796
#> 11  0.2889938410 -0.17663723
#> 12 -0.0281091968 -0.13445727
#> 13 -0.2728317526 -0.11459935
shape<-gpa.object$coords
size<-gpa.object$Csize

Podemos visualizar a distribuição dos dados de tamanho e forma. Note a diferença no gráfico da forma antes e depois da análise de Procrustes.

hist(size)

5.4 Espaço tangente

A correlação do espaço de forma com o espaço tangente quase sempre será muito alta em dados de morfometria geométrica, justificando o uso de estatística Euclidiana.

require(Morpho)
#> Warning: le package 'Morpho' a été compilé avec la version
#> R 4.3.2
regdist(shape)
#> $cor
#> [1] 0.9999991
#> 
#> $procSS
#> [1] 0.1789463
#> 
#> $tanSS
#> [1] 0.1788539
#> 
#> $rhoSS
#> [1] 0.1791391

5.5 Formato array e matrix

Os dados de forma estão em formato array. Podemos nos mover facilmente entre os formatos array e matrix. Ambos carregam a mesma informação, mas algumas análises/operações só aceitam um dos dois formatos.

5.6 GPA com simetria de objeto

Quando os dados tiverem simetria e objeto, vamos informar isso ao R com uma matriz contendo os pares de landmarks simétricos e realizar uma GPA considerando a simetria.

# Carregar dados
tps.sim<-readland.tps("dadosmg/Lista tuco dig 2.tps",specID = "ID", readcurves = FALSE)
dim(tps.sim)
# Matriz com landmarks simétricos
pairs.matrix<-matrix(c(2,3,5,6,7,8,10,11,12,13,14,15,16,17,18,19,20,21,23,24,25,26,27,28),nrow=12,ncol=2,byrow=T)
pairs.matrix
# Construir vetor com rótulo de indivíduos (neste caso, uma marcação por indivíduo)
ind<-c(1:dim(tps.sim)[3])
# GPA com simetria bilateral
b.s<-bilat.symmetry(tps.sim,ind=ind,object.sym=TRUE,land.pairs=pairs.matrix)

shape.sym<-b.s$symm.shape # componente simétrico da forma
plotAllSpecimens(shape.sym)

5.7 Encontrando outliers

Podemos encontrar indivíduos muito diferentes dos demais observando sua distância em relação à forma média da amostra. Em morfometria geométrica, é comum a marcação de landmarks trocados em alguns indivíduos, o que vai gerar óbvios outliers.