Skip to content
Prev 181172 / 398506 Next

Confirmatory factor analysis problems using sem package (works in Amos)

Dear Solomon,
On
(works
Occasionally in an ill-conditioned problem, one program will produce a
solution and another won't. As a general matter, I'd expect Amos to be more
robust than sem() since Amos is written specifically for SEMs, while sem()
uses nlm(), a general-purpose optimizer.
following
A general strategy is to set debug=TRUE in the call to sem() and see what
happens in the optimization. Then there are several things that you can do
to try to get the optimization to converge; see ?sem. In this case, however,
I wasn't able to get a solution.

The one-factor model is equivalent to a one-factor exploratory FA, which can
be fit by ML using factanal():
Call:
factanal(factors = 1, covmat = correl, n.obs = 1100)

Uniquenesses:
       pvote     jmposaff     jmnegaff     boposaff     bonegaff
obama.therm mccain.therm    oddcand.D   evencand.D 
       0.100        0.496        0.497        0.277        0.397
0.129        0.312        0.466        0.585 

Loadings:
             Factor1
pvote        -0.949 
jmposaff      0.710 
jmnegaff     -0.709 
boposaff     -0.850 
bonegaff      0.777 
obama.therm  -0.934 
mccain.therm  0.830 
oddcand.D     0.731 
evencand.D    0.645 

               Factor1
SS loadings      5.744
Proportion Var   0.638

Test of the hypothesis that 1 factor is sufficient.
The chi square statistic is 1710.03 on 27 degrees of freedom.
The p-value is 0

As you can see, the one-factor model fits the data very poorly (as does a
two-factor EFA); I suspect, but am not sure, that this is the source of the
problem in sem(). I couldn't get a solution from sem() even when I used the
factanal() solution as start values.
In almost all cases, the models haven't been properly specified, which is
not the case here. Here, the model just doesn't fit the data.
No, the input correlation matrix is positive-definite. sem() would have
complained if it were not:
$values
[1] 6.12561630 0.82418329 0.71616585 0.51263750 0.24467315 0.18248909
0.17024374
[8] 0.13905585 0.08493524


I'll keep your problem as a test case to see whether I can produce a
solution, possibly using a different optimizer -- as I mentioned, sem() uses
nlm().

Regards,
 John
1.0000000,0.5910688,0.5096898,-0.6715168,0.5121227,-
,nrow=9,ncol=9)
http://www.R-project.org/posting-guide.html