[R] Difficulty understanding sem errors / failed confirmatory factor analysis

Adam D. I. Kramer adik at ilovebacon.org
Thu Sep 18 20:33:03 CEST 2008


Hi John,

 	Thanks very much for your response. It does appear now that my
correlation matrix and not your software is the problem. I apologize for
wasting your time! I do think that a more informative error message may have
prompted me to consider this possibility more fully.

--Adam

On Thu, 18 Sep 2008, John Fox wrote:

> Dear Adam,
>
> (1) Note that your input correlation matrix appears to be numerically
> singular:
>
>> solve(R)
> Error in solve.default(R) :
>  system is computationally singular: reciprocal condition number =
> 2.38183e-17
>> det(R)
> [1] -1.753523e-25
>> qr(R)$rank
> [1] 23
>
> (2) In addition, you have specified what are essentially redundant
> constraints on the model, fixing *both* the loading for a "reference"
> indicator for each factor to 1 *and* fixing the factor variances to 1. One
> would normally do one or the other.
>
> I think that (1) rather than (2) is the essential source of the problem, and
> fixing (2) doesn't make the problem go away.
>
> Because sem() can't compute the covariance matrix of the estimated
> parameters, this component is missing from the returned object, causing the
> cryptic error message in summary.sem(). I'll provide a more informative
> error or warning.
>
> I hope this helps,
> John
>
> ------------------------------
> John Fox, Professor
> Department of Sociology
> McMaster University
> Hamilton, Ontario, Canada
> web: socserv.mcmaster.ca/jfox
>
>> -----Original Message-----
>> From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-project.org]
> On
>> Behalf Of Adam D. I. Kramer
>> Sent: September-18-08 1:37 PM
>> To: r-help at r-project.org
>> Subject: Re: [R] Difficulty understanding sem errors / failed confirmatory
>> factor analysis
>>
>> No new info, but the model and correlation table are pasted at the end of
>> this message.
>>
>> --Adam
>>
>> On Thu, 18 Sep 2008, Adam D. I. Kramer wrote:
>>
>>> Hello,
>>>
>>> 	I'm trying to fit a pretty simple confirmatory factor analysis using
>>> the sem package. There's a CFA example in the examples, which is
> helpful,
>>> but the output for my (failing) model is hard to understand. I'd be
>>> interested in any other ways to do a CFA in R, if this proves
> troublesome.
>>>
>>> 	The CFA is replicating a 5 uncorrelated-factor structure (for those
>>> interested, it is a structure of word usage patterns in weblogs) in a
>>> special population. The model looks like model.txt (attached as many
> people
>>> hate long emails); the correlation matrix cors.txt as well.
>>>
>>> 	I'm setting no overlap between factors, no correlation between
>>> factors, and estimating a separate variance for each observed variable
>>> (which should be everything on the right-hand side of the -> arrows),
> but
>>> setting the factor variances equal to 1...pretty standard. I've ensured
>> that
>>> everything is typed correctly to the best I am able.
>>>
>>> 	The problem:
>>>
>>> library(sem)
>>> model.kr <- specify.model(file="model.txt") # printing it checks out ok
>>> correl <- read.csv("cors.csv", header=TRUE) # printing it checks out ok
>>> kr.sem <- sem(ram=model.kr,S=correl,N=3034)
>>> ...about 10 seconds pass...
>>> Warning message:
>>> In sem.default(ram = ram, S = S, N = N, param.names = pars, var.names =
>> vars,
>>> :
>>>  Could not compute QR decomposition of Hessian.
>>> Optimization probably did not converge.
>>>
>>> (running qr on correl works fine; randomly-generated correl matrices
> fail
>> in
>>> the same way; I do not know how to further troubleshoot this)
>>>
>>> ...and then the model itself (which is produced, as the above was just a
>>> warning):
>>>
>>> summary(kr.sem)
>>> Error in data.frame(object$coeff, se, z, 2 * (1 - pnorm(abs(z))),
> par.code)
>> :
>>>  arguments imply differing number of rows: 47, 0
>>>
>>> ...both of these error messages are beyond my ability to troubleshoot.
> Any
>>> help would be greatly appreciated. Because I am unsure what exactly the
>>> problem with this analysis is, I can't create a simpler example for
> testing
>>> purposes...but I think my model and correlation matrix are fairly
> simple.
>>>
>>>> unlist(R.Version())
>>>                      platform                           arch
>>>    "x86_64-unknown-linux-gnu"                       "x86_64"
>>>                            os                         system
>>>                   "linux-gnu"            "x86_64, linux-gnu"
>>>                        status                          major
>>>                            ""                            "2"
>>>                         minor                           year
>>>                         "7.2"                         "2008"
>>>                         month                            day
>>>                          "08"                           "25"
>>>                       svn rev                       language
>>>                       "46428"                            "R"
>>>                version.string "R version 2.7.2 (2008-08-25)"
>>>
>>> ...sem installed via install.packages("sem") which I assume is current.
>>>
>>> Cordially,
>>> Adam Kramer
>>>
>>
>> model.kr <- specify.model()
>> Melancholy -> Affect, mel.aff, NA
>> Melancholy -> Negemo, mel.neg, NA
>> Melancholy -> Sad,  mel.sad, NA
>> Melancholy -> Physcal, mel.phys, NA
>> Melancholy -> Body, mel.phys, NA
>> Melancholy -> Eating, mel.eat, NA
>> Melancholy -> Groom, NA, 1
>> Social  -> numlines, soc.nrow, NA
>> Social  -> Leisure, soc.leis, NA
>> Social  -> Home, soc.home, NA
>> Social  -> Sports, soc.sports, NA
>> Social  -> TV,  soc.tv, NA
>> Social  -> Music, soc.mus, NA
>> Social  -> Money, NA, 1
>> Rant  -> Swear, rant.swear, NA
>> Rant  -> Sexual, rant.sex, NA
>> Rant  -> Anger, rant.anger, NA
>> Rant  -> I,  NA, 1
>> Metaphysical -> Metaph, met.met, NA
>> Metaphysical -> Relig, met.relig, NA
>> Metaphysical -> Death, NA, 1
>> Work  -> Occup, work.occ, NA
>> Work  -> School, work.school, NA
>> Work  -> Job,  NA, 1
>> Affect <-> Affect,Affect.var,NA
>> Negemo <-> Negemo,Negemo.var,NA
>> Sad <-> Sad,Sad.var,NA
>> Physcal <-> Physcal,Physcal.var,NA
>> Body <-> Body,Body.var,NA
>> Eating <-> Eating,Eating.var,NA
>> Groom <-> Groom,Groom.var,NA
>> numlines <-> numlines,numlines.var,NA
>> Leisure <-> Leisure,Leisure.var,NA
>> Home <-> Home,Home.var,NA
>> Sports <-> Sports,Sports.var,NA
>> TV <-> TV,TV.var,NA
>> Music <-> Music,Music.var,NA
>> Money <-> Money,Money.var,NA
>> Swear <-> Swear,Swear.var,NA
>> Sexual <-> Sexual,Sexual.var,NA
>> Anger <-> Anger,Anger.var,NA
>> I <-> I,I.var,NA
>> Metaph <-> Metaph,Metaph.var,NA
>> Relig <-> Relig,Relig.var,NA
>> Death <-> Death,Death.var,NA
>> Occup <-> Occup,Occup.var,NA
>> School <-> School,School.var,NA
>> Job <-> Job,Job.var,NA
>> Melancholy <-> Melancholy, NA, 1
>> Social <-> Social, NA, 1
>> Rant <-> Rant, NA, 1
>> Work <-> Work, NA, 1
>> Metaphysical <-> Metaphysical, NA, 1
>>
>> correl <- matrix(0,nrow=24,ncol=24)
>> correl[lower.tri(correl,diag=TRUE)] <- c(1, 0.940530496413442,
>> 0.765560263936915, 0.705665939921134,
>> 0.659038546655712, 0.282665099938120, 0.234892888297051,
> 0.0554321360979252,
>> 0.671137592040541, 0.54382418910777, 0.463922205203901, 0.353418190097785,
>> 0.414864918025334, 0.436177075274485, 0.401019650838241,
> 0.370116202378091,
>> 0.777297151879925, 0.676782523496444, 0.384244495774914,
> 0.233569710080454,
>> 0.381213315694389, 0.792870007525815, 0.50437548997674, 0.700522809676332,
>> 1, 0.789549528191674, 0.706300687178796, 0.677210560231246,
>> 0.260692661416488, 0.229468929161093, 0.0715008916402315,
> 0.575592411881254,
>> 0.495811001574585, 0.387005398515213, 0.286945225104112,
> 0.332994303548624,
>> 0.380017238311269, 0.430036391324925, 0.331754269605511,
> 0.841233992941869,
>> 0.648407420058087, 0.383101710409617, 0.226088422466275, 0.38890278815819,
>> 0.694900967907394, 0.445767105915179, 0.611121179516979, 1,
>> 0.554261042721096, 0.527433237517158, 0.195884095023418,
> 0.180722683807294,
>> 0.0233909540224985, 0.516740406669213, 0.435018065577118,
> 0.357120136043065,
>> 0.256978759119895, 0.310082859183584, 0.346636599600033,
> 0.286753730820772,
>> 0.260480159024979, 0.549021337624957, 0.48888735524692, 0.310472252813801,
>> 0.162629025914762, 0.341951482059891, 0.604151525748714,
> 0.404455472396666,
>> 0.513232045563814, 1, 0.926617967581845, 0.496550925591883,
>> 0.348467198716147, 0.061642221232731, 0.520273451850585,
> 0.454688691566968,
>> 0.361179853804786, 0.251729488407341, 0.276070295108034,
> 0.301418864648534,
>> 0.416591776932984, 0.444945330539674, 0.559869838931842,
> 0.544386905545782,
>> 0.27126759338533, 0.133247574277541, 0.310271891666118, 0.521537483862256,
>> 0.311771883417551, 0.471080247067523, 1, 0.296375815811106,
>> 0.245934996387214, 0.0955552805445385, 0.452337692426552,
> 0.363463874290988,
>> 0.339558959480213, 0.244564602900861, 0.253767733666974,
> 0.271411427718931,
>> 0.391479465009918, 0.232142608383647, 0.518262010456117,
> 0.491601506679358,
>> 0.267644288407907, 0.125392653581526, 0.314025855170014,
> 0.481718318983948,
>> 0.28021913467524, 0.425176692670869, 1, 0.183300375385584,
>> 0.033752849675936, 0.251307861560496, 0.273349357055731,
> 0.154752778367666,
>> 0.0726227557418435, 0.0810855443617927, 0.169413646643786,
> 0.14876182751722,
>> 0.090027807464796, 0.21707073520028, 0.227245091073637,
> 0.0648985279708279,
>> 0.0184155556622148, 0.0917329040389644, 0.224131495587368,
>> 0.141524409848304, 0.225250463174961, 1, 0.0422205901067624,
>> 0.335813173017425, 0.462314781501668, 0.137068724813020,
> 0.0723839601971734,
>> 0.0727494211937804, 0.112428911506304, 0.09425456138948,
> 0.0599407261374292,
>> 0.190826379314435, 0.211704707365072, 0.0599306146160989,
>> 0.0296829331196419, 0.0682294826412284, 0.188274984783352,
>> 0.139422045025596, 0.161353066485886, 1, 0.05257676892534,
>> 0.0280480438748768, 0.00910257508927212, 0.0871857793285287,
>> 0.0160729045542020, 0.0569498365312614, -0.0278792722216208,
>> -0.064821779008319, 0.0611534438874241, -0.0649834249949666,
>> 0.0355509895650055, 0.0135445926170511, 0.0457566918082741,
>> 0.0604365669560489, 0.0585041719421536, 0.0453745903935696, 1,
>> 0.761816109289408, 0.589874357357904, 0.649504824987434,
> 0.658362125608313,
>> 0.342115375404423, 0.236861363583780, 0.248095510733153,
> 0.443279264097818,
>> 0.492471838105872, 0.248701650770021, 0.128552959879838,
> 0.276153894635528,
>> 0.607556471316203, 0.449181155519957, 0.510375756616414, 1,
>> 0.247939328658872, 0.239982254184636, 0.241566313660839,
> 0.287799155446014,
>> 0.209294226000604, 0.159562148116037, 0.379361578341484,
> 0.497577130930334,
>> 0.218564559998989, 0.09910467906514, 0.260723180575602, 0.467924257159533,
>> 0.326606718662009, 0.418920180615036, 1, 0.279500783890266,
>> 0.315054486693380, 0.222378322027149, 0.175009967321649,
> 0.171392982263514,
>> 0.303685681481775, 0.277189930927861, 0.112262899972587,
> 0.0486869353393796,
>> 0.136799339182926, 0.439080141905746, 0.335750129078362,
> 0.357071201278175,
>> 1, 0.354042555500904, 0.186671191628747, 0.0988194936238798,
>> 0.161389983251376, 0.225124570709853, 0.166070213591245,
> 0.121050680740651,
>> 0.0555233084604175, 0.143574719627254, 0.314332705080321,
> 0.233696321192899,
>> 0.250453706966593, 1, 0.194173439107269, 0.128637091334456,
>> 0.188288180271912, 0.249261729284129, 0.294002924006152,
> 0.180881281305379,
>> 0.130825345306321, 0.152316871694807, 0.400492580214257,
> 0.313557675560858,
>> 0.314387144865789, 1, 0.184856884327958, 0.147800700051061,
>> 0.314348653487276, 0.223052727856440, 0.160836428547767,
> 0.0788465159084819,
>> 0.184166318589758, 0.464779622013576, 0.296714228371417,
> 0.509475424226691,
>> 1, 0.243783177939616, 0.433294149172899,
>> 0.385435708448960,0.165204287365281, 0.122878967887846, 0.134705298271121,
>> 0.292692353692189,
>> 0.175825474932413, 0.302111138660379, 1, 0.325702026715680,
>> 0.265660847381981, 0.144919463251553, 0.105698215649586,
> 0.120886293524908,
>> 0.266994210674339, 0.158210355462592, 0.256685716586081, 1,
>> 0.50128293661388, 0.376612773737787, 0.200216055489841, 0.410973414330935,
>> 0.544902004754666, 0.340576879662518, 0.495895604908182, 1,
>> 0.210485715826384, 0.162841078754691, 0.163460255178148,
> 0.530490890488822,
>> 0.327408998238198, 0.501112169084101, 1, 0.834421294834807,
>> 0.697570273879324, 0.284190669063073, 0.165736914780320,
> 0.243184491397893,
>> 1, 0.187175885786238, 0.178409162228837, 0.107264487137595,
>> 0.157214632976541, 1, 0.274591668601347, 0.155954924109372,
>> 0.229057302047291, 1, 0.824656000910955, 0.82923430112462, 1,
>> 0.476782357161847, 1)
>>
>> ______________________________________________
>> R-help at 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.
>
>
>



More information about the R-help mailing list