Traduções desta página:

Ferramentas do usuário

Ferramentas do site


05_curso_antigo:r2017:alunos:trabalho_final:aline.h.correa:trabalho_final_de_aline_h._correa

Trabalho final de Aline H. Corrêa

===== Proposta A =====

Função: anali.estat()

Essa proposta tem o intuito de facilitar estudos taxonômicos, unindo na mesma função os testes estatísticos mais frequentemente usados em comparações para apontar as diferenças e semelhanças entre grupos. A função começaria exibindo uma saída de “Estatística Descritiva dos Grupos” que seria representada por uma tabela que conteria os diferentes caracteres morfométricos (variáveis de interesse) separados por unidade operacional taxonômica (UTO - grupos de interesse) e sexo. Em estudos taxonômicos delimitamos UTOs essencialmente de acordo com semelhanças, como por exemplo semelhanças morfométricas, e analisamos estatisticamente se essas semelhanças são significativas ou não – para mais discussões sobre UTOs e conceitos de espécie principalmente em ornitologia, segue link nas referências bibliográficas – A estatística descritiva exibiria os valores mínimos, máximos, média, variância, desvio padrão e n amostral para cada caráter morfométrico. Na sequência a função testaria a normalidade das amostras (teste Shapiro-Wilks), e a igualdade de variâncias (teste Levene). Os resultados de ambos os testes seriam apresentados ao usuário de modo que o mesmo pudesse avaliar de acordo com a normalidade e igualdade de variâncias qual teste de dimorfismo sexual iria adotar em seu estudo (teste-t de Student ou Mann-Whitney). Após a escolha do usuário, a função iria prosseguir retornando os resultados do teste de dimorfismo, dando a opção novamente ao usuário escolher qual teste de comparação entre grupos irá utilizar (One-way ANOVA ou Kruskal-Wallis).

- Critérios de entrada

Um arquivo .txt ou .csv contendo uma tabela com dados de caracteres morfométricos, separados por sexo e unidade operacional taxonômica (UTO). Dados faltantes serão removidos da análise.

- Retorno dos resultados

Serão preferencialmente apresentados em formato de tabela, tanto a estatística descritiva, quanto os resultados dos testes de normalidade, igualdade de variâncias, dimorfismo sexual e comparação entre grupos. A função também retornará gráficos de boxplot com a exibição dos resultados de dimorfismo sexual e de comparações entre grupos.

- Bibliografia recomendada

Aleixo, A. 2007. Conceitos de espécie e o eterno conflito entre continuidade e operacionalidade: uma proposta de normatização de critérios para o reconhecimento de espécies pelo Comitê Brasileiro de Registros Ornitológicos. Revista Brasileira de Ornitologia 15 (2): 297-310, disponível em: http://www4.museu-goeldi.br/revistabrornito/revista/index.php/BJO/article/viewFile/2914/pdf_483, acessado em 01 de junho de 2017.

===== Proposta B =====

Função: polig.dist()

Essa proposta utilizaria uma tabela de dados para plotar coordenadas geográficas de uma determinada espécie em estudo (ou espécies) em um mapa com registros de ocorrências, e posteriormente adicionaria como uma segunda camada um polígono com a área de distribuição geográfica da espécie em questão, que seria construído basicamente usando os registros de ocorrência extremos interligados entre si por uma linha. Esse polígono visualmente se assemelha a uma “nuvem de distribuição” que seria muito útil para estimarmos outros pontos de ocorrências para a espécie em estudo, que não os já previamente coletados pelo pesquisador. Adicionalmente, um argumento poderia ser criado junto ao polígono para evidenciar as áreas com mais registros de ocorrência, como “pontos de calor” que gerassem um gradiente de cores mais escuras para mais claras, ou de cores mais quentes para mais frias respectivamente. Posteriormente esse polígono poderá ser comparado visualmente com outras ferramentas semelhantes já existentes, como por exemplo em estudos com aves, o “BirdLife’s species range maps”. Tal ferramenta foi desenvolvida pela BirdLife International juntamente com a NatureServe para exibir a distribuição das aves do mundo de acordo com os dados do “BirdLife Datazone”. Esses mapas são disponibilizados também mediante solicitação, em formato shapefile (.shp) para fins não comerciais para qualquer pesquisador que deseje consultar a distribuição geográfica de uma ou mais espécies de aves (ver um exemplo abaixo). Um shapefile como esse por exemplo poderá ser adicionado como uma terceira camada ao mapa e ao polígono de distribuição de uma determinada espécie já criados pelo usuário com a função polig.dist(), com o intuito de confrontar a distribuição já conhecida em literatura para a espécie em questão.

