Re: [R] Confirmatory factor analysis problems using sem package (works in Amos)

2009-07-28 Thread Solomon Messing
Thanks John.  Can I ask under what function you call optim/nlm?  I cannot
see how this is done by examining sem.  Thanks,

-Solomon

 -Original Message-
 From: John Fox [mailto:j...@mcmaster.ca]
 Sent: Monday, July 27, 2009 6:23 PM
 To: 'Solomon Messing'
 Cc: r-help@r-project.org
 Subject: RE: [R] Confirmatory factor analysis problems using sem package
 (works in Amos)
 
 Dear Solomon,
 
 When I originally programmed the sem() function, I used optim() and
 experimented with the different methods provided, settling on BFGS as
 the
 default. Shortly after that, I compared optim() to nlm() for a range of
 problems and found that the latter performed better. It would not be hard
 to
 replace nlm() with optim() in sem(), if you wish to do it.
 
 Regards,
  John
 
 
  -Original Message-
  From: Solomon Messing [mailto:mess...@stanford.edu]
  Sent: July-27-09 8:01 PM
  To: 'John Fox'
  Cc: r-help@r-project.org
  Subject: RE: [R] Confirmatory factor analysis problems using sem package
  (works in Amos)
 
  Dear John,
 
  Would it possible to use a different optimizer with the sem package?
  Perhaps optim(..., method = c(Nelder-Mead, BFGS, CG, L-BFGS-B,
  SANN),...) for example?
 
  Thank you very much,
 
  -Solomon
 
   -Original Message-
   From: John Fox [mailto:j...@mcmaster.ca]
   Sent: Friday, May 22, 2009 6:25 AM
   To: 'S. Messing'
   Cc: r-help@r-project.org
   Subject: RE: [R] Confirmatory factor analysis problems using sem
 package
   (works in Amos)
  
   Dear Solomon,
  
-Original Message-
From: r-help-boun...@r-project.org
 [mailto:r-help-boun...@r-project.org]
   On
Behalf Of S. Messing
Sent: May-22-09 1:27 AM
To: r-help@r-project.org
Subject: [R] Confirmatory factor analysis problems using sem package
   (works
in Amos)
   
   
Hello all,
   
I'm trying to replicate a confirmatory factor analysis done in Amos.
  
   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.
  
The
idea is to compare a one-factor and a two-factor model.  I get the
   following
warning message when I run either model:
   
Could not compute QR decomposition of Hessian.
Optimization probably did not converge.
   
I have no idea what to do here.
  
   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():
  
factanal(factors=1, covmat=correl, n.obs=1100)
  
   Call:
   factanal(factors = 1, covmat = correl, n.obs = 1100)
  
   Uniquenesses:
  pvote jmposaff jmnegaff boposaff bonegaff
   obama.therm mccain.thermoddcand.D   evencand.D
  0.1000.4960.4970.2770.397
   0.1290.3120.4660.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.D0.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.
  
  
I believe posters reported the same
problem.
  
   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.
  
It seems that the ability to invert the correlation matrix may
have something to do with this error, but solve(correl) yields a
   solution.
  
   No, the input correlation matrix is positive-definite. sem() would
 have
   complained if it were not:
  
eigen(correl, only.values=TRUE)
   $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
  
  
   
Here are my correlation matrix and model specifications:
   
--- R CODE BEGIN

Re: [R] Confirmatory factor analysis problems using sem package (works in Amos)

2009-07-28 Thread John Fox
Dear Solomon,

You should get a copy of the source package from CRAN. nlm() [not currently
optim()] is called in sem:::sem.default.

Regards,
 John

 -Original Message-
 From: Solomon Messing [mailto:mess...@stanford.edu]
 Sent: July-28-09 2:38 PM
 To: 'John Fox'
 Cc: r-help@r-project.org
 Subject: RE: [R] Confirmatory factor analysis problems using sem package
 (works in Amos)
 
 Thanks John.  Can I ask under what function you call optim/nlm?  I cannot
 see how this is done by examining sem.  Thanks,
 
 -Solomon
 
  -Original Message-
  From: John Fox [mailto:j...@mcmaster.ca]
  Sent: Monday, July 27, 2009 6:23 PM
  To: 'Solomon Messing'
  Cc: r-help@r-project.org
  Subject: RE: [R] Confirmatory factor analysis problems using sem package
  (works in Amos)
 
  Dear Solomon,
 
  When I originally programmed the sem() function, I used optim() and
  experimented with the different methods provided, settling on BFGS as
  the
  default. Shortly after that, I compared optim() to nlm() for a range of
  problems and found that the latter performed better. It would not be
