35 votos

Encontrar el centroide de un clúster de puntos utilizando R

Buscando en la web, las soluciones para encontrar los centroides de los polígonos aparecen con bastante frecuencia. Lo que me interesa es encontrar el centroide de un grupo de puntos. Una especie de media ponderada.

¿Puedes proporcionar algunas indicaciones, pseudocódigo (o incluso mejor, un paquete de R que ya haya resuelto esto) o enlaces de cómo se puede abordar este problema?


@iant ha sugerido un método para promediar las coordenadas y utilizarlo para el centroide. Esto es exactamente lo que se me pasó por la cabeza cuando vi la imagen correcta en esta página web .

Aquí hay un simple código R para dibujar la siguiente figura que demuestra esto (× es el centroide):

xcor <- rchisq(10, 3, 2)
ycor <- runif(10, min = 1, max = 100)
mx <- mean(xcor)
my <- mean(ycor)

plot(xcor, ycor, pch = 1)
points(mx, my, pch = 3)

enter image description here


cluster::pam()$medoids devuelve un medoide de un conjunto de cluster. Este es un ejemplo de @Joris Meys:

library(cluster)
df <- data.frame(X = rnorm(100, 0), Y = rpois(100, 2))
plot(df$X, df$Y)
points(pam(df, 1)$medoids, pch = 16, col = "red")

1 votos

¿Hay alguna razón por la que el centro medio o el centro de la distancia mínima de los puntos no sea suficiente?

1 votos

@Roman: El gráfico es incorrecto: es necesario utilizar el media no la mediana. Para las nubes de puntos espaciales en 2D existen análogos de un centro de la mediana, pero éste no es uno de ellos (porque depende de las coordenadas): véase stats.stackexchange.com/q/1927/919 para un debate.

1 votos

También sugeriría consultar el capítulo 4 del libro de trabajo de Crimestat, icpsr.umich.edu/CrimeStat/files/CrimeStatChapter.4.pdf . Es una introducción bastante suave, describe y muestra gráficamente por qué la mediana para dimensiones superiores no tiene una solución única, y describe otras medidas de tendencia central y varianza de patrones de puntos espaciales.

51voto

Adam Ernst Puntos 6939

Sólo tienes que promediar las coordenadas X e Y (multiplicar por un peso si quieres) y ahí tienes tu centroide.

6 votos

+1 Gran solución. Se extiende también a los centroides en el esferoide (lo cual es esencial para evitar distorsiones relacionadas con la proyección cuando los puntos están repartidos por una gran parte del globo): primero convierta (lat, lon) a coordenadas 3D (x,y,z) (geocéntricas), promedie, y luego convierta el resultado de nuevo a (lat, lon) (ignorando el hecho casi inevitable de que el promedio 3D estará muy por debajo de la superficie).

0 votos

He actualizado mi pregunta para reflejar su respuesta.

0 votos

¿por qué se sugiere el uso de una pesa?

1voto

Puedes utilizar la función centroide del paquete geosfera.

https://www.rdocumentation.org/packages/geosphere/versions/1.5-5/topics/centroid

2 votos

Bienvenido a GIS StackExchange y gracias por enviar una respuesta. Por favor, tómese un momento para revisar la Visita para conocer nuestro formato de preguntas y respuestas. Por favor, edite su respuesta para incluir más detalles, ya que generalmente buscamos respuestas más largas (no de 1 a 2 frases) para ayudar al autor original o a futuros buscadores. Una modificación que puedes hacer es incluir una razón por la que crees que esta herramienta será útil o un fragmento de código / capturas de pantalla.

0 votos

@smiller esto solo funciona si tienes al menos 4 puntos.

1 votos

@Herman Toothrot ¿Este comentario iba dirigido a @Leonardo Leite Ferraz de Campo, que compuso la respuesta?

0voto

Esto es excelente. Sugeriría eliminar los valores atípicos antes de hacer esto. Para eliminar simplemente los valores atípicos, se podrían encontrar las longitudes dentro de los percentiles del 75%-25% y lo mismo para las latitudes, y sólo calcular la media en esos valores O, para una eliminación menos drástica de los valores atípicos, eliminar los valores fuera del rango intercuartil de 1,5 * 75%-25% (esta es una definición de valor atípico algo estándar).

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X