Traduções desta página:

Ferramentas do usuário

Ferramentas do site


05_curso_antigo:r2017:alunos:trabalho_final:ferni211:start

foto.png

Maria Fernanda De la Fuente

Doutoranda no programa de Pós-graduação em Etnobiologia e Conservação da Natureza na UFRPE.PPGETNO Membro do Laboratório de Etologia Teórica e Aplicada. LETA

Minha área de interesse e atuação é o comportamento animal, atualmente pesquiso sobre o forrageio social e análise de redes sociais em primatas de vida livre.

Exercícios

Trabalho Final

PROPOSTA A – Hierarquia de dominância

Contextualização: Ao estudar o comportamento animal dentro de um grupo, podemos nos deparar com interações e associações entre os indivíduos que nos indicam a presença de algum tipo de estrutura hierárquica. Analisar estes contextos é muito importante para entender melhor sobre a estrutura social do grupo/espécie e interpretar adequadamente os comportamentos entre os indivíduos do grupo. A hierarquia de dominância dentro de um grupo pode ser analisada através de várias medições de relações diáticas (dominante-subordinado), como por exemplo, encontros agonísticos, prioridade a recursos, entre outros.

Tarefa da função: A partir de interações diáticas, criar uma matriz de dominância, calcular o índice de hierarquia linear do grupo, e calcular o índice de dominância de cada membro do grupo (posição hierárquica de cada indivíduo comparado aos outros).

Objeto de entrada da função: Objeto de entrada será um data-frame com os dados das interações entre as díades em cada linha, no qual a primeira coluna terá a identidade do emissor (ou “ganhador”) da interação, na segunda coluna a identidade do receptor (ou “perdedor”) da interação, e na terceira coluna o número de interações em que o emissor “ganhou” do receptor.

Objeto de saída: a função vai retornar uma lista com os seguintes resultados: 1. Matriz de dominância do grupo, 2. Resultado do índice de hierarquia linear do grupo, e 3. Resultados dos índices de dominância de cada membro do grupo.

Comentários Lucas

Oi, Maria!
Eu gostei mais dessa proposta e ela parece, de fato, interessante. Contudo, gostaria de mais algumas informações teóricas para entender sua ideia melhor:
1. O que é uma matriz de dominância do grupo?
2. Eu acho que entendo o que seja o índice de hierarquia do grupo, mas como ele é calculado? Existe uma fórmula já para isso?
3. Também entendo (acho!) o que seja índice de dominância de cada membro do grupo mas, assim como na pergunta anterior, já existe uma fórmula para calcular esse índice?

Agora, vamos falar sobre sua função, mas com um cunho mais técnico.
Eu achei ela meio simples e acredito que ela pode ser melhorada para facilitar a vida do pesquisador. Eu estava aqui pensando e, a meu entender, seu objeto de entrada é algo que a pessoa tem que fazer antes de usar a função. Você vai precisar me ajudar aqui, mas como etólogo que não sou, eu imagino que uma tabela de coleta de dados para um estudo de comportamento como o que você apresentou tenha 3 colunas: uma para o evento de interação, a outra para o emissor e a terceira para o receptor. E se a gente fizesse sua função pegar essa tabela, que veio do campo, e somar automaticamente quantas interações houve entre cada dupla de indivíduos e quantas vezes quem ganhou de quem para, a partir daí, criar o dataframe que você precisa para calcular os objetos de retorno de sua função? Acho que assim ela fica mais útil, mais generalizável e mais desafiadora. O que acha?

É isso, qualquer coisa, tamo aí!
Abraços!
Lucas

Resposta Comentários

Oi Lucas, obrigada pela resposta! Vou tentar responder tuas perguntas:

1. Para se adequar ao conceito de estrutura, a dominância deve ser estabelecida como uma relação binaria dentro do conjunto de membros. Onde, por exemplo, se individuo A domina o indivíduo B e o indivíduo B domina C, então A>B e B>C. Esta estrutura pode ser representada por uma matriz de relações de dominância, na qual a identidade de todos os indivíduos se encontram nas linhas e colunas, sendo que as linhas representam os emissores ou “ganhadores” da interação e nas colunas os receptores ou “perdedores”. Dentro da matriz teremos então o número de interações de cada indivíduo com todos os outros indivíduos do grupo, onde o indivíduo da linha domina o indivíduo da coluna, caso não haja interações entre os indivíduos o valor na matriz seria 0.

