I have the following problem with PCA. I have measures from lots of people (>200) on variables sf1, sf2, sf4, sf8, sf16, sf24. The goal is to see underlying "channels" using PCA. Each person i has a "contrast sensitivity function" s_i(f) composed of the summed output of several channels c(f), each weighted differently for each subject: s_i(f) = a_1i * c_1(f) + a_2i * c_2(f) + ... + a_ni * c_n(f) (s_i(f) was measured at 6 values of f, sf1-sf24) This all works well using prcomp. My question. I would like to fit the average s(f) across subjects using the derived channels c_1(f) - c_n(f). Somehow I need to get the weights a_1 to a_n s(f) = a_1 * c_1(f) + a_2 * c_2(f) + ... + a_n * c_n(f) Here is what I did, but there is probably a better solution. dd is the data frame. sf<-c(1,2,4,8,16,24) ddmean<-apply(dd,2,mean) out<-prcomp(dd) r1<-out$rotation[,1];r2<-out$rotation[,2];r3<-out$rotation[,3] #rotate the loadings to give "simple structure" Sr<- varimax(out$rotation[,1:3])$loadings Sr1<-Sr[,1];Sr2<-Sr[,2];Sr3<-Sr[,3] #I just used the first 3 PCs fn <- function(p) sum((ddmean - (p[4]+p[1]*Sr1 +p[2]*Sr2+p[3]*Sr3))^2) fit<-nlm(fn,p=c(-1000,-100,-100,10),hessian=TRUE) b<-fit$estimate plot(sf,ddmean,log="x",ylim=c(5,225),xaxt="n",ylab="",xlab="",pch=15) lines(sf,b[4]+b[1]*Sr1 + b[2]*Sr2 + b[3]*Sr3,lwd=3) lines(sf,b[4]/3+b[1]*Sr1,lty=1) lines(sf,b[4]/3+b[2]*Sr2,lty=2) lines(sf,b[4]/3+b[3]*Sr3,lty=3) Thanks very much for any help. BTW, I have heard of "functional PCA" and it sounds more appropriate for what I am doing. Any pointers on how to do that in R or to any info are appreciated. Bill Simpson