Traduções desta página:

Ferramentas do usuário

Ferramentas do site


05_curso_antigo:r2015:alunos:trabalho_final:fsucunza:start

Federico_Sucunza

305466_2061117174485_825569967_n.jpg

Mestrado em Ecologia (UFJF) Título da minha tese “Fatores que afetam a detectabilidade da toninha (Pontoporia blainvillei) em estudos de estimativas populacionais” orientador Dr. Alexandre N. Zerbini

Proposta A – Cálculo da distância perpendicular a partir da leitura de ângulos.

A amostragem de distâncias é um método largamente utilizado para estimar o tamanho populacional de diversas espécies. Resumidamente, o método consiste na coleta de distâncias entre um observador e o objeto de interesse. A partir da densidade das distâncias amostradas é possível calcular a probabilidade de detectar o objeto dada uma distância X e, assim, estimar a densidade de objetos na área de estudo. Embora o método utilize distâncias perpendiculares nas operações matemáticas, ao percorrer transecções lineares, frequentemente o observador terá que coletar informações que serão utilizadas para calcular a distância radial, a partir da qual será calculada a distância de interesse (perpendicular). Este tipo de informação é largamente coletada em navio de pesquisa onde se pretende estimar o tamanho populacional de mamíferos marinhos. Por meio do uso de binóculos reticulados, o observador determina o número de retículos entre o horizonte e o animal. Com o número de retículos e a altura do observador é possível calcular a distância radial. Com esta informação e com o ângulo do avistamento calcula-se a distância perpendicular.

Objetivo da proposta: criar uma função para calcular a distância radial, utilizar essa informação para calcular a distância perpendicular, e gerar um histograma com as distâncias perpendiculares calculadas. O histograma serve como uma primeira análise dos dados coletados, possibilitando encontrar algumas falhas da coleta de dados. A distância radial será calculada pela fórmula proposta por Lerczak e Hobbs, 1998 (Calculating sighting distances from angular readings during shipboard, aerial, and shore-based marine mammals survey. Marine Mammal Science 14, 590-599).

Proposta B – Georreferenciamento a partir de informações de distância.

Criar uma função para georreferenciar avistamententos feitos durante trabalhos de amostragem por distância por meio de transecções lineares. Objetiva-se aqui refinar informações coletadas durante trabalhos de transecção lineares e, assim, gerar informações mais robustas para estudos de modelagem ecológica.

Federico, sua proposta A parece interessante e está muito bem apresentada. Lembre-se apenas de informar cuidadosamente no HELP quais os dados que a função precisa para trabalhar (número de retículos, altura do binóculo, etc) e o formato no qual estes dados tem que estar.

O plano B está um pouco mais vago, mas acho que você pode seguir com o A tranquilamente.

—- Danilo G. Muniz

Obrigado Danilo. Vou trabalhar na proposta A.

Código da Função para a Proposta A - Cálculo da distância perpendicular a partir da leitura de ângulos.

