Rev 8500 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed
\name{diana}\title{DIvisive ANAlysis Clustering}\alias{diana}\alias{diana.object}\description{Computes a divisive hierarchical clustering of the datasetreturning an object of class \code{diana}.}\usage{diana(x, diss = inherits(x, "dist"), metric = "euclidean", stand = FALSE,stop.at.k = FALSE,keep.diss = n < 100, keep.data = !diss, trace.lev = 0)}\arguments{\item{x}{data matrix or data frame, or dissimilarity matrix or object,depending on the value of the \code{diss} argument.In case of a matrix or data frame, each row corresponds to an observation,and each column corresponds to a variable. All variables must be numeric.Missing values (\code{\link{NA}}s) \emph{are} allowed.In case of a dissimilarity matrix, \code{x} is typically the outputof \code{\link{daisy}} or \code{\link{dist}}. Also a vector oflength n*(n-1)/2 is allowed (where n is the number of observations),and will be interpreted in the same way as the output of theabove-mentioned functions. Missing values (NAs) are \emph{not} allowed.}\item{diss}{logical flag: if TRUE (default for \code{dist} or\code{dissimilarity} objects), then \code{x} will be considered as adissimilarity matrix. If FALSE, then \code{x} will be considered asa matrix of observations by variables.}\item{metric}{character string specifying the metric to be used for calculatingdissimilarities between observations.\crThe currently available options are "euclidean" and"manhattan". Euclidean distances are root sum-of-squares ofdifferences, and manhattan distances are the sum of absolutedifferences. If \code{x} is already a dissimilarity matrix, thenthis argument will be ignored.}\item{stand}{logical; if true, the measurements in \code{x} arestandardized before calculating the dissimilarities. Measurementsare standardized for each variable (column), by subtracting thevariable's mean value and dividing by the variable's mean absolutedeviation. If \code{x} is already a dissimilarity matrix, then thisargument will be ignored.}\item{stop.at.k}{logical or integer, \code{FALSE} by default.Otherwise must be integer, say \eqn{k}, in \eqn{\{1,2,..,n\}},specifying that the \code{diana} algorithm should stop early.%_TODO_ namely after k splits _OR_ with k final clustersNon-default NOT YET IMPLEMENTED.}\item{keep.diss, keep.data}{logicals indicating if the dissimilaritiesand/or input data \code{x} should be kept in the result. Settingthese to \code{FALSE} can give much smaller results and hence even savememory allocation \emph{time}.}\item{trace.lev}{integer specifying a trace level for printingdiagnostics during the algorithm. Default \code{0} does not printanything; higher values print increasingly more.}}\value{an object of class \code{"diana"} representing the clustering;this class has methods for the following generic functions:\code{print}, \code{summary}, \code{plot}.Further, the class \code{"diana"} inherits from\code{"twins"}. Therefore, the generic function \code{\link{pltree}} can beused on a \code{diana} object, and \code{\link{as.hclust}} and\code{\link{as.dendrogram}} methods are available.A legitimate \code{diana} object is a list with the following components:\item{order}{a vector giving a permutation of the original observations to allow forplotting, in the sense that the branches of a clustering tree willnot cross.}\item{order.lab}{a vector similar to \code{order}, but containing observation labelsinstead of observation numbers. This component is only available ifthe original observations were labelled.}\item{height}{a vector with the diameters of the clusters prior to splitting.}\item{dc}{the divisive coefficient, measuring the clustering structure of thedataset. For each observation i, denote by \eqn{d(i)} the diameter of thelast cluster to which it belongs (before being split off as a singleobservation), divided by the diameter of the whole dataset. The\code{dc} is the average of all \eqn{1 - d(i)}. It can also be seenas the average width (or the percentage filled) of the banner plot.Because \code{dc} grows with the number of observations, thismeasure should not be used to compare datasets of very differentsizes.}\item{merge}{an (n-1) by 2 matrix, where n is the number ofobservations. Row i of \code{merge} describes the split at step n-i ofthe clustering. If a number \eqn{j} in row r is negative, then the singleobservation \eqn{|j|} is split off at stage n-r. If j is positive, then thecluster that will be splitted at stage n-j (described by row j), issplit off at stage n-r.}\item{diss}{an object of class \code{"dissimilarity"}, representing the totaldissimilarity matrix of the dataset.}\item{data}{a matrix containing the original or standardized measurements, dependingon the \code{stand} option of the function \code{agnes}. If adissimilarity matrix was given as input structure, then this componentis not available.}}\details{\code{diana} is fully described in chapter 6 of Kaufman and Rousseeuw (1990).It is probably unique in computing a divisive hierarchy, whereas mostother software for hierarchical clustering is agglomerative.Moreover, \code{diana} provides (a) the divisive coefficient(see \code{diana.object}) which measures the amount of clustering structurefound; and (b) the banner, a novel graphical display(see \code{plot.diana}).The \code{diana}-algorithm constructs a hierarchy of clusterings,starting with one largecluster containing all n observations. Clusters are divided until each clustercontains only a single observation.\crAt each stage, the cluster with the largest diameter is selected.(The diameter of a cluster is the largest dissimilarity between anytwo of its observations.)\crTo divide the selected cluster, the algorithm first looks for its mostdisparate observation (i.e., which has the largest average dissimilarity to theother observations of the selected cluster). This observation initiates the"splinter group". In subsequent steps, the algorithm reassigns observationsthat are closer to the "splinter group" than to the "old party". The resultis a division of the selected cluster into two new clusters.}\seealso{\code{\link{agnes}} also for background and references;\code{\link{cutree}} (and \code{\link{as.hclust}}) for groupingextraction; \code{\link{daisy}}, \code{\link{dist}},\code{\link{plot.diana}}, \code{\link{twins.object}}.}\examples{data(votes.repub)dv <- diana(votes.repub, metric = "manhattan", stand = TRUE)print(dv)plot(dv) #-> plot.diana() {w/ its own help + examples}## Cut into 2 groups:dv2 <- cutree(as.hclust(dv), k = 2)table(dv2) # 8 and 42 group membersrownames(votes.repub)[dv2 == 1]## For two groups, does the metric matter ?dv0 <- diana(votes.repub, stand = TRUE) # default: Euclideandv.2 <- cutree(as.hclust(dv0), k = 2)table(dv2 == dv.2)## identical group assignmentsstr(as.dendrogram(dv0)) # {via as.dendrogram.twins() method}data(agriculture)## Plot similar to Figure 8 in ref\dontrun{plot(diana(agriculture), ask = TRUE)}\dontshow{plot(diana(agriculture))}}\keyword{cluster}