Traduções desta página:

Ferramentas do usuário

Ferramentas do site


05_curso_antigo:alunos2012:alunos:trabalho_final:magaiarsa:start

Marília Palumbo Gaiarsa

ma.jpg

Sou mestre em Ecologia pela Usp, e no momento estou no limbo. Pretendo começar meu doutorado no ano que vem e trabalhar com Cascatas Tróficas, mas tudo ainda está no mundo das idéias…

exec

Trabalho final

Eu gostaria de fazer uma função que fosse facilitar alguma análise que tenho que fazer, então tenho ideias que não sei se são muito simples, muito complexas, ou inúteis pois já tem pacotes que fazem isso e muito mais…

1) Autocorrelação de dados espaciais

Eu tenho dois conjuntos de dados espaciais: um com a localização duas espécies de sapos e outro com a localização de duas espécies de cobras, que comem esses sapos. Eu gostaria de testar a hipótese de que as cobras estão localizadas onde existem mais registros de sapos. Pelo que andei lendo e conversando, existem diversos programas e pacotes que fazem isso. Assim, a minha proposta seria fazer uma superfunção que “lesse” os dados vetoriais, executasse a análise de correlação espacial e gerasse os valores (?) e /ou gráficos (?) diagnósticos. Essa função poderia ser utilizada por qualquer pessoa que precisasse testar correlação entre dados espaciais, diminuindo o numero de etapas necessárias.

2) “Procura e acha”

Minha segunda ideia envolve três arquivos de dados diferentes: o primeiro é de marcação e recaptura de indivíduos no qual consta o número da foto (identificação por marcas naturais) e o “nome” do indivíduo. O segundo é uma planilha na qual estão os dados de campo bruto (além dos números das fotos existem dados de uso de ambiente). Nesta planilha existe um código que “conversa” com a terceira planilha, um arquivo do arcview com a localização desses bichos em um mapa. O objetivo dessa função seria retornar a localização dos indivíduos “nomeados” no mapa, já que na planilha de recaptura não constam os códigos, apenas as fotos que foram utilizadas na identificação do indivíduo.

Comentários

Não tem problema nenhum se já há pacotes que façam o que vc propôs. É até legal, pois vc pode passar os dados pela sua função e pelo pacote, e comparar resultados.

A primeira propostas depende de conhecimento das análises de correlação espacial, cuidado para que isto não tome muito tempo. Uma alternativa interessante são randomizações, veja com o Alexandre o procedimento 'torus test'. De toda forma, antes de iniciar defina claramente entradas e saídas de sua função.

A segunda me parece muito específica para uma planilha de dados que vc tem. Pode ficar interessante se vc conseguir generalizar.

Comentário da Marília

Conversando com o Alê e o Paulo decidi mudar minha função. A ideia #3 é fazer uma função que calcule o “grau de singularidade ecológica” (EO, Ecological Oddity, Redding et al. 2010) de um conjunto de espécies, definido como “distância absoluta do fenótipo médio”. O input seria um data frame com espécies nas linhas e variáveis nas colunas. A função deve logar as variáveis, e retornar uma matriz com os valores de EO por espécie ([valor da espécie – mediana], por categoria). Essa nova matriz deve conter uma coluna adicional, que seria as somas dos EOs por espécie. Essa função poderia ser utilizada com qualquer conjunto de dados para obter o grau de singularidade ecológica de um grupo de espécies.

Redding, D.W., Dewolff, C.V & Mooers, A.Ø. 2010. Evolutionary distinctiveness,threat status, and ecological oddity in primates. Conservation Biology, 24(4): 1052-8.

Função final

HELP

eco.odd                package:unknown                R Documentation

~~ Cálculo da similaridade ecológica - Ecological Oddity (Redding et al. 2010) ~~

Descrição:

Calcula a similaridade ecológica - Ecological Oddity - conforme proposto por Redding et al. (2010).

Uso:

eco.odd(x, N). 	

Argumentos:

