Setup initial file structure
This commit is contained in:
222
Modules/ado/plus/c/confa_estat.ado
Normal file
222
Modules/ado/plus/c/confa_estat.ado
Normal file
@ -0,0 +1,222 @@
|
||||
*! version 2.0.2 08 Sep 2009; part of confa suite
|
||||
program confa_estat, rclass
|
||||
version 10
|
||||
|
||||
if "`e(cmd)'" != "confa" {
|
||||
error 301
|
||||
}
|
||||
|
||||
gettoken subcmd rest : 0, parse(" ,")
|
||||
local lsubcmd= length("`subcmd'")
|
||||
|
||||
if `"`subcmd'"' == substr("fitindices", 1, max(3, `lsubcmd')) {
|
||||
FitIndices `rest'
|
||||
}
|
||||
else if `"`subcmd'"' == substr("correlate", 1, max(4, `lsubcmd')) {
|
||||
Correlate `rest'
|
||||
}
|
||||
else if `"`subcmd'"' == substr("aic",1, max(3, `lsubcmd')) {
|
||||
FitIndices , aic
|
||||
}
|
||||
else if `"`subcmd'"' == substr("bic",1, max(3, `lsubcmd')) {
|
||||
FitIndices , bic
|
||||
}
|
||||
else if `"`subcmd'"' == substr("ic",1,max(2, `lsubcmd')) {
|
||||
FitIndices, aic bic
|
||||
}
|
||||
else if `"`subcmd'"' == substr("summarize", 1, max(2, `lsubcmd')) {
|
||||
Summarize `rest'
|
||||
}
|
||||
else if `"`subcmd'"' == "vce" {
|
||||
vce `rest'
|
||||
}
|
||||
else {
|
||||
di as err "`subcmd' not allowed"
|
||||
exit 198
|
||||
}
|
||||
|
||||
return add
|
||||
|
||||
end
|
||||
|
||||
program Summarize
|
||||
syntax , [noHEAder noWEIghts]
|
||||
if "`e(wexp)'" ~= "" & "`weights'"~="noweights" local wgt [iw `e(wexp)']
|
||||
sum `e(observed)' `wgt' if e(sample)
|
||||
end
|
||||
|
||||
program Correlate, rclass
|
||||
* correlation matrix of estimated factors
|
||||
|
||||
syntax, [level(passthru) bound]
|
||||
|
||||
di _n "{txt}Correlation equivalents of covariances"
|
||||
|
||||
if "`bound'" != "" local bound ci(atanh)
|
||||
|
||||
local q = rowsof( e(Phi) )
|
||||
if `q'>1 {
|
||||
* display the factor correlations
|
||||
|
||||
di as text "{hline 13}{c TT}{hline 64}"
|
||||
if "`e(vcetype)'" ~= "" {
|
||||
di as text " {c |} {center 15:`e(vcetype)'}"
|
||||
}
|
||||
di as text " {c |} Coef. Std. Err. z P>|z| [$S_level% Conf. Interval]"
|
||||
di as text "{hline 13}{c +}{hline 64}"
|
||||
|
||||
* parse the factor names
|
||||
local fnames : rownames e(Phi)
|
||||
* parse the unitvar list to be used in -inlist-
|
||||
local unitvarlist = `"""' + subinstr("`e(unitvar)'"," ",`"",""',.) + `"""'
|
||||
|
||||
_diparm __lab__ , label("Factors") eqlabel
|
||||
|
||||
forvalues i=1/`q' {
|
||||
local i1 = `i'+1
|
||||
forvalues j=`i1'/`q' {
|
||||
if inlist("`: word `i' of `fnames''", `unitvarlist') & inlist("`: word `j' of `fnames''", `unitvarlist') {
|
||||
* both factor variances are constrained at 1, display as is
|
||||
_diparm phi_`i'_`j' , prob label("`: word `i' of `fnames''-`: word `j' of `fnames''") `level' `bound'
|
||||
}
|
||||
else if inlist("`: word `i' of `fnames''", `unitvarlist') & !inlist("`: word `j' of `fnames''", `unitvarlist') {
|
||||
* `i' is restricted unit variance, `j' is not
|
||||
_diparm phi_`i'_`j' phi_`j'_`j', ///
|
||||
function( @1/sqrt(@2) ) d( 1/sqrt(@2) -0.5*@1/sqrt(@2*@2*@2) ) ///
|
||||
prob label("`: word `i' of `fnames''-`: word `j' of `fnames''") `level' `bound'
|
||||
}
|
||||
else if !inlist("`: word `i' of `fnames''", `unitvarlist') & inlist("`: word `j' of `fnames''", `unitvarlist') {
|
||||
* `j' is restricted unit variance, `i' is not
|
||||
_diparm phi_`i'_`j' phi_`i'_`i', ///
|
||||
function( @1/sqrt(@2) ) d( 1/sqrt(@2) -0.5*@1/sqrt(@2*@2*@2) ) ///
|
||||
prob label("`: word `i' of `fnames''-`: word `j' of `fnames''") `level' `bound'
|
||||
}
|
||||
else {
|
||||
* display correlation transform
|
||||
_diparm phi_`i'_`j' phi_`i'_`i' phi_`j'_`j', ///
|
||||
function( @1/sqrt(@2*@3) ) d( 1/sqrt(@2*@3) -0.5*@1/sqrt(@2*@2*@2*@3) -0.5*@1/sqrt(@2*@3*@3*@3) ) ///
|
||||
prob label("`: word `i' of `fnames''-`: word `j' of `fnames''") `level' `bound'
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
if "`e(correlated)'" ~= "" {
|
||||
|
||||
if `q' < 2 {
|
||||
* need to display the header
|
||||
|
||||
di as text "{hline 13}{c TT}{hline 64}"
|
||||
if "`e(vcetype)'" ~= "" {
|
||||
di as text " {c |} {center 15:`e(vcetype)'}"
|
||||
}
|
||||
di as text " {c |} Coef. Std. Err. z P>|z| [$S_level% Conf. Interval]"
|
||||
di as text "{hline 13}{c +}{hline 64}"
|
||||
}
|
||||
|
||||
* print out correlated measurement errors
|
||||
_diparm __lab__ , label("Errors") eqlabel
|
||||
local correlated `e(correlated)'
|
||||
local obsvar `e(observed)'
|
||||
while "`correlated'" != "" {
|
||||
gettoken corrpair correlated : correlated , match(m)
|
||||
gettoken corr1 corrpair : corrpair, parse(":")
|
||||
unab corr1 : `corr1'
|
||||
gettoken sc corr2 : corrpair, parse(":")
|
||||
unab corr2 : `corr2'
|
||||
|
||||
poslist `obsvar' \ `corr1', global(CFA_temp)
|
||||
local k1 = $CFA_temp
|
||||
poslist `obsvar' \ `corr2', global(CFA_temp)
|
||||
local k2 = $CFA_temp
|
||||
|
||||
_diparm theta_`k1'_`k2' theta_`k1' theta_`k2', ///
|
||||
function( @1/sqrt(@2*@3) ) d( 1/sqrt(@2*@3) -0.5*@1/sqrt(@2*@2*@2*@3) -0.5*@1/sqrt(@2*@3*@3*@3) ) ///
|
||||
prob label("`corr1'-`corr2'") `level' `bound'
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
else if `q'<2 {
|
||||
di as text _n "Nothing to display" _n
|
||||
}
|
||||
|
||||
di as text "{hline 13}{c BT}{hline 64}"
|
||||
|
||||
global CFA_temp
|
||||
|
||||
end
|
||||
|
||||
program FitIndices, rclass
|
||||
|
||||
syntax , [all tli rmsea rmsr aic bic]
|
||||
|
||||
di _n "{txt} Fit indices" _n
|
||||
return add
|
||||
|
||||
* all, by default
|
||||
if "`*'" == "" local all 1
|
||||
|
||||
* the fundamentals
|
||||
local p = `: word count `e(obsvar)''
|
||||
|
||||
if "`rmsea'`all'"~="" {
|
||||
return scalar RMSEA = sqrt( max( (e(lr_u)-e(df_u))/(e(N)-1), 0 )/e(df_u) )
|
||||
tempname ll lu
|
||||
scalar `ll' = cond(chi2(e(df_u),e(lr_u))>0.95,npnchi2(e(df_u),e(lr_u),0.95),0)
|
||||
scalar `lu' = cond(chi2(e(df_u),e(lr_u))>0.05,npnchi2(e(df_u),e(lr_u),0.05),0)
|
||||
return scalar RMSEA05 = sqrt( `ll'/( (e(N)-1)*e(df_u) ) )
|
||||
return scalar RMSEA95 = sqrt( `lu'/( (e(N)-1)*e(df_u) ) )
|
||||
di "{txt}RMSEA {col 8}= {res}" %6.4f return(RMSEA) _c
|
||||
di "{txt}, 90% CI{col 8}= ({res}" %6.4f return(RMSEA05) "{txt}, {res}" %6.4f return(RMSEA95) "{txt})"
|
||||
}
|
||||
|
||||
if "`rmsr'`all'"~="" {
|
||||
cap mat li e(S)
|
||||
if _rc {
|
||||
* no matrix posted
|
||||
return scalar RMSR = .
|
||||
}
|
||||
else {
|
||||
tempname res
|
||||
mata : st_numscalar("`res'",norm(vech(st_matrix("e(Sigma)") - st_matrix("e(S)"))) )
|
||||
return scalar RMSR = `res'/sqrt(e(pstar) )
|
||||
}
|
||||
di "{txt}RMSR {col 8}= {res}" %6.4f return(RMSR)
|
||||
}
|
||||
|
||||
if "`tli'`all'"~="" {
|
||||
return scalar TLI = (e(lr_indep)/e(df_indep)-e(lr_u)/e(df_u))/(e(lr_indep)/e(df_indep)-1)
|
||||
di "{txt}TLI {col 8}= {res}" %6.4f return(TLI)
|
||||
}
|
||||
|
||||
if "`cfi'`all'"~="" {
|
||||
return scalar CFI = 1 - max( e(lr_u)-e(df_u),0 )/max( e(lr_u)-e(df_u), e(lr_indep)-e(df_indep),0 )
|
||||
di "{txt}CFI {col 8}= {res}" %6.4f return(CFI)
|
||||
}
|
||||
|
||||
if "`aic'`all'"~="" {
|
||||
if "`e(wexp)'" == "" & "`e(vcetype)'"~="Robust" return scalar AIC = -2*e(ll) + 2*e(df_m)
|
||||
else return scalar AIC = .
|
||||
di "{txt}AIC {col 8}= {res}" %8.3f return(AIC)
|
||||
}
|
||||
|
||||
if "`bic'`all'"~="" {
|
||||
if "`e(wexp)'" == "" & "`e(vcetype)'"~="Robust" return scalar BIC = -2*e(ll) + e(df_m)*ln( e(N) )
|
||||
else return scalar BIC = .
|
||||
di "{txt}BIC {col 8}= {res}" %8.3f return(BIC)
|
||||
}
|
||||
|
||||
end
|
||||
|
||||
exit
|
||||
|
||||
Version history:
|
||||
1.0.0 9 Jan 2008 -- Correlate
|
||||
FitIndices
|
||||
1.0.1 12 Sep 2008 -- AIC, BIC
|
||||
1.0.2 Oct 2008 -- bound for Correlate CI
|
||||
correlated measurement errors
|
||||
CI for RMSEA
|
Reference in New Issue
Block a user