Dear @HajkD -- I think that the Gower distance is not correctly implemented in the package. As far as I understand it -- for categorical features it should either return 0 (if identical) or 1 (if different). Moreover, this distance should be bounded between 0 and 1. However, the current version of the code has no understanding of categorical variables and returns values larger than 1.
reference <- data.frame(cat = factor(c("A","B", "A", "C"), levels = c("A","B", "C")))
# Compute Gower distance with cluster::daisy
gower_dist <- cluster::daisy(reference, metric = "gower")
as.matrix(gower_dist)
#> 1 2 3 4
#> 1 0 1 0 1
#> 2 1 0 1 1
#> 3 0 1 0 1
#> 4 1 1 1 0
# Compute Gower distance with philentropy::distance
reference2 <- reference
reference2$cat <- as.integer(reference2$cat)
gower_dist2 <- philentropy::distance(reference2, method = "gower")
#> Metric: 'gower' with unit: 'log'; comparing: 4 vectors
gower_dist2
#> v1 v2 v3 v4
#> v1 0 1 0 2
#> v2 1 0 1 1
#> v3 0 1 0 2
#> v4 2 1 2 0
Dear @HajkD -- I think that the Gower distance is not correctly implemented in the package. As far as I understand it -- for categorical features it should either return 0 (if identical) or 1 (if different). Moreover, this distance should be bounded between 0 and 1. However, the current version of the code has no understanding of categorical variables and returns values larger than 1.