Próbuję zrozumieć, co się dzieje z moimi obliczeniami odległości Canberra. Piszę własną prostą funkcję canberra.distance
, jednak wyniki nie są zgodne z funkcją dist
. Dodałem do mojej funkcji opcję na.rm = T
, aby móc obliczyć sumę, gdy występuje zerowy mianownik. Od ?dist
Rozumiem, że używają podobnego podejścia: Terms with zero numerator and denominator are omitted from the sum and treated as if the values were missing.
odległość canberry - niespójne wyniki
canberra.distance <- function(a, b){
sum((abs(a - b))/(abs(a) + abs(b)), na.rm = T)
}
a <- c(0, 1, 0, 0, 1)
b <- c(1, 0, 1, 0, 1)
canberra.distance(a, b)
> 3
# the result that I expected
dist(rbind(a, b), method = "canberra")
> 3.75
a <- c(0, 1, 0, 0)
b <- c(1, 0, 1, 0)
canberra.distance(a, b)
> 3
# the result that I expected
dist(rbind(a, b), method = "canberra")
> 4
a <- c(0, 1, 0)
b <- c(1, 0, 1)
canberra.distance(a, b)
> 3
dist(rbind(a, b), method = "canberra")
> 3
# now the results are the same
Pary 0-0 i 1-1 wydaje się być problematyczne. W pierwszym przypadku (0-0) licznik i mianownik są równe zeru i tę parę należy pominąć. W drugim przypadku (1-1) licznik wynosi 0, ale nie jest to mianownik, a termin jest równy 0, a suma nie powinna się zmieniać.
Czego mi tu brakuje?
Edycja: Aby zgodne z definicją R funkcja canberra.distance
może być modyfikowany w następujący sposób:
canberra.distance <- function(a, b){
sum(abs(a - b)/abs(a + b), na.rm = T)
}
Jednakże, wyniki są takie same jak poprzednio.
Myślę, że mogłeś się natknąć na błąd w bazie R. Nie jestem pewien, ale [Wolfram Alpha zgadza się z tobą] (https://www.wolframalpha.com/input/?i=CanberraDistance%5B% 7B1, + 0, + 1, + 0% 7D, +% 7B0, + 1, + 0, + 0% 7D% 5D). Niestety nie mogę znaleźć autorytatywnego odnośnika, ale twoja implementacja wydaje się poprawna zgodnie z Wikipedią i Wolfram. –
W rzeczywistości [dokumentacja 'dist'] (https://stat.ethz.ch/R-manual/R-devel/library/stats/html/dist.html) określa odległość Canberra jako * sum (| x_i - y_i |/| x_i + y_i |) * (co różni się od twojego i Wolframa). Zauważa również, że "[t] jego jest przeznaczone dla wartości nieujemnych (np. Zliczeń): przyjęcie bezwzględnej wartości mianownika jest modyfikacją R z 1998 r., Aby uniknąć ujemnych odległości." - Tak więc definicja R jest udokumentowana jako inna. –
@KonradRudolph Dziękujemy za odpowiedź! Zmieniłem mój post. Przy definicji R Canberry pozostają niezgodności odległości, więc nie sądzę, że to jest problem. – Adela