[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