David -
Here's the easiest way I've been able to come up with. I'll provide some sample data to make things clearer (hint, hint):

dat = data.frame(matrix(rnorm(100),20,5))
dat[3,4] = NA
dat[12,3] = NA
scrs = factanal(na.omit(dat),factors=2,scores='regression')$scores
rownames(scrs) = rownames(na.omit(dat))
newdat = merge(dat,scrs,by=0,all.x=TRUE,sort=FALSE)

This will result in the observations with missing values being
at the end of the data frame.  If you want the original order
(assuming default row names), you could use

newdat[order(as.numeric(newdat$Row.names)),]

A somewhat more complicated approach is, in some sense, more direct:

dat$Factor1 = NA
dat$Factor2 = NA
dat[rownames(na.omit(dat[,-c(6,7)])),c('Factor1','Factor2')] =
+    factanal(na.omit(dat[,-c(6,7)]),factors=2,scores='regression')$scores

The order of the data is preserved.
                                        - Phil Spector
                                         Statistical Computing Facility
                                         Department of Statistics
                                         UC Berkeley
                                         spec...@stat.berkeley.edu








On Tue, 25 Aug 2009, David G. Tully wrote:

I am sure there is a simple way to do the following, but i haven't been able to find it. I am hoping a merciful soul on R-help could point me in the right direction.

I am doing a factor analysis on survey data with missing values. to do this, I run:

FA1<-factanal(na.omit(DATA), factors = X, rotation = 'oblimin', scores = 'regression')

Now that I have my factors and factor scores, I want to add those scores back to my original dataset so I can plot factor scores by demographics. However, when I try to add the scores back to the original data frame, the variables are of different lengths.

Is there a way to subset from my original data set that will work with factanal() and preserve the original rows or that will allow me to append the factor scores back onto the original dataset with the proper rows and NAs where there could be no data?

Again, I apologize if I am missing something basic. I am a self taught R user and couldn't find an answer to this question.

Thanks in advance,
 David

______________________________________________
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.


______________________________________________
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