2. Sim, existe uma fórmula para calcular o índice da hierarquia linear, é o índice de linearidade de Landau. No entanto, estou pesquisando para ver se há outras formulas e escolher a mais apropriada. Índice Onde: n=número de animas no grupo; Va= número de animais que o indivíduo “a” domina.

3. Também existe uma formula simples para calcular o índice de dominância de cada membro dentro do grupo (índice de Coulon). Índice de dominância= G/G+P. Onde: G=número de interações “ganhas”; e P = número de interações “perdidas” com outros indivíduos.

Sobre a função: A coleta de dados etológicos em campo é feita, por exemplo, com a ajuda de um gravador de voz ou em planilhas em folhas de papel mesmo (etograma). Das duas formas, o pesquisador precisa passar os dados de campo para planilha no computador (a não ser que tenha um tablet ou algo assim). Na verdade, eu tinha pensado sobre adicionar na função a opção de somar o total de interações entre cada dupla, como você sugeriu, até porque essa é a informação necessária para cria a matriz de dominância de qualquer forma. Só fiquei com a dúvida se é possível somar os valores da coluna do número de interações com relação as outras duas colunas (uma vez que em uma tem a identidade do emissor e na outra a do receptor)? Ou seria preciso fazer mais uma coluna com as duplas da interação (emissor-receptor) em cada linha?

Comentários Lucas

Oi, Maria! Obrigado pela resposta e desculpa a demora em responder. Fiquei sem internet ontem.

Obrigado também pelas explicações! Pude entender sua proposta bem melhor agora!
Sim, ter que digitalizar tabelas de campo é algo bastante comum pra gente… rs Mas o que eu queria dizer, e aí peço desculpas se não fui claro, era exatamente isso: em vez da pesquisadora (sim, mulheres na ciência! Yaay!) criar uma tabela com essas três colunas que você apresentou como sendo o input, a pesquisadora fica a cargo de, “apenas”, digitalizar essa matriz. Sua função, então, teria como input essa essa matriz, criando esse dataframe com as três colunas automaticamente e, a partir, daí calcular os índices que você propõe.

Essa minha sugestão embasa-se numa tentativa de tornar a vida da pesquisadora mais fácil, porque assim ela teria apenas uma função (digitalizar a matriz) e não duas (digitalizar a matriz e criar o dataframe), tornando-se também menos error-prone. Contudo, preciso admitir que a forma de fazer isso requer um certo conhecimento de operações matriciais de que eu não disponho com segurança. Apesar disso, a gente tem uma brincadeira no R: não é se é possível fazer, mas como fazer ;)

De qualquer forma, vou pedir a minhas e meus colegas de monitoria que deem uma olhada na sua proposta também e analisem a viabilidade dela, tudo bem? Assim você tem mais segurança sobre qual caminho seguir.

Qualquer coisa, só falar!
AbRaços,
Lucas

PROPOSTA B – Confiabilidade entre observadores

Contextualização: Muitas vezes, em estudos experimentais ou a longo prazo, os dados de campo são coletados por diferentes pesquisadores. Se os observadores não coletam/observam exatamente da mesma maneira determinado fenômeno, haverá um decréscimo na confiabilidade e validade dos dados coletados, e consequentemente do estudo em geral. Isto pode acontecer especialmente no estudo do comportamento animal, uma vez que a percepção e interpretação dos observadores pode estar influenciada por diferentes fatores e experiências individuais. Para evitar este problema, antes do início da coleta de dados é recomendado realizar um estudo piloto, no qual todos os observadores coletam os mesmos dados ao mesmo tempo, mas de forma individual e independente, para depois executar um teste de concordância entre eles.

Tarefa da função: Calcular a confiabilidade entre observadores através de teste de concordância e calcular a probabilidade de que a mesma seja acima do esperado ao acaso.

Objeto de entrada da função: Um data-frame em que as linhas são as observações realizadas e nas colunas os diferentes observadores. Como argumento da função entra o teste de concordância a ser calculado.

Objeto de saída: o resultado do teste de concordância e o p-value.

Comentários Lucas

