[R] adding factor scores back to an incomplete dataset...
Phil Spector
spector at stat.berkeley.edu
Tue Aug 25 23:40:13 CEST 2009
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
spector at 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 at 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.
>
More information about the R-help
mailing list