Traduções desta página:

Ferramentas do usuário

Ferramentas do site


05_curso_antigo:alunos2012:alunos:trabalho_final:marina.fernandez:start

Marina de Oliveira Fernandez

marina_1.jpg

Mestranda em Zoologia no IB, USP.

O título do meu projeto é “Dinâmica sazonal da comunidade de cnidários bentônicos em larga escala latitudinal da costa brasileira”, sob orientação do Prof. Antonio Carlos Marques.

exec

Propostas de Trabalho Final

Proposta A

Meu projeto de mestrado consiste em investigar se o recrutamento sazonal de cnidários bentônicos flutua de maneira estocástica ou se há padrões diferenciados e persistentes em diferentes latitudes. Para isso estudo a sazonalidade do recrutamento utilizando placas que são colocadas no mar e nas quais as espécies se assentam e sobrevivem por 3 meses, quando as retiro do mar e coloco novas. Assim, possuo dados do número de ocorrências das espécies em diferentes períodos. Minha proposta é criar uma função que me devolva valores de riqueza e abundância das espécies para cada período e verifique se há diferenças nas composições das assembleias entre os períodos. Se possível, gostaria de fazer uma função que me retornasse quais espécies estão influenciando mais nas diferenças entre os períodos.

Proposta B

Como possuo dados de epibiose das espécies, a proposta B seria criar uma função que verifica se há preferência das espécies por determinado hospedeiro.

Comentários

PI

As duas ideias são atraentes e bem fundamentadas. O potencial limitante é o quanto vc vai já está familiarizada com os procedimentos estatísticos que pretende implementar nesta funções. Assim, para a proposta 1 vc precisa definir uma maneira de comparar as assembleias, e como avaliar o efeito de cada espécie sobre as eventuais diferenças. Se ainda não tem ideia de como fazer, avalie se terá tempo para estudar isso e depois implementar a rotina em uma função de R.

O mesmo vale para a segunda proposta que, além disso, deve ganhar generalidade (e.g. uma função para avaliar preferência/escolha por animais).

Comentário Marina

Optei pela proposta B.

Código da função

### Marina de Oliveira Fernandez - 2012 - Depto de Zoologia - IBUSP
### Função preferida.sp
### Verifica preferência/escolha por espécies

preferida.sp <- function(x)
{
  if(nrow(x)<=1)
  {
    cat("\t A tabela deve conter no mínimo 2 linhas.\n\t Nenhum valor foi calculado.\n")
  }
  if(ncol(x)<=1)
  {
    cat("\t A tabela deve conter no mínimo 2 colunas.\n\t Nenhum valor foi calculado.\n")
  }
  if(sum(is.na(x)>0))
  {
    cat("\t Valor(es) NA(s) presente(s).\n\t Nenhum valor foi calculado.\n")
  }
  if(sum(x<0, na.rm=TRUE)>0)
  {
    cat("\t Valor(es) negativo(s) presente(s). \n\t Nenhum valor foi calculado.\n")
  }
  if((dim(x)[1]>1)&(dim(x)[2]>1)&(sum(is.na(x))==0)&(sum(x<0)==0))
  {
    # soma os totais das linhas e colunas:
    total.colunas <- apply(x,2,sum)
    total.linhas <- apply(x,1,sum)
    total.geral <- sum(x)
    
    # transforma em matriz:
    x <- as.matrix(x)
    
    # cria uma matriz do mesmo tamanho,onde serão colocados os valores esperados:
    nvalores <- ncol(x)*nrow(x)
    nvalores
    matriz.esperada <- matrix(rep(NA,nvalores), ncol=ncol(x))
    
    # coloca os valores esperados na matriz criada:
    for(i in 1:nrow(matriz.esperada))
      for(j in 1:ncol(matriz.esperada))
      {
        matriz.esperada[i,j] = ((total.linhas[i]*total.colunas[j])/total.geral)
      }
    
    # subtrai a matriz observada da esperada, eleva ao quadrado e divide pela esperada:
    tabela.qui <- ((x-matriz.esperada)^2/matriz.esperada)
    # soma os valores da tabela e encontra o valor do qui-quadrado:
    valor.qui <- sum(tabela.qui)
    # calcula os graus de liberdade:
    gl <- (nrow(x)-1)*(ncol(x)-1) 
    # calcula o valore de P:
    valor.p <- pchisq(valor.qui,gl, lower.tail=FALSE)
    
    if(valor.p>=0.05)
    {
      cat("\t Valor de p =",valor.p,"\n\t Não há diferença significativa entre as observações.\n\n")
    } 
    
    if(valor.p<0.05)
    {
      cat("\t Valor de p =",valor.p,"\n\t Há diferença significativa entre as observações.\n\n")
      
      # cria matriz onde serão colocados os resultados de (1-plinha)(1-pcoluna):
      matriz.intermediaria <- matrix(rep(NA,nvalores), ncol=ncol(x))
      
      # coloca os resultados na matriz intermediaria:
      for(i in 1:nrow(matriz.intermediaria))
        for(j in 1:ncol(matriz.intermediaria))
        {
          matriz.intermediaria[i,j]= (1-(total.linhas[i]/total.geral))*(1-(total.colunas[j]/total.geral))
        }
      
      # cria a matriz dos resíduos padronizados de cada célula:
      matriz.residuos <- (x-matriz.esperada)/sqrt(matriz.esperada*matriz.intermediaria)
      
      # encontra os valores maiores que o intervalo de confiança -2<x<2
      logica.g <- matriz.residuos>=2
      which(logica.g)
      tam.g <- length(which(logica.g))
      
      # cria um vetor para colocar os nomes das linhas com os TRUE:
      nomes.linhas.g <- rep(NA,tam.g)
      
      # obtém os nomes das linhas com TRUE:
      for(i in 1:tam.g)
      {
        y = which(logica.g)[i]
        
        k <- arrayInd(y, dim(logica.g)) 
        
        nomes.linhas.g[i] = rownames(logica.g)[k[,1]]  
      }
      
      # cria um vetor para colocar os nomes das colunas com os TRUE:
      nomes.colunas.g <- rep(NA,tam.g)
      
      # obtém os nomes das colunas com TRUE
      for(i in 1:tam.g)
      {
        y = which(logica.g)[i]
        
        k <- arrayInd(y, dim(logica.g)) 
        
        nomes.colunas.g[i] = colnames(logica.g)[k[,2]]  
      }
      
      # Devolve na tela quais espécies tem "preferências":
      for (i in 1:tam.g)
      {
        cat("\t A espécie",nomes.linhas.g[i],"prefere/escolhe",nomes.colunas.g[i],".\n\n")
      }
      
      # encontra os valores menores que o intervalo de confiança -2<x<2
      logica.p <- matriz.residuos<=(-2)
      which(logica.p)
      tam.p <- length(which(logica.p))
      
      # cria um vetor para colocar os nomes das linhas com os TRUE:
      nomes.linhas.p <- rep(NA,tam.p)
      
      # obtém os nomes das linhas com TRUE:
      for(i in 1:tam.p)
      {
        y = which(logica.p)[i]
        
        k <- arrayInd(y, dim(logica.p)) 
        
        nomes.linhas.p[i] = rownames(logica.p)[k[,1]]  
      }
      
      # cria um vetor para colocar os nomes das colunas com os TRUE:
      nomes.colunas.p <- rep(NA,tam.p)
      
      # obtém os nomes das colunas com TRUE
      for(i in 1:tam.p)
      {
        y = which(logica.p)[i]
        
        k <- arrayInd(y, dim(logica.p)) 
        
        nomes.colunas.p[i] = colnames(logica.p)[k[,2]]  
      }
      
      # Devolve na tela quais espécies "evitam" ou tem pouca relação com outras: 
      for (i in 1:tam.p)
      {
        cat("\t A espécie",nomes.linhas.p[i],"evita/tem pouca relação com",nomes.colunas.p[i],".\n\n")
      }
      resultados <- list(valor.qui, gl, valor.p)
      names(resultados) <- c("valor do qui-quadrado calculado", "graus de liberdade", "valor de p")
      return(resultados)
    }
  }
}

