clear all
set more off

mata mata mlib index

sjlog using confa1,replace
use hs-cfa
describe
sjlog close, replace

sjlog using confa2,replace
cap noi confa (vis: x1 x2 x3) (text: x4 x5 x6) (math: x7 x8 x9)
sjlog close, replace

sjlog using confa3,replace
confa (vis: x1 x2 x3) (text: x4 x5 x6) (math: x7 x8 x9), from(ones)
confa (vis: x1 x2 x3) (text: x4 x5 x6) (math: x7 x8 x9), from(iv)
confa (vis: x1 x2 x3) (text: x4 x5 x6) (math: x7 x8 x9), from(smart)
sjlog close, replace

sjlog using confa5,replace
confa (vis: x1 x2 x3) (text: x4 x5 x6) (math: x7 x8 x9), from(iv) vce(sbentler) nolog
sjlog close, replace

sjlog using confa6,replace
confa (vis: x1 x2 x3) (text: x4 x5 x6) (math: x7 x8 x9), from(iv) robust nolog
sjlog close, replace

sjlog using confa7,replace
matrix bb=e(b)
confa (vis: x1 x2 x3) (text: x4 x5 x6) (math: x7 x8 x9), from(bb, skip) correlated(x7:x8) 
sjlog close, replace

sjlog using confa8,replace
qui confa (vis: x1 x2 x3) (text: x4 x5 x6) (math: x7 x8 x9), from(bb) vce(sbentler)
local T0 = e(lr_u)
local r0 = e(df_u)
local c0 = e(SBc)
qui confa (vis: x1 x2 x3) (text: x4 x5 x6) (math: x7 x8 x9), from(bb, skip) vce(sbentler) corr(x7:x8)
local T1 = e(lr_u)
local r1 = e(df_u)
local c1 = e(SBc)
local DeltaT = (`T0'-`T1')*(`r0'-`r1')/(`r0'*`c0'-`r1'*`c1')
di as text "Scaled difference Delta = " as res %6.3f `DeltaT' as text "; Prob [chi2>" as res %6.3f `DeltaT' as text "] = " as res %6.4f chi2tail(`r0'-`r1', `DeltaT')
sjlog close, replace


sjlog using confa9,replace
qui confa (vis: x1 x2 x3) (text: x4 x5 x6) (math: x7 x8 x9), from(bb, skip) correlated(x7:x8)
set seed 1010101
bollenstine, reps(500) confaoptions(iter(20) corr(x7:x8))
sjlog close, replace

sjlog using confa10,replace
estat fitindices
sjlog close, replace

sjlog using confa11,replace
estat corr
estat corr, bound
sjlog close, replace

sjlog using confa12,replace
predict fa1-fa3, reg
predict fb1-fb3, bart
corr fa1-fb3, cov
corr fa1-fb3
sjlog close, replace

sjlog using confa13,replace
confa (vis: x1 x2 x3) (text: x4 x5 x6) (math: x7 x8 x9), from(ones) unitvar(_all) corr(x7:x8)
sjlog close, replace

sjlog using confa14,replace
set seed 123456
forvalues k=1/9 {
	gen y`k' = cond(runiform()<0.0`k', ., x`k')
	}
sjlog close, replace

sjlog using confa15,replace
confa (vis: y1 y2 y3) (text: y4 y5 y6) (math: y7 y8 y9), from(bb) nolog
sjlog close, replace

sjlog using confa16,replace
confa (vis: y1 y2 y3) (text: y4 y5 y6) (math: y7 y8 y9), from(iv) missing difficult
sjlog close, replace

sjlog using confa17,replace
* traits model
use libdem80, clear
confa (pollib: party broad print civlb) (demrul: leg80 polrt compet effec), vce(sbentler) from(smart) difficult usenames
matrix b_t = e(b)
preserve
* methods model: obtain the data by replacing the variables with their residuals
predict f1 f2, bartlett
foreach x of varlist party80 broad80 print80 civlb80 {
	qui replace `x' = `x' - [lambda_`x'_pollib]_cons*f1
}
foreach x of varlist leg80 polrt80 compet80 effec80 {
	qui replace `x' = `x' - [lambda_`x'_demrul]_cons*f2
}
confa (sussman: broad print) (gastil: civlb polrt) (banks: leg80 party compet effec), difficult from(smart) usenames iter(20)
matrix b_res = e(b)
restore
sjlog close, replace


sjlog using confa18,replace
constraint define 201 [phi_pollib_sussman]_cons = 0
constraint define 202 [phi_pollib_gastil]_cons  = 0
constraint define 203 [phi_pollib_banks]_cons   = 0
constraint define 204 [phi_demrul_sussman]_cons = 0
constraint define 205 [phi_demrul_gastil]_cons  = 0
constraint define 206 [phi_demrul_banks]_cons   = 0
* initial values: combine the previous results
matrix bb2 = (b_t[1,1..19], b_res[1,9..30] )
confa (pollib: party broad print civlb) (demrul: leg80 polrt compet effec) (sussman: broad print) (gastil: civlb polrt) (banks: leg80 party compet effec), constr(201 202 203 204 205 206) from(bb2) usenames difficult vce(sbentler)
sjlog close, replace

