[R] adding factor scores back to an incomplete dataset...

David G. Tully d-tully at u.northwestern.edu
Sat Aug 29 01:30:09 CEST 2009


Thanks, Prof Spector. Your first solution works well for me.

Phil Spector wrote:
> 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