hard
  to
  replace nlm() with optim() in sem(), if you wish to do it.
 
  Regards,
   John
 
 
   -Original Message-
   From: Solomon Messing [mailto:mess...@stanford.edu]
   Sent: July-27-09 8:01 PM
   To: 'John Fox'
   Cc: r-help@r-project.org
   Subject: RE: [R] Confirmatory factor analysis problems using sem
package
   (works in Amos)
  
   Dear John,
  
   Would it possible to use a different optimizer with the sem package?
   Perhaps optim(..., method = c(Nelder-Mead, BFGS, CG, L-BFGS-B,
   SANN),...) for example?
  
   Thank you very much,
  
   -Solomon
  
-Original Message-
From: John Fox [mailto:j...@mcmaster.ca]
Sent: Friday, May 22, 2009 6:25 AM
To: 'S. Messing'
Cc: r-help@r-project.org
Subject: RE: [R] Confirmatory factor analysis problems using sem
  package
(works in Amos)
   
Dear Solomon,
   
 -Original Message-
 From: r-help-boun...@r-project.org
  [mailto:r-help-boun...@r-project.org]
On
 Behalf Of S. Messing
 Sent: May-22-09 1:27 AM
 To: r-help@r-project.org
 Subject: [R] Confirmatory factor analysis problems using sem
package
(works
 in Amos)


 Hello all,

 I'm trying to replicate a confirmatory factor analysis done in
Amos.
   
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.
   
 The
 idea is to compare a one-factor and a two-factor model.  I get the
following
 warning message when I run either model:

 Could not compute QR decomposition of Hessian.
 Optimization probably did not converge.

 I have no idea what to do here.
   
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():
   
 factanal(factors=1, covmat=correl, n.obs=1100)
   
Call:
factanal(factors = 1, covmat = correl, n.obs = 1100)
   
Uniquenesses:
   pvote jmposaff jmnegaff boposaff bonegaff
obama.therm mccain.thermoddcand.D   evencand.D
   0.1000.4960.4970.2770.397
0.1290.3120.4660.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.D0.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.
   
   
 I believe posters reported the same
 problem.
   
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.
   
 It seems that the ability to invert the correlation matrix may
 have something to do with this error, but solve(correl) yields a
solution.
   
No, the input correlation matrix is positive-definite. sem() would
  have

Re: [R] Confirmatory factor analysis problems using sem package (works in Amos)

2009-07-27 Thread Solomon Messing
Dear John,

Would it possible to use a different optimizer with the sem package?
Perhaps optim(..., method = c(Nelder-Mead, BFGS, CG, L-BFGS-B,
SANN),...) for example?  

Thank you very much,

-Solomon

 -Original Message-
 From: John Fox [mailto:j...@mcmaster.ca]
 Sent: Friday, May 22, 2009 6:25 AM
 To: 'S. Messing'
 Cc: r-help@r-project.org
 Subject: RE: [R] Confirmatory factor analysis problems using sem package
 (works in Amos)
 
 Dear Solomon,
 
  -Original Message-
  From: r-help-boun...@r-project.org [mailto:r-help-boun...@r-project.org]
 On
  Behalf Of S. Messing
  Sent: May-22-09 1:27 AM
  To: r-help@r-project.org
  Subject: [R] Confirmatory factor analysis problems using sem package
 (works
  in Amos)
 
 
  Hello all,
 
  I'm trying to replicate a confirmatory factor analysis done in Amos.
 
 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.
 
  The
  idea is to compare a one-factor and a two-factor model.  I get the
 following
  warning message when I run either model:
 
  Could not compute QR decomposition of Hessian.
  Optimization probably did not converge.
 
  I have no idea what to do here.
 
 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():
 
  factanal(factors=1, covmat=correl, n.obs=1100)
 
 Call:
 factanal(factors = 1, covmat = correl, n.obs = 1100)
 
 Uniquenesses:
pvote jmposaff jmnegaff boposaff bonegaff
 obama.therm mccain.thermoddcand.D   evencand.D
