Джекард Дистанция в филентропии пакета R против прокси - PullRequest
0 голосов
/ 02 ноября 2018

Когда я вычисляю расстояния Джакарта для объектов во фрейме данных, я путаюсь, сравнивая результаты proxy :: dist () и philentropy :: distance (). Кроме того, оба результата не соответствуют тому, что я ожидал (так что я думаю, что путаница вызвана мной, а не пакетами).

Вот MWE для двоичных данных с некоторыми комментариями. прокси и филентропия почти одинаковы, хотя в матрице расстояний филентропии есть пропуски.

rm(list=ls())

library("philentropy")
library("proxy")

#5 objects and 2 variables (binary coded) 
data01 <- data.frame(var1 = c(0,1,0,0,1), 
                     var2 = c(0,1,0,0,0))

# jaccard-distand of object A and B:= 1-(count(A equals B) / count(A + B)
# example jaccard-distance 
# object 1 and 2: no correspondance, maximum distance = 1
# object 1 and 3: same coding, minimum distance = 0
# object 1 and 5: different coding on variable 1 and same coding on     variable 2, medium distance = .5

Stats01 <- dist(data01, method="binary", diag=TRUE, upper = TRUE)
Proxy01 <- proxy::dist(data01, method="jaccard", diag=TRUE, upper = TRUE)
Philentropy01 <- philentropy::distance(data01, method="jaccard")

Stats01 #maximum distance object 1 and object 2 (as expected), but object 1 and object 5 as well maximum distance
Proxy01 #same results as Stats01
Philentropy01 #NaN for most zero-values



    1   2   3   4   5
1 0.0 1.0 0.0 0.0 1.0
2 1.0 0.0 1.0 1.0 0.5
3 0.0 1.0 0.0 0.0 1.0
4 0.0 1.0 0.0 0.0 1.0
5 1.0 0.5 1.0 1.0 0.0


    v1  v2  v3  v4  v5
v1 NaN 1.0 NaN NaN 1.0
v2   1 0.0   1   1 0.5
v3 NaN 1.0 NaN NaN 1.0
v4 NaN 1.0 NaN NaN 1.0
v5   1 0.5   1   1 0.0

Вот MWE для закодированных данных со значениями 1, 2, 3. Прокси и филентропия отличаются и оба отличаются от того, что я ожидал.

#5 objects and 2 variables (three categories coded starting from 1)
data123 <- data.frame(var1 = c(1,2,3,1,2), 
                      var2 = c(1,2,3,1,1))

Stats123 <- dist(data123, method="binary", diag=TRUE, upper = TRUE)
Proxy123 <- proxy::dist(data123, method="jaccard", diag=TRUE, upper = TRUE)
Philentropy123 <- philentropy::distance(data123, method="jaccard")

Stats123 #only zero-distances, it's a pitty, but expected because binary interprets everything not-zero as 1
Proxy123 #same results as Stats123
Philentropy123 #for object 1 I expected same distance to object 2 and 3

  1 2 3 4 5
1 0 0 0 0 0
2 0 0 0 0 0
3 0 0 0 0 0
4 0 0 0 0 0
5 0 0 0 0 0


          v1        v2        v3        v4        v5
v1 0.0000000 0.3333333 0.5714286 0.0000000 0.2500000
v2 0.3333333 0.0000000 0.1428571 0.3333333 0.1428571
v3 0.5714286 0.1428571 0.0000000 0.5714286 0.3571429
v4 0.0000000 0.3333333 0.5714286 0.0000000 0.2500000
v5 0.2500000 0.1428571 0.3571429 0.2500000 0.0000000

Я хотел бы знать:

  1. Почему филентропия дает NaN-значения для некоторых нулевых расстояний (и как их избежать) в случае двоично-кодированных данных?

  2. Почему соответствие приводит к различным значениям расстояния в зависимости от того, согласуются ли нули или 1, или для переменных с кодированием 1, 2, 3 в зависимости от этих значений.

...