[R] How to use pakcage SEM

John Fox jfox at mcmaster.ca
Tue May 20 15:06:55 CEST 2003


Dear Mitsuo,

You appear to be trying to fit a confirmatory factor analysis model with 
five observed variables and two factors. Two of the five variables load on 
both factors. Two variables have correlated measurement errors. I haven't 
checked that the model that you intend to fit is identified but let's 
suppose that it is.

As you've described the model to sem, there are 16 free parameters, but 
there are only 5*6/2 = 15 observed covariances (counting the diagonal 
entries of the correlation matrix), so clearly there's a mistake in the 
specification -- the model has negative degrees of freedom (and sem should 
complain, but doesn't).

The problem is that you've not placed any constraints on the model to fix 
the scales of the factors. The simplest thing to do would be to fix the 
variances of the factors to 1, rather than specifying them as free 
parameters; as well, you don't have to start the measurement-error 
variances at 1 rather than using the start values that sem computes, though 
it doesn't hurt to do so:

 > model.mh<-matrix(c(
+         'F1 -> V1', 'a1',NA,
+         'F1 -> V3', 'a3',NA,
+         'F1 -> V4', 'a4',NA,
+         'F2 -> V2', 'b2',NA,
+         'F2 -> V3', 'b3',NA,
+         'F2 -> V4', 'b4',NA,
+         'F2 -> V5', 'b5',NA,
+         'V1 <-> V1','e1', NA,
+         'V2 <-> V2','e2', NA,
+         'V3 <-> V3','e3', NA,
+         'V4 <-> V4','e4', NA,
+         'V5 <-> V5','e5', NA,
+         'F1 <-> F1', NA, 1,
+         'F2 <-> F2', NA, 1,
+         'F1 <-> F2','c12',NA,
+         'V1 <-> V2','cv1', NA
+         ),ncol=3,byrow=T)
 > sem.mh <- sem(model.mh, data.mh, 100)
 > summary(sem.mh)

  Model Chisquare =  2.2805   Df =  1 Pr(>Chisq) = 0.13101
  Goodness-of-fit index =  0.99097
  Adjusted goodness-of-fit index =  0.8646
  RMSEA index =  0.11373   90 % CI: (0, 0.31712)
  BIC =  -3.9341

  Normalized Residuals
      Min.   1st Qu.    Median      Mean   3rd Qu.      Max.
-3.92e-01 -5.50e-02 -5.27e-06  3.27e-02  1.09e-01  7.98e-01

  Parameter Estimates
     Estimate Std Error z value   Pr(>|z|)
a1  0.970680  0.275852 3.51884 4.3343e-04 V1 <--- F1
a3  0.317133  0.198819 1.59509 1.1069e-01 V3 <--- F1
a4  0.437281  0.250375 1.74651 8.0723e-02 V4 <--- F1
b2  0.526620  0.116264 4.52951 5.9119e-06 V2 <--- F2
b3  0.452136  0.196716 2.29842 2.1538e-02 V3 <--- F2
b4  0.234373  0.247929 0.94532 3.4449e-01 V4 <--- F2
b5  0.759562  0.131164 5.79092 7.0001e-09 V5 <--- F2
e1  0.052702  0.512634 0.10281 9.1812e-01 V1 <--> V1
e2  0.722672  0.126106 5.73065 1.0004e-08 V2 <--> V2
e3  0.552314  0.103604 5.33101 9.7669e-08 V3 <--> V3
e4  0.651868  0.128687 5.06552 4.0728e-07 V4 <--> V4
e5  0.423067  0.163535 2.58702 9.6811e-03 V5 <--> V5
c12 0.497557  0.167763 2.96584 3.0186e-03 F2 <--> F1
cv1 0.108796  0.076515 1.42190 1.5506e-01 V2 <--> V1

  Iterations =  37
 >

How does that compare to your EQS output?

John

At 04:37 PM 5/20/2003 +0900, you wrote:
>Hi.
>
>I have tried to use Package "SEM".
>
>As a learning, I try to convert a program running well of EQS
>which is as follows to SEM:
>
>###  EQS  ###
>/SPECIFICATION
>CAS=100; VAR=5 MAT=COR; ANA=COR;
>/EQUATIONS
>V1=*F1+E1; V2=*F1+E2; V3=*F1+*F2+E3; V4=**F1+*F2*E4;
>V5=*F2+E5;
>/VAR
>E1 TO E5=*; F1*1.0; F2=1.0;
>/COV
>E1,E2=*; F1,F2=*:
>/PRINT
>FIT ALL;
>/MATRIX ......
>/END
>
>This is the converted SEM program.
>###
>data.mh<-matrix(c(
>1.00,0,0,0, 0,
>0.38,1.00,0,0, 0,
>0.52,0.28,1.00,0,0,
>0.55,0.32,0.38,1.00,0,
>0.36,0.40,0.48,0.31,1.00
>),ncol=5,byrow=T)
>
>model.mh<-matrix(c(
>         'F1 -> V1', 'a1',NA,
>         'F1 -> V3', 'a3',NA,
>         'F1 -> V4', 'a4',NA,
>         'F2 -> V2', 'b2',NA,
>         'F2 -> V3', 'b3',NA,
>         'F2 -> V4', 'b4',NA,
>         'F2 -> V5', 'b5',NA,
>         'V1 <-> V1','e1', 1,
>         'V2 <-> V2','e2', 1,
>         'V3 <-> V3','e3', 1,
>         'V4 <-> V4','e4', 1,
>         'V5 <-> V5','e5', 1,
>         'F1 <-> F1','d1', 1,
>         'F2 <-> F2','d2', 1,
>         'F1 <-> F2','c12',NA,
>         'V1 <-> V2','cv1', NA,
>),ncol=3,byrow=T)
>obs.vars.mh <- c('V1','V2','V3','V4','V5')
>rownames(data.mh) <- colnames(data.mh) <- obs.vars.mh
>
>sem.mh <- sem(model.mh, data.mh, 100)
>###
>
>At this stage, everything looks going well.
>By debug mode of "sem()" it finishes with no error.
>However,the process of "summary(sem.mh)" produces an error.
>
> > summary(sem.mh)
>Error in optim(0, function(lam) ((1 - conf.level)/2 - pchisq(chisq, df,  :
>         Function cannot be evaluated at initial parameters
>In addition: Warning message:
>NaNs produced in: sqrt(diag(object$cov))
>
>It seems to me that there is something wrong at the conversion of
>"E1 TO E5=*;"  to " 'V1 <-> V2','cv1', NA ".
>
>Could anyone explain me how to manage this trouble?
>
>Thanks.
>
>--------========----------
>Mitsuo Igarashi
>mitsu5 at ruby.famille.ne.jp
>
>______________________________________________
>R-help at stat.math.ethz.ch mailing list
>https://www.stat.math.ethz.ch/mailman/listinfo/r-help

-----------------------------------------------------
John Fox
Department of Sociology
McMaster University
Hamilton, Ontario, Canada L8S 4M4
email: jfox at mcmaster.ca
phone: 905-525-9140x23604
web: www.socsci.mcmaster.ca/jfox




More information about the R-help mailing list