[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