[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