Núcleo de Pesquisa em Evolução Animal - São Mateus - ES

Morfometria Geométrica no R

Olá, seja bem vind@!

Se você está nessa página, significa que está interessad@ em temas relacionados à morfometria geométrica, correto? 

Aqui você vai aprender como iniciar a sua investigação, o nosso tutorial vai te explicar como obter as informações em 2D e ainda vai demonstrar alguns exemplos de análises mais básicas (e efetivas) que podem ser realizadas! Antes de começarmos é necessário que você conheça um pouco sobre o funcionamento da análise, se você já conhece um pouco pode avançar para a Etapa 01. Agora, se você precisa aprender um pouco mais sobre o tema e a ferramenta, leia no nosso texto de apresentação:

Você está pront@?

Atenção: As Etapas 01 e 02 foram testadas apenas nos sistemas operacionais Windows 8 e 10, outras versões ou sistemas não foram testados até o momento pela nossa equipe.  

 

ETAPA 01: Instalação do software

O programa que iremos utilizar é o R e ele funciona por linhas de comando. Isso pode parecer estranho, mas garantimos que o resultado é formidável. Provavelmente em algum momento você já deve ter escutado falar desse programa, agora você irá conhecê-lo:

Para fazer o download e instalação do R clique no link abaixo, essa é a primeira etapa de instalação:

The Comprehensive R Archive Network (r-project.org)

Agora você vai baixar o RStudio, a instalação desse segundo programa é a segunda etapa do processo. O R e o RStudio são programas que trabalham de forma integrada, portanto não estranhe essa etapa :)

Download the RStudio IDE - RStudio

Tenha certeza que você baixou e instalou os dois programas, se tudo estiver funcionando certinho, você está apto a seguir para a próxima etapa. 

 

ETAPA 02: Instalação de pacotes (conjunto de informações complementares ao R)

Para acompanhar esse tutorial é necessário realizar a instalação de alguns complementos ao R, esses complementos são chamados comumente de pacotes. Os pacotes contém blocos de informações necessárias para que o R possa realizar cálculos específicos,  entender como interpretar e apresentar os resultados ao usuário. 

Tendo certeza de que o R e o RStudio foram instalados e, que agora ambos estão encerrados (fechados), abra somente o RStudio. 

Quando o RStudio iniciar, certifique-se de estar na tela inicial. Vá até a barra de menu superior, clique em tools e depois em Install Packages…, uma janela irá abrir e você digitará os nomes dos pacotes listados abaixo, lembre-se que cada nome deve estar separado um do outro por um espaço simples. Você pode instalar todos os pacotes de uma vez ou pode instalar um por vez, basta repetir o processo tools > Install Packages… .  

Atenção: Digite os nomes dos pacotes exatamente como estão abaixo, leve em consideração as letras maiúsculas e minúsculas.

Você instalará os pacotes:

- StereoMorph

- geomorph

- ggplot2

- psych

- lmPerm

Agora que você digitou o nome do pacote basta clicar em Install e o RStudio irá baixar e instalar os pacotes. O tempo de download é variado, isso vai depender de qual servidor o RStudio irá fazer o download e qual é a largura de banda de sua internet ;)

 

ETAPA 03: Digitalização dos marcos anatômicos (também chamados de landmarks)

O processo de digitalização de landmarks no RStudio foi implementado por Olsen e Westneat, em 2014. De lá pra cá algumas atualizações ocorreram, um dos autores mantém um site atualizado onde constam tutoriais de digitalização de landmarks em estruturas 2D e 3D, fique a vontade para explorar e conhecer um pouco mais do trabalho dos autores:

StereoMorph (aaronolsen.github.io)

Como dissemos antes, o R é um programa de linha de comandos e dessa maneira tudo deve estar no seu lugar antes de começar. Cada detalhe conta e cada caractere é crucial para o pleno funcionamento. Você deve sempre prestar atenção em cada letra digitada. Assim, vamos iniciar: 

1 - Na área de trabalho do seu computador, crie uma pasta chamada “nome_que_quiser”. Nesta pasta crie duas outras pastas chamadas “amostras” e “coordenadas”.

2 - Insira na pasta “amostras” todas as fotografias as quais você deseja obter as informações de coordenadas. A pasta “coordenadas” fica quietinha por enquanto.

3 - Crie um arquivo em .txt com o Bloco de notas chamado de “landmarks”. Abra esse arquivo e digite o nome do seu landmark de nº 01. Aperte a tecla “enter” e digite os landmarks seguintes, o texto em seu arquivo deve ficar assim:

01_nasal

02_frontal

03_esquamosal

04_etc...

 

