On 1/1/2013 3:43 PM, Prof Brian Ripley wrote:
On 01/01/2013 19:50, Michael Friendly wrote:
Given a data set with a group factor, I want to translate the numeric
variables to their
centroid, by subtracting out the group means (adding back the grand
means).

...

Yes.  It is part of the calculation of within-group covariances in LDA,
so (from MASS:::lda.default)

     group.means <- tapply(x, list(rep(g, p), col(x)), mean)
     x - group.means[g, ]

shows the idiom.

thanks for this, Brian-- just the idiom I was looking for.  However, I
want the result to be centered at the grand means, so:

pool <- function(x, groups){
  x <- as.matrix(x)
  p <- ncol(x)
  n <- nrow(x)
  g <- as.factor(groups)
  group.means <- tapply(x, list(rep(g, p), col(x)), mean)
  grand.mean <- colMeans(x)
  x - group.means[g, ] + outer(rep(1,n), grand.mean)
}

pooled <- data.frame(pool(iris[,1:4], iris[,5]))
pooled$Species <- iris$Species



--
Michael Friendly     Email: friendly AT yorku DOT ca
Professor, Psychology Dept. & Chair, Quantitative Methods
York University      Voice: 416 736-2100 x66249 Fax: 416 736-5814
4700 Keele Street    Web:   http://www.datavis.ca
Toronto, ONT  M3J 1P3 CANADA

______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to