Notice: On April 23, 2014, Statalist moved from an email list to a forum, based at statalist.org.
From | Nick Cox <njcoxstata@gmail.com> |
To | "statalist@hsphsun2.harvard.edu" <statalist@hsphsun2.harvard.edu> |
Subject | Re: st: CR and AVE for factor analysis with 2 factors |
Date | Tue, 29 Oct 2013 08:55:42 +0000 |
What is implied by your log is that replace sum_factors = sum_factors + sqrt(communalities[3,1]) has the effect of replacing -sum_factors- with missing. So, please show us that -communalities- matrix, namely the result of your line matrix list communalities (I see on closer examination that the -communalities- matrix is not the communalaties as first reported, but modified.) No idea, sorry, about your general factor analysis question. I'm firmly a PCA person. Nick njcoxstata@gmail.com On 29 October 2013 07:14, Florian Christian Esser <florian.esser@tu-dortmund.de> wrote: > Hi Nick, thanks a lot for your advice. > Unfortunately, all my communalities are positive. > Does anyone have any ideas, what else could cause the issue? > > Is the general approach correct, to calculate CR and AVE for both factors > at the same time, or would I have to do it individually. I.e. I do the > factor analysis, identify, that the indicators load on two factors and > then calculate CR and AVE for each factor individually? > >> Your missing value is presumably the result of taking the square root >> of a negative number. Is at least one of your communalities reported >> as negative? >> >> That aside you have segments like >> >> gen nvar = e(df_m) >> gen sum_factors=0 >> local i=1 >> while `i' <= nvar { >> replace sum_factors = sum_factors + sqrt(communalities[`i',1]) >> local i=`i'+1 >> } >> >> You can simplify this. First, to hold constants, use locals or >> scalars, not variables. Second, use -forval- to loop here: >> >> local nvar = e(df_m) >> local sum_factors = 0 >> forval i = 1/`nvar' { >> local sum_factors = `sum_factors' + sqrt(communalities[`i',1] >> } >> >> Third, use Mata instead. Here is a self-contained example: >> >> . matrix foo = (1,2,3,4) >> >> . mata : st_numscalar("sum_factors", sum(sqrt(st_matrix("foo")))) >> >> . scalar li >> sum_factors = 6.1462644 >> >> However, none of these tricks can get round what appears to be your >> problem. >> >> >> Nick >> njcoxstata@gmail.com >> >> >> On 28 October 2013 14:11, Florian Christian Esser >> <florian.esser@tu-dortmund.de> wrote: >>> Hi everyone, >>> >>> I am trying to do factor analysis in order to measure two strategy >>> constructs. I have 6 indicators that load on these two constructs. Now I >>> want to calculate composite reliability (CR) and average variance >>> extracted(AVE). >>> I use the following code (here for CR): >>> ___________________________________________________________________ >>> factor zwmdiff_1 zwpdiff_1 zwpdiff_2 zwcost_1 zwcost_2 zwcost_3, pcf >>> matrix list e(Psi) >>> matrix list e(L) >>> matrix psi = e(Psi)' >>> matrix communalities = J(rowsof(psi),1,1) >>> matrix communalities = communalities - psi >>> matrix colnames communalities = communalities >>> matrix list communalities >>> gen nvar = e(df_m) >>> gen sum_factors=0 >>> local i=1 >>> while `i' <= nvar { >>> replace sum_factors = sum_factors + sqrt(communalities[`i',1]) >>> local i=`i'+1 >>> } >>> generate sum_psi=0 >>> local i=1 >>> while `i' <= nvar { >>> replace sum_psi = sum_psi + psi[`i',1] >>> local i=`i'+1 >>> } >>> gen cr=(sum_factors*sum_factors)/((sum_factors*sum_factors)+sum_psi) >>> drop nvar >>> drop sum_factors >>> drop sum_psi >>> list cr in 1 >>> _________________________________________________________________ >>> >>> The problem is that once the local macro starts running it tells me: >>> _____________________________ >>> [...] >>> (534 real changes made) >>> (534 real changes made) >>> (534 real changes made, 534 to missing) >>> (0 real changes made) >>> (0 real changes made) >>> (0 real changes made) >>> [...] >>> ___________________________ >>> >>> and accordingly there is an empty result for CR. >>> If I add "factors(1)" in the command line above, I get a result, but I >>> since I have two factors, I think it is not correct to do this. >>> >>> Does anyone know what to do here? >>> >>> Thanks a lot in advance. >>> >>> * >>> * For searches and help try: >>> * http://www.stata.com/help.cgi?search >>> * http://www.stata.com/support/faqs/resources/statalist-faq/ >>> * http://www.ats.ucla.edu/stat/stata/ >> * >> * For searches and help try: >> * http://www.stata.com/help.cgi?search >> * http://www.stata.com/support/faqs/resources/statalist-faq/ >> * http://www.ats.ucla.edu/stat/stata/ >> > > > * > * For searches and help try: > * http://www.stata.com/help.cgi?search > * http://www.stata.com/support/faqs/resources/statalist-faq/ > * http://www.ats.ucla.edu/stat/stata/ * * For searches and help try: * http://www.stata.com/help.cgi?search * http://www.stata.com/support/faqs/resources/statalist-faq/ * http://www.ats.ucla.edu/stat/stata/