This function checks whether the distance matrix \(D:=d_{ij} = d(x_i, x_j)\) satisfies four axioms to make itself a semimetric, which are (1) \(d_{ii} = 0\), (2) \(d_{ij} > 0\) for \(i\neq j\), (3) \(d_{ij} = d_{ji}\), and (4) \(d_{ij} \leq d_{ik} + d_{kj}\).

checkmetric(d)

Arguments

d

"dist" object or \((N\times N)\) matrix of pairwise distances.

Value

a logical; TRUE if it satisfies metric property, FALSE otherwise.

See also

Examples

## Let's use L2 distance matrix of iris dataset
data(iris)
dx = as.matrix(stats::dist(iris[,1:4]))

# perturb d(i,j) 
dy = dx  
dy[1,2] <- dy[2,1] <- 10

# run the algorithm
checkmetric(dx)
#> [1] TRUE
checkmetric(dy)
#> [1] FALSE