[R] SEM model fit

John Fox jfox at mcmaster.ca
Sun Jul 1 14:57:46 CEST 2007


Dear Frank,

My apologies for the slow response: I'm away from home and checking
r-help infrequently.

To find the confidence interval for the RMSEA it's necessary to compute
two chisquare noncentrality parameters. summary.sem() does this by
one-dimensional optimizations. If the upper bound of the CI is very
large  or the lower bound very close to 0, it might not be possible to
find the values with sufficient precision, and NA is printed.

Looking at the code for summary.sem(), however, I see that the
optimizations could fail spuriously if the sample size is large;
moreover, under these circumstances, both the upper and lower bounds
will be NA, even if the lower bound could have been determined. I've
therefore modified summary.sem() so that it should work more reliably,
and have attached a file with the modified function to this email. Let
me know if it provides more satisfactory results. (Because you didn't
give the input correlation matrix, I can't check myself.) I'll
eventually incorporate the new function is an updated version of the
package.

BTW, I doubt that the RMSEA confidence interval is correct for
polychoric correlations.

Regards,
 John
 
-------- original message ------

 I wonder if someone could explain why, when I perform confirmatory
factor-analysis model using polychoric correlations why I do not get an
estimated confidence interval for the RMSEA.  My experience with these
type
models is that I would obtain a confidence interval estimate.  I did
not get
any warning messages with the output.

RESULTS:

Model Chisquare =  1374   Df =  185 Pr(>Chisq) = 0
 Chisquare (null model) =  12284   Df =  210
 Goodness-of-fit index =  0.903
 Adjusted goodness-of-fit index =  0.88
 RMSEA index =  0.0711   90% CI: (NA, NA)
 Bentler-Bonnett NFI =  0.888
 Tucker-Lewis NNFI =  0.888
 Bentler CFI =  0.902
 SRMR =  0.0682
 BIC =  51.4 


SYNTAX

rm(sem.enf.rq)
mdl.rq <- specify.model()
enf                   -> law2,      NA,       1
enf                   -> law3,      lam2,     1
enf                   -> law4,      lam3,     1
enf                   <-> enf,      psi1,     0.6
law2                  <-> law2,     theta1,   0.3
law3                  <-> law3,     theta2,   0.3
law4                  <-> law4,     theta3,   0.5
gender                -> enf,       a1,       0.2
incomex               -> enf,       a2,       0.2
oftdrnkr              -> enf,       a3,       0.2
attn                  -> nvatt,     NA,       1
attn                  -> crimatt,   lam4,     1.3
attn                  -> asltatt,   lam5,     1.2
attn                  <-> attn,     psi2,     0.5
nvatt                 <-> nvatt,    theta4,   0.5
crimatt               <-> crimatt,  theta5,   0.1
asltatt               <-> asltatt,  theta6,   0.2
gender                -> attn,      a4,       0.2
acon                   -> acon1,    NA,       1
acon                   -> acon2,    lam4,     1.5
acon                   <-> acon,    psi2,     0.1
mcon                   -> mvcon1,   NA,       1
mcon                   -> mvcon2,   lam5,     1
mcon                   <-> mcon,    psi3,     0.3
ocon                   -> oicon1,   NA,       1
ocon                   -> oicon2,   lam6,     1
ocon                   <-> ocon,    psi4,     0.2
con                    -> acon,     NA,       1
con                    -> mcon,     lam7,     0.8
con                    -> ocon,     lam8,     0.9
con                   <-> con,     psi5,     0.3
acon1                 <-> acon1,   theta7,   0.4
acon2                 <-> acon2,   theta8,   0.2
mvcon1                <-> mvcon1,  theta9,   0.2
mvcon2                <-> mvcon2,  theta10,   0.3
oicon1                <-> oicon1,  theta11,   0.2
oicon2                <-> oicon2,  theta12,   0.3
gender                -> con,      a5,       0.1
incomex               -> con,      a6,       -0.1
oftdrnkr              -> con,      a7,       -0.2
attn                  -> con,      gam1,     0.2
sev                   -> aophys,   NA,        1
sev                   -> mvphys,   NA,        1
sev                   -> oiphys,   NA,        1
sev                   <-> sev,     psi6,      0.5
aophys                <-> aophys,  theta13,    0.5
mvphys                <-> mvphys,  theta14,    0.5
oiphys                <-> oiphys,  theta14,    0.5
con                   -> sev,      gam3,       0.8
prev                  -> mvpct,    NA,        1
prev                  -> oipct,    NA,        1
prev                  -> alcpct,   NA,        1
prev                  <-> prev,    psi8,      0.4
mvpct                 <-> mvpct,   theta15,    0.5
oipct                 <-> oipct,   theta15,    0.5
alcpct                <-> alcpct,  theta15,    0.5
con                   -> prev,     gam5,       0.8 
prev                  -> enf,      gam6,       0.4

sem.enf.rq <- sem(ram = mdl.rq, S = hcor(dx),  N = nrow(dx), obs.v =
names(dx), raw = F, fixed = names(dx)[4:6], par.size = 's', maxiter =
1e3,
analytic = F, gradtol = 1e-10)  ##set raw to False
summary(obj = sem.enf.rq, dig = 3, conf = 0.9) 

Respectfully,

Frank Lawrence

--------------------------------
John Fox, Professor
Department of Sociology
McMaster University
Hamilton, Ontario, Canada
http://socserv.mcmaster.ca/jfox/


More information about the R-help mailing list