4 - Após criar o arquivo, salve-o dentro da pasta “nome_que_quiser”. 

Agora nós vamos iniciar as linhas de comando, tenha muito atenção:

Abra o RStudio, na barra superior clique em “Create a Project”. Na janela que abrirá em seguida clique em “Existing Directory” > “Browse” > procure a pasta “nome_que_quiser” na área de trabalho.  Após selecionar a pasta, clique em “Create Project”. Esse passo irá fazer com que o RStudio entenda que as informações necessárias estão dentro da pasta indicada. 

 

No campo de digitação de texto do RStudio, digite:

> library(Stereomorp)

>digitizeImage(image.file='amostras',shapes.file='coordenadas', landmarks.ref='landmarks.txt')

Uma interface irá abrir, marque suas preferências. Depois é só marcar os seus landmarks e ao final da marcação em cada foto, clique em Salvar e depois em Avançar para dar início a marcação dos landmarks na próxima imagem. Ao fim, clique em Exit. 

Repita esse processo novamente para marcar as escalas, foto por foto, tudo de novo ;)

Ao final desse processo serão gerados vários arquivos na sua pasta “coordenadas”, cada arquivo é referente a uma fotografia, ou seja, cada arquivo .txt tem a informação de coordenadas da foto correspondente. O número de arquivos .txt deve ser igual a quantidade de fotografias analisadas. 

Feche a interface de digitalização e reinicie o Rstudio.

 

ETAPA 04: Análise Generalizada de Procrustes - GPA

Agora que temos as nossas informações de coordenadas, vamos realizar a GPA. Este processo irá escalonar, rotacionar e sobrepor todas as coordenadas. Isto é crucial em todas as análises de morfometria geométrica, visto que também é nesse momento que obtemos o isolamento da forma e do tamanho da estrutura investigada.

1 - Converta os dados do pacote StereoMorph para o pacote Geomorph. Neste passo, os dados de coordenadas obtidos com o StereoMorph são convertidos para o modo de leitura do Geomorp. As coordenadas convertidas serão salvas em coordenadas_vista_gm (note que será criado um objeto com este no menu direito). Digite:

> library(geomorph)

> library(StereoMorph)

> coords_sm <- readShapes('pasta_das_coordenadas')

> coords_gm <- readland.shapes(coords_sm)

Após este passo e com o objeto coordenadas_vista_gm criado, digite:

> windows()

> gpa <- gpagen(coords_gm, ProcD = FALSE)

> plot(gpa)

Nesta etapa será demonstrado a você um gráfico com vários pontinhos sobrepostos. Esse é o resultado gráfico da sua Análise Generalizada de Procrustes. 

Para verificar se existem outliers em seus dados, utilize:

> outliers<- plotOutliers(gpa$coords, inspect.outliers = FALSE)

> plot(outliers)

 

ETAPA 05: Análise de Componente Principal - PCA 

Antes de realizar a PCA é necessário que preparemos o ambiente do RStudio para que tenhamos à mão todas as informações necessárias. Primeiro vamos criar um local no RStudio que tenha as informações de coordenadas isoladas de qualquer outro conjunto de dados.

1 - Extração e alinhamento das coordenadas. Neste passo são extraídas as coords (coordenadas) contidas no objeto gpa. As coordenadas alinhadas e organizadas são salvas no objeto alinhamento_coords. 

> alinhamento_coords<- two.d.array(gpa$coords)

2 - Classificadores. Neste passo é carregada uma tabela que contémm a discriminação das amostras analisadas. Você deve criar uma tabela no Excel que contém as informações desejadas. Salve-a no formato “.csv” separado por vírgulas. Essa tabela deverá ser incorporada ao RStudio, para isso digite:

> classificadores <- read.csv(file.choose(), sep = ";", header = TRUE)

Uma interface irá aparecer e você deverá escolher a tabela desejada.

PCA - Principal Component Analysis

Agora vamos realizar a PCA através das coordenadas salvas no objeto alinhamento_coords e os resultados dessa PCA serão salvos no objeto pca_vista. Digite:

> pca <- prcomp(alinhamento_coords, retx=TRUE)

> summary(pca)

Após digitar o último comando a PCA será calculada e uma lista de informações será obtida. Nesse momento, as informações de cada PC calculado será exposta a você, recomendamos que tire um printscreen da tela ou salve os valores de cada PC como desejar. 

Data Frame 

Após criar o objeto classificadores_pca (Item 2, Etapa 4), é necessário criar um banco de dados chamado de df_forma, que é um objeto contendo os classificadores_pca mais os valores da PCA que foram calculados. Isso é necessário para criar o plot (gráfico) da PCA.  Note: [, 1:2] significam PCA 1 e PCA 2 respectivamente. Digite:

