#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)