[Archetypes-commits] r21 - pkg/R

noreply at r-forge.r-project.org noreply at r-forge.r-project.org
Thu Feb 11 10:16:03 CET 2010


Author: manuel
Date: 2010-02-11 10:16:02 +0100 (Thu, 11 Feb 2010)
New Revision: 21

Modified:
   pkg/R/archetypes-class.R
   pkg/R/archetypes-kit-blocks.R
   pkg/R/archetypes-kit.R
   pkg/R/archetypes-pcplot.R
   pkg/R/archetypes-plot.R
Log:
revert for branching ...

Modified: pkg/R/archetypes-class.R
===================================================================
--- pkg/R/archetypes-class.R	2010-02-08 13:05:05 UTC (rev 20)
+++ pkg/R/archetypes-class.R	2010-02-11 09:16:02 UTC (rev 21)
@@ -14,7 +14,6 @@
 #' @param kappas The kappas for each system of linear equations.
 #' @param betas The data coefficients; a \eqn{p \times n} matrix.
 #' @param zas The temporary archetypes.
-#' @param weights Vector of data weights within \eqn{[0, 1]}.
 #' @return A list with an element for each parameter and class attribute
 #'   \code{archetypes}.
 #' @seealso \code{\link{archetypes}}, \code{\link{atypes}}, \code{\link{ntypes}},
@@ -22,26 +21,19 @@
 #'   \code{\link{ahistory}}, \code{\link{nhistory}}
 #' @export
 as.archetypes <- function(archetypes, k, alphas, rss, iters=NULL, call=NULL,
-                          history=NULL, kappas=NULL, betas=NULL, zas=NULL,
-                          weights=NULL) {
-
-  a <- structure(list(archetypes=archetypes,
-                      k=k,
-                      alphas=alphas,
-                      rss=rss,
-                      iters=iters,
-                      kappas=kappas,
-                      betas=betas,
-                      zas=zas,
-                      call=call,
-                      history=history,
-                      weights=weights),
-                 class='archetypes')
-
-  if ( !is.null(weights) )
-    class(a) <- c('weightedArchetypes', class(a))
-
-  a
+                          history=NULL, kappas=NULL, betas=NULL, zas=NULL) {
+  
+  return(structure(list(archetypes=archetypes,
+                        k=k,
+                        alphas=alphas,
+                        rss=rss,
+                        iters=iters,
+                        kappas=kappas,
+                        betas=betas,
+                        zas=zas,
+                        call=call,
+                        history=history),
+                   class='archetypes'))  
 }
 
 
@@ -58,7 +50,7 @@
     cat('Archetypes object\n\n')
     cat(deparse(x$call), '\n\n')
   }
-
+  
   cat('Convergence after', x$iters, 'iterations\n')
   cat('with RSS = ', rss(x), '.\n', sep='')
 }
@@ -231,7 +223,7 @@
     s <- paste('s', step, sep='')
   else
     s <- paste('s', nhistory(zs) + step - 1, sep='')
-
+  
   return(zs$history[[s]][[1]])
 }
 

