====== Fernando Silvério Ribeiro ====== Mestrando em Ecologia, Laboratório de Diversidade e Conservação de Mamíferos, IB, USP [[.:exec]] ===== Trabalho Final ===== **Proposta A** - Seleção aleatória de pontos de amostragem com restrições de distâncias A partir de uma matriz contendo todos os possíveis pontos de amostragem de uma área com suas respectivas coordenadas geográficas, a função pretende selecionar aleatoriamente um determinado número de pontos que estejam localizados a, no mínimo, uma determinada distância entre eles. Além disso, caso o usuário acrescente informações à matriz, como o estrato a que os pontos pertencem e um valor para este estrato, como por exemplo sua área, a função será capaz de realizar uma seleção alocando a quantidade de pontos proporcionalmente ao valor de cada estrato. Os argumentos da função serão o número de pontos a ser sorteado, a distância mínima entre pontos e se a seleção será estratificada ou não. **Proposta B** - Padrões temporais de atividade Em trabalhos com armadilhas fotográficas, além de dados de presença/ausência por sítio, também é possível obter dados sobre o padrão de atividade temporal das espécies. A partir de uma matriz contendo os sítios das câmeras, as espécies e o horário de registro de cada fotografia, a função pretende construir gráficos que demonstrem esses padrões e que sejam facilmente comparáveis entre espécies, ou seja, os gráficos devem apresentar o padrão de atividade a partir de valores proporcionais. Nos argumentos, além da escolha da espécie, o usuário terá a opção de que a função retorne o padrão geral da espécie (incluindo todos os registros) ou o padrão para diferentes sítios (ou conjuntos de sítios). Fernando, achei sua proposta A bem interessante, mas vale notar que o usuário tem que fornecer as coordenadas dos pontos amostrais de alguma forma certo? Lembre-se de especificar no HELP o formato em que essas coordenadas tem que ser passadas pra função. A proposta B achei um pouco mais fraca, se você for perseguir esse plano acho que vale a pena permitir que o uruário escolha mais de uma espécie de cada vez e talvez incluir algum tipo de comparação "não gráfica" entre diferentes espécies. Se o horário em que a espécie tem atividade for importante, será que vale a pena partir pra estatística circular? (Não quero complicar sua vida, é só uma sugestão, caso você ache isso emocionante dê uma olhada no pacote circular.). ----//[[danilomuniz@usp.br| Danilo G. Muniz]]// **Final: proposta A** #Cria uma função que faz sorteios aleatórios de pontos de amostragem com distâncias mínimas entre esses pontos. #O sorteio pode ser estratificado ou não sortptos <- function (x, n=10, dist=10, estratificado=FALSE) { #cria uma função semelhante a anterior, com a finalidade de aplicá-la diretamente ao data frame (caso o sorteio #não seja estratificado, ou a subsets do data frame (em caso de sorteio estratificado) func <- function (x, m=n, d=dist) { #carrega o pacote sp, necessário para o cálculo de distância a partir de coordenadas #pensei em criar uma função para este cálculo (por trigonometria), mas os resultados tinham um pequeno erro #(devido a curvatura da terra) que não consegui corrigir library("sp") #cria uma matriz de distâncias (em kms) entre todos os pontos mat.dist=spDists(as.matrix(x[,2:3]),longlat=TRUE) #cria um vetor para guardar os pontos sorteados que respeitem a distância mínima. O vetor é grande de modo a #garantir que muitos pontos sejam testados. resultado=rep(NA,nrow(mat.dist)) #cria um vetor de tamanho igual ao acima, para guardar todos os pontos sorteados (incluindo os que não #respeitam a distância mínima) #necessário criar dois vetores para facilitar o teste de distância pre.sort=rep(NA,nrow(mat.dist)) #sorteia o primeiro ponto entre todos os possíveis e o guarda no vetor de resultados resultado[1]=sample(1:nrow(mat.dist),1) #guarda o primeiro ponto no vetor pre.sort pre.sort[1]=resultado[1] #cria um loop que gera os próximos sorteios for (i in 2:nrow(mat.dist)) { #guarda no vetor pre.sort todos os outros pontos sorteados pre.sort[i]=sample(1:nrow(mat.dist),1) #um teste lógico que compara as distâncias entre os pontos sorteados (vetor pre.sort) e os que foram realmente #escolhidos (vetor resultado) #caso o ponto fique igual ou maior que a distância escolhida... if (sum(mat.dist[pre.sort[i],c(resultado[1:(i-1)])] **Help** sortptos package:nenhum R Documentation Sorteia pontos amostrais aleatoriamente, de maneira estratificada ou não. Description: A partir de um data frame com coordenadas de pontos, a função sorteia aleatoriamente pontos amostrais, com distâncias mínimas entre eles. Caso os pontos pertençam a diferentes estratos, a função sorteia pontos em cada estrato proporcionais ao seu valor. A função utiliza o pacote sp. Usage: sortptos (x, n=10, dist=10, estratificado=FALSE) Arguments: x Data.frame com todos os pontos para sorteio e suas respectivas coordenadas. Deve ter pelo menos 3 colunas, sendo a primeira a identificação de cada ponto, a segunda a longitude e a terceira a latitude. Em caso de sorteio estratificado o data.frame deve ter mais 2 colunas, a quarta sendo o número do estrato ao qual o ponto pertence e a quinta o valor deste estrato n Valor numérico: número de pontos que será sorteado dist Valor numérico: distância mínima (em kms) entre os pontos a serem sorteados estratificado Lógico. Se "TRUE" a função realizará o sorteio estratificado. Se "FALSE" o sorteio não levará em conta os estratos. Details: Necessário ter o pacote sp. Value: A função retornará um subconjunto do data.frame (x) contendo os n pontos escolhidos. Caso não seja possível completar os n pontos, os faltantes serão preenchidos com NAs. Author(s): Fernando Silvério Ribeiro fernando.silverio.ribeiro@usp.br Examples: sortptos(tabela.pontos) sortptos(tabela.pontos, x=20, dist=5, estratificado=TRUE) Arquivos: arquivo csv com 500 pontos na Paraíba (retirado da internet){{:bie5782:01_curso_atual:alunos:trabalho_final:fernando.silverio.ribeiro:pontos_interesse.csv|}} script adicionando mais 2 colunas ao arquivo anterior (estratos e valores) para uma seleção estratificada {{:bie5782:01_curso_atual:alunos:trabalho_final:fernando.silverio.ribeiro:criar_dataframe_est.r|}} script com código da função {{:bie5782:01_curso_atual:alunos:trabalho_final:fernando.silverio.ribeiro:script_funcao.r|}}