[R-br] Coordenadas e distâncias
Roberto Guevara
robertoguevara.bio em gmail.com
Segunda Julho 8 22:06:49 BRT 2013
Olá pessoal do R-br.
Meus dados consistem basicamente em coordenadas e o horário em que
cada ponto foi obtido, como exemplificado a seguir:
obs dia min x y
1 1 400 425 475
2 1 410 425 425
3 1 420 475 325
4 1 430 525 325
5 1 435 525 275
6 1 443 525 275
obs se refere a cada unidade de amostra, dia a cada dia de coleta (um
total de 73), min é o horário em unidades de minutos e x e y cada
elemento do ponto cartesiano.
O que preciso obter desses dados é a distribuição de distâncias
euclidianas entre um ponto escolhido aleatoriamente e todos os pontos
seguintes de um mesmo dia. Ou seja, preciso escolher aleatoriamente um
ponto por dia, calcular, para todos os dias, a euclidiana entre este
ponto e todos os pontos posteriores do mesmo dia e relacionar a
distância espacial com a diferença de tempo entre os pontos e o dia em
que cada distância está associada.
Eu já elaborei um código pra isso. Caso tenham sugestões para melhorar
o código, ficarei agradecido. Porém, não consigo passar para uma
próxima etapa. Como poderia fazer para repetir esse procedimento o
número de vezes que fosse necessário? Por exemplo, existem milhares de
combinações de pontos escolhidos aleatoriamente ao longo dos 73 dias.
Eu gostaria de repetir o procedimento 1000 vezes para ter uma ideia da
variação de distribuição de distâncias que posso obter em decorrência
da escolha aleatória de um ponto de origem por dia.
Código já elaborado:
arquivo<-read.table("arquivo.txt",head=T)
fixo<-numeric() #vetor com origens de cada dia
ult<-numeric() #vetor com últimos pontos de cada dia
xy<-list() #lista para armazenar a "parte dos pontos de cada dia"
delimitadas por fixo e ult
hor<-list() #lista para armazenar a "parte dos horarios de cada dia"
delimitadas por fixo e ult
distancias<-list()#distancias euclidianas
tempo<-list()#diferença de tempo entre os pontos
dia<-list()#dia de coleta
for (i in 1:max(unique(arquivo$dia))){ #repetindo até o total de dias
fixo[i]<-sample(arquivo$obs[arquivo$dia==i],1)#sorteio ponto de origem
ult[i]<-max(arquivo$obs[arquivo$dia==i])#armazenando último ponto de cada dia
xy[[i]]<-arquivo[fixo[i]:ult[i],4:5]#armazenando parte dos pontos de cada dia
hor[[i]]<-arquivo[fixo[i]:ult[i],6]#armazenando parte dos horários de cada dia
distancias[[i]]<-dist(xy[[i]])[1:nrow(xy[[i]])-1]#somente as
distâncias em relação ao primeiro ponto interessam
tempo[[i]]<-dist(horarios[[i]])[1:length(horarios[[i]])-1]#somente
diferenças ao primeiro ponto
dia[[i]]<-rep(i,length(arquivo$dia[fixo[i]:ult[i]])-1)$cada dia de coleta
}
distancias<-unlist(distancias)
tempo<-unlist(tempo)
dia<-unlist(dia)
dtd<-data.frame(distancias,tempo,dia)
Este data.frame seria como uma unidade de amostra das milhares de
distribuições que são possíveis de obter. Como otimizar para que
qualquer número desejado não seja dispendioso de obter?
Obrigado pela atenção
--
Roberto Guevara Ferreira Lima
Biólogo - CRBio 6ª Região: 73146/06-D
Mestre em Zoologia
Laboratório de Ecologia e Zoologia de Vertebrados
Instituto de Ciências Biológicas
Universidade Federal do Pará
Rua Augusto Corrêa, nº 01 - Bairro: Guamá. CEP: 66075-110
Currículo Lattes: http://lattes.cnpq.br/7363382159007600
Mais detalhes sobre a lista de discussão R-br