ellipsoidhull {cluster} | R Documentation |
Compute the ``ellipsoid hull'' or ``spanning ellipsoid'', i.e. the ellipsoid of minimal volume (`area' in 2D) such that all given points lie just inside or on the boundary of the ellipsoid.
ellipsoidhull(x, tol=0.01, maxit=5000, ret.wt = FALSE, ret.sqdist = FALSE, ret.pr = FALSE) ## S3 method for class 'ellipsoid': print(x, digits = max(1, getOption("digits") - 2), ...)
x |
the n p-dimensional points asnumeric n x p matrix. |
tol |
convergence tolerance for Titterington's algorithm.
Setting this to much smaller values may drastically increase the number of
iterations needed, and you may want to increas maxit as well. |
maxit |
integer giving the maximal number of iteration steps for the algorithm. |
ret.wt, ret.sqdist, ret.pr |
logicals indicating if additional
information should be returned, ret.wt specifying the
weights, ret.sqdist the squared
distances and ret.pr the final probabilities
in the algorithms. |
digits,... |
the usual arguments to print methods. |
The ``spanning ellipsoid'' algorithm is said to stem from
Titterington(1976), in Pison et al(1999) who use it for
clusplot.default
.
The problem can be seen as a special case of the ``Min.Vol.''
ellipsoid of which a more more flexible and general implementation is
cov.mve
in the lqs
package.
an object of class "ellipsoid"
, basically a list
with several components, comprising at least
cov |
p x p covariance matrix description the ellipsoid. |
loc |
p-dimensional location of the ellipsoid center. |
d2 |
average squared radius. |
wt |
the vector of weights iff ret.wt was true. |
sqdist |
the vector of squared distances iff ret.sqdist was true. |
prob |
the vector of algorithm probabilities iff ret.pr was true. |
it |
number of iterations used. |
tol, maxit |
just the input argument, see above. |
eps |
the achieved tolerance which is the maximal squared radius minus p. |
ierr |
error code as from the algorithm; 0 means ok. |
conv |
logical indicating if the converged. This is defined as
it < maxit && ierr == 0 . |
Martin Maechler did the present class implementation; Rousseeuw et al did the underlying code.
Pison, G., Struyf, A. and Rousseeuw, P.J. (1999)
Displaying a Clustering with CLUSPLOT,
Computational Statistics and Data Analysis, 30, 381–392.
A version of this is available as technical report from
http://win-www.uia.ac.be/u/statis/abstract/Disclu99.htm
D.N. Titterington. (1976) Algorithms for computing {D}-optimal design on finite design spaces. In Proc. of the 1976 Conf. on Information Science and Systems, 213–216; John Hopkins University.
chull
for the convex hull,
clusplot
which makes use of this; cov.mve
.
x <- rnorm(100) xy <- unname(cbind(x, rnorm(100) + 2*x + 10)) exy <- ellipsoidhull(xy) exy # >> calling print.ellipsoid() plot(xy) lines(predict(exy)) points(rbind(exy$loc), col = "red", cex = 3, pch = 13) exy <- ellipsoidhull(xy, tol = 1e-7, ret.wt = TRUE, ret.sq = TRUE) str(exy) # had small `tol', hence many iterations (ii <- which(zapsmall(exy $ wt) > 1e-6)) # only about 4 to 6 points round(exy$wt[ii],3); sum(exy$wt[ii]) # sum to 1