exemplo_pulsatrix_birdlife.png

(fonte: http://datazone.birdlife.org/species/factsheet/spectacled-owl-pulsatrix-perspicillata/distribution)

- Critérios de entrada

Um arquivo .txt ou .csv contendo uma tabela com coordenadas geográficas (em formato decimal), onde a latitude e longitude estarão dispostas em colunas separadas, e em uma terceira coluna as respectivas espécies estudadas.

- Retorno dos resultados

A função retornará dentro do ambiente do R um mapa plotando todos os registros geográficos apresentadas para cada espécie. Considerando que poderão ser diversas espécies estudadas, diversos mapas serão então exibidos em janelas separadamente. Ademais, será adicionado um polígono sobre o mapa que unirá todos os pontos extremos de ocorrência de cada espécie, que representará finalmente a área total de distribuição de sua respectiva espécie. Um argumento adicional poderia criar um arquivo em formato shapefile (.shp) ou uma imagem (p.ex. .JPEG, .TIFF) para que pudesse ser exportado para outros programas.

- Bibliografia utilizada

BirdLife International (2017) Species factsheet: Pulsatrix perspicillata. Downloaded from http://www.birdlife.org on 01/06/2017.

Comentários Melina

Olá Aline. Analisando suas propostas, achei que a proposta B parece mais interessante e desafiadora, pois trabalhará com mapas e shapefiles no R, algo que pode não ser trivial. A proposta A, aparentemente é muito simples e um pequenos script já seria o suficiente.

Para a proposta B, acho que você tem que se atentar aos arquivos de mapas que serão necessários para se plotar os pontos de ocorrência por cima, e como “cortar” o mapa para apresentar apenas as região dos pontos de amostragem. Acho que alguns argumentos da função podem ser úteis para o usuário tiver algum poder de escolha de como vai ficar o mapa final.

Pensei numa ideia que você poderia ver se conseguia implementar na sua proposta B: se eu tenho duas espécies que tem distribuições sobrepostas, talvez fosse interessante quantificar essa sobreposição, ou seja quanto (por exemplo em porcentagem) da distribuição da espécie A está sobreposta à distribuição da espécie B, e vice-versa. Talvez uma tabelinha de sobreposição fosse interessante.

Enfim, acho que valeria mais a pena desenvolver a proposta B pois tem mais potencial!

Qualquer coisa, estou à disposição!

Resposta de Aline

Oi Melina! Obrigada pelos comentários! Vou investir então na proposta B. Bacana essa ideia que você apresentou sobre essa proposta, vou colocar a “mão na massa” e ver então como conseguiria fazer isso, possivelmente logo mais devo escrever para vocês pedindo um help! ;-)

Quanto à sua última frase, só pra confirmar: seria a B que você estaria se referindo então, certo?

Aline

Oi Aline, eu me enganei, escrevi errado nos dois últimos parágrafos! (já consertei)

Bom trabalho,

Melina.

Código da função: polig.dist()

dados<-read.table("dados.csv", header=TRUE, sep=";", as.is=TRUE) # leitura do banco de dados
head(dados) # conferência do banco de dados

