Dear David, It certainly helps to have a "reproducible example."
You've left out the error variances ("uniquenesses") for the observed variables. You're also making the specification *much* harder than it needs to be: ---------- snip ----------- > cfa.mod.1 <- cfa() 1: F: a, b, c, d, e, g 2: Read 1 item NOTE: adding 6 variances to the model > cfa.mod.1 Path Parameter StartValue 1 F -> a <fixed> 1 2 F -> b lam[b:F] 3 F -> c lam[c:F] 4 F -> d lam[d:F] 5 F -> e lam[e:F] 6 F -> g lam[g:F] 7 F <-> F V[F] 8 a <-> a V[a] 9 b <-> b V[b] 10 c <-> c V[c] 11 d <-> d V[d] 12 e <-> e V[e] 13 g <-> g V[g] > cfa.sem.1 <- sem(cfa.mod.1, S=my.cor, N=200) > summary(cfa.sem.1) Model Chisquare = 543.6442 Df = 9 Pr(>Chisq) = 2.565155e-111 AIC = 567.6442 BIC = 495.9594 Normalized Residuals Min. 1st Qu. Median Mean 3rd Qu. Max. -1.536000 -0.135500 0.002829 0.294500 0.353400 5.337000 R-square for Endogenous Variables a b c d e g 0.1841 0.6969 0.8172 1.0084 0.8269 0.6007 Parameter Estimates Estimate Std Error z value Pr(>|z|) lam[b:F] 1.945376727 0.302785547 6.424933 1.319280e-10 b <--- F lam[c:F] 2.106647980 0.320689035 6.569130 5.061006e-11 c <--- F lam[d:F] 2.340103148 0.347900207 6.726363 1.739560e-11 d <--- F lam[e:F] 2.119171567 0.322095480 6.579327 4.725816e-11 e <--- F lam[g:F] 1.806192591 0.287680436 6.278469 3.419240e-10 g <--- F V[F] 0.184137740 0.057758730 3.188050 1.432356e-03 F <--> F V[a] 0.815862342 0.081641551 9.993224 1.631854e-23 a <--> a V[b] 0.303132223 0.030545714 9.923887 3.277381e-23 b <--> b V[c] 0.182802929 0.019248279 9.497105 2.158058e-21 c <--> c V[d] -0.008353614 0.008298643 -1.006624 3.141154e-01 d <--> d V[e] 0.173057855 0.018375461 9.417878 4.602950e-21 e <--> e V[g] 0.399281457 0.039935977 9.998039 1.554445e-23 g <--> g Iterations = 59 ---------- snip ----------- Note that the default in cfa() is to use a reference indicator, and that the solution is improper -- there's a negative estimated error variance, V[d]. An alternative specification sets the variance of the factor to 1, but then cfa() fails to converge: ---------- snip ----------- > cfa.mod.2 <- cfa(reference.indicators=FALSE) 1: F: a, b, c, d, e, g 2: Read 1 item NOTE: adding 6 variances to the model > cfa.mod.2 Path Parameter StartValue 1 F -> a lam[a:F] 2 F -> b lam[b:F] 3 F -> c lam[c:F] 4 F -> d lam[d:F] 5 F -> e lam[e:F] 6 F -> g lam[g:F] 7 F <-> F <fixed> 1 8 a <-> a V[a] 9 b <-> b V[b] 10 c <-> c V[c] 11 d <-> d V[d] 12 e <-> e V[e] 13 g <-> g V[g] > cfa.sem.2 <- sem(cfa.mod.2, S=my.cor, N=200, debug=TRUE) . . . Start values: lam[a:F] lam[b:F] lam[c:F] lam[d:F] lam[e:F] lam[g:F] V[a] V[b] V[c] V[d] V[e] V[g] 0.65781335 0.87500031 0.89597921 0.95169707 0.87357655 0.86645865 0.56728160 0.23437445 0.19722125 0.09427268 0.23686401 0.24924941 iteration = 0 Step: [1] 0 0 0 0 0 0 0 0 0 0 0 0 Parameter: [1] 0.65781335 0.87500031 0.89597921 0.95169707 0.87357655 0.86645865 0.56728160 0.23437445 0.19722125 0.09427268 0.23686401 0.24924941 Function Value [1] 3.346898 Gradient: [1] 0.4583916 0.3957443 -0.2067868 -0.4369468 -0.2629929 0.2431501 -0.5501220 -1.6700002 0.6543088 3.0031327 0.7820309 -1.0122023 . . . iteration = 21 Parameter: [1] 0.44280000 0.68987016 0.99055402 1.15651371 0.99812990 0.75293242 0.82441291 1.01174284 0.01185904 -1.30253783 -0.01183159 [12] 0.71942353 Function Value [1] -316143 Gradient: [1] 83431722 105921661 12975044375 -137927630 -13105242109 162575760 -22404848 -36111801 -541872735153 [10] -61232522 -552802111412 -85072888 Successive iterates within tolerance. Current iterate is probably solution. Warning message: In eval(expr, envir, enclos) : Could not compute QR decomposition of Hessian. Optimization probably did not converge. ---------- snip ----------- The problem seems ill-conditioned, and in any event the standard errors that you get using tetrachoric correlations won't be right (I expect you know that). I hope this helps, John > -----Original Message----- > From: David Purves [mailto:david.pur...@glasgow.ac.uk] > Sent: Wednesday, January 23, 2013 10:23 AM > To: John Fox > Cc: r-help@R-project.org > Subject: RE: [R] CFA with lavaan or with SEM > > Hi John > > Thanks for your quick reply. > > The full warning I got is > > ' Error in csem(model = model.description, start, opt.flag = 1, typsize > = typsize, : > The matrix is non-invertable.' > > The eigenvalues of the tetrachoric correlations are non negative. So it > is must be how I am defining my model. > > I have also tried it without having lavaan in the session. > > A wee example of my error (whether it is sensible); > > library(sem) > > my.cor<-matrix(c( 1.0000000 , 0.7600616 , 0.3653309 , 0.4377949 , > 0.2917927 , 0.5133697, > 0.7600616 , 1.0000000, 0.6335519 , 0.8288809 , 0.6223942 , > 0.6355725, > 0.3653309 , 0.6335519 , 1.0000000 , 0.9098309 , 0.9098309 , > 0.7693395, > 0.4377949 , 0.8288809 , 0.9098309 , 1.0000000 ,0.9136967 , > 0.7829854, > 0.2917927 ,0.6223942 , 0.9098309 , 0.9136967 ,1.0000000 , > 0.7354562, > 0.5133697 ,0.6355725 , 0.7693395 , 0.7829854 , 0.7354562 , > 1.0000000), > nrow=6,byrow=T) > > colnames(my.cor)<-rownames(my.cor)<-c("a","b","c","d","e","g") > > eigen(my.cor) > solve(my.cor) > > #i tried defining the model in two ways > > model.1<-matrix(c( > # arrow #parameter #start > "f -> a", "g1", NA, > "f -> b", "g2", NA, > "f -> c", "g3", NA, > "f -> d", "g4", NA, > "f -> e", "g5", NA, > "f -> g", "g6", NA, > "f <-> f", NA, 1), > ncol=3,byrow=T) > > out<-sem(model.1,S=my.cor,200) > > model.1 <- specifyEquations() > f1 = gam11*a + gam12*b + gam13*c + gam14*d + gam15*e + gam16*g > f1 = 1* f1 > > out<-sem(model.1,S=my.cor,200) > > But the same error. > > I would be very grateful if you could indicate where the error in my > code is please. > > > thanks, david > > > > > -----Original Message----- > From: John Fox [mailto:j...@mcmaster.ca] > Sent: 23 January 2013 14:00 > To: David Purves > Cc: r-help@R-project.org > Subject: Re: [R] CFA with lavaan or with SEM > > Dear David, > > On Wed, 23 Jan 2013 11:19:09 +0000 > David Purves <david.pur...@glasgow.ac.uk> wrote: > > Hi > > > > Sorry for the rather long message. > > > > . . . > > > > > I have tried the analysis using John Fox's SEM package / command. > > > > I calculate the correlation matrix with smoothing > > > > my.cor<-hetcor(north.dat.sub,use="pairwise.complete.obs")$correlations > > > > This returns the warning indicating that the correlation matrix was > adjusted to make it positive definite. However the following sem model > does not run, with the error message that the matrix is non-invertible. > > > > mod1<-sem::sem(sem .model.1, S=my.cor, 300) > > > > Should the smoothing not allow it to be inverted? > > > > If the input correlation matrix is really positive definite, then it has > an inverse. You could check directly, e.g., by looking at the > eignevalues of the tetrachoric correlation matrix. There's very little > here to go on, not even the error message produced by sem(). By the way, > I assume that you didn't really call sem in the sem package as sem::sem > in a session in which lavann was loaded. I'm not sure what would happen > if you did that. > > Best, > John > > ------------------------------------------------ > John Fox > Sen. William McMaster Prof. of Social Statistics Department of Sociology > McMaster University Hamilton, Ontario, Canada > http://socserv.mcmaster.ca/jfox/ > > > > > ______________________________________________ > > R-help@r-project.org mailing list > > https://stat.ethz.ch/mailman/listinfo/r-help > > PLEASE do read the posting guide > > http://www.R-project.org/posting-guide.html > > and provide commented, minimal, self-contained, reproducible code. > > > > > The University of Glasgow, charity number SC004401 ______________________________________________ R-help@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.