Modified: pkg/R/archetypes-kit-blocks.R
===================================================================
--- pkg/R/archetypes-kit-blocks.R	2010-02-08 13:05:05 UTC (rev 20)
+++ pkg/R/archetypes-kit-blocks.R	2010-02-11 09:16:02 UTC (rev 21)
@@ -61,11 +61,11 @@
 make.dummyfn <- function(huge=200) {
 
   bp.dummyfn <- function(x) {
-    y = rbind(x, rep(huge, ncol(x)))
-
+    y = rbind(x, rep(huge, ncol(x))) 
+    
     attr(y, '.Meta') = attr(x, '.Meta')
     attr(y, '.Meta')$dummyrow = nrow(y)
-
+  
     return(y)
   }
 
@@ -79,7 +79,7 @@
 #' @return Archetypes zs.
 rm.undummyfn <- function(x, zs) {
   dr = attr(x, '.Meta')$dummyrow
-
+  
   return(zs[-dr,])
 }
 
@@ -119,7 +119,7 @@
 #' @return The solved linear system.
 ginv.zalphasfn <- function(alphas, x) {
   require(MASS)
-
+  
   return(t(ginv(alphas %*% t(alphas)) %*% alphas %*% t(x)))
 }
 
@@ -131,7 +131,7 @@
 #' @return The solved linear system.
 opt.zalphasfn <- function(alphas, x) {
   z <- rnorm(nrow(x)*nrow(alphas))
-
+               
   fun <- function(z){
     z <- matrix(z, ncol=nrow(alphas))
     sum( (x - z %*% alphas)^2)
@@ -154,9 +154,9 @@
 #' @return Recalculated alpha.
 nnls.alphasfn <- function(coefs, C, d) {
   require(nnls)
-
+  
   n = ncol(d)
-
+  
   for ( j in 1:n )
     coefs[,j] = coef(nnls(C, d[,j]))
 
@@ -175,8 +175,8 @@
 
   nc = ncol(C)
   nr = nrow(C)
+  
 
-
   s = svd(C, nv=nc)
   yint = t(s$u) %*% d
 
@@ -228,7 +228,7 @@
 }
 
 
-
+  
 ### Archetypes initialization functions:
 
 #' Init block: generator for random initializtion.
@@ -237,15 +237,15 @@
 make.random.initfn <- function(k) {
 
   bp.initfn <- function(x, p) {
-
+  
     n = ncol(x)
     b = matrix(0, nrow=n, ncol=p)
 
     for ( i in 1:p )
       b[sample(n, k, replace=FALSE),i] = 1 / k
-
+    
     a = matrix(1, nrow=p, ncol=n) / p
-
+    
     return(list(betas=b, alphas=a))
   }
 
@@ -259,12 +259,12 @@
 
   fix.initfn <- function(x, p) {
     n = ncol(x)
-
+  
     b = matrix(0, nrow = n, ncol = p)
     b[indizes,] = diag(p)
 
     a = matrix(1, nrow = p, ncol = n) / p
-
+  
     return(list(betas = b, alphas = a))
   }
 
@@ -273,23 +273,6 @@
 
 
 
-### Weighting functions:
-
-#' Weighting function: move data closer to global center
-#' @param data A numeric \eqn{m \times n} data matrix.
-#' @param weights Vector of data weights within \eqn{[0, 1]}.
-#' @return Weighted data matrix.
-center.weightfn <- function(data, weights) {
-  if ( is.null(weights) )
-    return(data)
-
-  weights <- as.numeric(1 - weights)
-  center <- rowMeans(data)
-  data + t(weights * t(center - data))
-}
-
-
-
 ### Archetypes family:
 
 #' Archetypes family constructor.
@@ -310,8 +293,7 @@
               undummyfn=rm.undummyfn,
               initfn=make.random.initfn(1),
               alphasfn=nnls.alphasfn,
-              betasfn=nnls.betasfn,
-              weightfn=center.weightfn)
+              betasfn=nnls.betasfn)
 
   fam$zalphasfn <- switch(which[1],
                           'default' = qrsolve.zalphasfn,

Modified: pkg/R/archetypes-kit.R
===================================================================
--- pkg/R/archetypes-kit.R	2010-02-08 13:05:05 UTC (rev 20)
+++ pkg/R/archetypes-kit.R	2010-02-11 09:16:02 UTC (rev 21)
@@ -7,7 +7,6 @@
 #' Perform archetypal analysis on a data matrix.
 #' @param data A numeric \eqn{n \times m} data matrix.
 #' @param k The number of archetypes.
-#' @param weights Vector of data weights within \eqn{[0, 1]}.
 #' @param maxIterations The maximum number of iterations.
 #' @param minImprovement The minimal value of improvement between two
 #'   iterations.
@@ -27,14 +26,14 @@
 #'   a <- archetypes(toy, 3)
 #' @export
 #' @note Please see the vignette for a detailed explanation!
-archetypes <- function(data, k, weights=NULL, maxIterations=100,
+archetypes <- function(data, k, maxIterations=100,
                        minImprovement=sqrt(.Machine$double.eps),
                        maxKappa=1000, verbose=TRUE, saveHistory=TRUE,
                        family=archetypesFamily('default')) {
-
+  
   ### Helpers:
   mycall <- match.call()
-
+  
   history <- NULL
   snapshot <- function(name) {
     history[[paste('s', name, sep='')]] <-
@@ -42,15 +41,14 @@
              family$undummyfn(x, zs))), k, alphas=t(alphas),
              betas=t(betas), zas=t(family$rescalefn(x,
              family$undummyfn(x, zas))), rss=rss,
-             kappas=kappas, weights=weights))
+             kappas=kappas))
   }
 
 
   ### Data preparation:
-  data <- t(data)
-  data <- family$scalefn(data)
-  data <- family$dummyfn(data)
-  x <- family$weightfn(data, weights)
+  x <- t(data)
+  x <- family$scalefn(x)
+  x <- family$dummyfn(x)
 
   n <- ncol(x)
   m <- nrow(x)
@@ -58,7 +56,7 @@
 
   ### Initialization:
   init <- family$initfn(x, k)
