[R] SEM model testing with identical goodness of fits (2)

hyena flyhyena at yahoo.com
Sun Mar 15 18:29:25 CET 2009


Thanks for the clear clarification. The suggested bi-factor solution 
sounds attractive. I am going to check it in details.

regards,


William Revelle wrote:
> Dear Hyena,
> 
> Your model  is of three correlated factors accounting for the observed 
> variables.
> Those three correlations may be accounted for equally well by 
> correlations (loadings) of the lower order factors with a general factor.
> Those two models are  indeed equivalent models and will, as a 
> consequence have exactly equal fits and dfs.
> 
> Call the three correlations rab, rac, rbc.  Then a higher order factor 
> model will have loadings of
> fa, fb and fc, where fa*fb = rab, fa*bc = rac, and fb*fc = rbc.
> You can solve for fa, fb and fc in terms of  factor inter-correlations.
> 
> You can not compare the one to the other, for they are equivalent models.
> 
> You can examine how much of the underlying variance of the original 
> items is due to the general factor by considering a bi-factor solution 
> where the general factor loads on each of the observed variables and a 
> set of residual group factors account for the covariances within your 
> three domains.  This can be done in an Exploratory Factor Analysis (EFA) 
> context using the omega function in the psych package. It is possible to 
> then take that model and test it using John Fox's sem package to 
> evaluate the size of each of the general and group factor loadings.   (A 
> discussion of how to do that is at 
> http://www.personality-project.org/r/book/psych_for_sem.pdf ).
> 
> Bill
> 
> 
> At 4:25 PM +0800 3/15/09, hyena wrote:
>> Dear John,
>>
>>    Thanks for the prompt reply! Sorry did not supply with more 
>> detailed information.
>>
>>    The target model consists of three latent factors, general risk 
>> scale from Weber's domain risk scales, time perspective scale from 
>> Zimbardo(only future time oriented) and a travel risk attitude scale. 
>> Variables with "prob_" prefix are items of general risk scale, 
>> variables of "o1" to "o12" are items of future time perspective and 
>> "v5" to "v13" are items of travel risk scale.
>>
>>  The purpose is to explore or find a best fit model that "correctly" 
>> represent the underlining relationship of three scales.  So far, the 
>> correlated model has the best fit indices, so I 'd like to check if 
>> there is a higher level factor that govern all three factors, thus the 
>> second model.
>>
>>  The data are all 5 point Likert scale scores by respondents(N=397). 
>> The example listed bellow did not show "prob_" variables(their names 
>> are too long).
>>
>>   Given the following model structure, if they are indeed 
>> observationally indistinguishable, is there some possible adjustments 
>> to test the higher level factor effects?
>>
>>  Thanks,
>>
>> ###########################
>> #data example, partial
>> #########################
>>                     1                   1                     1        1
>>  id     o1 o2 o3 o4 o5 o6 o7 o8 o9 o10 o11 o12 o13 v5 v13 v14 v16 v17
>> 14602  2  2  4  4  5  5  2  3  2   4   3   4   2  5   2   2   4   2
>> 14601  2  4  5  4  5  5  2  5  3   4   5   4   5  5   3   4   4   2
>> 14606  1  3  5  5  5  5  3  3  5   3   5   5   5  5   5   5   5   3
>> 14610  2  1  4  5  4  5  3  4  4   2   4   2   1  5   3   5   5   5
>> 14609  4  3  2  2  5  5  2  5  2   4   4   2   2  4   2   4   4   4
>>
>> ####################################
>> #correlated model, three scales corrlated to each other
>> model.correlated <- specify.model()
>>     weber<->tp,e.webertp,NA
>>     tp<->tr,e.tptr,NA
>>     tr<->weber,e.trweber,NA
>>     weber<->weber,NA,1
>>     tp<->tp,e.tp,NA
>>     tr <->tr,e.trv,NA
>>     weber -> prob_wild_camp,alpha2,NA
>>     weber -> prob_book_hotel_in_short_time,alpha3,NA
>>     weber -> prob_safari_Kenia, alpha4, NA
>>     weber -> prob_sail_wild_water,alpha5,NA
>>     weber -> prob_dangerous_sport,alpha7,NA
>>     weber -> prob_bungee_jumping,alpha8,NA
>>     weber -> prob_tornado_tracking,alpha9,NA
>>     weber -> prob_ski,alpha10,NA
>>     prob_wild_camp <-> prob_wild_camp, ep2,NA
>>     prob_book_hotel_in_short_time <-> 
>> prob_book_hotel_in_short_time,ep3,NA
>>     prob_safari_Kenia <-> prob_safari_Kenia, ep4, NA
>>     prob_sail_wild_water <-> prob_sail_wild_water,ep5,NA
>>     prob_dangerous_sport <-> prob_dangerous_sport,ep7,NA
>>     prob_bungee_jumping <-> prob_bungee_jumping,ep8,NA
>>     prob_tornado_tracking <-> prob_tornado_tracking,ep9,NA
>>     prob_ski <-> prob_ski,ep10,NA
>>     tp -> o1,NA,1
>>     tp -> o3,beta3,NA
>>     tp -> o4,beta4,NA
>>     tp -> o5,beta5,NA
>>     tp -> o6,beta6,NA
>>     tp -> o7,beta7,NA
>>     tp -> o9,beta9,NA
>>     tp -> o10,beta10,NA
>>     tp -> o11,beta11,NA
>>     tp -> o12,beta12,NA
>>     o1 <-> o1,eo1,NA
>>     o3 <-> o3,eo3,NA
>>     o4 <-> o4,eo4,NA
>>     o5 <-> o5,eo5,NA
>>     o6 <-> o6,eo6,NA
>>     o7 <-> o7,eo7,NA
>>     o9 <-> o9,eo9,NA
>>     o10 <-> o10,eo10,NA
>>     o11 <-> o11,eo11,NA
>>     o12 <-> o12,eo12,NA
>>     tr -> v5, NA,1
>>     tr -> v13, gamma2,NA
>>     tr -> v14, gamma3,NA
>>     tr -> v16,gamma4,NA
>>     tr -> v17,gamma5,NA
>>     v5 <-> v5,ev1,NA
>>     v13 <-> v13,ev2,NA
>>     v14 <-> v14,ev3,NA
>>     v16 <-> v16, ev4, NA
>>     v17 <-> v17,ev5,NA
>>
>>
>> sem.correlated <- sem(model.correlated, cov(riskninfo_s), 397)
>> summary(sem.correlated)
>> samelist = c('weber','tp','tr')
>> minlist=c(names(rk),names(tp))
>> maxlist = NULL
>> path.diagram(sem2,out.file = 
>> "e:/sem2.dot",same.rank=samelist,min.rank=minlist,max.rank = 
>> maxlist,edge.labels="values",rank.direction='LR')
>>
>> #############################################
>> #high level latent scale, a high level factor exist
>> ##############################################
>> model.rsk <- specify.model()
>>     rsk->tp,e.rsktp,NA
>>     rsk->tr,e.rsktr,NA
>>     rsk->weber,e.rskweber,NA
>>     rsk<->rsk, NA,1
>>     weber<->weber, e.weber,NA
>>     tp<->tp,e.tp,NA
>>     tr <->tr,e.trv,NA
>>     weber -> prob_wild_camp,NA,1
>>     weber -> prob_book_hotel_in_short_time,alpha3,NA
>>     weber -> prob_safari_Kenia, alpha4, NA
>>     weber -> prob_sail_wild_water,alpha5,NA
>>     weber -> prob_dangerous_sport,alpha7,NA
>>     weber -> prob_bungee_jumping,alpha8,NA
>>     weber -> prob_tornado_tracking,alpha9,NA
>>     weber -> prob_ski,alpha10,NA
>>     prob_wild_camp <-> prob_wild_camp, ep2,NA
>>     prob_book_hotel_in_short_time <-> 
>> prob_book_hotel_in_short_time,ep3,NA
>>     prob_safari_Kenia <-> prob_safari_Kenia, ep4, NA
>>     prob_sail_wild_water <-> prob_sail_wild_water,ep5,NA
>>     prob_dangerous_sport <-> prob_dangerous_sport,ep7,NA
>>     prob_bungee_jumping <-> prob_bungee_jumping,ep8,NA
>>     prob_tornado_tracking <-> prob_tornado_tracking,ep9,NA
>>     prob_ski <-> prob_ski,ep10,NA
>>     tp -> o1,NA,1
>>     tp -> o3,beta3,NA
>>     tp -> o4,beta4,NA
>>     tp -> o5,beta5,NA
>>     tp -> o6,beta6,NA
>>     tp -> o7,beta7,NA
>>     tp -> o9,beta9,NA
>>     tp -> o10,beta10,NA
>>     tp -> o11,beta11,NA
>>     tp -> o12,beta12,NA
>>     o1 <-> o1,eo1,NA
>>     o3 <-> o3,eo3,NA
>>     o4 <-> o4,eo4,NA
>>     o5 <-> o5,eo5,NA
>>     o6 <-> o6,eo6,NA
>>     o7 <-> o7,eo7,NA
>>     o9 <-> o9,eo9,NA
>>     o10 <-> o10,eo10,NA
>>     o11 <-> o11,eo11,NA
>>     o12 <-> o12,eo12,NA
>>     tr -> v5, NA,1
>>     tr -> v13, gamma2,NA
>>     tr -> v14, gamma3,NA
>>     tr -> v16,gamma4,NA
>>     tr -> v17,gamma5,NA
>>     v5 <-> v5,ev1,NA
>>     v13 <-> v13,ev2,NA
>>     v14 <-> v14,ev3,NA
>>     v16 <-> v16, ev4, NA
>>     v17 <-> v17,ev5,NA
>>
>>
>> sem.rsk <- sem(model.rsk, cov(riskninfo_s), 397)
>> summary(sem.rsk)
>>
>>
>> ##############
>> #model one results
>> ###############
>>  Model Chisquare =  680.79   Df =  227 Pr(>Chisq) = 0
>>  Chisquare (null model) =  2443.4   Df =  253
>>  Goodness-of-fit index =  0.86163
>>  Adjusted goodness-of-fit index =  0.83176
>>  RMSEA index =  0.07105   90% CI: (NA, NA)
>>  Bentler-Bonnett NFI =  0.72137
>>  Tucker-Lewis NNFI =  0.7691
>>  Bentler CFI =  0.79282
>>  SRMR =  0.069628
>>  BIC =  -677.56
>>
>>  Normalized Residuals
>>    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.
>> -3.4800 -0.8490 -0.0959 -0.0186  0.6540  8.8500
>>
>>  Parameter Estimates
>>               Estimate  Std Error z value Pr(>|z|)
>> e.webertp     -0.058847 0.023473  -2.5070 1.2175e-02
>> e.tptrl     0.151913 0.031072   4.8890 1.0134e-06
>> e.trweber -0.255449 0.044469  -5.7444 9.2264e-09
>> e.tp           0.114260 0.038652   2.9562 3.1149e-03
>> e.trv          0.464741 0.068395   6.7950 1.0832e-11
>> alpha2         0.488106 0.051868   9.4105 0.0000e+00
>> alpha3         0.446255 0.052422   8.5127 0.0000e+00
>> alpha4         0.517707 0.050863  10.1784 0.0000e+00
>> alpha5         0.772128 0.045863  16.8356 0.0000e+00
>> alpha7         0.782098 0.045754  17.0934 0.0000e+00
>> alpha8         0.668936 0.048092  13.9095 0.0000e+00
>> alpha9         0.376798 0.052977   7.1124 1.1400e-12
>> alpha10        0.449507 0.051885   8.6635 0.0000e+00
>> ep2            0.761752 0.058103  13.1104 0.0000e+00
>> ep3            0.800857 0.060154  13.3134 0.0000e+00
>> ep4            0.731980 0.056002  13.0705 0.0000e+00
>> ep5            0.403819 0.040155  10.0565 0.0000e+00
>> ep7            0.388322 0.039930   9.7250 0.0000e+00
>> ep8            0.552524 0.046619  11.8519 0.0000e+00
>> ep9            0.858023 0.063098  13.5982 0.0000e+00
>> ep10           0.797945 0.059651  13.3770 0.0000e+00
>> beta3          1.670861 0.312656   5.3441 9.0871e-08
>> beta4          1.536421 0.292725   5.2487 1.5319e-07
>> beta5          1.530081 0.294266   5.1997 1.9966e-07
>> beta6          1.767803 0.329486   5.3653 8.0801e-08
>> beta7          0.870601 0.200366   4.3451 1.3924e-05
>> beta9          1.692284 0.312799   5.4101 6.2975e-08
>> beta10         1.009742 0.224155   4.5047 6.6480e-06
>> beta11         1.723416 0.324593   5.3095 1.0995e-07
>> beta12         1.452796 0.286857   5.0645 4.0940e-07
>> eo1            0.885742 0.065529  13.5168 0.0000e+00
>> eo3            0.681004 0.055626  12.2425 0.0000e+00
>> eo4            0.730277 0.057682  12.6603 0.0000e+00
>> eo5            0.732500 0.059305  12.3514 0.0000e+00
>> eo6            0.642921 0.055797  11.5226 0.0000e+00
>> eo7            0.913393 0.066903  13.6526 0.0000e+00
>> eo9            0.672777 0.054994  12.2336 0.0000e+00
>> eo10           0.883505 0.065198  13.5512 0.0000e+00
>> eo11           0.660627 0.055399  11.9249 0.0000e+00
>> eo12           0.758847 0.059582  12.7361 0.0000e+00
>> gamma2         0.689244 0.089575   7.6946 1.4211e-14
>> gamma3         0.880574 0.093002   9.4684 0.0000e+00
>> gamma4         1.083443 0.092856  11.6680 0.0000e+00
>> gamma5         0.589127 0.087252   6.7520 1.4584e-11
>> ev1            0.535257 0.050039  10.6968 0.0000e+00
>> ev2            0.779221 0.060274  12.9280 0.0000e+00
>> ev3            0.639632 0.054097  11.8239 0.0000e+00
>> ev4            0.454467 0.048438   9.3824 0.0000e+00
>> ev5            0.838702 0.062929  13.3277 0.0000e+00
>>
>> #####################################
>> #model two results
>> ##################################
>> Model Chisquare =  680.79   Df =  227 Pr(>Chisq) = 0
>>  Chisquare (null model) =  2443.4   Df =  253
>>  Goodness-of-fit index =  0.86163
>>  Adjusted goodness-of-fit index =  0.83176
>>  RMSEA index =  0.07105   90% CI: (NA, NA)
>>  Bentler-Bonnett NFI =  0.72137
>>  Tucker-Lewis NNFI =  0.7691
>>  Bentler CFI =  0.79282
>>  SRMR =  0.069627
>>  BIC =  -677.56
>>
>>  Normalized Residuals
>>    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.
>> -3.4800 -0.8490 -0.0959 -0.0186  0.6540  8.8500
>>
>>  Parameter Estimates
>>            Estimate  Std Error z value  Pr(>|z|)
>> e.rsktp      0.187069 0.045642   4.09859 4.1567e-05
>> e.rsktrl  0.812070 0.131731   6.16462 7.0652e-10
>> e.rskweber  -0.153542 0.038132  -4.02660 5.6589e-05
>> e.weber     0.214671 0.046260   4.64056 3.4746e-06
>> e.tp        0.079263 0.028484   2.78270 5.3909e-03
>> e.trv      -0.194712 0.197101  -0.98788 3.2321e-01
>> alpha3      0.914263 0.131132   6.97206 3.1233e-12
>> alpha4      1.060649 0.143622   7.38499 1.5254e-13
>> alpha5      1.581889 0.177961   8.88898 0.0000e+00
>> alpha7      1.602316 0.182893   8.76095 0.0000e+00
>> alpha8      1.370476 0.164966   8.30764 0.0000e+00
>> alpha9      0.771961 0.128670   5.99955 1.9787e-09
>> alpha10     0.920922 0.136148   6.76413 1.3411e-11
>> ep2         0.761752 0.058109  13.10909 0.0000e+00
>> ep3         0.800856 0.060155  13.31314 0.0000e+00
>> ep4         0.731979 0.056003  13.07044 0.0000e+00
>> ep5         0.403818 0.040155  10.05643 0.0000e+00
>> ep7         0.388322 0.039932   9.72459 0.0000e+00
>> ep8         0.552523 0.046620  11.85175 0.0000e+00
>> ep9         0.858024 0.063099  13.59811 0.0000e+00
>> ep10        0.797943 0.059651  13.37694 0.0000e+00
>> beta3       1.670904 0.310681   5.37820 7.5234e-08
>> beta4       1.536444 0.290968   5.28045 1.2887e-07
>> beta5       1.530096 0.292603   5.22926 1.7019e-07
>> beta6       1.767838 0.327427   5.39918 6.6945e-08
>> beta7       0.870626 0.199814   4.35718 1.3175e-05
>> beta9       1.692309 0.310816   5.44473 5.1885e-08
>> beta10      1.009760 0.223270   4.52259 6.1088e-06
>> beta11      1.723432 0.322488   5.34417 9.0830e-08
>> beta12      1.452761 0.285172   5.09434 3.4997e-07
>> eo1         0.885741 0.065519  13.51880 0.0000e+00
>> eo3         0.681003 0.055625  12.24265 0.0000e+00
>> eo4         0.730278 0.057683  12.66029 0.0000e+00
>> eo5         0.732501 0.059307  12.35108 0.0000e+00
>> eo6         0.642919 0.055799  11.52215 0.0000e+00
>> eo7         0.913394 0.066900  13.65310 0.0000e+00
>> eo9         0.672778 0.054994  12.23360 0.0000e+00
>> eo10        0.883503 0.065197  13.55124 0.0000e+00
>> eo11        0.660630 0.055397  11.92534 0.0000e+00
>> eo12        0.758852 0.059582  12.73619 0.0000e+00
>> gamma2      0.689244 0.089545   7.69720 1.3989e-14
>> gamma3      0.880580 0.092955   9.47317 0.0000e+00
>> gamma4      1.083430 0.092789  11.67631 0.0000e+00
>> gamma5      0.589119 0.087233   6.75338 1.4444e-11
>> ev1         0.535258 0.050034  10.69783 0.0000e+00
>> ev2         0.779219 0.060273  12.92808 0.0000e+00
>> ev3         0.639627 0.054096  11.82402 0.0000e+00
>> ev4         0.454472 0.048437   9.38269 0.0000e+00
>> ev5         0.838705 0.062929  13.32769 0.0000e+00
>>
>> John Fox wrote:
>>> Dear hyena,
>>>
>>> Actually, looking at this a bit more closely, the first models 
>>> dedicate 6
>>> parameters to the correlational and variational structure of the three
>>> variables that you mention -- 3 variances and 3 covariances; the second
>>> model also dedicates 6 parameters -- 3 factor loadings and 3 error 
>>> variances
>>> (with the variance of the factor fixed as a normalization). You don't 
>>> show
>>> the remaining structure of the models, but a good guess is that they are
>>> observationally indistinguishable.
>>>
>>> John
>>>
>>>> -----Original Message-----
>>>> From: r-help-bounces at r-project.org 
>>>> [mailto:r-help-bounces at r-project.org]
>>> On
>>>> Behalf Of hyena
>>>> Sent: March-14-09 5:07 PM
>>>> To: r-help at stat.math.ethz.ch
>>>> Subject: [R] SEM model testing with identical goodness of fits
>>>>
>>>> HI,
>>>>
>>>>    I am testing several models about three latent constructs that
>>>> measure risk attitudes.
>>>> Two models with different structure obtained identical of fit measures
>>>> from chisqure to BIC.
>>>> Model1 assumes three factors are correlated with  each other and model
>>>> two assumes a higher order factor exist and three factors related to
>>>> this higher factor instead of to each other.
>>>>
>>>> Model1:
>>>> model.one <- specify.model()
>>>>     tr<->tp,e.trtp,NA
>>>>     tp<->weber,e.tpweber,NA
>>>>     weber<->tr,e.webertr,NA
>>>>     weber<->weber, e.weber,NA
>>>>     tp<->tp,e.tp,NA
>>>>     tr <->tr,e.trv,NA
>>>>     ....
>>>>
>>>> Model two
>>>> model.two <- specify.model()
>>>>     rsk->tp,e.rsktp,NA
>>>>     rsk->tr,e.rsktr,NA
>>>>     rsk->weber,e.rskweber,NA
>>>>     rsk<->rsk, NA,1
>>>>     weber<->weber, e.weber,NA
>>>>     tp<->tp,e.tp,NA
>>>>     tr <->tr,e.trv,NA
>>>>      ....
>>>>
>>>> the summary of both sem model gives identical fit indices, using same
>>>> data set.
>>>>
>>>> is there some thing wrong with this mode specification?
>>>>
>>>> Thanks
>>>>
>>>> ______________________________________________
>>>> 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.
>>>
>>> ______________________________________________
>>> 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.
>>>
>>
>> ______________________________________________
>> 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