0.1000.4960.4970.2770.397
 0.1290.3120.4660.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.D0.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.
 
 
  I believe posters reported the same
  problem.
 
 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.
 
  It seems that the ability to invert the correlation matrix may
  have something to do with this error, but solve(correl) yields a
 solution.
 
 No, the input correlation matrix is positive-definite. sem() would have
 complained if it were not:
 
  eigen(correl, only.values=TRUE)
 $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
 
 
 
  Here are my correlation matrix and model specifications:
 
  --- R CODE BEGIN
  
 
  library(sem)
  correl - matrix(
  c(1.000,-0.6657822,0.6702089,0.7997673,-0.7225454,0.8992372,
  -0.8026491,-0.6715168,-0.5781565,-
  0.6657822,1.000,-0.5107568,
  -0.5030886,0.6971188,-
  0.6306937,0.7200848,0.5121227,0.4496810,
  0.6702089,-0.5107568,1.000,0.7276558,-
  0.3893792,0.6043672,
  -0.7176532,-0.5247434,-0.4670362,0.7997673,-
  0.5030886,0.7276558,
  1.000,-0.6251056,0.8164190,-0.6728515,-
  0.6371453,-0.5531964,
  -0.7225454,0.6971188,-0.3893792,-
  0.6251056,1.000,-0.7760765,
  0.6175124,0.5567924,0.4914176,0.8992372,-
  0.6306937,0.6043672,
  0.8164190,-0.7760765,1.000,-0.7315507,-
  0.6625136,-0.5814590,
  -0.8026491,0.7200848,-0.7176532,-
  0.6728515,0.6175124,-0.7315507,
 
 1.000,0.5910688,0.5096898,-0.6715168,0.5121227,-
  0.5247434,
  -0.6371453,0.5567924,-
  0.6625136,0.5910688,1.000,0.8106496,
  -0.5781565,0.4496810,-0.4670362,-
  0.5531964,0.4914176,-0.5814590

Re: [R] Confirmatory factor analysis problems using sem package (works in Amos)

2009-07-27 Thread John Fox
Dear Solomon,

When I originally programmed the sem() function, I used optim() and
experimented with the different methods provided, settling on BFGS as the
default. Shortly after that, I compared optim() to nlm() for a range of
problems and found that the latter performed better. It would not be hard to
replace nlm() with optim() in sem(), if you wish to do it.

Regards,
 John


 -Original Message-
 From: Solomon Messing [mailto:mess...@stanford.edu]
 Sent: July-27-09 8:01 PM
 To: 'John Fox'
 Cc: r-help@r-project.org
 Subject: RE: [R] Confirmatory factor analysis problems using sem package
 (works in Amos)
 
 Dear John,
 
 Would it possible to use a different optimizer with the sem package?
 Perhaps optim(..., method = c(Nelder-Mead, BFGS, CG, L-BFGS-B,
 SANN),...) for example?
 
 Thank you very much,
 
 -Solomon
 
  -Original Message-
  From: John Fox [mailto:j...@mcmaster.ca]
  Sent: Friday, May 22, 2009 6:25 AM
  To: 'S. Messing'
  Cc: r-help@r-project.org
  Subject: RE: [R] Confirmatory factor analysis problems using sem package
  (works in Amos)
 
  Dear Solomon,
 
   -Original Message-
   From: r-help-boun...@r-project.org
[mailto:r-help-boun...@r-project.org]
  On
   Behalf Of S. Messing
   Sent: May-22-09 1:27 AM
   To: r-help@r-project.org
   Subject: [R] Confirmatory factor analysis problems using sem package
  (works
   in Amos)
  
  
   Hello all,
  
   I'm trying to replicate a confirmatory factor analysis done in Amos.
 
  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.
 
   The
   idea is to compare a one-factor and a two-factor model.  I get the
  following
   warning message when I run either model:
  
   Could not compute QR decomposition of Hessian.
   Optimization probably did not converge.
  
   I have no idea what to do here.
 
  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():
 
   factanal(factors=1, covmat=correl, n.obs=1100)
 
  Call:
  factanal(factors = 1, covmat = correl, n.obs = 1100)
 
  Uniquenesses:
 pvote jmposaff jmnegaff boposaff bonegaff
  obama.therm mccain.thermoddcand.D   evencand.D
 0.1000.4960.4970.2770.397
  0.1290.3120.4660.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.D0.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.
 
 
   I believe posters reported the same
   problem.
 
  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.
 
   It seems that the ability to invert the correlation matrix may
   have something to do with this error, but solve(correl) yields a
  solution.
 
  No, the input correlation matrix is positive-definite. sem() would have
  complained if it were not:
 
   eigen(correl, only.values=TRUE)
  $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
 
 
  
   Here are my correlation matrix and model specifications:
  
   --- R CODE BEGIN
   
  
   library(sem)
   correl - matrix(
   c(1.000,-0.6657822,0.6702089,0.7997673,-0.7225454,0.8992372,
 -0.8026491,-0.6715168,-0.5781565,-
   0.6657822,1.000,-0.5107568,
 -0.5030886,0.6971188,-
   0.6306937,0.7200848,0.5121227,0.4496810,
 0.6702089,-0.5107568,1.000,0.7276558,-
   0.3893792,0.6043672,
 -0.7176532,-0.5247434,-0.4670362,0.7997673,-
   0.5030886,0.7276558

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

2009-05-22 Thread S. Messing

Hello all,

I'm trying to replicate a confirmatory factor analysis done in Amos.  The
idea is to compare a one-factor and a two-factor model.  I get the following
warning message when I run either model:

Could not compute QR decomposition of Hessian.
Optimization probably did not converge.

I have no idea what to do here.  I believe posters reported the same
problem.  It seems that the ability to invert the correlation matrix may
have something to do with this error, but solve(correl) yields a solution.

Here are my correlation matrix and model specifications:

--- R CODE BEGIN


correl - matrix(
c(1.000,-0.6657822,0.6702089,0.7997673,-0.7225454,0.8992372,

-0.8026491,-0.6715168,-0.5781565,-0.6657822,1.000,-0.5107568,

-0.5030886,0.6971188,-0.6306937,0.7200848,0.5121227,0.4496810,

0.6702089,-0.5107568,1.000,0.7276558,-0.3893792,0.6043672,

-0.7176532,-0.5247434,-0.4670362,0.7997673,-0.5030886,0.7276558,

1.000,-0.6251056,0.8164190,-0.6728515,-0.6371453,-0.5531964,

-0.7225454,0.6971188,-0.3893792,-0.6251056,1.000,-0.7760765,

0.6175124,0.5567924,0.4914176,0.8992372,-0.6306937,0.6043672,

0.8164190,-0.7760765,1.000,-0.7315507,-0.6625136,-0.5814590,

-0.8026491,0.7200848,-0.7176532,-0.6728515,0.6175124,-0.7315507,

1.000,0.5910688,0.5096898,-0.6715168,0.5121227,-0.5247434,

-0.6371453,0.5567924,-0.6625136,0.5910688,1.000,0.8106496,

-0.5781565,0.4496810,-0.4670362,-0.5531964,0.4914176,-0.5814590,
0.5096898,0.8106496,1.000), ,nrow=9,ncol=9)

rownames(correl) = c(pvote, jmposaff, jmnegaff,
boposaff,bonegaff,
obama.therm, mccain.therm, 
oddcand.D, evencand.D )

colnames(correl) = c(pvote, jmposaff, jmnegaff,
boposaff,bonegaff,
obama.therm, mccain.therm, 
oddcand.D, evencand.D )

#One Factor Model:
model.all - specify.model()
allmeasures - pvote,   b1, NA
allmeasures - obama.therm, b2, NA
allmeasures - mccain.therm,b3, NA
allmeasures - jmposaff,b4, NA
allmeasures - jmnegaff,b5, NA
allmeasures - boposaff,b6, NA
allmeasures - bonegaff,b7, NA
allmeasures - oddcand.D,   b8, NA
allmeasures - evencand.D,  b9, NA
allmeasures - allmeasures,NA,1
pvote - pvote,v1, NA
obama.therm - obama.therm,v2, NA
mccain.therm - mccain.therm,  v3, NA
jmposaff - jmposaff,  v4, NA
jmnegaff - jmnegaff,  v5, NA
boposaff - boposaff,  v6, NA
bonegaff - bonegaff,  v7, NA
oddcand.D - oddcand.D,v8, NA
evencand.D - evencand.D,  v9, NA


sem.all - sem(model.all, correl, 1100)

summary(sem.all)

#Two Factor Model:
model.vi - specify.model()
verbal - pvote,b1, NA
verbal - obama.therm,  b2, NA
verbal - mccain.therm, b3, NA
verbal - jmposaff, b4, NA
verbal - jmnegaff, b5, NA
verbal - boposaff, b6, NA
verbal - bonegaff, b7, NA
imp - oddcand.D,   b8, NA
imp - evencand.D,  b9, NA
imp - imp,NA, 1
verbal - verbal,  NA, 1
pvote - pvote,v1, NA
obama.therm - obama.therm,v2, NA
mccain.therm - mccain.therm,  v3, NA
jmposaff - jmposaff,  v4, NA
jmnegaff - jmnegaff,  v5, NA
boposaff - boposaff,  v6, NA
bonegaff - bonegaff,  v7, NA
oddcand.D - oddcand.D,v8, NA
evencand.D - evencand.D,  v9, NA
imp - verbal, civ, NA

sem.vi - sem(model.vi, correl, 1100)
summary(sem.vi)

--- R CODE END


Thanks very much.

-Solomon
-- 
View this message in context: 
http://www.nabble.com/Confirmatory-factor-analysis-problems-using-sem-package-%28works-in-Amos%29-tp23664618p23664618.html
Sent 

Re: [R] Confirmatory factor analysis problems using sem package (works in Amos)

2009-05-22 Thread John Fox
Dear Solomon,

 -Original Message-
 From: r-help-boun...@r-project.org [mailto:r-help-boun...@r-project.org]
On
 Behalf Of S. Messing
 Sent: May-22-09 1:27 AM
 To: r-help@r-project.org
 Subject: [R] Confirmatory factor analysis problems using sem package
(works
 in Amos)
 
 
 Hello all,
 
 I'm trying to replicate a confirmatory factor analysis done in Amos. 

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.

 The
 idea is to compare a one-factor and a two-factor model.  I get the
following
 warning message when I run either model:
 
 Could not compute QR decomposition of Hessian.
 Optimization probably did not converge.
 
 I have no idea what to do here.  

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():

 factanal(factors=1, covmat=correl, n.obs=1100)

Call:
factanal(factors = 1, covmat = correl, n.obs = 1100)

Uniquenesses:
   pvote jmposaff jmnegaff boposaff bonegaff
obama.therm mccain.thermoddcand.D   evencand.D 
   0.1000.4960.4970.2770.397
0.1290.3120.4660.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.D0.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.


 I believe posters reported the same
 problem.  

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.

 It seems that the ability to invert the correlation matrix may
 have something to do with this error, but solve(correl) yields a solution.

No, the input correlation matrix is positive-definite. sem() would have
complained if it were not:

 eigen(correl, only.values=TRUE)
$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


 
 Here are my correlation matrix and model specifications:
 
 --- R CODE BEGIN
 
 
 library(sem)
 correl - matrix(
 c(1.000,-0.6657822,0.6702089,0.7997673,-0.7225454,0.8992372,
   -0.8026491,-0.6715168,-0.5781565,-
 0.6657822,1.000,-0.5107568,
   -0.5030886,0.6971188,-
 0.6306937,0.7200848,0.5121227,0.4496810,
   0.6702089,-0.5107568,1.000,0.7276558,-
 0.3893792,0.6043672,
   -0.7176532,-0.5247434,-0.4670362,0.7997673,-
 0.5030886,0.7276558,
   1.000,-0.6251056,0.8164190,-0.6728515,-
 0.6371453,-0.5531964,
   -0.7225454,0.6971188,-0.3893792,-
 0.6251056,1.000,-0.7760765,
   0.6175124,0.5567924,0.4914176,0.8992372,-
 0.6306937,0.6043672,
   0.8164190,-0.7760765,1.000,-0.7315507,-
 0.6625136,-0.5814590,
   -0.8026491,0.7200848,-0.7176532,-
 0.6728515,0.6175124,-0.7315507,

1.000,0.5910688,0.5096898,-0.6715168,0.5121227,-
 0.5247434,
   -0.6371453,0.5567924,-
 0.6625136,0.5910688,1.000,0.8106496,
   -0.5781565,0.4496810,-0.4670362,-
 0.5531964,0.4914176,-0.5814590,
   0.5096898,0.8106496,1.000),
,nrow=9,ncol=9)
 
 rownames(correl) = c(pvote, jmposaff, jmnegaff,
   boposaff,bonegaff,
   obama.therm, mccain.therm,
   oddcand.D, evencand.D )
 
 colnames(correl) = c(pvote, jmposaff, jmnegaff,
   boposaff,bonegaff,
   obama.therm, mccain.therm,
   oddcand.D, evencand.D )
 
 #One Factor Model:
 model.all - specify.model()
 allmeasures - pvote, b1, NA
 allmeasures - obama.therm