> df_forma <- data.frame(classificadores, pca $ x [, 1:2])

 

ETAPA 06: Visualização gráfica da PCA 

Agora você já calculou a PCA, porém ainda não possui um gráfico estiloso para visualizar de forma gráfica o comportamento das suas amostras, né? Vamos providenciar isso agora mesmo. Digite: 

>>library(ggplot2)

> windows()

> plot_pca <- ggplot(df_forma) + aes (PC1, PC2, color=FATOR, shape=FATOR) + geom_point (size=4) +theme_bw() + labs (title="Titulo",x="PC1", y = "PC2") + theme(legend.text = element_text (size = 15), legend.title = element_text (size = 15), axis.text = element_text(size = 15), axis.title = element_text(size = 15))

> plot_pca

Este comando irá criar uma nuvem de pontos que representam cada amostra da sua análise. Porém é necessário identificar cada ponto desses, afinal, queremos saber o comportamento de cada indivíduo da  amostra em relação ao restante. O comando acima junta diversas informações como as que constam na sua tabela de classificadores. Note que no comando que está escrito “PC1, PC2, color=FATOR, shape=FATOR”, fator nesse caso é o nome da coluna da sua tabela de classificadores que tem as informações que discriminam as suas amostras.

Por exemplo, se na sua tabela tem a informação de sexo das amostas e consideremos que o nome da coluna que tem a informação se chama “coluna_sexo”, o fator nesse caso será “PC1, PC2, color=coluna_sexo, shape=coluna_sexo”. Assim será gerado um gráfico com os indivíduos identificados pelo sexo. Você pode escolher o fator que quiser para identificar os indivíduos, isso vai depender da pergunta que você quer responder. 

 

Para facilitar a visualização dos grupos identificados, nós podemos criar elipses ao redor dos grupos. Isso é feito substituindo o comando anterior por este:

> plot_pca_elipse <- ggplot(df_forma) + aes (PC1, PC2, color=FATOR, shape=FATOR)+ scale_shape_manual(values = seq(0,21)) + geom_point (size=4) +stat_ellipse (geom = 'polygon', level = 0.90, alpha = 1/20, aes(fill=grupo, group=grupo)) +theme_bw() +labs (title="Title", x="PC1", y = "PC2") + theme(legend.text = element_text (size = 15), legend.title = element_text (size = 15), axis.text = element_text(size = 15), axis.title = element_text(size = 15))

> plot_pca_elipse_vista

O mais legal da morfometria geométrica é poder simular e visualizarcomo as formas variam, não é mesmo? Nós amamos quando vemos as grades de deformação (grids) nos artigos científicos! Agora vamos te ensinar a fazer as suas próprias grades. Digite:

> windows()

> teste.pca <- gm.prcomp(gpa$coords)                

> pleth.pca.plot <- plot(teste.pca)

Esse comando irá gerar um gráfico semelhante a sua PCA, porém não será tão colorido como o anterior. Mas não há problema, a função desse gráfico é fornecer a informação de deformação. Digite agora:

> picknplot.shape(pleth.pca.plot)

O comando acima vai permitir que você clique em qualquer área do gráfico da PCA e escolha a variação de forma naquele local! Incrível não é mesmo? Você tem total controle sobre a forma que deseja visualizar! Se lembre: a forma média entre todas as amostras será o PC mais próximo de 0. Isso vale para o PC1 e o PC2.

 

ETAPA 07: Análises de forma isolada do tamanho

Até aqui nós analisamos a forma por um meio gráfico. Nós vimos o comportamento da forma relacionado às amostras e como elas tendem a se comportar. Agora, vamos analisar estatisticamente estas variações! Nossa análise se inicia com uma Anova de Procrustes, que é uma Anova que leva em consideração a forma como um todo e não landmarks isolados e independentes. Digite:

> anova_forma <-procD.lm(alinhamento_coords~df_forma $ grupo)

> summary(anova_forma)

 

Estes comandos irão calcular a Anova de Proc. e lhe retornarão os resultados em forma de texto. Recomendamos que tire um printscreen da tela ou salve as informações da maneira como preferir. Perceba que neste comando há um fator em “...$grupo”, grupo nesse caso é o nome da coluna da sua tabela de classificadores que tem as informações que discriminam as suas amostras. Esse grupo é o que será levado em consideração na análise. Se você quiser fazer uma Anova de Proc. para saber se existe diferença na forma entre os sexos, o seu “...$grupo” será: “...$coluna_sexo”. Isso serve para qualquer agrupamento que você deseje comparar.