x		data frame ou matriz com os dados brutos.
N 		argumento numérico indicando o número da última coluna na qual constam dados contínuos.


Detalhes:
O data frame com os dado brutos deve ser importado utilizando header = TRUE, e row.names=1, de modo que as espécies estejam indicadas nas linhas e as variáveis utilizadas para calcular a singularidade ecológica estejam nas colunas. 
É necessário ainda, que o arquivo esteja organizado com os dados contínuos nas primeiras colunas e os categóricos nas últimas. 
O valor de singularidade ecológica só será calculado para as espécies para as quais no mínimo 50% dos dados estiverem disponíveis. 

Valor:
data: retorna uma matriz com os valores de singularidade ecológica por espécie e por variável, com os nomes do data frame original das espécies e das variáveis. 

Ecological Oddity: retorna o valor de singularidade ecológica por espécie.

Rank EO: retorna os valores de singularidade ecológica ordenados por espécie em ordem crescente, excluindo as espécies para as quais não foi possível calcula-lo. 
 
Author(s):

Marília P. Gaiarsa
gaiarsa.mp@gmail.com

Agradeço à Hamanda Badona Cavalhieri pela ajuda, principalmente com os “fors”.

References:
Redding, D.W., Dewolff, C.V & Mooers, A.Ø. 2010. Evolutionary distinctiveness,threat status, and ecological oddity in primates. Conservation Biology, 24(4): 1052-8.

Exemplos:
dados<-as.data.frame(matrix(c(23,34,56,12,50, 3.4, 2,3,4,2.4, 3,4,5,2,3,"x", "y", "z", "x", "y", "a","b","a","b","a"),5,5)) #criando um vetor com dados 
 
colnames(dados)<-paste("variavel",1:5)

rownames(dados)<-paste("Sp",1:5)

eco.odd(dados,3)

Código da função

eco.odd<-function(x, N)
{
  
  for(n in 1:N)
  {
    x[,n]<-as.numeric(x[,n])
  }
  data.cont<-data.frame(log10(x[,1:N]))
  data.cat<-data.frame(x[(N+1):dim(x)[2]])
  for(h in 1:dim(data.cat)[2]){
    data.cat[,h]<-as.factor(data.cat[,h])
  }
  
  na.cont<-rep(NA,dim(data.cont)[2])##criando um vetor para o resultado do for
  for(i in 1:length(na.cont)){ ## fazendo um for com as medianas
    na.cont[i]<-median(data.cont[,i], na.rm=TRUE)
  }
  dif.cont<-abs(sweep(data.cont, 2, na.cont, FUN="-"))
  
  na.cat<-as.data.frame(matrix(NA, dim(data.cat)[1], dim(data.cat)[2]))
  for(i in 1:dim(data.cat)[2]){
    CAT<-1-(table(data.cat[,i])/dim(data.cat)[1])
    temp<-CAT[match(data.cat[,i],names(CAT))]
    na.cat[,i]<-temp
  }
  colnames(na.cat)<-colnames(data.cat)
  data.all<-data.frame(dif.cont,na.cat)
  data.all.NA<-data.frame(data.all, sumNA=rowSums(is.na(data.all)) )
  minimo<-dim(data.all)[2]/2
  EO<-c(rep(NA,dim(data.all)[1]))
  names(EO)<-rownames(data.all)
  for(r in 1:dim(data.all)[1])
  {
    if(data.all.NA[r,"sumNA"]<=minimo)
    {EO[r]<-(sum(data.all[r,], na.rm=TRUE)/sum(!is.na(x[r,])))
    }
    
    if(data.all.NA[r,"sumNA"]>minimo)
    {
      EO[r]<-NA
    }
  }
  EOsort<-sort(EO)
  return  (list("data"=data.all, "Ecological Oddity"=EO, "Rank EO"=EOsort))
}

Arquivos

eco_odd_marilia.r

help_eco-odd.txt

05_curso_antigo/alunos2012/alunos/trabalho_final/magaiarsa/start.txt · Última modificação: 2020/08/12 06:04 (edição externa)