Ois!
Confesso que achei que essa sua proposta poderia ser mais desafiadora. Se entendi corretamente, ela vai apenas retornar o valor de um certo teste estatístico (qual seria? Kappa?), não oferecendo um diferencial. Dessa forma, aconselho focar para a proposta A.

Página de Ajuda

 domi		              package:nenhum                     R Documentation

Cria matriz de dominância, calcula o índice de dominância individual e o índice 
de hierarquia linear do grupo com base a dados de interações diáticas fornecidos 
pelo usuário.

Description:

A partir de um dataframe, cria matriz de dominância com o número de interações 
entre cada par de indivíduos no grupo. Calcula o índice de dominância (Coulon) 
para cada indivíduo do grupo e o índice de hierarquia linear (Landau) do grupo. 
Retorna uma lista com a matriz de dominância, os índices de Coulon e o índice de 
Landau.

Usage:

domi(dados, ind)

Arguments:

dados: Dataframe com 3 colunas que deve conter na primeira coluna a identidade 
dos emissores das interações; na segunda coluna a identidade dos receptores das 
interações; e na terceira coluna o número de interações observadas entre o emissor 
e receptor. Cada linha pode ser uma observação ou a somatória de varias observações
entre emissor e receptor (depende do método de observação em campo).

ind: valor numérico referente ao número total de indivíduos no grupo, deve ser 
número inteiro. 

Details:

Todos os argumentos da função devem ser fornecidos.

Value:

A função domi retorna uma lista com os seguintes componentes:

comp1: Matriz de dominância. Nas linhas da matriz se encontram todos os indivíduos 
do grupo que emitiram a interação (emissores), e nas colunas se encontram todos os 
indivíduos do grupo que receberam a interação (receptores). Dentro da matriz se 
encontram o número de interações entre todos os emissores e receptores do grupo.

comp2: Índices de dominância individual (Coulon). Neste componente da lista se 
encontram os índices de dominância de cada indivíduo, indicando a posição hierárquica 
de cada um dentro do grupo. Retorna valores de 0 a 1, quanto mais próximo de 1 significa 
que o animal é mais dominante do que os outros.

comp3: Índice de linearidade de Landau. A função retorna o índice de hierarquia 
linear do grupo. Podendo ser valores de 0 a 1, quanto mais próximo de 1 mais linear 
é a hierarquia do grupo, isto é, existe um indivíduo de alto ranking no grupo que 
domina todos os membros do grupo (A), o segundo no ranking (B) domina todos os indivíduos 
menos o A, o terceiro do ranking (C) domina todos os indivíduos exceto A e B, etc (A>B>C). 
Quando o índice é mais próximo de 0, a hierarquia é não linear, pois podem existir 
relações circulares entre os indivíduos (A>B, B>C, C>A), e indivíduos com o mesmo 
ranking de dominância (D=E).

Warnings:

A função é interrompida e retornam-se mensagens de erro quando o objeto de entrada 
não é um dataframe e quando o argumento 'ind' não é fornecido.

Author(s):

María Fernanda De la Fuente Castellón
ferni211@yahoo.com.ar

References:

Lehner P.N. 1996. Handbook of Ethological Methods. Second edition. Cambridge: 
Cambridge University Press. 672p.

Examples:

#Exemplo 1 
#criando vetores para incluir no dataframe
emissor<-c(rep("A", 32), rep("B", 110), rep("C", 102), rep("D", 27), rep("E", 13))
receptor<-c(rep("D", 21), rep("E", 11), rep("A", 41),rep("C", 1), rep("D", 37), rep("E", 31), rep("A", 17), 
rep("B", 14), rep("D", 12), rep("E", 59), rep("A", 3), rep("E", 24), rep("A", 13))
interacoes<-c(rep(1,284))  

#criando dataframe para exemplo com grupo de 5 individuos
exemplo<-data.frame(emissor, receptor, interacoes)
domi(exemplo, ind=5)

#Exemplo 2
#exemplo com objeto de classe errada (nao dataframe) 
data<-c(rep("A", 32), rep("B", 110), rep("C", 102), rep("D", 27), rep("E", 13))
domi(data, ind=5)

#Exemplo 3
#exemplo sem colocar o argumento do número de indivíduos no grupo (ind)
domi(exemplo)

Código da função