-
+  
   betas <- init$betas
   alphas <- init$alphas
 
@@ -71,19 +69,19 @@
               zas=-Inf, zs=kappa(zs))
   isIll <- c(kappas) > maxKappa
   errormsg <- NULL
-
+  
   if ( saveHistory ) {
     history <- new.env(parent=emptyenv())
     snapshot(0)
   }
 
-
+  
   ### Main loop:
   i <- 1
   imp <- +Inf
 
   tryCatch(while ( (i <= maxIterations) & (imp >= minImprovement) ) {
-
+    
     ## Alpha's:
     alphas <- family$alphasfn(alphas, zs, x)
     zas <- family$zalphasfn(alphas, x)
@@ -91,39 +89,39 @@
 
     kappas[c('alphas', 'zas')] <- c(kappa(alphas), kappa(zas))
 
-
+    
     ## Beta's:
     betas <- family$betasfn(betas, x, zas)
     zs <- x %*% betas
 
     kappas[c('betas', 'zs')] <- c(kappa(betas), kappa(zs))
 
-
+    
     ## RSS and improvement:
     rss2 <- family$normfn(zs %*% alphas - x) / n
-
+    
     imp <- rss - rss2
     rss <- rss2
 
     kappas <- c(alphas=kappa(alphas), betas=kappa(betas),
                 zas=kappa(zas), zs=kappa(zs))
     isIll <- isIll & (kappas > maxKappa)
+    
 
-
     ## Loop Zeugs:
     if ( verbose )
       cat(i, ': rss = ', formatC(rss, 8, format='f'),
           ', improvement = ', formatC(imp, 8, format='f'),
           '\n', sep = '')
-
+    
     if ( saveHistory )
       snapshot(i)
-
+    
     i <- i + 1
   },
   error=function(e) errormsg <<- e)
+  
 
-
   ### Check illness:
   if ( !is.null(errormsg) ) {
     warning('k=', k, ': ', errormsg)
@@ -135,20 +133,14 @@
     warning('k=', k, ': ', paste(names(isIll)[isIll], collapse=', '),
             ' > maxKappa', sep='')
 
-
+  
   ### Rescale archetypes:
-  if ( !is.null(weights) ) {
-    alphas <- family$alphasfn(alphas, zs, data)
-    betas <- family$betasfn(betas, data, zs)
-  }
-
   zs <- family$undummyfn(x, zs)
   zs <- family$rescalefn(x, zs)
   zs <- t(zs)
 
-
+  
   return(as.archetypes(zs, k, t(alphas), rss, iters=(i-1),
                        call=mycall, history=history, kappas=kappas,
-                       betas=t(betas), weights=weights))
+                       betas=t(betas)))
 }
-

Modified: pkg/R/archetypes-pcplot.R
===================================================================
--- pkg/R/archetypes-pcplot.R	2010-02-08 13:05:05 UTC (rev 20)
+++ pkg/R/archetypes-pcplot.R	2010-02-11 09:16:02 UTC (rev 21)
@@ -7,7 +7,6 @@
 #' @param data A matrix or data frame.
 #' @param data.col Color of data lines.
 #' @param data.lwd Width of data lines.
-#' @param data.lty Type of data lines.
 #' @param atypes.col Color of archetypes lines.
 #' @param atypes.lwd Width of archetypes lines.
 #' @param atypes.lty Type of archetypes lines.
@@ -20,36 +19,17 @@
 #' @return Undefined.
 #' @method pcplot archetypes
 #' @S3method pcplot archetypes
