Encontrar o ponto GPS médio


11

Preciso escrever um programa para encontrar o ponto GPS médio de uma população de pontos.

Na prática, acontece o seguinte:

  • Todo mês, uma pessoa registra um ponto GPS do mesmo ativo estático.
  • Devido à natureza do GPS, esses pontos diferem ligeiramente a cada mês.
  • Às vezes, a pessoa comete um erro e registra o teste errado em um local completamente diferente.
  • Cada ponto de GPS possui um peso de certeza ( HDOP ) que indica a precisão dos dados GPS atuais. Os pontos de GPS com melhores valores HDOP são preferidos aos mais baixos.

Como determino o seguinte:

  • Lide com dados com 2 valores versus um valor único, como idade. (Encontre a idade média em uma população de pessoas)
  • Determine os valores extremos. No exemplo abaixo, estes seriam [-28.252, 25.018] e [-28.632, 25.219]
  • Depois de excluir os valores extremos, encontre o ponto GPS médio em que ele pode ser [-28,389, 25,245].
  • Seria um bônus se puder trabalhar o "peso" fornecido pelo valor HDOP para cada ponto.

texto alternativo


1
Esta resposta é semelhante o suficiente para ajudá-lo com a média dos pontos, stats.stackexchange.com/questions/2493/… , é simples incorporar pesos nessa estrutura. Eu acho que você seria capaz de usar algumas heurísticas simples para identificar discrepâncias, mas isso não impede você de adotar uma abordagem mais empírica, como sugeriu Stephan.
Andy W

Respostas:


8

Um dos problemas com dados multivariados é decidir e depois interpretar uma métrica adequada para calcular distâncias, portanto conceitos inteligentes, mas um pouco difíceis de explicar, como a distância de Mahalanobis. Mas, neste caso, certamente a escolha é óbvia - distância euclidiana . Eu sugeriria um algoritmo heurístico simples, algo como:

  1. Calcule o centróide (não ponderado) dos pontos de dados, ou seja, o meio (não ponderado) das 2 coordenadas
  2. Calcular a distância euclidiana de todas as leituras do centróide
  3. Exclua quaisquer leituras que estejam além de uma certa distância (a ser determinada com base em sua experiência e conhecimento da tecnologia, ou na falta de um pouco de validação cruzada de tentativa e erro - 100m, 1km, 10km ??)
  4. Calcule a média ponderada de ambas as cordas dos pontos restantes, ponderada pelo inverso da pontuação no HDOP (ou alguma função monotônica dela - dei uma olhada rápida na página da wikipedia vinculada na pergunta e acho que talvez você não precise disso uma função, mas eu precisaria estudá-lo mais para ter certeza)

Claramente, existem várias maneiras de tornar isso mais sofisticado, como reduzir valores discrepantes ou usar estimadores M em vez de simplesmente excluí-los, mas não tenho certeza se essa sofisticação é realmente necessária aqui.


3

Rob Hyndman recentemente fez uma pergunta sobre a detecção de valores discrepantes em dados multivariados . As respostas podem fornecer algumas abordagens possíveis (caso contrário, você pode colocar a questão de encontrar discrepâncias em 2-d em uma pergunta separada).

E você pode calcular a média do componente de dados GPS restante por componente - adicione todos os primeiros componentes e divida pelo número de pontos, que fornecerão o primeiro componente da média. Mesmo com os segundos componentes.

Essa média pode ser ponderada pelo HDOP. Resuma os produtos do primeiro componente multiplicado pela pontuação HDOP correspondente e divida a soma pela soma das pontuações HDOP. Mesmo com os segundos componentes.

Tomarei a liberdade de remover a tag "distribuição normal" ...


Obrigado @Stephan Kolassa, isso já ajudará a encontrar uma solução.
Philip Fourie

2

Chame o HDOP de variável independente. Use isso para ponderar mais tarde. Então você tem conjuntos de coordenadas - chame isso (x1, y1); (x2, y2), etc ... Primeiro ignore os valores discrepantes. Calcule as médias ponderadas das coordenadas x como [(x1 * h1) + (x2 * h2) + .... + (xn * hn)] / [soma (h1, h2, ..., hn)] onde h1, h2, ... é o valor HDOP. Faça o mesmo para as coordenadas y. Isso fornecerá um valor médio razoavelmente preciso para cada coordenada.

Lidar com outliers pode ser um pouco complicado. Como você sabe se são discrepantes ou não? Estritamente, você precisa determinar um ajuste estatístico para as observações e, dentro de um intervalo de confiança, determinar se elas são genuínas ou não. Olhando para a pergunta que a Distribuição de Venenos vem à mente. Mas isso provavelmente é muito trabalhoso e tenho certeza que você não quer entrar nisso. Talvez use uma aproximação? Digamos que você assuma que o valor médio das coordenadas é uma boa maneira de usar. Em seguida, determine um valor para o desvio padrão. Eu acho que o desenvolvedor padrão ou a distribuição de veneno é 1 / (média). Em seguida, aproxime usando a distribuição normal e um intervalo de confiança de 95%. Digamos que se uma observação estiver fora do intervalo (média- * 1,645 * desvio padrão; média + 1,645 * desvio padrão), então é uma exceção? Dê uma chance.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.