Polychoric correlations and factor analysis...I'm pulling my hair out....

Reply
Occasional Contributor
Posts: 14

Polychoric correlations and factor analysis...I'm pulling my hair out....

Hello!

I'm having a terribly hard time trying to import a matrix of polychoric correlations for use in a factor analysis. I'm really not sure what I'm doing wrong, because I'm following the steps I've seen on various websites. The farthest I get is creating a temp file that only has the names of the variables along the top, but none of the cells are filled in. Here's the syntax I've been using. Perhaps someone can tell me where I'm going wrong.

Step 1: creating the matrix:

corr data= Work.temp00 polychoric out= WORK.temp01; var 1_1 q1_2 q1_3 q1_4 q1_5 q1_6 q1_7 q1_8 q1_9 q1_10 q1_11 q1_13 etc.; run;

I then export this temp file into a csv file (I won't include the syntax because it everything works up to this point.

Step 2: trying to imput the correlation matrix

Data= temp02 (type=corr);

infile 'poly.csv';

input _name_ $ q1_1 q1_2 q1_3 q1_4 q1_5 q1_6 q1_7 q1_8 q1_9 q1_10 q1_11 q1_13 etc.; run;

The result is a temp file with a header row with "type" and "name" in the first two columns followed by, as I said, the variable names in the header row, but nothing in the cells? Nevertheless, the next step I'm trying to do is this:

Step 3: factor analysis

Proc factor data=temp02; method=prinit n=2 [note that I'm also not sure what the "n=2" is all about. should this be the actual number of observations?)rotate=promax scree; run;

Any advice would be most welcome! Thank you!

Grand Advisor
Posts: 17,355

Re: Polychoric correlations and factor analysis...I'm pulling my hair out....

Why export out to a file and then bring it back in?

Skip step2 entirely and then go to step 3 and use the temp01 as your data input.

Also, work through an example for proc factor before trying this so you understand the options.

SAS/STAT(R) 9.22 User's Guide

Occasional Contributor
Posts: 14

Re: Polychoric correlations and factor analysis...I'm pulling my hair out....

Thank you for the reply. Unfortunately, I've tried that several times and I get this message:

NOTE: N not equal across variables in data set WORK.TEMP01. This may not be appropriate. The smallest value will be used.

ERROR: CORR matrix incomplete in data set WORK.TEMP01.

NOTE: The SAS System stopped processing this step because of errors.

Grand Advisor
Posts: 17,355

Re: Polychoric correlations and factor analysis...I'm pulling my hair out....

The correlation output from proc corr gives some extra statistics, such as N, Mean etc.

Filter those out first to get a true correlation matrix.

Then input to proc factor, add in a TYPE variable with a value called CORR to specify a correlation input.

You also have your semicolons in the wrong place. Anyways, hopefully this gets you on to working with the proc factor procedure instead of dealing with input data.

See the following to determine what settings you want:

http://www.math.wpi.edu/saspdf/stat/chap26.pdf

proc corr data=sashelp.iris out=corrMatrix;

var petalwidth petallength sepalwidth sepallength;

run;

proc print data=corrMatrix;

run;

data corrMatrix2;

    set corrMatrix;

    where _Type_='CORR';

    TYPE="CORR";

    drop _type_ _name_;

run;

ods graphics on;

proc factor data=corrMatrix2

   rotate=promax

   outstat=fact_all

   plots=scree;

run;

ods graphics off;

Learner
Posts: 1

Re: Polychoric correlations and factor analysis...I'm pulling my hair out....

I recognize this error. You need to look closer of your correlation matrix. Some pairs of your variables may not have their correlation calculated and you got a empty cells in the matrix which SAS says it is incomplete matrix.

Frequent Contributor
Posts: 84

Re: Polychoric correlations and factor analysis...I'm pulling my hair out....

Use proc corr to create the correlation matrix and export it directly to  another SAS dataset and then use that dataset as your ut for proc calis:

Here is the example:

ods listing close;

proc corr data=survey OUTPLC=surveyplc ;

var V1-V12;

run;

ods listing;

proc calis data=surveyplc

;

lineqs

....;

std

.....;

cov

.....

var;

  V1-V12;

run;

Ask a Question
Discussion stats
  • 5 replies
  • 1113 views
  • 2 likes
  • 4 in conversation