(Предисловие: я не статистик и не программист. Я работаю в гуманитарных науках, так что помилуй мою душу).
Мне нужно вычислить евклидово расстояние между сериями точек в R. Я использовал dist () следующим образом:
> x <- c(0,0)
> y <- c(0,10)
> dist(rbind(x,y))
x
y 10
Пока все хорошо. Но когда я смотрел на свои результаты (с реальными числами), они были ужасно отключены. Настолько, что я решил, что мой R-скрипт собирает данные из неправильных столбцов. Но я проверил, а это не так.
Так что я начал играть с игрушечными номерами, и меня ждал сюрприз. Приведенный выше пример (вертикальная линия) работает правильно, как и следующий (горизонтальная линия):
> x <- c(0,10)
> y <- c(0,0)
> dist(rbind(x,y))
x
y 10
Но когда линия, в которой фигурируют две точки, диагональна, возникает странность:
> x <- c(0,10)
> y <- c(0,10)
> dist(rbind(x,y))
x
y 0
Расстояние 0? А? Это не может быть правдой.
И когда точки совпадают (это вполне возможно по моим данным), мы спускаемся по кроличьей норе:
> x <- c(0,0)
> y <- c(10,10)
> dist(rbind(x,y))
x
y 14.14214
Разве это не должно быть 0? В конце концов, точки идентичны, поэтому между ними не может быть расстояния.
На всякий случай, если что-то не так с dist (), я попытался реализовать формулу вручную, следуя Википедии. Те же результаты:
> sqrt(sum((x - y) ^ 2))
[1] 14.14214
Как я уже говорил выше, мой математический фон минимален, поэтому я полностью ожидаю, что ошибка здесь моя. Если да, пожалуйста, объясните, что это такое и как это исправить. Но с того места, где я стою сейчас, кажется, что что-то не так.
И что хуже всего, я не могу анализировать свои данные.