This post was updated on .
When SPSS factor analysis (FACTOR) analyzes covariances by Principal
axis extraction method it by default uses initial communality estimates based on squared multiple correlation RSQ. Specifically, when covariances are analyzed the value being put by FACTOR on the diagonal of the matrix is: Raw initial communality = IMAGE*VAR, where VAR is the variable's variance and IMAGE is the portion of variance explained by all other variables, and equal to RSQ*VAR. SPSS calles IMAGE "rescaled initial communality". Thus, SPSS puts RSQ*VAR*VAR on the diagonal as the starting communality. Statistical package SYSTAT (version 12), quite well known program, has factor analytic facility quite similar to that of SPSS, so they are easy to compare. Both can analyze covariances by Principal axis method. However, SYSTAT initially puts on the diagonal of the covariance matrix value IMAGE*VAR [my lapse: should read: RSQ*VAR (=IMAGE)], not value RSQ*VAR*VAR. Thence the results (unless number of iterations are very much) are different in SPSS and in SYSTAT. Who is correct and who is wrong? The question is practically and theoretically important. If you want to reproduce principal axis factoring of covariances done by SPSS and by SYSTAT, you may use the following MATRIX piece. data list list / V1 V2 V3 V4 V5 V6 V7 . begin data -1.552 -2.077 -.184 -1.190 -.242 .200 -1.157 .172 -.691 -2.023 -.083 .039 -1.448 2.641 .951 .784 -1.604 .323 -.999 -.394 2.753 .690 1.882 .333 .689 1.422 -2.222 .655 1.743 .594 .459 -.215 -.183 1.096 1.155 .389 2.487 .255 -3.051 1.927 .679 2.032 -1.379 -.342 -3.733 2.051 1.046 -.998 -1.004 1.723 .975 1.003 -3.106 -1.381 -.827 .127 .764 .329 1.309 -1.530 .402 .239 .412 2.630 1.039 1.297 1.140 -.227 -.497 1.488 -1.356 .747 -1.402 -.697 1.860 .058 -1.778 -.920 -.824 -2.332 1.540 -1.194 1.475 1.655 -.864 .253 -.960 .294 -2.305 -.921 -.139 -.453 .136 -.347 -.396 -.989 -1.099 2.647 .052 -1.064 -.144 2.898 1.688 2.019 -1.705 -2.305 -2.581 -.784 .405 .507 -.695 -1.585 -.468 1.889 -1.494 -.711 1.819 2.062 -.392 .151 .132 -.235 -.711 -.982 -2.347 1.225 -.868 -1.876 1.065 -1.290 -.775 2.102 -2.037 -1.154 -.483 1.261 .766 1.104 .837 -.602 .381 -.543 1.611 -1.658 -.214 2.079 .791 -2.742 1.062 -3.070 -1.049 2.334 -1.350 -2.074 -2.679 -1.275 -.984 -2.214 -1.592 -1.254 -2.271 -2.152 -1.987 -2.840 1.311 -.139 -.264 -1.331 -.194 -.688 -.268 -.589 -.771 -.917 -1.075 -1.614 .779 -.652 -.589 1.443 -.400 -2.486 -3.513 -2.339 -1.287 2.185 3.199 -1.827 .693 .117 .361 1.438 -.563 1.746 .145 .169 -.859 -.955 -1.527 .335 -.534 -1.479 -1.077 -.581 1.269 -3.154 -.005 .535 .647 -.869 -.038 -.350 .855 -1.022 -1.956 .076 1.427 -3.092 .345 -.832 .655 -.079 -1.001 -1.341 -.697 -2.122 .668 1.655 -2.762 .036 .910 -.122 -.434 1.106 -.775 .562 -2.699 -.966 -.044 .607 -.087 .079 .011 1.647 .542 .941 -1.087 .705 -1.221 .852 .334 .123 1.481 .688 -.654 -1.725 .621 -1.390 -1.241 -.752 -.255 -2.292 1.176 -.002 -.524 -.681 1.237 -.385 2.452 .774 1.023 -1.154 -.204 -1.525 .294 -.480 -.579 2.393 -1.866 -1.459 -.322 -1.746 .810 -.023 -1.484 1.140 .940 1.253 -.328 -.947 -.565 -.058 1.854 1.071 -1.094 -2.015 -.655 -2.194 .857 -2.137 1.183 1.395 .679 3.040 -1.886 2.557 -.601 1.468 -1.189 -1.294 -.590 -.296 1.226 1.467 2.928 .358 1.240 .725 2.464 .319 .115 -.428 -.021 .615 2.078 .174 1.766 -.887 .107 .074 .389 .086 4.168 -.901 -.977 -.311 -.033 -.301 -.937 -.839 .547 -.416 .380 -.283 .290 .658 -.756 2.134 -1.925 .590 end data. *Some functions to use. define !cov(!pos= !token(1) /!pos= !charend('%') /!pos= !charend(')')) comp !3= !2. comp @sum= csum(!3). comp !3= (sscp(!3)-t(@sum)*@sum/nrow(!3))/(nrow(!3)-1). release @sum. !enddefine. define !image(!pos= !token(1) /!pos= !charend('%') /!pos= !charend('%') /!pos= !charend(')')) comp @cov= !2. comp @type= !3. comp @icov= inv(@cov). comp @diag= diag(@icov). comp !4= @icov/(@diag*t(@diag)). comp !4= (!4+t(!4))/2. do if @type. -call setdiag(!4,-diag(!4)). -comp !4= !4+@cov. end if. release @cov,@type,@icov,@diag. !enddefine. *The factoring (SPSS or SYSTAT way - choose below). matrix. get vars. comp m= 3. print m /title 'Number of factors to extract'. comp p= ncol(vars). !cov(vars%cov). !image(cov%1%image). comp vrnc= diag(cov). comp im= diag(image). print cov /title 'Covariance matrix'. print vrnc /title 'Variances (its diagonal)'. print {im&*vrnc,im} /title 'Initial comminalities: Raw (RSQ*VAR*VAR), Rescaled (RSQ*VAR)'. *-----Put initial communalities on the diagonal. call setdiag(cov,im&*vrnc). /*Put Raw communalities (SPSS way) OR *call setdiag(cov,im). /*Put Rescaled communalities (SYSTAT 12 way) loop it= 1 to 25. /*Do iterations, say, 25 -call eigen(cov,eivec,eival). -comp load= (eivec(:,1:m)&*(make(p,1,1)*t(sqrt(eival(1:m))))). /*loadings -call setdiag(cov,rssq(load)). /*reset diagonal end loop. print {load,load/sqrt(vrnc*make(1,m,1))} /title 'Loadings; then Rescaled loadings'. print {rssq(load),rssq(load/sqrt(vrnc*make(1,m,1)))} /title 'Extracted communalities: Raw, Rescaled'. end matrix. *FACTOR command corresponding to the above. FACTOR /VARIABLES V1 V2 V3 V4 V5 V6 V7 /MISSING LISTWISE /ANALYSIS V1 V2 V3 V4 V5 V6 V7 /PRINT INITIAL EXTRACTION /CRITERIA FACTORS(3) ITERATE(25) /EXTRACTION PAF /ROTATION NOROTATE /METHOD=COVARIANCE. ===================== To manage your subscription to SPSSX-L, send a message to LISTSERV@LISTSERV.UGA.EDU (not to SPSSX-L), with no body text except the command. To leave the list, send the command SIGNOFF SPSSX-L For a list of commands to manage subscriptions, send the command INFO REFCARD |
Lapse in text of the question correction:
However, SYSTAT initially puts on the diagonal of the covariance matrix value IMAGE*VAR, not value RSQ*VAR*VAR. Shold read: However, SYSTAT initially puts on the diagonal of the covariance matrix value RSQ*VAR, not value RSQ*VAR*VAR. |
This post was updated on .
CONTENTS DELETED
The author has deleted this message.
|
Lapse 2 correction:
Thence
the results (unless number of iterations are very much) are
different in SPSS and in SYSTAT.
Should read: Thence the results (even under many iterations) are usually different in SPSS and in SYSTAT. ===================== To manage your subscription to SPSSX-L, send a message to [hidden email] (not to SPSSX-L), with no body text except the command. To leave the list, send the command SIGNOFF SPSSX-L For a list of commands to manage subscriptions, send the command INFO REFCARD |
This post was updated on .
In reply to this post by Kirill Orlov
More programs were compared with SPSS by now.
- R package psych (function fa), the most rich R facility for factor analysis, output results as SYSTAT did. - Statistical program Statgraphics Centurion 15.1, a general purpose statistical package, output results as SYSTAT did. So, three respectable statistical factor analysis programs, when analyzing covariances by principal axis extraction, gave the same result. SPSS Statistics gave different result. By using my syntax above one can make sure that while SPSS uses IMAGE*VAR as initial communality estimate, the three other use IMAGE as initial communality. SPSS' way for me is incomprehensible. If variance VAR >1 then IMAGE*VAR (=RSQ*VAR*VAR) can be greater than VAR. For example, VAR=2.1 and RSQ=0.8. Then the initial communality is 2.1*0.8 * 2.1 = 3.528. What's the reason to use initial communality estimate which is greater than the real communality can ever be? That seems to be the bug in SPSS Statistics. And isn't it this bug which is responsible for the very frequent so called Heywood case error in the context of analyzing covariances by SPSS FACTOR? ===================== To manage your subscription to SPSSX-L, send a message to LISTSERV@LISTSERV.UGA.EDU (not to SPSSX-L), with no body text except the command. To leave the list, send the command SIGNOFF SPSSX-L For a list of commands to manage subscriptions, send the command INFO REFCARD |
In reply to this post by Kirill Orlov
The bug is recognized by SPSS
http://www-01.ibm.com/support/docview.wss?uid=swg21698265 ===================== To manage your subscription to SPSSX-L, send a message to [hidden email] (not to SPSSX-L), with no body text except the command. To leave the list, send the command SIGNOFF SPSSX-L For a list of commands to manage subscriptions, send the command INFO REFCARD |
Free forum by Nabble | Edit this page |