ellipsoidhull            package:cluster            R Documentation

_C_o_m_p_u_t_e _t_h_e _E_l_l_i_p_s_o_i_d _H_u_l_l _o_r _S_p_a_n_n_i_n_g _E_l_l_i_p_s_o_i_d _o_f _a _P_o_i_n_t _S_e_t

_D_e_s_c_r_i_p_t_i_o_n:

     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.

_U_s_a_g_e:

     ellipsoidhull(x, tol=0.01, maxit=5000,
                   ret.wt = FALSE, ret.sqdist = FALSE)
     print(x, digits = NULL, ...)

_A_r_g_u_m_e_n_t_s:

       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: logicals indicating if additional information
          should be returned, `ret.wt' specifying the weights and
          `ret.sqdist' the squared distances.

digits,...: the usual arguments to `print' methods.

_D_e_t_a_i_l_s:

     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.

_V_a_l_u_e:

     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.

_A_u_t_h_o_r(_s):

     Martin Maechler did the present class implementation; Rousseeuw et
     al did the underlying code.

_R_e_f_e_r_e_n_c_e_s:

     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 <URL:
     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.

_S_e_e _A_l_s_o:

     `chull' for the convex hull, `clusplot' which makes use of this;
     `cov.mve'.

_E_x_a_m_p_l_e_s:

     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