polig.dist <- function (dados,x,y,spp)

	{
	  x <- dados$x           # coluna de longitude
	  y <- dados$y           # coluna de latitude
	  spp <- dados$spp       # coluna de espécies

	  if(!is("data.frame"))  # os dados estão em formato "data.frame"?
	{
	  stop("The input needs to be a "data.frame") # quando os dados não estão em um data.frame a função não prossegue
	}
	  if(!exists("x")) # existe a coluna "x"?
	{
	  stop("The column "x" was not found") # quando a coluna "x" não é encontrada a função não prossegue
	}  
	  if(!exists("y")) # existe a coluna "y"?
	{
	  stop("The column "y" was not found") # quando a coluna "y" não é encontrada a função não prossegue
	}
	  if(!exists("spp")) # existe a coluna "spp"?
	{
	  stop("The column "spp" was not found") # quando a coluna "spp" não é encontrada a função não prossegue
	} 
	  if(rmNA==TRUE) # existem NA's nos dados?
	{
	  dados=(na.omit(dados)) # quando positivo, os valores de NA são omitidos pela função
	  dif=length(dados)-length(dados) # diferença do tamanho original do data.frame em comparação com os removidos
	  cat("\t", dif, "valores NA foram removidos\n") # quantos valores de NA's foram removidos no final
	}
	  else # quando negativo, o data.frame permanece igual
	{
	  dados=dados # data.frame sem alteração
	}

	install.packages("sp", dep=TRUE) # instala o pacote "sp" necessário para execução da função

	library(sp) # chama o pacote "sp"
	
	install.packages("ggplot2", dep=TRUE) # instala o pacote "ggplot2" necessário para execução da função

	library(ggplot2) # chama o pacote "ggplot2"
	
	install.packages("ggspatial", dep=TRUE) # instala o pacote "ggspatial" necessário para execução da função
	
	library(ggspatial) # chama o pacote "ggspatial"

	world <- map_data("world") # extrai o shapefile "world" do pacote "ggplot2"
      
	ggplot() + geom_polygon(data = world, aes(x = long, y = lat, group = group), colour="gray",fill = "gray85") +   # comando que incorpora o shapefile "world"
  	 
	  coord_cartesian(ylim=c(-60, 10), xlim=c(-30,-80)) + # define as coordenadas de acordo com o zoom para a América do Sul 
  	 
	  geom_point(data=dados,aes(x=x,y=y,colour = spp, fill = spp),size=1.5,alpha=0.6,show.legend=TRUE,na.rm=TRUE)+ # plota os pontos das espécies de acordo com sua idenficação na coluna "spp" 
        
	  stat_density_2d(data=dados, aes(x=x, y=y, group = spp, fill = spp),geom="polygon", alpha=0.14, n=500, contour=TRUE) # plota a estimativa de densidade de Kernel de acordo com a espécie

       } 

Função:poligdist.r

Banco de dados para utilização: dados.csv

Help da função: polig.dist()

polig.dist					package: none					R Documentation


Função que plota as coordenadas geográficas de uma(s) espécie(s) em um mapa, juntamente com sua distribuição geográfica dada pela estimativa de densidade de Kernel. 


Description:
	
	A função necessita da entrada de um arquivo .txt ou .csv, que posteriormente será convertido pelo R em 
        formato data.frame. A primeira coluna deve ser nomeada por "spp" que contenha a relação de espécies  
        (identificação ex. sp1, sp2..). A segunda coluna, de nome "x" deve conter a longitude em formato decimal,
	e por último, a terceira coluna de nome "y" deverá conter a latitude, também em formato decimal. 

Usage:

	polig.dist (dados)


Arguments:

	dados: data.frame com três colunas
	x: coluna do data.frame "dados" com valores de longitude em formato decimal, classe "numeric"
	y: coluna do data.frame "dados" com valores de latitude em formato decimal, classe "numeric"
	spp: coluna do data.frame "dados" com a identificação das espécies, classe "character"


Details:

	Para execução dessa função, os pacotes "sp", "ggplot2" e "ggspatial", serão instalados automaticamente. 
        O mapa exibe um zoom para a região da América do Sul, tendo sido previamente já definido para essa região  
        pela função polig.dist(), portanto espécies não ocorrentes nessa região não serão exibidas no mapa.


Value:	

	Ao final da função será aberta uma janela contendo o mapa com os pontos de ocorrência e a estimativa de   
        densidade de Kernel. Tal mapa não é salvo em um objeto, logo é necessário que o usuário o salve 
        manualmente.

Author:

	Aline Corrêa

References:

	https://paleolimbot.github.io/ggspatial/
	https://www.rstudio.com/wp-content/uploads/2015/03/ggplot2-cheatsheet.pdf
	http://egallic.fr/coordinates-of-hot-spots/
	
Examples:

	dados<-read.table("dados.csv", header=TRUE, sep=";", as.is=TRUE)
	polig.dist (dados, x, y, spp)
05_curso_antigo/r2017/alunos/trabalho_final/aline.h.correa/trabalho_final_de_aline_h._correa.txt · Última modificação: 2020/08/12 06:04 (edição externa)