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.