stride <- function(seq,dis=NULL,tree=NULL) { ncol <- length(seq) pnt <- 0 if (!is.null(dis)) { res <- matrix(NA,nrow=attr(dis,'Size'),ncol=ncol) for (i in seq) { pnt <- pnt + 1 res[,pnt] <- pam(dis,i)$clustering } out <- data.frame(res) names(out) <- as.character(seq) row.names(out) <- attr(dis,'Labels') out <- list(clustering=out,seq=seq) class(out) <- 'stride' out } else if (!is.null(tree)) { res <- matrix(NA,nrow=length(tree$order),ncol=ncol) for (i in seq) { pnt <- pnt + 1 res[,pnt] <- cutree(tree,i) } out <- data.frame(res) names(out) <- as.character(seq) row.names(out) <- tree$labels out <- list(clustering=out,seq=seq) class(out) <- 'stride' out } else print('you must enter a dissimilarity or a tree') } plot.stride <- function (stride,dis,col2=4) { oldpar <- par(no.readonly=TRUE) par(mar=c(5,4,4,4)+0.1,bg='white',fg='black') plot(partana(stride,dis),xlab='Number of Clusters', ylab='Partana Ratio',type='b') par(new=TRUE) tmp <- silhouette(stride,dis) plot(tmp,axes=FALSE,xlab='',ylab='',col=col2,type='b') axis(4,at=pretty(range(tmp$sil_width)),col.axis=col2,col.tick=col2) mtext('Silhouette Width',4,2.5,col=col2) par(oldpar) } partana.stride <- function(stride,dis) { res <- rep(NA,ncol(stride$clustering)) for (i in 1:ncol(stride$clustering)) { res[i] <- partana(stride$clustering[,i],dis)$ratio } clusters <- stride$seq ratio <- res out <- data.frame(clusters,ratio) out } silhouette.stride <- function(stride,dis) { res <- rep(NA,ncol(stride$clustering)) for (i in 1:ncol(stride$clustering)) { res[i] <- mean(silhouette(stride$clustering[,i],dis)[,3]) } clusters <- stride$seq sil_width <- res out <- data.frame(clusters,sil_width) out } indval.stride <- function(stride,taxa,numitr=1) { res <- rep(NA,ncol(stride$clustering)) for (i in 1:ncol(stride$clustering)) { res[i] <- mean(indval(taxa,stride$clustering[,i],numitr=numitr)$indcls) } clusters <- stride$seq indval <- res out <- data.frame(clusters,indval) out } optpart.stride <- function(stride,dis) { res <- rep(NA,ncol(stride$clustering)) for (i in 1:ncol(stride$clustering)) { tmp <- optpart(dis,clustering=stride$clustering[,i]) res[i] <- tmp$ratio[tmp$numitr] } clusters <- stride$seq ratio <- res out <- data.frame(clusters,ratio) out } diam.stride <- function(stride,dis,digits=3) { res <- rep(NA,ncol(stride$clustering)) dis <- as.matrix(dis) for (i in 1:ncol(stride$clustering)) { tmp <- disdiam(stride$clustering[,i],dis,digits=digits) res[i] <- tmp$mean } clusters <- stride$seq diameters <- res out <- data.frame(clusters,diameters) out }