Trouver le point GPS moyen

11

J'ai besoin d'écrire un programme pour trouver le point GPS moyen à partir d'une population de points.

En pratique, les événements suivants se produisent:

  • Chaque mois, une personne enregistre un point GPS du même actif statique.
  • En raison de la nature du GPS, ces points diffèrent légèrement chaque mois.
  • Parfois, la personne fait une erreur et enregistre le mauvais test à un endroit complètement différent.
  • Chaque point GPS a un poids de certitude ( HDOP ) qui indique la précision des données GPS actuelles. Les points GPS avec de meilleures valeurs HDOP sont préférés aux points inférieurs.

Comment puis-je déterminer les éléments suivants:

  • Traitez les données avec 2 valeurs par rapport à une seule valeur comme l'âge. (Trouver l'âge moyen dans une population de personnes)
  • Déterminez les valeurs aberrantes. Dans l'exemple ci-dessous, ces valeurs seraient [-28.252, 25.018] et [-28.632, 25.219]
  • Après avoir exclu les valeurs aberrantes, trouvez le point GPS moyen dans ce qu'il pourrait être [-28.389, 25.245].
  • Ce serait un bonus si vous pouvez travailler le "poids" fourni par la valeur HDOP pour chaque point.

texte alternatif

Philip Fourie
la source
1
Cette réponse est suffisamment similaire pour vous aider à faire la moyenne des points, stats.stackexchange.com/questions/2493/… , il est simple d'incorporer des poids dans ce cadre. Je pense que vous pourriez utiliser des heuristiques simples pour identifier les valeurs aberrantes, mais cela ne vous empêche pas d'adopter une approche plus empirique comme l'a suggéré Stephan.
Andy W

Réponses:

8

L'un des problèmes des données multivariées est de décider, puis d'interpréter, une métrique appropriée pour calculer les distances, d'où des concepts intelligents mais quelque peu difficiles à expliquer tels que la distance de Mahalanobis. Mais dans ce cas, le choix est évident: la distance euclidienne . Je suggérerais un algorithme heuristique simple quelque chose comme:

  1. Calculer le centroïde (non pondéré) des points de données, c'est-à-dire la moyenne (non pondérée) des 2 coordonnées
  2. Calculer la distance euclidienne de toutes les lectures du centroïde
  3. Exclure toutes les lectures qui sont au-delà d'une certaine distance (à déterminer en fonction de votre expérience et de vos connaissances de la technologie, ou à défaut d'un peu de validation croisée d' essai et d'erreur - 100 m, 1 km, 10 km ??)
  4. Calculez la moyenne pondérée des deux coords des points restants, pondérée par l'inverse du score HDOP (ou une fonction monotone de celui-ci - j'ai jeté un coup d'œil à la page wikipedia liée dans la question et je pense que vous n'avez peut-être pas besoin de tels une fonction mais j'aurais besoin de l'étudier davantage pour être sûr)

Il y a clairement plusieurs façons de rendre cela plus sophistiqué, comme la sous-pondération des valeurs aberrantes ou l'utilisation des estimateurs M plutôt que de simplement les exclure, mais je ne sais pas si une telle sophistication est vraiment nécessaire ici.

un arrêt
la source
3

Rob Hyndman a récemment posé une question sur la détection des valeurs aberrantes dans les données multivariées . Les réponses peuvent fournir quelques approches possibles (et sinon, vous voudrez peut-être poser la question de la recherche de valeurs aberrantes 2D dans une question distincte).

Et vous pouvez faire la moyenne de vos données GPS restantes composant par composant - ajoutez tous les premiers composants et divisez par le nombre de points, ce qui vous donnera le premier composant de la moyenne. Idem avec les seconds composants.

Cette moyenne peut être pondérée par HDOP. Additionnez les produits du premier composant, multiplié par le score HDOP correspondant, et divisez la somme par la somme des scores HDOP. Idem avec les seconds composants.

Je prendrai la liberté de supprimer la balise "normal-distribution" ...

Stephan Kolassa
la source
Merci @Stephan Kolassa, cela aidera déjà à trouver une solution.
Philip Fourie
2

Appelez le HDOP la variable indépendante. Utilisez-le pour la pondération ultérieure. Vous avez donc des ensembles de coordonnées - appelez cela (x1, y1); (x2, y2), etc ... Tout d'abord ignorer les valeurs aberrantes. Calculez les moyennes pondérées des coordonnées x comme [(x1 * h1) + (x2 * h2) + .... + (xn * hn)] / [somme (h1, h2, ..., hn)] où h1, h2, ... est la valeur HDOP. Faites de même pour les coordonnées y. Cela donnera une valeur moyenne assez précise pour chaque coordonnée.

Traiter les valeurs aberrantes peut être un peu délicat. Comment savez-vous s'ils sont aberrants ou non? Strictement, vous devez déterminer un ajustement statistique aux observations et, dans un intervalle de confiance, déterminer si elles sont authentiques ou non. En examinant la question de la distribution de poison, cela me vient à l'esprit. Mais c'est probablement beaucoup de travail et je suis sûr que vous ne voulez pas entrer dans ce sujet. Peut-être utiliser une approximation? Supposons que vous supposiez que la valeur de coordonnées moyenne est un bon moyen à utiliser. Déterminez ensuite une valeur pour l'écart type. Je pense que le dev standard ou la distribution du poison est 1 / (moyenne). Ensuite, approximez en utilisant la distribution normale et un intervalle de confiance à 95%. Disons que si une observation est en dehors de l'intervalle (moyenne- * 1,645 * dev standard; moyenne + 1,645 * dev standard) alors c'est une valeur aberrante? Essayez ça.


la source