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.
Respostas:
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:
tentativa e erro- 100m, 1km, 10km ??)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.
fonte
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" ...
fonte
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.
fonte