(Lời nói đầu: Tôi không phải là nhà thống kê hay lập trình viên. Tôi làm việc trong nhân văn, vì vậy hãy thương xót tâm hồn mình).Tính toán khoảng cách Euclide trong R không có ý nghĩa
tôi cần phải tính toán khoảng cách Euclide giữa một loạt các điểm trong R. Tôi đã sử dụng dist(), như sau:
> x <- c(0,0)
> y <- c(0,10)
> dist(rbind(x,y))
x
y 10
Cho đến nay, như vậy tốt. Nhưng khi tôi nhìn vào kết quả của tôi (với số thực), họ đã bị khủng khiếp. Vì vậy, nhiều như vậy mà tôi figured R kịch bản của tôi đã lấy dữ liệu từ các cột sai. Nhưng tôi đã kiểm tra và không phải vậy.
Vì vậy, tôi bắt đầu chơi xung quanh với số đồ chơi và tôi đã rất ngạc nhiên. Ví dụ trên (một đường thẳng đứng) hoạt động một cách chính xác, cũng như những điều sau đây (một đường ngang):
> x <- c(0,10)
> y <- c(0,0)
> dist(rbind(x,y))
x
y 10
Nhưng khi dòng dạng hai điểm là đường chéo, lạ xảy ra sau đó:
> x <- c(0,10)
> y <- c(0,10)
> dist(rbind(x,y))
x
y 0
Một khoảng cách 0? Huh? Điều đó không thể đúng.
Và khi những điểm giống hệt nhau (đó là hoàn toàn có thể trong dữ liệu của tôi), chúng tôi đi xuống hang thỏ:
> x <- c(0,0)
> y <- c(10,10)
> dist(rbind(x,y))
x
y 14.14214
nên đây không phải là 0? Những điểm giống hệt nhau, sau khi tất cả, do đó, có thể không có khoảng cách giữa chúng.
Chỉ trong trường hợp có sự cố với dist(), tôi đã cố gắng triển khai công thức theo cách thủ công, bằng Wikipedia. Cùng một kết quả:
> sqrt(sum((x - y)^2))
[1] 14.14214
Như tôi đã nói ở trên, nền toán học của tôi là tối thiểu, vì vậy tôi hoàn toàn mong đợi rằng lỗi ở đây là của tôi. Nếu có, vui lòng giải thích nó là gì và cách sửa nó. Nhưng từ nơi tôi đứng ngay bây giờ, có vẻ như có điều gì đó rất sai.
Và tệ nhất là tôi không thể phân tích dữ liệu của mình.
+1 cho bài đăng đầu tiên rõ ràng tuân thủ nguyên tắc tài liệu. –