#funcao que a partir de dados sobre interacoes diáticas de individuos de um grupo cria uma matriz 
#de dominancia, calcula o indice de dominancia individual de cada membro do grupo (indice de Coulon) 
#e calcula o indice de hierarquia linear do grupo (indice de Landau)

domi<-function(dados, ind=y)
{ 
  #confere se o objeto 'dados' é um dataframe
  if(class(dados)!="data.frame") 
  #caso nao seja um dataframe, a funcao para e exibe mensagem de erro informando o problema
    stop("\n Objeto 'dados' nao e um dataframe.\n")
  
    #confere se esta faltando o argumento 'ind'
  if(missing(ind))
  #caso estiver faltando, a funcao para e exibe mensagem de erro
    stop("\n Número total de individuos no grupo ('ind') não fornecido.\n")

  #CRIANDO MATRIZ DE DOMINANCIA
  
  #identificando os individuos do grupo a partir dos niveis da primeira coluna do dataframe
  #para colocar a identificacao dos individuos nos nomes de linhas e colunas da matriz 
  id<-levels(dados[,1])
  #criando matriz de dominancia a partir de uma tabela com as informacoes do dataframe
  #neste momento o argumento ind informa o tamanho do grupo para criar o numero certo de
  #linhas e colunas da matriz, a soma das interacoes entre as diades preenche a matriz
  matdom<-matrix(table(dados[,1], dados[,2]), ncol = ind, nrow=ind, dimnames=list(id, id)) 
  
  #CALCULANDO O INDICE DE DOMINANCIA INDIVIDUAL (COULON)
  #formula do indice: numero de interacoes emitidas/numero de interacoes emitidas+numero de interacoes recebidas
  
  #soma das interacoes emitidas de cada individuo
  somaemi<-tapply(dados[,3], dados[,1], sum) 
  #soma das interacoes recebidas de cada individuo
  somarec<-tapply(dados[,3], dados[,2], sum) 
  #soma total das interacoes (emitidas e recebida) de cada individuo
  total<-(somaemi+somarec)
  #dividindo as interacoes emitidas pelo numero total de interacoes emitidas e recebidas de cada individuo
  coulon<-(somaemi/total) 
  
  #CALCULANDO INDICE DE HIERARQUIA LINEAR (LANDAU)
  {
    #renomeando matriz de dominancia para substituir numero de interacoes entre diades por 1, 0.5 ou 0, 
    #uma vez que a formula do indice é (12/((n^3)-n))*sum((v-((n-1)/2))^2), o v= numero de individuos que
    #cada animal domina. Desta forma, 1 é cada animal dominado, 0.5 é quando o numero de interacoes emitidas entre uma 
    #diade é igual (teriam o mesmo nivel de dominancia entre eles) e 0 quando o individuo nao é dominado 
    m<-matdom
    #cria dois loops para passar por todos os valores da matriz (combinacoes de linhas e colunas)
    for(i in 1:nrow(m)) 
      for(j in 1:nrow(m)) 
    #se o valor [emissor, receptor] é maior que o valor [receptor,emissor] entre uma diade,
    #o valor da primeira é substituido por 1
        if (m[i,j]>m[j,i]) m[i,j]=1 
    
    # se ambos valores entre a diade sao iguais, o valor das duas é substituido por 0.5
    else if(m[i,j]==m[j,i]) m[i,j]=m[j,i]=0.5 
    # se nao ocorre nada do anterior, substituir por zero
    else m[i,j]=0 
    #coloca zeros ao longo da diagonal da matriz, pois um individuo nao pode interagir com ele mesmo
    diag(m)=0 
    # soma os valores das linhas da nova matriz para calcular o numero de animais que cada individuo domina
    v<-rowSums(m) 
    # mostra o numero de individuos do grupo
    n<-nrow(m) 
    
    #formula para calcular o índice de Landau
    landau<-(12/((n^3)-n))*sum((v-((n-1)/2))^2) 
  }
  #criando lista com os objetos para retornar
  lista<-list(matdom, coulon, landau) 
  #nomeando os objetos da lista que retorna
  names(lista)<-paste(list("Matriz de dominância", "Indices de dominância individual (Coluon)", "Indice de hierarquia linear do grupo (Landau)")) 
  #funcao retorna a lista com a matriz de dominancia, o indice de Coulon e indice de Landau
  return(lista) 
}

Arquivos da função

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