dist.perp <- function(dad, binoc, rmNA=FALSE)
  {
  if(is.null(dad$ret)) # verifica se a tabela de dados nao posui uma coluna chamada 'ret'
  {
    stop("Sua tabela de dados deve conter uma coluna chamada 'ret' referente ao 
         número de retículos do avistamento") # para a funcao e mostra um aviso do porque a funcao parou
  }
  if(is.null(dad$altura)) # verifica se a tabela de dados nao possui uma coluna chamada 'altura'
  {
    stop("Sua tabela de dados deve conter uma coluna chamada 'altura' referente a 
         altura da plataforma de observação") # para a funcao e mostra um aviso do porque a funcao parou
  }
  if(is.null(dad$angulo)) # verifica se a tabela de dados nao possui uma coluna chamada 'angulo'
  {
    stop("Sua tabela de dados deve conter uma coluna chamada 'angulo' referente ao 
         ângulo entre o objeto detectado e a linha de trasecção") # para a funcao e mostra um aviso do porque a funcao parou
  }
  if(rmNA==TRUE) # se o usuario quiser remover linhas com NA
  {
    dados <- (na.omit(dad)) # cria um novo objeto com as linhas de 'dad' sem NA
    n.NA <- length(dad$altura) - length(dados$altura) # calculando o numero de linhas removidas
    cat("\t foram excluídas", n.NA, "linhas de sua tabela de dados\n") # lanca um aviso sobre o numero de linhas que foram removidas
    dad <- dados # cria um novo objeto sem NA que sera utilizado nas formulas 
  }
  if(binoc=="FJ.7X50") # se o usuario utilizar o modelo de binoculo fujinon 7X50
  {
  ab <- 0.00498117 # cria um objeto com o angulo reticular do binoculo fujinon 7X50  
  }
  if(binoc=="BE") # se o usuario utilizar o modelo de binoculo "Big Eye" 25X
  {
  ab <- 0.00135438 # cria um objeto com o angulo reticular do binoculo de alto alcance "Big Eye" 25X
  }
  #############################################
  ### INICIO DO CALCULO DA DISTANCIA RADIAL ### 
  #############################################
  h <- dad$altura # cria um objeto 'h' = altura da plataforma de observacao
  ret <- dad$ret # cria um objeto 'ret' = numero de reticulos
  angulo <- dad$angulo # cria um objeto angulo
  angulo.m90 <- angulo>90 # cria um objeto temporario onde valores maiores que 90 graus serao verdadeiros
  angulo[angulo.m90] <- 360 - angulo[angulo>90] # tornando todos as mediadas de angulo entre 0 e 90 graus, necessario para padronizar aestimativa da distancia perpendicular
  ang.r <- (((2*pi)/360)*angulo) # cria um objeto com os valores dos angulos em radianos
  Re <- 6.371*(10^6) # cria um objeto com o raio da terra em metros
  teta <- rep(NA, length(h)) # cria um objeto para colocar os valores do angulo teta
  alfa <- rep(NA, length(h)) # cria um objeto para colocar os valores do angulo alfa
  beta <- rep(NA, length(h)) # cria um objeto para colocar os valores do angulo beta
  Do <- rep(NA, length(h)) # cria um objeto para colocar os valores da linha da avistagem
  delta <- rep(NA, length(h)) # cria um objeto para colocar os valores do angulo delta
  Dr <- rep(NA, length(h)) # cria um objeto para colocar os valores da distancia radial
   for(n in 1:(length(h))) # loop para gerar os valores para os objetos criados acima
    {
      teta[n] <- ab*ret[n] # calcula o angulo teta a partir do numero de ret do avistamento e coloca no objeto 'teta'
      alfa[n] <- atan((sqrt((2*h[n]*Re)+(h[n]^2)))/Re) # calcula o angulo alfa e coloca no objeto 'alfa'
      beta[n] <- (pi/2) - alfa[n] - teta[n] # calcula o angulo beta e coloca no oebjeto 'beta'
      Do[n] <-  ((Re+h[n]) * cos(beta[n])) - sqrt((((Re+h[n])^2) * (cos(beta[n])^2)) - ((2*h[n]*Re) + (h[n]^2))) # calcula a linha do avistamento e coloca no objeto 'Do'
      delta[n] <- asin(sin(beta[n]) * (Do[n]/Re)) # calcula o angulo delta e coloca no objeto 'delta'
      Dr[n] <- delta[n]*Re # calcula a distancia radial e coloca no objeto 'Dr'   
    }
  ####################################################
  ### INICIO DO CALCULO DA DISTANCIA PERPENDICULAR ###
  ####################################################
  Dp <- rep(NA, length(dad$altura)) # cria um objeto para colocar os valores da distacia perpendicular
  for(m in 1:(length(dad$altura))) # loop para gerar os valores da distancia perpendicular
  {
    Dp[m] <- Dr[m]*sin(ang.r[m]) # calcula a distancia perpendicular e coloca no objeto 'Dp'  
  }
  hist(Dp, main="Distâncias Perpendiculares", xlab="Dist. Perp. (m)", ylab="") # gera um histograma com o valor  das distancias perpendiculares calculadas
                                        # colocando legenda no eixo X e titulo do grafico
  return(Dp) # retorna os valores das distancias perpendiculares calculadas
  }

Texto de Ajuda para Função dist.perp

dist.perp                package:nenhum                R Documentation

Calcula a distância perpendicular e gera um histograma 
com estas distâncias.

Descrição:

Esta função calcula a distância perpendicular entre um objeto de interesse 
e a linha de transecção em estudos que utilizam os métodos de transectos lineares. 
Adicionalmente, a partir das distâncias perpendiculares calculadas, 
um histograma é gerado para uma análise preliminar do dados.
  
Forma de uso:
  
dist.perp(dad, binoc, rmNA=FALSE)
  
Argumentos:
  
dad      um data.frame contendo os valores a serem analisados.

binoc    indica o modelo do binóculo utilizado na coleta de dados.
         O usuário pode escolher entre dois tipos de binóculo:
         "FJ.7X50" - fujinon 7X50
         "BE" - big eye 25X
         Este argumento não possui um modelo padrão.

rmNA    valor lógico que indica se as linhas com valores faltantes NA deve ser retiradas.
        O pradrão é FALSE. Note que TRUE irá remover toda a linha que contenha NA 
        em qualquer uma das colunas. Assim, é indicado que o usuário somente utilize 
        rmNA=TRUE caso sua tabela de dados possua NAs nas colunas 'altura', 'ret' ou 'angulo'.

Detalhes:

Esta função possui alguns pré-requisitos acerca da tabela de dados. 
Sua tabela de dados deve ser um data.frame contendo no mínimo as seguintes colunas:
  
  altura   número referente à altura da plataforma de observação em metros para cada avistamento. 
  ret      número referente ao número de retículos para cada avistamento. 
  angulo   número referente ao ângulo entre a linha de transecção e o objeto detectado para cada avistamento.

A escolha do modelo do binóculo utilizado tem implicação direta na 
distância perpendicular calculada, uma vez que os valores de base utilizados nos cálculos
levam em consideração o ângulo entre os retículos do binóculo, o qual varia entre os modelos de binóculo.
Os valores utlizados nesta função referem-se ao dois modelos de binóculo (Fujinon 7x50 e Big Eye 25x) mais utilizados em trabalhos
com mamíferos marinhos. 

  
Valores:
  
dist.perp retorna um vetor contendo as distâncias perpendiculares calculadas em metros para cada avistamento. 
 
Atenção:
  
Caso a altura da plataforma de observação não esteja em metros, as distâncias perpendiculares 
calculadas estarão erradas.

Nota:

Esta função utiliza o valor do retículo e a altura da plataforma de observação para calcular a distância
radial entre o observador e o objeto de interesse segundo o método proposto por Lerczak & Hobbs (1998).
Esta distância radial e o ângulo entre o objeto detectado e a linha de transecção são utilizados
para calcular a distância perpendicular do objeto à linha de trasecçao (Buckland et al. 2001).  
  
Autor(s):
  
Federico Sucunza
fsucunza@gmail.com  

Referências:

Lerczak, J.A. & Hobbs, R.C. 1998. Calculating sighting distances from angular readings during shipboard, aerial, and shore-based marine mammals survey. Marine Mammal Science 14:590-599.
Lerczak, J.A. & Hobbs, R.C. 1998. Errata - Calculating sighting distances from angular readings during shipboard, aerial, and shore-based marine mammals survey. Marine Mammal Science 14:903.
Buckland, S.T., Anderson, D.R., Burnham, K.P., Laake, J.L., Borchers, D.L. & Thomas, L. 2001. Intruduction to Distance Sampling: Estimating abundance of biological populations. Oxford University Press, Oxford, U.K.
  
Exemplos:

## Formato mínimo necessário para que a função funcione corretamente 
dad <- data.frame(altura=c(10, 10, 10, 10, 10), 
                  angulo=c(306, 343, 17,  70, 306), 
                  ret=c(0.5, 0.1, 0.1, 0.1, 0.3))

## Um exemplo utilizado o modelo de binóculo fujinon 7X50
dist.perp(dad, binoc="FJ.7X50", rmNA=FALSE)

## Um exemplo utilizando o modelo de binóculo big eye 25X
dist.perp(dad, binoc="BE", rmNA=FALSE)

trb.final.federico_sucunza.r

ajuda_func_dist.perp.r

dados.ex.csv

report_iwc_-_franciscana_2012.pdf

exec

ex4.r

ex5.r

ex7.r

ex9.2.r

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