Página de ajuda da função

preferida.sp             package:nenhum             R Documentation


Avaliar preferência por animais.


Descrição:

A função verifica se há preferência ou escolha de espécies por uma outra
determinada espécie ou grupo (por exemplo escolha de um epibionte por 
determinada espécie para assentamento). Os cálculos são feitos a partir 
de uma tabela de contingência contendo o número de observações de cada
espécie associada a outra.
 

Uso:

preferida.sp(x)


Argumentos:

x	Um data frame ou uma matriz, com ao menos duas linhas e duas colunas.
	Deve conter apenas números positivos.


Detalhes:

A função faz, primeiramente, um teste de qui-quadrado para verificar se há 
diferenças significativas entre as observações. Caso o valor de p seja < 0.05,
a função calcula os resíduos padronizados em cada célula. Os resíduos que 
estiverem fora de um intervalo de confiança são considerados como provenientes 
de observações significantemente diferentes. Se positivos, a função mostra na 
tela quais são as espécies que apresentaram "preferência" por determinada espécie.
Se negativos, a função mostra na tela quais são as espécies que "evitaram" 
determinada espécie.


Valor:

Uma lista contendo os seguintes componentes:

  estatística:		o valor da estística-teste de qui-quadrado.

  graus de liberdade:	os graus de liberdade do teste estatístico de qui-quadrado.

  valor de p:		o valor de p do teste.


Avisos:

Caso os dados inseridos sejam um data frame ou uma matriz com apenas uma linha 
ou uma coluna, aparecerá uma mensagem avisando e os cálculos não serão feitos.
Caso faltem valores nos dados inseridos ou estes apresentem número negativos,
aparecerá uma mensagem avisando e os cálculos não serão feitos.


Autor:

Marina de Oliveira Fernandez

mafernandez_bio@hotmail.com


Referências:

Agresti, A. (2007) An Introduction to Categorical Data Analysis,
2nd ed., New York: John Wiley & Sons.


Veja também:

Para o cálculo do qui-quadrado apenas, veja chisq.test.


Exemplo:

# Exemplo
exemplo <- matrix (c(17,22,40,20,15,25,34,27,25,17,29,31,28,13,33), ncol=3)
colnames(exemplo) <- c("Esponja", "Ascídia", "Briozoário")
rownames(exemplo) <- c("sp1","sp2","sp3","sp4","sp5")
preferida.sp(exemplo)

Arquivo da função

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