You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1141 lines
41 KiB
Plaintext
1141 lines
41 KiB
Plaintext
10 months ago
|
/********************************************************************************/
|
||
|
/* v1.1 : Bug fixed regarding the estimation of the latent trait standard error */
|
||
|
/* v2 : Bugs with temporary names fixed, New options have been added, */
|
||
|
/* modifications of the output */
|
||
|
/********************************************************************************/
|
||
|
|
||
|
program define pcmodel, eclass
|
||
|
version 11.0
|
||
|
syntax [varlist] [if] [in] [, CATegorical(string) CONTinuous(string) DIFficulties(string) ITerate(string) ADapt RObust From(string) RSM ESTimateonly nip(string) TRace Level(string)]
|
||
|
|
||
|
preserve
|
||
|
tempfile bddinip
|
||
|
qui save `bddinip',replace
|
||
|
local Cond=0
|
||
|
|
||
|
if "`level'"==""{
|
||
|
local level=c(level)
|
||
|
}
|
||
|
|
||
|
|
||
|
if replay() {
|
||
|
capture local cmdavant=e(cmd)
|
||
|
if _rc!=0 | "`cmdavant'"!="pcmodel"{
|
||
|
noi di in red "pcmodel was not the last command"
|
||
|
error 100
|
||
|
}
|
||
|
if "`categorical'`continuous'`difficulties'`iterate'`adapt'`robust'`from'`rsm'`estimateonly'`nip'"==""{
|
||
|
local rsm=e(rsm)
|
||
|
local LLfull=e(ll)
|
||
|
local estimateonly=e(estimateonly)
|
||
|
local R2Nag=e(r2)
|
||
|
local Nbid=e(N)
|
||
|
local nbit=e(Nit)
|
||
|
local categorical=e(categorical)
|
||
|
local continuous=e(continuous)
|
||
|
if "`continuous'"=="."{
|
||
|
local continuous=""
|
||
|
}
|
||
|
if "`categorical'"=="."{
|
||
|
local categorical=""
|
||
|
}
|
||
|
local nbcov: word count `categorical'
|
||
|
local nbcovquant: word count `continuous'
|
||
|
local varlist=e(items)
|
||
|
tokenize `varlist' `categorical' `continuous'
|
||
|
local difficulties=e(difficulties)
|
||
|
local contrR=e(constr)
|
||
|
tempname eB eV VarExpSS
|
||
|
matrix `eB'=e(b)
|
||
|
matrix `eV'=e(V)
|
||
|
matrix `VarExpSS'=e(VarExpSS)
|
||
|
local nbc=colsof(`eB')
|
||
|
local nbdifftotbis=e(ndtb)
|
||
|
if `nbcov'!=0{
|
||
|
forvalues i=`=`nbit'+1'/`=`nbit'+`nbcov''{
|
||
|
local ``i''_m=e(``i'')
|
||
|
local k=1
|
||
|
local nbModCov`=`i'-`nbit''=wordcount("```i''_m'")
|
||
|
foreach m in ```i''_m'{
|
||
|
local ident`=`i'-`nbit''_`k'=`m'
|
||
|
local k=`k'+1
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
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 %-18.3f `LLfull'
|
||
|
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'"=="."{
|
||
|
di in gr " Identifiability constraint: `contrR'set to 0"
|
||
|
}
|
||
|
di in gr " Variance of the Latent trait: Sigma²=" in ye %-8.3f (`=`=`eB'[1,`nbc']'')^2 in gr " (SE:"in ye %-8.3f `= 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 66}"
|
||
|
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 "[`level'% C.I.]"
|
||
|
di in gr "{hline 66}"
|
||
|
local compteur=1
|
||
|
if "`difficulties'"=="."{
|
||
|
local compteur=`nbdifftotbis'
|
||
|
}
|
||
|
if `nbcov'!=0{
|
||
|
forvalues i=`=`nbit'+1'/`=`nbit'+`nbcov''{
|
||
|
local compteur=`compteur'+1
|
||
|
noi{
|
||
|
di _col(1) in gr "``i'':"
|
||
|
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 "."
|
||
|
}
|
||
|
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+`level'/100)/2'*`se_e'' _col(61) in ye %6.3f `=`estimate_e'+`=(1+`level'/100)/2'*`se_e''
|
||
|
}
|
||
|
}
|
||
|
di in gr "{hline 66}"
|
||
|
}
|
||
|
}
|
||
|
if `nbcovquant'!=0{
|
||
|
forvalues i=`=`nbit'+`nbcov'+1'/`=`nbit'+`nbcov'+`nbcovquant''{
|
||
|
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+`level'/100)/2'*`se_e'' _col(61) in ye %6.3f `=`estimate_e'+`=(1+`level'/100)/2'*`se_e''
|
||
|
}
|
||
|
di in gr "{hline 66}"
|
||
|
}
|
||
|
}
|
||
|
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+`level'/100)/2'*`=sqrt(`eV'[1,1])'' _col(61) in ye %6.3f `=`=`eB'[1,1]'+`=(1+`level'/100)/2'*`=sqrt(`eV'[1,1])''
|
||
|
di in gr "{hline 66}"
|
||
|
}
|
||
|
if "`estimateonly'"=="."{
|
||
|
di ""
|
||
|
di "Proportion of latent trait variance explained by covariates"
|
||
|
di ""
|
||
|
di in gr "{hline 53}"
|
||
|
di _col(23) in gr "SS.III" _col(34) in gr "df" _col(38) in gr "V.exp." _col(47) in gr "R2.exp."
|
||
|
di in gr "{hline 53}"
|
||
|
local compteur=1
|
||
|
if "`difficulties'"=="."{
|
||
|
local compteur=`nbdifftotbis'
|
||
|
}
|
||
|
local compte=1
|
||
|
if `nbcov'!=0{
|
||
|
forvalues i=`=`nbit'+1'/`=`nbit'+`nbcov''{
|
||
|
local ss3=`VarExpSS'[`compte',1]
|
||
|
local df=`VarExpSS'[`compte',2]
|
||
|
local vexp=`VarExpSS'[`compte',3]
|
||
|
local r2exp=`VarExpSS'[`compte',4]
|
||
|
local compteur=`compteur'+1
|
||
|
local compte=`compte'+1
|
||
|
noi di _col(1) in gr "``i'':" _col(22) in ye %6.3f `ss3' _col(34) in ye %2.0f `df' _col(37) in ye %6.1f `vexp' "%" _col(46) in ye %6.1f `r2exp' "%"
|
||
|
}
|
||
|
}
|
||
|
if `nbcovquant'!=0{
|
||
|
forvalues i=`=`nbit'+`nbcov'+1'/`=`nbit'+`nbcov'+`nbcovquant''{
|
||
|
local ss3=`VarExpSS'[`compte',1]
|
||
|
local df=`VarExpSS'[`compte',2]
|
||
|
local vexp=`VarExpSS'[`compte',3]
|
||
|
local r2exp=`VarExpSS'[`compte',4]
|
||
|
local compteur=`compteur'+1
|
||
|
local compte=`compte'+1
|
||
|
noi di _col(1) in gr "``i'':" _col(22) in ye %6.3f `ss3' _col(34) in ye %2.0f `df' _col(37) in ye %6.1f `vexp' "%" _col(46) in ye %6.1f `r2exp' "%"
|
||
|
}
|
||
|
}
|
||
|
di in gr "{hline 53}"
|
||
|
local sssc=`VarExpSS'[`=`compte'',1]
|
||
|
local dfsc=`VarExpSS'[`=`compte'',2]
|
||
|
local ssac=`VarExpSS'[`=`compte'+1',1]
|
||
|
local dfac=`VarExpSS'[`=`compte'+1',2]
|
||
|
di _col(23) in gr "SS.res" _col(34) in gr "df"
|
||
|
di _col(1) in gr "Model without cov." _col(22) in ye %6.3f `sssc' _col(31) in ye %5.0f `dfsc'
|
||
|
di _col(1) in gr "Full model" _col(22) in ye %6.3f `ssac' _col(31) in ye %5.0f `dfac'
|
||
|
di in gr "{hline 53}"
|
||
|
di ""
|
||
|
}
|
||
|
}
|
||
|
else if "`difficulties'"!="."{
|
||
|
di in gr "Latent trait distribution"
|
||
|
di in gr "{hline 80}"
|
||
|
di _col(18) in gr "Coef." _col(31) in gr "S.E." _col(43) in gr "z" _col(52) in gr "P>|z|" _col(61) in gr "[`level'% Conf. Interval]"
|
||
|
di in gr "{hline 80}"
|
||
|
di _col(1) in gr "Mu" _col(15) in ye %8.5f `=`eB'[1,1]' _col(27) in ye %8.5f `=sqrt(`eV'[1,1]) ' _col(39) in ye %5.2f `=`=`eB'[1,1]'/`=sqrt(`eV'[1,1]) '' _col(51) in ye %6.3f `=2*(1-normal(abs(`=`eB'[1,1]'/`=sqrt(`eV'[1,1]) ')))' _col(61) in ye %8.5f `=`=`eB'[1,1]'-`=(1+`level'/100)/2'*`=sqrt(`eV'[1,1]) '' _col(73) in ye %8.5f `=`=`eB'[1,1]'+`=(1+`level'/100)/2'*`=sqrt(`eV'[1,1]) ''
|
||
|
|
||
|
di _col(1) in gr "Sigma" _col(15) in ye %8.5f `=abs(`eB'[1,`nbc'])' _col(27) in ye %8.5f `=sqrt(`=`eV'[`nbc',`nbc']')' _col(39) in ye %5.2f `=`eB'[1,`nbc']/sqrt(`=`eV'[`nbc',`nbc']')' _col(51) in ye %6.3f `=2*(1-normal(abs(`eB'[1,`nbc']/sqrt(`=`eV'[`nbc',`nbc']'))))' _col(61) in ye %8.5f `=`eB'[1,`nbc']-`=(1+`level'/100)/2'*sqrt(`=`eV'[`nbc',`nbc']')' _col(73) in ye %8.5f `=`eB'[1,`nbc']+`=(1+`level'/100)/2'*sqrt(`=`eV'[`nbc',`nbc']')'
|
||
|
di in gr "{hline 80}"
|
||
|
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 "[`level'% C.I.]" _col(66)
|
||
|
di in gr "{hline 52}"
|
||
|
local compteur=1
|
||
|
if "`rsm'"=="."{
|
||
|
forvalues i=1/`nbit'{
|
||
|
|
||
|
tempname rep__`i'
|
||
|
qui tab ``i'', matrow(`rep__`i'')
|
||
|
local moda`i'=`=r(r)'
|
||
|
di _col(1) in gr "``i'':"
|
||
|
forvalues g=1/`=`moda`i''-1'{
|
||
|
di _col(4) in gr "response: " in ye %-6.2g `=`rep__`i''[`=`g'+1',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+`level'/100)/2'*sqrt(`=`eV'[`compteur',`compteur']')' _col(47) in ye %6.3f `=`eB'[1,`compteur']+`=(1+`level'/100)/2'*sqrt(`=`eV'[`compteur',`compteur']')'
|
||
|
local compteur=`compteur'+1
|
||
|
}
|
||
|
di in gr "{hline 52}"
|
||
|
}
|
||
|
di ""
|
||
|
}
|
||
|
else{
|
||
|
tempname tau
|
||
|
matrix `tau'=e(Tau)
|
||
|
forvalues i=1/`nbit'{
|
||
|
tempname rep__`i'
|
||
|
qui tab ``i'', matrow(`rep__`i'')
|
||
|
local moda`i'=`=r(r)'
|
||
|
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+`level'/100)/2'*sqrt(`=`eV'[`compteur',`compteur']')' _col(47) in ye %6.3f `=`eB'[1,`compteur']+`=(1+`level'/100)/2'*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'[1,`i']' _col(29) in ye %6.3f `=`tau'[2,`i']' _col(38) in ye %6.3f `=`=`tau'[1,`i']'-`=(1+`level'/100)/2'*`=`tau'[2,`i']'' _col(47) in ye %6.3f `=`=`tau'[1,`i']'+`=(1+`level'/100)/2'*`=`tau'[2,`i']''
|
||
|
}
|
||
|
di in gr "{hline 52}"
|
||
|
}
|
||
|
}
|
||
|
else{
|
||
|
di in gr "Items difficulty parameters: fixed for the analysis"
|
||
|
}
|
||
|
}
|
||
|
else{
|
||
|
local Cond=1
|
||
|
local varlist=e(items)
|
||
|
if "`categorical'"=="" & "`=e(categorical)'"!="."{
|
||
|
local categorical=e(categorical)
|
||
|
}
|
||
|
if "`continuous'"=="" & "`=e(continuous)'"!="."{
|
||
|
local continuous=e(continuous)
|
||
|
}
|
||
|
if "`difficulties'"=="" & "`=e(difficulties)'"!="."{
|
||
|
local difficulties=e(difficulties)
|
||
|
}
|
||
|
if "`iterate'"=="" & "`=e(iterate)'"!="."{
|
||
|
local iterate=e(iterate)
|
||
|
}
|
||
|
if "`adapt'"=="" & "`=e(adapt)'"!="."{
|
||
|
local adapt=e(adapt)
|
||
|
}
|
||
|
if "`robust'"=="" & "`=e(robust)'"!="."{
|
||
|
local robust=e(robust)
|
||
|
}
|
||
|
if "`from'"=="" & "`=e(from)'"!="."{
|
||
|
local from=e(from)
|
||
|
}
|
||
|
if "`rsm'"=="" & "`=e(rsm)'"!="."{
|
||
|
local rsm=e(rsm)
|
||
|
}
|
||
|
if "`estimateonly'"=="" & "`=e(estimateonly)'"!="."{
|
||
|
local estimateonly=e(estimateonly)
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
else{
|
||
|
local Cond=1
|
||
|
}
|
||
|
if `Cond'==1{
|
||
|
tokenize `varlist' `categorical' `continuous'
|
||
|
local nbit: word count `varlist'
|
||
|
local nbcov: word count `categorical'
|
||
|
local nbcovquant: word count `continuous'
|
||
|
local nbit2:word count `difficulties'
|
||
|
local NIP ""
|
||
|
if "`nip'"!=""{
|
||
|
local NIP "nip(`nip')"
|
||
|
}
|
||
|
tempname nom val
|
||
|
if `nbit2'==0{
|
||
|
local itest=1
|
||
|
}
|
||
|
else{
|
||
|
local itest=0
|
||
|
}
|
||
|
if "`from'"!=""{
|
||
|
local verifFrom=colsof(`from')
|
||
|
}
|
||
|
tempfile bddini bddinib
|
||
|
qui{
|
||
|
marksample touse,novarlist
|
||
|
keep if `touse'
|
||
|
local ordre=0
|
||
|
forvalues i=1/`nbit'{
|
||
|
tempname rep__`i'
|
||
|
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 `bddinib',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 `bddinip',replace
|
||
|
error 100
|
||
|
}
|
||
|
}
|
||
|
if "`difficulties'"!=""{
|
||
|
noi di in red "RSM option only available for unknow difficulties"
|
||
|
use `bddinip',replace
|
||
|
error 100
|
||
|
}
|
||
|
}
|
||
|
if "`from'"!=""{
|
||
|
if "`difficulties'"!=""{
|
||
|
noi di in red "From option only available for unknow difficulties"
|
||
|
use `bddinip',replace
|
||
|
error 100
|
||
|
}
|
||
|
if "`rsm'"!=""{
|
||
|
noi di in red "From option only available for the Partial Credit model"
|
||
|
use `bddinip',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 `bddinib', replace
|
||
|
if "`difficulties'"!=""{
|
||
|
if `nbit2'!=`nbit'{
|
||
|
noi di in red "Not the same number of difficulty vectors and of items"
|
||
|
use `bddinip',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 `bddinip',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 `bddinip',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 `bddinip',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)
|
||
|
tempname eBLLL00
|
||
|
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'''"
|
||
|
}
|
||
|
tempname a
|
||
|
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' `NIP' `trace'
|
||
|
local convergeance=e(converged)
|
||
|
tempname eB eV
|
||
|
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'"!=""{
|
||
|
tempname tau
|
||
|
matrix `tau'=J(2,`=`moda1'-1',.)
|
||
|
forvalues i=2/`=`moda1'-1'{
|
||
|
qui lincom d_`1'_`i'-d_`1'_1
|
||
|
local tau`i'=r(estimate)
|
||
|
local setau`i'=r(se)
|
||
|
matrix `tau'[1,`i']=`tau`i''
|
||
|
matrix `tau'[2,`i']=`setau`i''
|
||
|
}
|
||
|
}
|
||
|
|
||
|
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'
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
/* Commande GLLAMM qui est responsable de génération de matrices résiduelles */
|
||
|
qui gllamm estimates cons , offset(difficultiespost) i(theta) eqs(slope) link(mlogit) expand(`obs' `choix' o) weight(`wt') `adapt' `robust' nocons from(`eB') skip `NIP'
|
||
|
tempname eB_tot
|
||
|
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' from(`a') skip `NIP'
|
||
|
local LLinterSS=e(ll)
|
||
|
tempname eB4
|
||
|
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' constraint(`contrainterep') from(`eB') skip `NIP'
|
||
|
tempname eB``covs''
|
||
|
matrix `eB``covs'''=e(b)
|
||
|
local SS_Mss``covs''=(`eB``covs'''[1,`=colsof(`eB``covs''')']^2)*`dfree_Mss``covs'''
|
||
|
local LLfullmoin=e(ll)
|
||
|
tempname eB4
|
||
|
matrix `eB4'=e(b)
|
||
|
local R2N_``covs''=1-(`LLfullmoin'/`LLinterSS')
|
||
|
tempname eB2
|
||
|
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 %-18.3f `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 ""
|
||
|
local contrR ""
|
||
|
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))'"
|
||
|
local contrR "latent trait for `subgroup0b'"
|
||
|
}
|
||
|
else{
|
||
|
|
||
|
local contrR "overall latent trait mean "
|
||
|
}
|
||
|
di in gr " Identifiability constraint: `contrR'set to 0"
|
||
|
}
|
||
|
di in gr " Variance of the Latent trait: Sigma²=" in ye %-8.3f (`=`=`eB'[1,`nbc']'')^2 in gr " (SE:"in ye %-8.3f `= 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{
|
||
|
if "`estimateonly'"=="" & `=`nbcov'+`nbcovquant''>0 {
|
||
|
tempname VarExpSS
|
||
|
matrix `VarExpSS'=J(`=`nbcov'+`nbcovquant'+2',4,.)
|
||
|
local compte=1
|
||
|
if `nbcov'!=0{
|
||
|
forvalues i=`=`nbit'+1'/`=`nbit'+`nbcov''{
|
||
|
matrix `VarExpSS'[`compte',1]=`SS_Mss``i'''-`SS_ModComp'
|
||
|
matrix `VarExpSS'[`compte',2]=`dfree_Mss``i'''-`dfree_ModComp'
|
||
|
matrix `VarExpSS'[`compte',3]=(`SS_Mss``i'''-`SS_ModComp')/`SS_Mss``i'''*100
|
||
|
matrix `VarExpSS'[`compte',4]=(`R2Nag'-`R2N_``i''')/`R2Nag'*100
|
||
|
local compte=`compte'+1
|
||
|
}
|
||
|
}
|
||
|
if `nbcovquant'!=0{
|
||
|
forvalues i=`=`nbit'+`nbcov'+1'/`=`nbit'+`nbcov'+`nbcovquant''{
|
||
|
matrix `VarExpSS'[`compte',1]=`SS_Mss``i'''-`SS_ModComp'
|
||
|
matrix `VarExpSS'[`compte',2]=`dfree_Mss``i'''-`dfree_ModComp'
|
||
|
matrix `VarExpSS'[`compte',3]=(`SS_Mss``i'''-`SS_ModComp')/`SS_Mss``i'''*100
|
||
|
matrix `VarExpSS'[`compte',4]=(`R2Nag'-`R2N_``i''')/`R2Nag'*100
|
||
|
local compte=`compte'+1
|
||
|
}
|
||
|
}
|
||
|
matrix `VarExpSS'[`=`compte'',1]=`SS_ModSsCov'
|
||
|
matrix `VarExpSS'[`=`compte'',2]=`dfree_ModSsCov'
|
||
|
matrix `VarExpSS'[`=`compte'+1',1]=`SS_ModComp'
|
||
|
matrix `VarExpSS'[`=`compte'+1',2]=`dfree_ModComp'
|
||
|
}
|
||
|
if c(linesize)>=101{
|
||
|
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 "[`level'% C.I.]" _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 "."
|
||
|
}
|
||
|
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+`level'/100)/2'*`se_e'' _col(61) in ye %6.3f `=`estimate_e'+`=(1+`level'/100)/2'*`se_e''
|
||
|
}
|
||
|
}
|
||
|
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+`level'/100)/2'*`se_e'' _col(61) in ye %6.3f `=`estimate_e'+`=(1+`level'/100)/2'*`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+`level'/100)/2'*`=sqrt(`eV'[1,1])'' _col(61) in ye %6.3f `=`=`eB'[1,1]'+`=(1+`level'/100)/2'*`=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{
|
||
|
di in gr "Latent trait group effect:"
|
||
|
di ""
|
||
|
di in gr "{hline 66}"
|
||
|
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 "[`level'% C.I.]"
|
||
|
di in gr "{hline 66}"
|
||
|
local compteur=1
|
||
|
if "`difficulties'"==""{
|
||
|
local compteur=`nbdifftotbis'
|
||
|
}
|
||
|
if `nbcov'!=0{
|
||
|
forvalues i=`=`nbit'+1'/`=`nbit'+`nbcov''{
|
||
|
local compteur=`compteur'+1
|
||
|
noi{
|
||
|
di _col(1) in gr "``i'':"
|
||
|
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 "."
|
||
|
}
|
||
|
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+`level'/100)/2'*`se_e'' _col(61) in ye %6.3f `=`estimate_e'+`=(1+`level'/100)/2'*`se_e''
|
||
|
}
|
||
|
}
|
||
|
di in gr "{hline 66}"
|
||
|
}
|
||
|
}
|
||
|
if `nbcovquant'!=0{
|
||
|
forvalues i=`=`nbit'+`nbcov'+1'/`=`nbit'+`nbcov'+`nbcovquant''{
|
||
|
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+`level'/100)/2'*`se_e'' _col(61) in ye %6.3f `=`estimate_e'+`=(1+`level'/100)/2'*`se_e''
|
||
|
}
|
||
|
di in gr "{hline 66}"
|
||
|
}
|
||
|
}
|
||
|
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+`level'/100)/2'*`=sqrt(`eV'[1,1])'' _col(61) in ye %6.3f `=`=`eB'[1,1]'+`=(1+`level'/100)/2'*`=sqrt(`eV'[1,1])''
|
||
|
di in gr "{hline 66}"
|
||
|
}
|
||
|
if "`estimateonly'"==""{
|
||
|
di ""
|
||
|
di "Proportion of latent trait variance explained by covariates"
|
||
|
di ""
|
||
|
di in gr "{hline 53}"
|
||
|
di _col(23) in gr "SS.III" _col(34) in gr "df" _col(38) in gr "V.exp." _col(47) in gr "R2.exp."
|
||
|
di in gr "{hline 53}"
|
||
|
local compteur=1
|
||
|
if "`difficulties'"==""{
|
||
|
local compteur=`nbdifftotbis'
|
||
|
}
|
||
|
if `nbcov'!=0{
|
||
|
forvalues i=`=`nbit'+1'/`=`nbit'+`nbcov''{
|
||
|
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(22) in ye %6.3f `ss3' _col(34) in ye %2.0f `df' _col(37) in ye %6.1f `vexp' "%" _col(46) in ye %6.1f `r2exp' "%"
|
||
|
}
|
||
|
}
|
||
|
if `nbcovquant'!=0{
|
||
|
forvalues i=`=`nbit'+`nbcov'+1'/`=`nbit'+`nbcov'+`nbcovquant''{
|
||
|
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(22) in ye %6.3f `ss3' _col(34) in ye %2.0f `df' _col(37) in ye %6.1f `vexp' "%" _col(46) in ye %6.1f `r2exp' "%"
|
||
|
}
|
||
|
}
|
||
|
di in gr "{hline 53}"
|
||
|
local sssc=`SS_ModSsCov'
|
||
|
local dfsc=`dfree_ModSsCov'
|
||
|
local ssac=`SS_ModComp'
|
||
|
local dfac=`dfree_ModComp'
|
||
|
di _col(23) in gr "SS.res" _col(34) in gr "df"
|
||
|
di _col(1) in gr "Model without cov." _col(22) in ye %6.3f `sssc' _col(31) in ye %5.0f `dfsc'
|
||
|
di _col(1) in gr "Full model" _col(22) in ye %6.3f `ssac' _col(31) in ye %5.0f `dfac'
|
||
|
di in gr "{hline 53}"
|
||
|
di ""
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
else if "`difficulties'"!=""{
|
||
|
di in gr "Latent trait distribution"
|
||
|
di in gr "{hline 80}"
|
||
|
di _col(18) in gr "Coef." _col(31) in gr "S.E." _col(43) in gr "z" _col(52) in gr "P>|z|" _col(61) in gr "[`level'% Conf. Interval]"
|
||
|
di in gr "{hline 80}"
|
||
|
di _col(1) in gr "Mu" _col(15) in ye %8.5f `=`eB'[1,1]' _col(27) in ye %8.5f `=sqrt(`eV'[1,1]) ' _col(39) in ye %5.2f `=`=`eB'[1,1]'/`=sqrt(`eV'[1,1]) '' _col(51) in ye %6.3f `=2*(1-normal(abs(`=`eB'[1,1]'/`=sqrt(`eV'[1,1]) ')))' _col(61) in ye %8.5f `=`=`eB'[1,1]'-`=(1+`level'/100)/2'*`=sqrt(`eV'[1,1]) '' _col(73) in ye %8.5f `=`=`eB'[1,1]'+`=(1+`level'/100)/2'*`=sqrt(`eV'[1,1]) ''
|
||
|
|
||
|
di _col(1) in gr "Sigma" _col(15) in ye %8.5f `=abs(`eB'[1,`nbc'])' _col(27) in ye %8.5f `=sqrt(`=`eV'[`nbc',`nbc']')' _col(39) in ye %5.2f `=`eB'[1,`nbc']/sqrt(`=`eV'[`nbc',`nbc']')' _col(51) in ye %6.3f `=2*(1-normal(abs(`eB'[1,`nbc']/sqrt(`=`eV'[`nbc',`nbc']'))))' _col(61) in ye %8.5f `=`eB'[1,`nbc']-`=(1+`level'/100)/2'*sqrt(`=`eV'[`nbc',`nbc']')' _col(73) in ye %8.5f `=`eB'[1,`nbc']+`=(1+`level'/100)/2'*sqrt(`=`eV'[`nbc',`nbc']')'
|
||
|
di in gr "{hline 80}"
|
||
|
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 "[`level'% 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 %-6.2g `=`rep__`i''[`=`g'+1',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+`level'/100)/2'*sqrt(`=`eV'[`compteur',`compteur']')' _col(47) in ye %6.3f `=`eB'[1,`compteur']+`=(1+`level'/100)/2'*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+`level'/100)/2'*sqrt(`=`eV'[`compteur',`compteur']')' _col(47) in ye %6.3f `=`eB'[1,`compteur']+`=(1+`level'/100)/2'*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+`level'/100)/2'*`setau`i''' _col(47) in ye %6.3f `=`tau`i''+`=(1+`level'/100)/2'*`setau`i'''
|
||
|
}
|
||
|
di in gr "{hline 52}"
|
||
|
}
|
||
|
}
|
||
|
else{
|
||
|
di in gr "Items difficulty parameters: fixed for the analysis"
|
||
|
}
|
||
|
|
||
|
/*************************************/
|
||
|
/* ereturn */
|
||
|
/*************************************/
|
||
|
|
||
|
qui{
|
||
|
if "`difficulties'"==""{
|
||
|
tempname Varbeta Vardelta beta delta Vartheta theta
|
||
|
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 thetas=0
|
||
|
local Varthetas=0
|
||
|
}
|
||
|
}
|
||
|
else{
|
||
|
if `=`nbcov'+`nbcovquant''!=0{
|
||
|
tempname Vartheta theta
|
||
|
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{
|
||
|
tempname theta Vtheta
|
||
|
matrix `theta'=`eB'
|
||
|
local sigma=abs(`theta'[1,`=colsof(`theta')'])
|
||
|
matrix `Vtheta'=`eV'
|
||
|
local Varsigma=`Vtheta'[`=colsof(`Vtheta')',`=colsof(`Vtheta')']
|
||
|
local thetas=`theta'[1,1]
|
||
|
local varthetas=`Vtheta'[1,1]
|
||
|
}
|
||
|
}
|
||
|
ereturn clear
|
||
|
if `=`nbcov'+`nbcovquant''!=0{
|
||
|
matrix b=`eB'
|
||
|
matrix V=`eV'
|
||
|
ereturn post b V, depname(theta)
|
||
|
ereturn matrix theta=`theta'
|
||
|
ereturn matrix Vartheta=`Vartheta'
|
||
|
}
|
||
|
else{
|
||
|
if "`difficulties'"==""{
|
||
|
matrix V=`eV'
|
||
|
tempname thetatemp Varthetatemp
|
||
|
matrix `thetatemp'=(0)
|
||
|
matrix `Varthetatemp'=(0)
|
||
|
matrix coleq `Varthetatemp'=estimates
|
||
|
matrix coln `Varthetatemp'=mu
|
||
|
matrix roweq `Varthetatemp'=estimates
|
||
|
matrix rown `Varthetatemp'=mu
|
||
|
matrix b=`eB'
|
||
|
matrix coleq `thetatemp'=estimates
|
||
|
matrix coln `thetatemp'=mu
|
||
|
matrix rown `thetatemp'=y1
|
||
|
ereturn post b V, depname(theta)
|
||
|
ereturn matrix theta=`thetatemp'
|
||
|
ereturn matrix Vartheta=`Varthetatemp'
|
||
|
}
|
||
|
else{
|
||
|
tempname thetatemp Varthetatemp
|
||
|
matrix `Varthetatemp'=(`varthetas')
|
||
|
matrix coleq `Varthetatemp'=estimates
|
||
|
matrix coln `Varthetatemp'=mu
|
||
|
matrix roweq `Varthetatemp'=estimates
|
||
|
matrix rown `Varthetatemp'=mu
|
||
|
matrix `thetatemp'=(`thetas')
|
||
|
matrix coleq `thetatemp'=estimates
|
||
|
matrix coln `thetatemp'=mu
|
||
|
matrix rown `thetatemp'=y1
|
||
|
matrix V=`eV'
|
||
|
matrix b=`eB'
|
||
|
ereturn post b V, depname(theta)
|
||
|
tempname vvvt vvvVt
|
||
|
matrix `vvvt'=(`thetas')
|
||
|
matrix `vvvVt'=(`varthetas')
|
||
|
ereturn matrix theta=`vvvt'
|
||
|
ereturn matrix Vartheta=`vvvVt'
|
||
|
}
|
||
|
}
|
||
|
ereturn scalar ll=`LLfull'
|
||
|
ereturn scalar cn=`ccnn'
|
||
|
ereturn scalar r2=`R2Nag'
|
||
|
ereturn scalar N=`Nbid'
|
||
|
ereturn scalar Nit=`nbit'
|
||
|
ereturn scalar converged=`convergeance'
|
||
|
ereturn scalar ndtb=`nbdifftotbis'
|
||
|
ereturn scalar mugauss=`mugauss'
|
||
|
ereturn scalar sdgauss=`sdgauss'
|
||
|
if "`nip'"!=""{
|
||
|
ereturn scalar nip=`nip'
|
||
|
}
|
||
|
ereturn local items `varlist'
|
||
|
ereturn local categorical `categorical'
|
||
|
ereturn local continuous `continuous'
|
||
|
ereturn local estimateonly `estimateonly'
|
||
|
ereturn local constr `contrR'
|
||
|
ereturn local difficulties `difficulties'
|
||
|
if `nbcov'!=0{
|
||
|
forvalues i=`=`nbit'+1'/`=`nbit'+`nbcov''{
|
||
|
local ``i''_m ""
|
||
|
forvalues k=1/`nbModCov`=`i'-`nbit'''{
|
||
|
local ``i''_m "```i''_m' `ident`=`i'-`nbit''_`k''"
|
||
|
ereturn local ``i'' ```i''_m'
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
ereturn local rsm `rsm'
|
||
|
ereturn local from `from'
|
||
|
ereturn local robust `robust'
|
||
|
ereturn local adapt `adapt'
|
||
|
ereturn local iterate `iterate'
|
||
|
ereturn local itest `itest'
|
||
|
ereturn local datatest `bddinib'
|
||
|
ereturn local if `if'
|
||
|
ereturn local in `in'
|
||
|
ereturn local cmd "pcmodel"
|
||
|
ereturn scalar 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'
|
||
|
if "`rsm'"!=""{
|
||
|
ereturn matrix Tau=`tau'
|
||
|
}
|
||
|
}
|
||
|
else{
|
||
|
if `=`nbcov'+`nbcovquant''!=0{
|
||
|
ereturn scalar sigma=`sigma'
|
||
|
ereturn scalar Varsigma=`Varsigma'
|
||
|
}
|
||
|
else{
|
||
|
ereturn scalar sigma=`sigma'
|
||
|
ereturn scalar Varsigma=`Varvartheta'
|
||
|
}
|
||
|
}
|
||
|
if "`estimateonly'"=="" & `=`nbcov'+`nbcovquant''>0 {
|
||
|
ereturn matrix VarExpSS `VarExpSS'
|
||
|
}
|
||
|
}
|
||
|
use `bddinip', replace
|
||
|
}
|
||
|
restore
|
||
|
end
|