data LandM ( type = corr ) ; infile cards ; input _type_$ _name_$ v1 - v6 ; label v1 = 'ƒQ[ƒ‹Œκ' v2 = '‰pŒκ' v3 = '—πŽj' v4 = 'ŒvŽZ' v5 = '‘㐔' v6 = 'Šτ‰½'; cards ; N . 220 220 220 220 220 220 MEAN . 0 0 0 0 0 0 STD . 1 1 1 1 1 1 CORR v1 1.000 . . . . . CORR v2 0.439 1.000 . . . . CORR v3 0.410 0.351 1.000 . . . CORR v4 0.288 0.354 0.164 1.000 . . CORR v5 0.329 0.320 0.190 0.595 1.000 . CORR v6 0.248 0.329 0.181 0.470 0.464 1.000 ; run ; options nosource ; %macro GFIuls ; title 'Ε¬‚Qζ–@mproc FACTORn' ; proc factor data = LandM m = ULS n = 1 outstat = stat res conv = 0.000000001 ; var v1 - v6 ; run ; proc iml ; use stat ; read all into s var { v1 v2 v3 v4 v5 v6 } where( _type_ = "CORR" ) ; read all into e var { v1 v2 v3 v4 v5 v6 } where( _TYPE_ = "RESIDUAL" ) ; e = e - diag(e) ; ee = trace( e * e` ) ; ss = trace( s * s` ) ; GFI = 1 - ee / ss ; FITcrit = ee / 2 ; print 'Ε¬‚Qζ–@mproc factor ‚ΜŒ‹‰Κ‚©‚ηGFIŽZon', s e , Fitcrit ee ss GFI ; quit; title 'Ε¬‚Qζ–@ [proc CALIS , LINEQS statement]' ; proc calis data = LandM m = uls ; lineqs v1 = L1 F1 + e1 , v2 = L2 F1 + e2 , v3 = L3 F1 + e3 , v4 = L4 F1 + e4 , v5 = L5 F1 + e5 , v6 = L6 F1 + e6 ; std F1 = 1 , e1 - e6 = del1 - del6 ; run ; title 'Ε¬‚Qζ–@ [proc CALIS , FACTOR statement]' ; proc calis data = LandM m = uls ; var v1 - v6 ; factor n = 1 ; run ; title ; %mend GFIuls ; %macro GFIml ; title 'Ε–ή–@ [ proc FACTOR ]' ; proc factor data = LandM m = ML n = 1 outstat = stat conv = 0.0000000001 res ; var v1 - v6 ; run ; proc iml ; use stat ; read all into s var { v1 v2 v3 v4 v5 v6 } where( _type_ = "CORR" ) ; read all into e var { v1 v2 v3 v4 v5 v6 } where( _TYPE_ = "RESIDUAL" ) ; read all into lt var { v1 v2 v3 v4 v5 v6 } where( _type_ = "PATTERN" ) ; l = t( lt ) ; sighat = l * lt + diag( e ) ; sig_s = inv( sighat ) * s ; sig_i = sig_s - i( 6 ) ; GFI = 1 - trace( sig_i * sig_i` ) / trace( sig_s * sig_s` ) ; print 'Ε–ή–@ [ proc FACTOR ‚̏o—Ν‚©‚ηGFI‚πŒvŽZ]' , s e , sighat , sig_s , sig_i , GFI ; quit; title "Ε–ή–@ [ proc CALIS , LINEQS statement ]" ; proc calis data = LandM m = ml outstat = outcalis cov ; lineqs v1 = L1 F1 + e1 , v2 = L2 F1 + e2 , v3 = L3 F1 + e3 , v4 = L4 F1 + e4 , v5 = L5 F1 + e5 , v6 = L6 F1 + e6 ; std F1 = 1 , e1 - e6 = del1 - del6 ; run ; proc iml ; use outcalis ; read all into s var { v1 v2 v3 v4 v5 v6 } where( _type_ = "COV" ) ; read all into sighat var { v1 v2 v3 v4 v5 v6 } where( _TYPE_ = "MAXPRED" & _name_ ^= 'F1' ) ; sig_s = inv( sighat ) * s ; sig_i = sig_s - i(6) ; GFI = 1 - trace( sig_i * sig_i` ) / trace( sig_s * sig_s` ) ; print 'Ε–ή–@ [ CALIS LINEQS statement ‚̏o—Ν‚ΕŠm”F' , s sighat , sig_s sig_i , GFI ; quit; title "Ε–ή–@ [ proc CALIS , FACTOR statement ]" ; proc calis data = LandM m = ml outstat = outcalis cov ; var v1 - v6 ; factor n = 1 ; run ; proc iml ; use outcalis ; read all into s var { v1 v2 v3 v4 v5 v6 } where( _type_ = "COV" ) ; read all into sighat var { v1 v2 v3 v4 v5 v6 } where( _TYPE_ = "MAXPRED" & _name_ ^= 'F1' ) ; sig_s = inv( sighat ) * s ; sig_i = sig_s - diag( sig_s ) ; GFI = 1 - trace( sig_i * sig_i` ) / trace( sig_s * sig_s` ) ; print 'Ε–ή–@ [ CALIS FACTOR statement ‚̏o—Ν‚ΕŠm”F' , s sighat , sig_s sig_i , gfi ; quit; title ; %mend GFIml ; data TOYODA( type = cov ) ; ; input _type_ $ _name_$ v1 - v3 ; cards ; N . 100 100 100 MEAN . 0 0 0 COV v1 7.8 5.5 3.5 COV v2 5.5 7.2 3.8 COV v3 3.5 3.8 7.5 ; run ; %macro toyoda ; title '–L“c(1998)ƒ“ό–ε•΁„p.182‚̐”’l—α' ; proc calis data = toyoda cov outstat = outcalis ; var v1 - v3 ; lineqs v2 = L1 v1 + e2 , v3 = L2 v2 + e3 ; std e2 - e3 = del2 - del3 ; run ; proc iml ; use outcalis ; read all into s var { v1 v2 v3 } where( _type_ = "COV" ) ; read all into sighat var { v1 v2 v3 } where( _TYPE_ = "MAXPRED" ) ; sighati = inv( sighat ) ; sig_s = sighati * s ; sig_i = sig_s - i( 3 ) ; GFI = 1 - trace( sig_i * sig_i` ) / trace( sig_s * sig_s` ) ; print '–L“c(1998)‚̐”’l—α' ,s sighat sighati , sig_s sig_i , gfi ; quit; title ; %mend TOYODA ; options source ;