-pcplot.archetypes <- function(x, data, data.col=gray(0.7), data.lwd=1, data.lty=1,
+pcplot.archetypes <- function(x, data, data.col=gray(0.7), data.lwd=1,
                               atypes.col=2, atypes.lwd=2, atypes.lty=1,
                               chull=NULL, chull.col=1, chull.lwd=2, chull.lty=1, ...) {
 
-  pcplot(data, col=data.col, lwd=data.lwd, lty=data.lty, ...)
+  pcplot(data, col=data.col, lwd=data.lwd, ...)
 
   if ( !is.null(chull) )
     lines.pcplot(data[chull,], data,
                  col=chull.col, lwd=chull.lwd, lty=chull.lty, ...)
-
+  
   lines.pcplot(atypes(x), data,
                col=atypes.col, lwd=atypes.lwd, lty=atypes.lty, ...)
 }
 
-
-
-#' Parallel coordinates of weighted data and archetypes.
-#' @param x An \code{\link{archetypes}} object.
-#' @param data A matrix or data frame.
-#' @param data.col Function to calculate weighted data lines color.
-#' @param ... Passed to \code{\link{pcplot.archetypes}}.
-#' @return Undefined.
-#' @method pcplot weightedArchetypes
-#' @S3method pcplot weightedArchetypes
-#' @noRd
-pcplot.weightedArchetypes <- function(x, data,
-                                      data.col=function(x) gray(1 - x), ...) {
-
-  col <- data.col(x$weights)
-  lty <- ifelse(x$weights == 0, 2, 1)
-
-  pcplot.archetypes(x, data, data.col=col, data.lty=lty, ...)
-}

Modified: pkg/R/archetypes-plot.R
===================================================================
--- pkg/R/archetypes-plot.R	2010-02-08 13:05:05 UTC (rev 20)
+++ pkg/R/archetypes-plot.R	2010-02-11 09:16:02 UTC (rev 21)
@@ -7,13 +7,13 @@
   a <- rbind(atypes(zs), atypes(zs)[1,])
   xc <- a[,1]; xm <- mean(xc)
   yc <- a[,2]; ym <- mean(yc)
-
+  
   real <- xc - xm
   imag <- yc - ym
   angle <- atan2(imag, real)
-
+  
   index <- order(angle)
-
+  
   return(a[c(index, index[1]),])
 }
 
@@ -24,7 +24,6 @@
 #' @param y A matrix or data frame.
 #' @param data.col Color of data points.
 #' @param data.pch Type of data points.
-#' @param data.bg Fill color for data points.
 #' @param atypes.col Color of archetypes points.
 #' @param atypes.pch Type of archetypes points.
 #' @param ahull.show Show approximated convex hull.
@@ -47,7 +46,7 @@
 #' @export
 #' @noRd
 plot.archetypes <- function(x, y,
-                            data.col=gray(0.7), data.pch=19, data.bg=NULL,
+                            data.col=gray(0.7), data.pch=19,
                             atypes.col=2, atypes.pch=19,
                             ahull.show=TRUE, ahull.col=atypes.col,
                             chull=NULL, chull.col=1, chull.pch=19,
@@ -56,7 +55,7 @@
 
   zs <- x; data <- y;
 
-  plot(data, col=data.col, pch=data.pch, bg=data.bg, ...)
+  plot(data, col=data.col, pch=data.pch, ...)
   points(atypes(zs), col=atypes.col, pch=atypes.pch, ...)
 
   if ( !is.null(chull) ) {
@@ -71,41 +70,15 @@
   if ( adata.show ) {
     ### Based on an idea of Bernard Pailthorpe.
     adata <- adata(zs)
-    link.col <- rep(link.col, length.out=nrow(adata))
-
-    for ( i in seq_len(nrow(data)) )
-      lines(rbind(data[i,], adata[i,]), col=link.col[i], ...)
-
+    
     points(adata, col=adata.col, pch=adata.pch, ...)
+    for ( i in seq_len(nrow(data)) )
+      lines(rbind(data[i,], adata[i,]), col=link.col, ...)
   }
-
-
-  invisible(NULL)
 }
 
 
 
-#' Plot of weighted data and archetypes.
-#' @param x An \code{\link{archetypes}} object.
-#' @param y A matrix or data frame.
-#' @param data.col Color of data points.
-#' @param data.pch Type of data points.
-#' @param data.bg Function to calculate weighted data point color.
-#' @param ... Passed to the underlying \code{\link{plot.archetypes}} functions.
-#' @return Undefined.
-#' @method plot weightedArchetypes
-#' @export
-#' @noRd
-plot.weightedArchetypes <- function(x, y,
-                                    data.col=1, data.pch=21,
-                                    data.bg=function(x) gray(1 - x), ...) {
-
-  plot.archetypes(x, y, data.pch = data.pch, data.col=data.col,
-                  data.bg=data.bg(x$weights), ...)
-}
-
-
-
 #' Plot of data and stepArchetypes.
 #' @param x An \code{\link{stepArchetypes}} object.
 #' @param y A matrix or data frame.
@@ -124,11 +97,11 @@
                                 data.col=gray(0.7), data.pch=19,
                                 atypes.col=(seq_len(length(x) * length(x[[1]]))+1),
                                 atypes.pch=19, ahull.show=TRUE, ahull.col=atypes.col, ...) {
-
+  
   zs <- x; data <- y;
-
+  
   flatzs <- unlist(zs, recursive=FALSE)
-
+  
   plot(data, col=data.col, pch=data.pch, ...)
   for ( i in seq_along(flatzs) ) {
     a <- flatzs[[i]]
@@ -140,4 +113,3 @@
 }
 
 
-



More information about the Archetypes-commits mailing list