/********************************************************************************/ /* v1.1 : Bug fixed regarding the estimation of the latent trait standard error */ /********************************************************************************/ program define pcmodel, eclass version 11.0 syntax varlist [if][, CATegorical(string) CONTinuous (string) DIFficulties(string) ITerate(string) ADapt RObust From(string) RSM ESTimateonly] preserve tokenize `varlist' `categorical' `continuous' local nbit: word count `varlist' local nbcov: word count `categorical' local nbcovquant: word count `continuous' local nbit2:word count `difficulties' if `nbit2'==0{ local itest=1 } else{ local itest=0 } if "`from'"!=""{ local verifFrom=colsof(`from') } tempfile bddini qui{ save `bddini'pre,replace if "`if'"=="" { local if "if 1" } else{ keep `if' } local ordre=0 forvalues i=1/`nbit'{ tab ``i'', matrow(rep__`i') local ordre=`ordre'+`=rowsof(rep__`i')'-1 forvalues j=1/`=rowsof(rep__`i')'{ replace ``i''=`j'-1 if ``i''==rep__`i'[`j',1] } } save `bddini'_b,replace q memory } local matsizeini=r(matsize) if "`rsm'"!=""{ local nbtotmodait=rowsof(rep__1) forvalues i=2/`nbit'{ if `=rowsof(rep__`i')'!=`nbtotmodait'{ noi di in red "The number of item response categories must be equal for each item when using Rating Scale models" use `bddini'pre,replace error 100 } } if "`difficulties'"!=""{ noi di in red "RSM option only available for unknow difficulties" use `bddini'pre,replace error 100 } } if "`from'"!=""{ if "`difficulties'"!=""{ noi di in red "From option only available for unknow difficulties" use `bddini'pre,replace error 100 } if "`rsm'"!=""{ noi di in red "From option only available for the Partial Credit model" use `bddini'pre,replace error 100 } } /*************************************/ /* Verifications */ /*************************************/ if "`iterate'"==""{ local it="" } else{ local iterateII="it(`iterate')" } tempvar one id item reponse obs wt x choix it covariable covverytemp qui save `bddini'_b, replace if "`difficulties'"!=""{ if `nbit2'!=`nbit'{ noi di in red "Not the same number of difficulty vectors and of items" use `bddini'pre,replace error 100 } forvalues i=1/`nbit'{ if strpos("`varlist'",word("`difficulties'",`i'))==0{ noi di in red "The item difficulty vectors must have the same names than the item variables" use `bddini'pre,replace error 100 } } } /*************************************/ /* Estimation of the parameters */ /*************************************/ local nbtotmodacov=0 if `nbcov'!=0{ forvalues i=1/`nbcov'{ qui tab ``=`nbit'+`i''', matrow(nom) matcell(val) local nbModCov`i'=r(r) forvalues k=1/`nbModCov`i''{ local valmod`k'cov`i'=nom[`k',1] local nbmod`k'cov`i'=val[`k',1] } local nbtotmodacov=`nbtotmodacov'+`nbModCov`i'' if `nbModCov`i''>15{ noi di in ye "Are you sure that ``=`nbit'+`i''' is a categorical variable? (``=`nbit'+`i''' has `nbModCov`i'' categories)" noi di in gr "" } local tot`i'=r(N) forvalues k=1/`nbModCov`i''{ local sum=0 forvalues k2=1/`nbModCov`i''{ if `k2'!=`k'{ local sum=`sum'+val[`k2',1] } } local a`i'_`k'=round((`sum'-`tot`i'')/`tot`i'',0.01) local b`i'_`k'=round((`sum')/`tot`i'',0.01) } } } local nbparcov=`nbtotmodacov'+`nbcovquant' qui{ keep `varlist' `categorical' `continuous' local nbdifftotbis=0 local nbdifftot=0 if "`difficulties'"=="" & "`rsm'"==""{ forvalues i=1/`nbit'{ gen `reponse'`i' = ``i'' drop ``i'' tab `reponse'`i' local moda`i'=`=r(r)' local nbdifftot=`nbdifftot'+`moda`i''-1 local nbdifftotbis=`nbdifftotbis'+`moda`i''-1 } } else if "`difficulties'"=="" & "`rsm'"!=""{ forvalues i=1/`nbit'{ gen `reponse'`i' = ``i'' drop ``i'' tab `reponse'`i' local moda`i'=`=r(r)' local nbdifftot=`nbdifftot'+1 local nbdifftotbis=`nbdifftotbis'+`moda`i''-1 } local nbdifftot=`nbdifftot'+`nbtotmodait'-2 } else{ forvalues i=1/`nbit'{ gen `reponse'`i' = ``i'' drop ``i'' local moda`i'=colsof(``i'')+1 } } if "`from'"!=""{ if `nbcov'!=0{ if `verifFrom'!=`nbtotmodacov'-`nbcov'+1+`nbdifftot'+`nbcovquant'{ noi di in red "Mismatch between the number of parameters to estimate and the number of provided parameters" use `bddini'pre,replace error 100 } } else{ if `verifFrom'!=1+`nbdifftot'+`nbcovquant'{ noi di in red "Mismatch between the number of parameters to estimate and the number of provided parameters" use `bddini'pre,replace error 100 } } } gen `one'=1 su `one' local Nbid=r(N) collapse (sum) `wt'2=`one', by(`reponse'1-`reponse'`nbit' `categorical' `continuous') gen `id'=_n reshape long `reponse', i(`id') j(`item') drop if `reponse'==. ologit `reponse' [fweight=`wt'2] local LLL00=e(ll) matrix eBLLL00=e(b) gen `obs'=_n su `wt'2 local ddlssIII=r(sum)-1 forvalues i=1/`nbit'{ expand `moda`i'' if `item'==`i' } by `obs', sort: gen `x'=_n-1 gen `choix'=`reponse'==`x' tab `item', gen(`it') forvalues i=1/`nbit'{ forvalues g=1/`=`moda`i''-1'{ gen d_``i''_`g'=(-1)*`it'`i'*(`x'>=`g') } } forvalues i=1/`nbit'{ forvalues g=1/`=`moda`i''-1'{ capture gen __dd_`g'=0 } } forvalues i=1/`nbit'{ forvalues g=1/`=`moda`i''-1'{ replace __dd_`g'=(-1)*`it'`i'*(`x'>=`g') if ((-1)*`it'`i'*(`x'>=`g'))<__dd_`g' } } if "`difficulties'"!=""{ gen difficulties=0 forvalues i=1/`nbit'{ forvalues g=1/`=`moda`i''-1'{ replace difficulties=difficulties+``i''[1,`g']*d_``i''_`g' } } } if `nbcov'!=0{ forvalues i=1/`nbcov'{ gen `covverytemp'=``=`nbit'+`i''' drop ``=`nbit'+`i''' rename `covverytemp' ``=`nbit'+`i''' tab ``=`nbit'+`i''', gen(``=`nbit'+`i'''__) matrow(nom) local nbModCov`i'=r(r) forvalues k=1/`nbModCov`i''{ gen ``=`nbit'+`i'''__`k'_old=``=`nbit'+`i'''__`k' order ``=`nbit'+`i'''__`k'_old, first replace ``=`nbit'+`i'''__`k'=``=`nbit'+`i'''__`k'*`x' local ident`i'_`k'=nom[`k',1] if `k'==1 & `i'==1{ local ident1=`ident`i'_`k'' } rename ``=`nbit'+`i'''__`k' ``=`nbit'+`i'''_`ident`i'_`k'' } } forvalues i=1/`nbcov'{ drop ``=`nbit'+`i''' } } if `nbcovquant'!=0{ forvalues i=1/`nbcovquant'{ gen `covverytemp'=``=`nbit'+`nbcov'+`i'''*`x' rename ``=`nbit'+`nbcov'+`i''' ``=`nbit'+`nbcov'+`i'''_old rename `covverytemp' ``=`nbit'+`nbcov'+`i''' } } rename `id' theta rename `x' estimates } eq slope:estimates gen obs=`obs' gen choix=`choix' gen wt=`wt' local contrainte "" local contrainteit "" if "`rsm'"!="" & "`difficulties'"==""{ forvalues i=2/`nbit'{ forvalues j=2/`=`nbtotmodait'-1'{ constraint free local con=r(free) local contrainteit "`contrainteit' `con'" constraint `con' d_`1'_`j'-d_`1'_1=d_``i''_`j'-d_``i''_1 } } } local offset "offset(difficulties)" local covariablesit "" if "`difficulties'"==""{ local covariablesit "d_`1'_1-d_``nbit''_`=`moda`nbit''-1'" local offset "" } local nbitdiffpara=0 forvalues i=1/`nbit'{ forvalues j=1/`=`moda`nbit''-1'{ local nbitdiffpara=`nbitdiffpara'+1 } } local covariables "" if `nbcov'!=0{ local covariables "`covariables' ``=`nbit'+1''_`ident1'-``=`nbit'+`nbcov'''_`ident`nbcov'_`nbModCov`nbcov'''" forvalues i=1/`nbcov'{ constraint free local con=r(free) local contrainte "`contrainte' `con'" constraint `con' ``=`nbit'+`i'''_`ident`i'_1'=0 } } if `nbcovquant'!=0{ local covariables "`covariables' ``=`nbit'+`nbcov'+1''-``=`nbit'+`nbcov'+`nbcovquant'''" } matrix a=(0,0) local skipcopy "skip" if "`difficulties'"==""{ if "`from'"!=""{ matrix a=`from' local skipcopy "copy" } } gen cons=estimates local varcons "" if "`difficulties'"!=""{ local varcons "cons" } /**********************/ /*Estimation du modèle*/ /**********************/ unab vars : `covariables' , min(0) local _c1= `: word count `vars'' local _c2= `: word count `contrainte'' gllamm estimates `varcons' `covariablesit' `covariables' , `offset' i(theta) eqs(slope) link(mlogit) expand(`obs' `choix' o) weight(`wt') `adapt' `robust' nocons `iterateII' nodis constraint(`contrainteit' `contrainte') from(a) `skipcopy' local convergeance=e(converged) matrix eB=e(b) local nbc=colsof(eB) matrix eV=e(V) local nbpar=e(k) local nbN=e(N) local LLfull=e(ll) local ccnn=e(cn) local dfree_ModComp=`ddlssIII'-`=colsof(eB)'+ wordcount("`contrainteit' `contrainte'") local SS_ModComp=(eB[1,`=colsof(eB)']^2)*`dfree_ModComp' local dfree_ModSsCov=`dfree_ModComp'+`nbparcov'- wordcount("`contrainte'") local ordre=`ordre'- wordcount("`contrainteit'")+1 if "`rsm'"!=""{ forvalues i=2/`=`moda1'-1'{ qui lincom d_`1'_`i'-d_`1'_1 local tau`i'=r(estimate) local setau`i'=r(se) } } qui{ capture su difficulties if _rc==0{ gen difficultiespost=difficulties } else{ gen difficultiespost=0 local indent=1 forvalues i=1/`nbit'{ forvalues g=1/`=`moda`i''-1'{ replace difficultiespost=difficultiespost+eB[1,`indent']*d_``i''_`g' local indent=1+`indent' } } } qui gllamm estimates cons , offset(difficultiespost) i(theta) eqs(slope) link(mlogit) expand(`obs' `choix' o) weight(`wt') `adapt' `robust' nocons from(eB) skip matrix eB_tot=e(b) local SS_ModSsCov=(eB_tot[1,`=colsof(eB_tot)']^2)*`dfree_ModSsCov' } local mugauss=eB_tot[1,1] local sdgauss=abs(eB_tot[1,2]) if "`estimateonly'"==""{ noi di in gr " " if `nbcov'+`nbcovquant'!=0{ noi di "McFadden's pseudo R square and type III Sums of squares computation" } else{ noi di "McFadden's pseudo R square computation" } /**********************************************************/ /* Modèle nul (juste intercept et effets aléatoires -> R2 */ /**********************************************************/ qui gllamm estimates __dd_* , i(theta) eqs(slope) link(mlogit) expand(`obs' `choix' o) weight(`wt') `adapt' `robust' nocons `iterateII' /*nodis*/ from(a) skip local LLinterSS=e(ll) matrix eB4=e(b) local R2Nag=1-(`LLfull'/`LLinterSS') /*****************/ /* Calcul des SS */ /*****************/ qui{ local covariables2 "" forvalues covs=`=`nbit'+1'/`=`nbit'+`nbcov''{ local covariables2 "`covariables2' ``covs''_`ident`=`covs'-`nbit''_1'-``covs''_`ident`=`covs'-`nbit''_`nbModCov`=`covs'-`nbit''''" } forvalues covs=`=`nbit'+`nbcov'+1'/`=`nbit'+`nbcov'+`nbcovquant''{ local covariables2 "`covariables2' ``covs''" } if `nbcov'+`nbcovquant'!=0{ forvalues covs=`=`nbit'+1'/`=`nbit'+`nbcov'+`nbcovquant''{ noi di " for " in ye "``covs''" in gr " covariate" if strpos("`categorical'","``covs''")!=0 & "``covs''"!=""{ local covsans= subinword("`covariables2'","``covs''_`ident`=`covs'-`nbit''_1'-``covs''_`ident`=`covs'-`nbit''_`nbModCov`=`covs'-`nbit''''","",.) local dfree_Mss``covs''=`dfree_ModComp'+ `nbModCov`=`covs'-`nbit'''-1 } else{ local covsans= subinword("`covariables2'","``covs''","",.) local dfree_Mss``covs''=`dfree_ModComp'+1 } capture constraint drop `contrainterep' local contrainterep "" if `nbcov'!=0{ forvalues i=1/`nbcov'{ if `=`nbit'+`i''!=`covs'{ constraint free local con=r(free) local contrainterep "`contrainterep' `con'" constraint `con' ``=`nbit'+`i'''_`ident`i'_1'=0 } } } gllamm estimates cons `covsans' , offset(difficultiespost) i(theta) eqs(slope) link(mlogit) expand(`obs' `choix' o) weight(`wt') `adapt' `robust' nocons `iterateII' /*nodis*/ constraint(`contrainterep') from(eB) skip matrix eB``covs''=e(b) local SS_Mss``covs''=(eB``covs''[1,`=colsof(eB``covs'')']^2)*`dfree_Mss``covs''' local LLfullmoin=e(ll) matrix eB4=e(b) local R2N_``covs''=1-(`LLfullmoin'/`LLinterSS') matrix eB2=e(b) local nbpar2=e(k) } } } noi di in gr " " } di in gr "" if "`rsm'"!=""{ di in gr "Model : " in ye "Rating Scale Model" } else{ di in gr "Model : " in ye "Partial Credit Model" } di in gr "" di in gr " log likelihood: " in ye "`LLfull'" local lll=e(ll) if "`estimateonly'"==""{ di in gr " Marginal McFadden's pseudo R2: " in ye %4.1f `=`R2Nag'*100' "%" } di in gr " Number of individuals: "in ye "`Nbid'" di in gr " Number of items: "in ye "`nbit'" if `=`nbcov'+`nbcovquant''!=0{ di in gr " Number of covariates: "in ye "`=`nbcov'+`nbcovquant''" } di in gr "" di "" di in gr "Parameters of the Latent trait distribution:" di "" if "`difficulties'"==""{ if `=`nbcov'+`nbcovquant''!=0{ local subgroup0 "" if `nbcov'!=0{ forvalues i=1/`nbcov'{ local subgroup0 "`subgroup0'``=`nbit'+`i''' = `ident`i'_1', " } } if `nbcovquant'!=0{ forvalues i=1/`nbcovquant'{ local subgroup0 "`subgroup0'``=`nbit'+`nbcov'+`i''' = 0, " } } local subgroup0b "`=reverse(subinstr(reverse("`subgroup0'"), ",", ":", 1))'" di in gr " Identifiability constraint: latent trait for `subgroup0b'set to 0" } else{ di in gr " Identifiability constraint: overall latent trait mean set to 0" } } di in gr " Variance of the Latent trait: Sigma²=" in ye %8.5f (`=`=eB[1,`nbc']'')^2 in gr " (SE:"in ye %8.5f `= sqrt((2*`=eB[1,`nbc']')^2 *`=eV[`nbc',`nbc']' )' in gr ")" local varTheta=(`=`=eB[1,`nbc']'')^2 local Varvartheta=(2*`=eB[1,`nbc']')^2 *`=eV[`nbc',`nbc']' di "" if `nbcov'+`nbcovquant'!=0{ di in gr "Latent trait group effect:" di "" di in gr "{hline 101}" di _col(20) in gr "Coef." _col(30) in gr "S.E." _col(41) in gr "z" _col(45) in gr "P>|z|" _col(57) in gr "[95% C.I.]" /*_col(71) in gr "D.St."*/ _col(73) in gr "SS.III" _col(81) in gr "df" _col(85) in gr "V.exp." _col(95) in gr "R2.exp." di in gr "{hline 101}" local compteur=1 if "`difficulties'"==""{ local compteur=`nbdifftotbis' } if `nbcov'!=0{ forvalues i=`=`nbit'+1'/`=`nbit'+`nbcov''{ local ss3=. local df=. local vexp=. local r2exp=. if "`estimateonly'"==""{ local ss3=`SS_Mss``i'''-`SS_ModComp' local df=`dfree_Mss``i'''-`dfree_ModComp' local vexp=(`SS_Mss``i'''-`SS_ModComp')/`SS_Mss``i'''*100 local r2exp=(`R2Nag'-`R2N_``i''')/`R2Nag'*100 } local compteur=`compteur'+1 noi{ di _col(1) in gr "``i'':" _col(72) in ye %6.3f `ss3' _col(81) in ye %2.0f `df' _col(84) in ye %6.1f `vexp' "%" _col(94) in ye %6.1f `r2exp' "%" di _col(4) in gr "`=abbrev("``i''",10)':" in ye " `ident`=`i'-`nbit''_1'" _col(24) in ye "0" _col(33) in ye "." _col(41) in ye "." _col(49) in ye "." _col(57) in ye "." _col(66) in ye "." /*_col(75) in ye "."*/ } forvalues k=2/`nbModCov`=`i'-`nbit'''{ local compteur=`compteur'+1 local estimate_e=eB[1,`compteur'] local se_e=sqrt(`=eV[`compteur',`compteur']') noi{ di _col(4) in gr "`=abbrev("``i''",10)':" in ye " `ident`=`i'-`nbit''_`k''" _col(19) in ye %6.3f `estimate_e' _col(28) in ye %6.3f `se_e' _col(37) in ye %5.2f `=`estimate_e'/`se_e'' _col(44) in ye %6.3f `=2*(1-normal(abs(`estimate_e'/`se_e')))' _col(52) in ye %6.3f `=`estimate_e'-1.96*`se_e'' _col(61) in ye %6.3f `=`estimate_e'+1.96*`se_e'' /*_col(70) in ye %6.3f `ESit`=`i'+`nbit''mod`k''*/ } } di in gr "{hline 101}" } } if `nbcovquant'!=0{ forvalues i=`=`nbit'+`nbcov'+1'/`=`nbit'+`nbcov'+`nbcovquant''{ local ss3=. local df=. local vexp=. local r2exp=. if "`estimateonly'"==""{ local ss3=`SS_Mss``i'''-`SS_ModComp' local df=`dfree_Mss``i'''-`dfree_ModComp' local vexp=(`SS_Mss``i'''-`SS_ModComp')/`SS_Mss``i'''*100 local r2exp=(`R2Nag'-`R2N_``i''')/`R2Nag'*100 } local compteur=`compteur'+1 local estimate_e=eB[1,`compteur'] local se_e=sqrt(`=eV[`compteur',`compteur']') noi{ di _col(1) in gr "``i'':" _col(19) in ye %6.3f `estimate_e' _col(28) in ye %6.3f `se_e' _col(37) in ye %5.2f `=`estimate_e'/`se_e'' _col(44) in ye %6.3f `=2*(1-normal(abs(`estimate_e'/`se_e')))' _col(52) in ye %6.3f `=`estimate_e'-1.96*`se_e'' _col(61) in ye %6.3f `=`estimate_e'+1.96*`se_e'' _col(72) in ye %6.3f `ss3' _col(81) in ye %2.0f `df' _col(84) in ye %6.1f `vexp' "%" _col(94) in ye %6.1f `r2exp' "%" } di in gr "{hline 101}" } } if "`difficulties'"!=""{ di _col(1) in gr "_Cons" _col(19) in ye %6.3f `=eB[1,1]' _col(28) in ye %6.3f `=sqrt(eV[1,1])' _col(37) in ye %5.2f `=`=eB[1,1]'/`=sqrt(eV[1,1])'' _col(44) in ye %6.3f `=2*(1-normal(abs(`=eB[1,1]'/`=sqrt(eV[1,1])')))' _col(52) in ye %6.3f `=`=eB[1,1]'-1.96*`=sqrt(eV[1,1])'' _col(61) in ye %6.3f `=`=eB[1,1]'+1.96*`=sqrt(eV[1,1])'' di in gr "{hline 101}" } local sssc=. local dfsc=. local ssac=. local dfac=. if "`estimateonly'"==""{ local sssc=`SS_ModSsCov' local dfsc=`dfree_ModSsCov' local ssac=`SS_ModComp' local dfac=`dfree_ModComp' } di _col(73) in gr "SS.res" _col(84) in gr "df" di _col(45) in gr "Model without covariates" _col(72) in ye %6.3f `sssc' _col(81) in ye %5.0f `dfsc' di _col(59) in gr "Full model" _col(72) in ye %6.3f `ssac' _col(81) in ye %5.0f `dfac' di in gr "{hline 101}" di "" } else if "`difficulties'"!=""{ di in gr "Latent trait distribution" di in gr "{hline 85}" di _col(23) in gr "Coef." _col(36) in gr "S.E." _col(48) in gr "z" _col(57) in gr "P>|z|" _col(66) in gr "[95% Conf. Interval]" di in gr "{hline 85}" di _col(1) in gr "Mu" _col(20) in ye %8.5f `=eB[1,1]' _col(32) in ye %8.5f `=sqrt(eV[1,1]) ' _col(44) in ye %5.2f `=`=eB[1,1]'/`=sqrt(eV[1,1]) '' _col(56) in ye %6.3f `=2*(1-normal(abs(`=eB[1,1]'/`=sqrt(eV[1,1]) ')))' _col(66) in ye %8.5f `=`=eB[1,1]'-1.96*`=sqrt(eV[1,1]) '' _col(78) in ye %8.5f `=`=eB[1,1]'+1.96*`=sqrt(eV[1,1]) '' di _col(1) in gr "Sigma" _col(20) in ye %8.5f `=eB[1,`nbc']' _col(32) in ye %8.5f `=sqrt(`=eV[`nbc',`nbc']')' _col(44) in ye %5.2f `=eB[1,`nbc']/sqrt(`=eV[`nbc',`nbc']')' _col(56) in ye %6.3f `=2*(1-normal(abs(eB[1,`nbc']/sqrt(`=eV[`nbc',`nbc']'))))' _col(66) in ye %8.5f `=eB[1,`nbc']-1.96*sqrt(`=eV[`nbc',`nbc']')' _col(78) in ye %8.5f `=eB[1,`nbc']+1.96*sqrt(`=eV[`nbc',`nbc']')' di in gr "{hline 85}" di "" } if "`difficulties'"==""{ di in gr "Items difficulty parameters:" di "" di in gr "{hline 52}" di _col(1) in gr "Item" _col(21) in gr "Coef." _col(31) in gr "S.E." _col(43) in gr "[95% C.I.]" _col(66) di in gr "{hline 52}" local compteur=1 if "`rsm'"==""{ forvalues i=1/`nbit'{ di _col(1) in gr "``i'':" forvalues g=1/`=`moda`i''-1'{ di _col(4) in gr "response:" in ye " `=round(`=rep__`i'[`=`g'+1',1]',0.1)'" _col(20) in ye %6.3f `=eB[1,`compteur']' _col(29) in ye %6.3f `=sqrt(`=eV[`compteur',`compteur']')' _col(38) in ye %6.3f `=eB[1,`compteur']-1.96*sqrt(`=eV[`compteur',`compteur']')' _col(47) in ye %6.3f `=eB[1,`compteur']+1.96*sqrt(`=eV[`compteur',`compteur']')' local compteur=`compteur'+1 } di in gr "{hline 52}" } di "" } else{ forvalues i=1/`nbit'{ di _col(1) in gr "``i'':" _col(20) in ye %6.3f `=eB[1,`compteur']' _col(29) in ye %6.3f `=sqrt(`=eV[`compteur',`compteur']')' _col(38) in ye %6.3f `=eB[1,`compteur']-1.96*sqrt(`=eV[`compteur',`compteur']')' _col(47) in ye %6.3f `=eB[1,`compteur']+1.96*sqrt(`=eV[`compteur',`compteur']')' local compteur=`compteur'+`=`moda1'-1' } di in gr "{hline 52}" forvalues i=2/`=`moda1'-1'{ di _col(1) in gr "tau`=`i'-1':" _col(20) in ye %6.3f `tau`i'' _col(29) in ye %6.3f `setau`i'' _col(38) in ye %6.3f `=`tau`i''-1.96*`setau`i''' _col(47) in ye %6.3f `=`tau`i''+1.96*`setau`i''' } di in gr "{hline 52}" } } else{ di in gr "Items difficulty parameters: fixed for the analysis" } /*************************************/ /* ereturn */ /*************************************/ qui{ if "`difficulties'"==""{ matrix Varbeta=eV local Varsigma=Varbeta[`=colsof(Varbeta)',`=colsof(Varbeta)'] matrix Vardelta=Varbeta[1..`nbdifftotbis',1..`nbdifftotbis'] matrix beta=eB local sigma=abs(beta[1,`=colsof(beta)']) matrix delta=beta[1,1..`nbdifftotbis'] if `=`nbcov'+`nbcovquant''!=0{ matrix Vartheta=Varbeta[`=`nbdifftotbis'+1'..`=colsof(Varbeta)-1',`=`nbdifftotbis'+1'..`=colsof(Varbeta)-1'] matrix theta=beta[1,`=`nbdifftotbis'+1'..`=colsof(beta)-1'] } else{ local theta=0 local Vartheta=0 } } else{ if `=`nbcov'+`nbcovquant''!=0{ matrix Vartheta=eV local Varsigma=Vartheta[`=colsof(Vartheta)',`=colsof(Vartheta)'] matrix Vartheta=Vartheta[1..`=colsof(Vartheta)-1',1..`=colsof(Vartheta)-1'] matrix theta=eB local sigma=abs(theta[1,`=colsof(theta)']) matrix theta=theta[1,1..`=colsof(theta)-1'] } else{ matrix theta=eB local sigma=abs(theta[1,`=colsof(theta)']) matrix Vtheta=eV local Varsigma=Vtheta[`=colsof(Vtheta)',`=colsof(Vtheta)'] local theta=theta[1,1] local vartheta=Vtheta[1,1] } } ereturn clear if `=`nbcov'+`nbcovquant''!=0{ matrix b=theta matrix V=Vartheta ereturn post b V, depname(theta) } else{ if "`difficulties'"==""{ matrix V=(0) matrix coleq V=estimates matrix coln V=mu matrix roweq V=estimates matrix rown V=mu matrix b=(0) matrix coleq b=estimates matrix coln b=mu matrix rown b=y1 ereturn post b V, depname(theta) } else{ matrix V=(`vartheta') matrix coleq V=estimates matrix coln V=mu matrix roweq V=estimates matrix rown V=mu matrix b=(`theta') matrix coleq b=estimates matrix coln b=mu matrix rown b=y1 ereturn post b V, depname(theta) } } ereturn scalar mll=`LLfull' ereturn scalar cn=`ccnn' ereturn scalar N=`Nbid' ereturn scalar Nit=`nbit' ereturn scalar converged=`convergeance' ereturn local items `varlist' ereturn local itest `itest' ereturn local datatest `bddini'_b ereturn local mugauss `mugauss' ereturn local sdgauss `sdgauss' ereturn local cmd "pcmodel" ereturn local order `ordre' if `=`nbcov'+`nbcovquant''!=0{ ereturn scalar Ncat=`nbcov' ereturn scalar Ncont=`nbcovquant' } if "`difficulties'"==""{ ereturn matrix Vardelta=Vardelta ereturn matrix delta=delta ereturn scalar sigma=`sigma' ereturn scalar Varsigma=`Varsigma' } else{ if `=`nbcov'+`nbcovquant''!=0{ ereturn scalar sigma=`sigma' ereturn scalar Varsigma=`Varsigma' } else{ ereturn scalar sigma=`sigma' ereturn scalar Varsigma=`Varvartheta' } } } use `bddini'pre, replace restore end