Title: | Calculate Hopkins Statistic for Clustering |
---|---|
Description: | Calculate Hopkins statistic to assess the clusterability of data. See Wright (2023) <doi:10.32614/RJ-2022-055>. |
Authors: | Kevin Wright [aut, cre, cph] |
Maintainer: | Kevin Wright <[email protected]> |
License: | MIT + file LICENSE |
Version: | 1.1 |
Built: | 2024-11-14 04:44:12 UTC |
Source: | https://github.com/kwstat/hopkins |
Calculate Hopkins statistic for given data.
hopkins( X, m = ceiling(nrow(X)/10), d = ncol(X), k = 1, U = NULL, method = "simple" )
hopkins( X, m = ceiling(nrow(X)/10), d = ncol(X), k = 1, U = NULL, method = "simple" )
X |
Data (matrix or data.frame) to check clusterability. |
m |
Number of rows to sample from X. Default is 1/10th the number of rows of X. |
d |
Dimension of the data (number of columns of X). |
k |
kth nearest neighbor to find. |
U |
Data containing |
method |
Either "simple" or "torus". |
Calculated values 0-0.3 indicate regularly-spaced data. Values around 0.5 indicate random data. Values 0.7-1 indicate clustered data.
CAUTION: This function does NOT center and scale the columns of X. You may need to do this manually before using this function.
You should NOT set The parameter 'd'. It is included here to allow for
comparisons of hopkins::hopkins()
and clustertend::hopkins()
.
The data U
is also not normally set by the user. It is included
here to allow for unit testing and also for customization of the
uniformly-sampled points (e.g. enlarged by 5 percent as suggested by
some authors).
Some authors suggest sampling less than 10 percent of points. Others suggest m>10 points to avoid small-sample problems. The distribution of Hopkins statistic requires that nearest neighbors to the selected points be mutually independent, so that only a few of the points can be marked. The distribution of Hopkins statistic is Beta(m,m), independent of the dimensionality of the data d.
Cross & Jain say "The m sampling points are few enough in number, relative to n (the number of events), that their presence does not materially affect the overall density. Ratios of at least 10 to 1 and preferably 20 to 1 are used in the literature. On the other hand, it seems that m should be at least 10 in order to avoid any small sample problems with the distributions of the statistics. This effectively limits the methods to problems with at least 100 events. In high dimensions, very little can be said about data sets that are sparser than that."
Note:
Comparison of hopkins::hopkins()
and clustertend::hopkins()
.
The 'hopkins::hopkins()' function uses distances^d (where "distance" is the Euclidean distance between points and "d" is the number of columns in the data). The value returned is: Hopkins statistic.
The 'clustertend::hopkins()' function uses distances^1. The value returned is: 1 - Hopkins statistic.
The value of Hopkins statistic.
Kevin Wright
Hopkins, B. and Skellam, J.G., 1954. A new method for determining the type of distribution of plant individuals. Annals of Botany, 18(2), pp.213-227.
Cross, G. R., and A. K. Jain. (1982). Measurement of clustering tendency. Theory and Application of Digital Control. Pergamon, 1982. 315-320.
set.seed(1) hopkins(iris[, 1:4], m=15) # .9952293 hop <- rep(NA, 100) for(i in 1:100){ hop[i] <- hopkins(iris[,1:4], m=8) } mean(hop)
set.seed(1) hopkins(iris[, 1:4], m=15) # .9952293 hop <- rep(NA, 100) for(i in 1:100){ hop[i] <- hopkins(iris[,1:4], m=8) } mean(hop)
Calculate the p-value for Hopkins statistic
hopkins.pval(x, n)
hopkins.pval(x, n)
x |
Observed value of Hopkins statistic |
n |
Number of events/points sampled. |
Under null hypothesis of spatial randomness, Hopkins statistic has a Beta(m,m) distribution, where 'm' is the number of events/points sampled. This function calculates the p-value for the statistic.
A p-value between 0 and 1.
Kevin Wright
Michael T. Gastner (2005). Spatial distributions: Density-equalizing map projections, facility location, and two-dimensional networks. Ph.D. dissertation, Univ. Michigan (Ann Arbor, 2005). http://hdl.handle.net/2027.42/125368
hopkins.pval(0.21, 10) # .00466205
hopkins.pval(0.21, 10) # .00466205