Suponhamos que o seu fator “...$grupo” agora é uma localidade e você deseja saber se há diferenças entre 4 localidades distintas. O seu “...$grupo” ficará “...$coluna_localidade”. Porém, como você percebeu pelos resultados do comando anterior, a Anova de Proc. investiga se há diferenças entre os grupos, porém ela não indica entre quais grupos estão essas diferenças. Para isso utilizamos das famosas análises par-a-par. 

Para saber por exemplo, onde se concentram as diferenças em uma anova com 3 grupos ou mais, digite:

> gdf <- geomorph.data.frame(site=df_forma$grupo)

> gp <-  (gdf$site)

> pw <- pairwise(anova_forma, groups = gp, covariate = NULL)

> summary(pw, test.type = "dist", confidence = 0.95, stat.table = TRUE)

Este comando calculará as diferenças entre todas as localidades, uma por uma, e vai te informar onde estão de fato as diferenças. O resultado desses comandos serão na forma de texto, recomendamos que tire um printscreen ou salve as informações da maneira como desejar. 

 

ETAPA 08: Análises de tamanho isolado da forma

Para analisar o tamanho sem os efeitos da forma, se deve extrair o Csize (tamanho do centróide/tamanho absoluto), criando um data frame. Para isso digite:

> df_tamanho <- data.frame(classificadores, gpa$Csize)

 

Esse comando irá criar um objeto (o tal data frame) contendo as informações da sua tabela de classificadores associado as informações do tamanho absoluto de cada amostra! Aqui está mais um highlight da morfometria geométrica!

Para você identificar qual é o comportamento do tamanho entre as suas amostras digite:

> summary(gpa$Csize)

 

Este comando irá apresentar a você uma descrição do comportamento do tamanho. O resultado desses comandos serão na forma de texto, recomendamos que tire um printscreen ou salve as informações da maneira como desejar. 

Suponhamos que você deseje investigar o comportamento do tamanho sob fatores específicos. Por exemplo, se você quer saber como é o comportamento do tamanho em machos e em fêmeas. Para ter uma descrição do tamanho em grupos específicos, digite:

> library(psych)

> describeBy(df_tamanho, df_tamanho$FATOR)

Fator nesse caso é o nome da coluna da sua tabela de classificadores que tem as informações que discriminam as suas amostras.

 

Agora, assim como na forma, você também quer saber se existe diferença entre esses grupos, não é? Todos queremos calcular o famoso p-valor rsrs. Mãos à obra! Digite:

> library(lmPerm) 

> anova_tamanho<- aov(gpa$Csize~FATOR, data = df_tamanho, perm = 'Exact') 

> summary (anova_tamanho)

> TukeyHSD(anova_tamanho)

Fator nesse caso é o nome da coluna da sua tabela de classificadores que tem as informações que discriminam as suas amostras. Aproveitamos e já incluímos nesses comandos as comparações par-a-par, dessa forma além da comparação geral, também já fica garantida as comparações par-a-par! O resultado desses comandos serão na forma de texto, recomendamos que tire um printscreen ou salve as informações da maneira como desejar. 

Opa! Os dados gerados são muito bacanas, porém a ciência sempre pede mais e precisamos ser mais claros nas apresentações dos nossos resultados! Que tal montarmos um gráfico do tipo boxplot para demonstrar o comportamento do tamanho? Para isso digite:

> boxplot_csize <- ggplot(data = df_tamanho, aes(x = FATOR, y = gpa.Csize)) + geom_boxplot (aes(fill = FATOR)) + theme_bw() + labs (title="Título",x="Nome do eixo X", y = "Nome do eixo Y") + theme (legend.text = element_text (size = 15), legend.title = element_text (size = 15), axis.text = element_text(size = 15), axis.title = element_text(size = 15))

> windows()
> plot(boxplot_csize)

 

Assim nós chegamos ao final do nosso tutorial de análises exploratórias de morfometria geométrica! Conseguimos extrair as coordenadas, visualizar o comportamento dos indivíduos no morfo-espaço e investigamos possíveis diferenças na forma e no tamanho isoladamente. 

O tutorial foi feito com uma linguagem mais simples para tentar tornar a sua rotina mais leve. Ele ainda está em construção e constante atualização. Se você precisar de ajuda entre em contato através do e-mail: loss.mateus [at] gmail.com. Se achar algum erro também nos avise, combinado? Esta é a primeira versão e logo esperamos turbiná-la com mais informações, imagens e textos explicativos! Bom trabalho! 

 

 

 

Acesso à informação
Transparência Pública

© 2013 Universidade Federal do Espírito Santo. Todos os direitos reservados.
Rodovia Governador Mário Covas, Km 60 - Bairro Litorâneo, São Mateus - ES | CEP 29932-540