Среднее расстояние точек от фиксированной целевой точки

#r #average #distance #mean #arithmetic-expressions

#r #среднее #расстояние #арифметические выражения

Вопрос:

У меня есть несколько точек в моих данных, и я пытаюсь найти среднее (арифметическое) расстояние до целевой точки.
Здесь я использую два маршрута:
первый, используя формулу ‘Distance Between Two Points’ для вычисления расстояния между каждой точкой и целью, а затем получая среднее расстояние из этих значений расстояния.
Другое, найдите среднюю точку всех точек, а затем найдите расстояние между этой средней точкой и целевой точкой.
Я не уверен, какой подход правильный (оба дают разные ответы), хочу ли я получить среднее расстояние всех точек до целевой точки?
Моя целевая точка выделена зеленым цветом, а средняя точка — красным.

Ниже приведен мой R-код:

 # three data points
a <- c(1.6, 2.3, 3.4)
b <- c(3.1, 4.1, 0.5)

# target point
t_x <- 1.1
t_y <- 0.1

df <- data.frame("x" = a, "y" = b)

# mean of the distances
df$distance <- sqrt(((df$x - t_x)^2)   ((df$y - t_y)^2)) 
print(mean(df$distance))

# distance from the mean point to the target
mean_x <- mean(df$x)
mean_y <- mean(df$y)
print(sqrt((mean_x - t_x)^2   (mean_y - t_y)^2))

# plotting all
ggplot(df, aes(x = x, y = y))   
  geom_point()  
  coord_cartesian(xlim = c(-5,5), ylim = c(-5,5))  
  geom_point(aes(x=mean_x, y=mean_y), color = "red")   
  geom_point(aes(x=t_x, y=t_y), color = "green") 
  

Смотрите график здесь.

Комментарии:

1. оба они могут быть правильными, в зависимости от того, как вы определяете расстояние: (1) среднее из расстояний или (2) расстояние до средней точки.

Ответ №1:

Просто рассмотрим случай с одной целевой точкой и двумя другими точками

две точки с целью в центре

 Target: (0,0)
Point1: (-1,0)
Point2: (1, 0)
  

Если взять среднее значение точек 1 и 2, получится (0,0), то среднее расстояние до цели равно 0. Но расстояние от каждой из точек до цели равно 1, поэтому среднее расстояние в 1. В общем, эти два вычисления сильно отличаются

введите описание изображения здесь

На самом деле все сводится к тому, как вы определяете проблему. В этом примере вы ожидаете, что ответ будет равен 0 или 1.

Комментарии:

1. Спасибо @MrFlick за пример. Я пересмотрел свою постановку задачи и обнаружил, что мне нужно найти среднее значение расстояний.

Ответ №2:

Вот интуитивное объяснение того, почему ваш первый метод является правильным. Представьте, что ваша цель находится на (0, 0):

 t_x <- 0
t_y <- 0
  

Теперь предположим, что мы рисуем вокруг нее несколько точек, которые находятся на одинаковом расстоянии от нее — фактически, все они лежат на единичной окружности и по определению находятся на расстоянии 1 от цели:

 library(ggplot2)

t_x <- 0
t_y <- 0

rads <- seq(0, 2 * pi, length.out = 17)[-17]
df   <- data.frame(x = cos(rads), y = sin(rads), xend = 0, yend = 0)

ggplot(df, aes(x, y))   
  geom_point(col = "red")  
  geom_segment(aes(xend = xend, yend = yend), linetype = 2)  
  coord_equal()  
  geom_point(x = t_x, y = t_y, size = 5, colour = "red")
  

Теперь, неудивительно, поскольку все точки находятся на расстоянии 1 от цели, среднее расстояние по Пифагору также будет равно 1:

 # mean of the distances
df$distance <- sqrt(((df$x - t_x)^2)   ((df$y - t_y)^2)) 
print(mean(df$distance))
#> [1] 1
  

Но теперь рассмотрим, что произойдет, если мы возьмем среднее значение всех наших значений x — они уменьшаются до 0. То же самое относится и к значениям y, поэтому среднее значение всех точек равно (0, 0). Когда вы измеряете расстояние от (0, 0) до (0, 0), ответ, конечно, равен 0:

 mean_x <- mean(df$x)
mean_y <- mean(df$y)
print(sqrt((mean_x - t_x)^2   (mean_y - t_y)^2))
#> [1] 0
  

Создано 2020-08-22 пакетом reprex 2020-08-22 (версия 0.3.0)