diff --git a/Modules/rosali_custom/rosali_nobf.ado b/Modules/rosali_custom/rosali_nobf.ado index 127b0d4..daf8ea9 100644 --- a/Modules/rosali_custom/rosali_nobf.ado +++ b/Modules/rosali_custom/rosali_nobf.ado @@ -460,59 +460,6 @@ qui count local nbpat = r(N) -/********************************* -* AFFICHAGE INITIAL -*********************************/ -di -di _col(5) "{hline 78}" -di _col(15) "Time 1" _col(42) "Time 2" _col(65) "Nb of Answer Cat." -di _col(5) "{hline 78}" -forvalues j=1/`nbitems' { - di as text _col(15) abbrev("``j''",20) _col(42) abbrev("``=`j'+`nbitems'''",20) _col(65) `nbmoda_`j'' -} -di _col(5) "{hline 78}" -if "`group'" != "" { - di _col(10) "Nb of patients: " abbrev("`gp'",20) " 0 = `nbp_gp0' ;", abbrev("`gp'",20) " 1 = `nbp_gp1'" - di _col(5) "{hline 78}" -} -else { - di _col(10) "Nb. of patients: `nbpat'" - di _col(5) "{hline 78}" -} -di -if `nbitems' == 1 { - di as error "The analysis can only be performed with at least 2 items." - error 198 - exit -} -forvalues j = 1/`nbitems' { - if `nbmoda_`j'' == 2 { - di "WARNING: ``j'' has only 2 response categories, no distinction can be made between uniform or non-uniform recalibration." - } - if `nbmoda_`j'' == 1 { - di as error "Only `nbmoda_`j'' response categories of item ``j'' were used by the sample, the analysis cannot be performed." - error 198 - exit - } - if `nbmoda_`j'' == 0 { - di as error "No response categories of item ``j'' were used by the sample, the analysis cannot be performed." - error 198 - exit - } -} -di -if "`group'" != "" { - di _col(2) as text "For all models : - mean of the latent trait in `gp' 0 at time 1 is constrained at 0" - di _col(19) "- equality of variances between groups" - di -} -else { - di _col(2) as text "For all models : mean of the latent trait at time 1 is constrained at 0" - di -} - - - /********************************* * DEFINITION DES CONTRAINTES *********************************/ @@ -918,228 +865,20 @@ if "`group'"!="" & "`nodif'"=="" { // PARTIE 1 = Slmt si option group & pas de " local ++boucle } } - - /* MODELE FINAL DE LA PARTIE 1. Si DIFT1 détecté (=Au moins 2 boucles dans l'étape C)*/ - if `nb_stepC' > 1 { - forvalues j=1/`nbitems'{ - local model "" - local listconst "" - if dif_rc[`j',1]==. | dif_rc[`j',1]==0 { /*si pas de DIF: contraintes 1-200*/ - forvalues p=1/`nbdif_`j''{ - qui local listconst "`listconst' `=0+`maxdif'*(`j'-1)+`p''" - qui constraint list `=0+`maxdif'*(`j'-1)+`p'' - } - } - else { - if dif_rc[`j',2]!=. & dif_rc[`j',2]!=0 { /*DIF U: contraintes 201-400*/ - forvalues p=2/`nbdif_`j''{ - qui local listconst "`listconst' `=200+`maxdif'*(`j'-1)+`p''" - qui constraint list `=200+`maxdif'*(`j'-1)+`p'' - } - } - } - } - forvalues j=1/`nbitems'{ - forvalues p=1/`nbdif_`j''{ - local model "`model' (`p'.``j''<-THETA@`p')" - } - } - - qui gsem `model', mlogit tol(0.01) iterate(100) group(`gp') ginvariant(coef loading) var(0: THETA@v) var(1:THETA@v) constraint(`listconst') from(esti_B) latent(THETA) nocapslatent - /* Stockage des estimations du modèle */ - estimates store modeldifCFin - matrix val_mC = r(table) - - /* Calcul des difficultés d'item (delta_j) */ - matrix delta_mCFin=J(`nbitems',`=`nbdif_max'*2',.) - local name_partOneC "" - forvalues p=1/`nbdif_max' { - forvalues g=0/1 { - local name_partOneC "`name_partOneC' delta_`p'_gp`g'" - } - } - local name_partOneL "" - forvalues j=1/`nbitems' { - local name_partOneL "`name_partOneL' ``j''" - } - matrix colnames delta_mCFin = `name_partOneC' - matrix rownames delta_mCFin = `name_partOneL' - - matrix delta_mCFin_se=J(`nbitems',`=`nbdif_max'*2',.) - local name_partOneC_se "" - - forvalues p=1/`nbdif_max' { - forvalues g=0/1 { - local name_partOneC_se "`name_partOneC_se' delta_`p'_gp`g'_se" - } - } - matrix colnames delta_mCFin_se = `name_partOneC_se' - matrix rownames delta_mCFin_se = `name_partOneL' - - forvalues j=1/`nbitems'{ - forvalues p=1/`nbdif_`j''{ - forvalues g=0/1{ - qui lincom -[`p'.``j'']:`g'.`gp' - local delta`j'_`p'g`g'mCFin=r(estimate) - local delta`j'_`p'g`g'mCFin_se=r(se) - if `p'>1{ - qui lincom [`=`p'-1'.``j'']:`g'.`gp' - [`p'.``j'']:`g'.`gp' - local delta`j'_`p'g`g'mCFin = r(estimate) - local delta`j'_`p'g`g'mCFin_se = r(se) - } - matrix delta_mCFin[`j',`=2*`p'-1+`g'']=`delta`j'_`p'g`g'mCFin' - matrix delta_mCFin_se[`j',`=2*`p'-1+`g'']=`delta`j'_`p'g`g'mCFin_se' - } - } - } - if "`group'" != "" { //Variance et se mA - matrix var_mC = (val_mC[1,"/var(THETA)#0bn.`gp'"]\val_mC[2,"/var(THETA)#0bn.`gp'"]) - } - /*group effect*/ - qui lincom [/]:mean(THETA)#1.`gp'-[/]:mean(THETA)#0bn.`gp' - local geffmCFin=r(estimate) - local segeffmCFin=r(se) - qui test [/]:mean(THETA)#1.`gp'-[/]:mean(THETA)#0bn.`gp'=0 - local gcmCFinp=r(p) - local gcmCFinchi=r(chi2) - local gcmCFindf=r(df) - } } - ********************************* - *** BILAN *** - ********************************* - - if "`group'" != "" & "`nodif'" == "" { - di - di %~84s as result "SUMMARY" - di as result _col(2) "{hline 80}" - di as result _col(18) "Difference in" - di as result _col(2) "Item" _col(18) "groups at T1" _col(36) "Recalibration" _col(54) "RC " abbrev("`gp'",10) " 0" _col(72) "RC " abbrev("`gp'",10) " 1" - di as result _col(2) "{hline 80}" - forvalues j=1/`nbitems' { - local RC - local RCg0 - local RCg1 - local difft1 - if (dif_rc[`j',3] != . & dif_rc[`j',3] != 0 & dif_rc[`j',4] == 0) { - local RC "Common" - } - if (dif_rc[`j',3] != . & dif_rc[`j',3] != 0 & dif_rc[`j',4] != 0) { - local RC "Differential" - } - if `nbmoda_`j'' > 2 { - if (dif_rc[`j',6]!=. & dif_rc[`j',6] != 0) { - local RCg0 "Uniform" - } - if (dif_rc[`j',6] == 0) { - local RCg0 "Non-uniform" - } - if (dif_rc[`j',8]!=. & dif_rc[`j',8] != 0) { - local RCg1 "Uniform" - } - if ( dif_rc[`j',8] == 0) { - local RCg1 "Non-uniform" - } - if (dif_rc[`j',1] != . ) { - if (dif_rc[`j',2]!=0) { - local difft1 "Uniform" - } - else { - local difft1 "Non-uniform" - } - } - } - else { - if dif_rc[`j',6] != . { - local RCg0 " X " - } - if dif_rc[`j',8] != . { - local RCg1 " X " - } - if dif_rc[`j',1] != . { - local difft1 " X " - } - } - di as result _col(2) abbrev("``j''",15) as text _col(18) "`difft1'" _col(36) "`RC'" _col(54) "`RCg0'" _col(72) "`RCg1'" - } - di as result _col(2) "{hline 80}" - di -} -else if "`group'" != "" & "`nodif'" != "" { - di - di %~90s as result "SUMMARY" - di as result _col(10) "{hline 70}" - di as result _col(10) "Item" _col(26) "Recalibration" _col(46) "RC `gp' 0" _col(62) "RC `gp' 1" - di _col(10) "{hline 70}" - forvalues j=1/`nbitems' { - local RC - local RCg0 - local RCg1 - if (dif_rc[`j',3] != . & dif_rc[`j',3] != 0 & dif_rc[`j',4] == 0) { - local RC "Common" - } - if (dif_rc[`j',3] != . & dif_rc[`j',3] != 0 & dif_rc[`j',4] != 0) { - local RC "Differential" - } - if `nbmoda_`j'' > 2 { - if (dif_rc[`j',6]!=. & dif_rc[`j',6] != 0) { - local RCg0 "Uniform" - } - if (dif_rc[`j',6] == 0) { - local RCg0 "Non-uniform" - } - if (dif_rc[`j',8]!=. & dif_rc[`j',8] != 0) { - local RCg1 "Uniform" - } - if ( dif_rc[`j',8] == 0) { - local RCg1 "Non-uniform" - } - } - else { - if dif_rc[`j',6] != . { - local RCg0 " X " - } - if dif_rc[`j',8] != . { - local RCg1 " X " - } - } - di as result _col(10) "``j''" as text _col(26) "`RC'" _col(44) "`RCg0'" _col(62) "`RCg1'" - } - di as result _col(10) "{hline 70}" -} -else if "`group'" == "" { - di - di %~60s as result "SUMMARY" - di as result _col(10) "{hline 40}" - di _col(10) "Item" _col(36) "Recalibration" - di _col(10) "{hline 40}" - forvalues j=1/`nbitems' { - local RC - if dif_rc[`j',3] != . { - if `nbmoda_`j'' > 2 { - if (dif_rc[`j',6]!=. & dif_rc[`j',6] != 0) { - local RC "Uniform" - } - if (dif_rc[`j',6] == 0) { - local RC "Non-uniform" - } - } - else { - local RC " X " - } - } - di as result _col(10) "``j''" as text _col(38) "`RC'" - } - di as result _col(10) "{hline 40}" - di -} -matrix dif_detect = J(1,`nbitems',.) +matrix dif_detect = J(1,2*`nbitems',.) local numdif=1 forvalues j=1/`nbitems' { if dif_rc[`j',1] != . { matrix dif_detect[1,`numdif']=`j' + if dif_rc[`j',2] == 0 { + matrix dif_detect[1,`nbitems'+`numdif']=0 + } + if dif_rc[`j',2] != 0 { + matrix dif_detect[1,`nbitems'+`numdif']=1 + } local numdif = `numdif'+1 } } diff --git a/Modules/rosali_custom/rosali_nolrt.ado b/Modules/rosali_custom/rosali_nolrt.ado index 958f083..7373a3a 100644 --- a/Modules/rosali_custom/rosali_nolrt.ado +++ b/Modules/rosali_custom/rosali_nolrt.ado @@ -917,228 +917,19 @@ if "`group'"!="" & "`nodif'"=="" { // PARTIE 1 = Slmt si option group & pas de " local ++boucle } } - - /* MODELE FINAL DE LA PARTIE 1. Si DIFT1 détecté (=Au moins 2 boucles dans l'étape C)*/ - if `nb_stepC' > 1 { - forvalues j=1/`nbitems'{ - local model "" - local listconst "" - if dif_rc[`j',1]==. | dif_rc[`j',1]==0 { /*si pas de DIF: contraintes 1-200*/ - forvalues p=1/`nbdif_`j''{ - qui local listconst "`listconst' `=0+`maxdif'*(`j'-1)+`p''" - qui constraint list `=0+`maxdif'*(`j'-1)+`p'' - } - } - else { - if dif_rc[`j',2]!=. & dif_rc[`j',2]!=0 { /*DIF U: contraintes 201-400*/ - forvalues p=2/`nbdif_`j''{ - qui local listconst "`listconst' `=200+`maxdif'*(`j'-1)+`p''" - qui constraint list `=200+`maxdif'*(`j'-1)+`p'' - } - } - } - } - forvalues j=1/`nbitems'{ - forvalues p=1/`nbdif_`j''{ - local model "`model' (`p'.``j''<-THETA@`p')" - } - } - - qui gsem `model', mlogit tol(0.01) iterate(100) group(`gp') ginvariant(coef loading) var(0: THETA@v) var(1:THETA@v) constraint(`listconst') from(esti_B) latent(THETA) nocapslatent - /* Stockage des estimations du modèle */ - estimates store modeldifCFin - matrix val_mC = r(table) - - /* Calcul des difficultés d'item (delta_j) */ - matrix delta_mCFin=J(`nbitems',`=`nbdif_max'*2',.) - local name_partOneC "" - forvalues p=1/`nbdif_max' { - forvalues g=0/1 { - local name_partOneC "`name_partOneC' delta_`p'_gp`g'" - } - } - local name_partOneL "" - forvalues j=1/`nbitems' { - local name_partOneL "`name_partOneL' ``j''" - } - matrix colnames delta_mCFin = `name_partOneC' - matrix rownames delta_mCFin = `name_partOneL' - - matrix delta_mCFin_se=J(`nbitems',`=`nbdif_max'*2',.) - local name_partOneC_se "" - - forvalues p=1/`nbdif_max' { - forvalues g=0/1 { - local name_partOneC_se "`name_partOneC_se' delta_`p'_gp`g'_se" - } - } - matrix colnames delta_mCFin_se = `name_partOneC_se' - matrix rownames delta_mCFin_se = `name_partOneL' - - forvalues j=1/`nbitems'{ - forvalues p=1/`nbdif_`j''{ - forvalues g=0/1{ - qui lincom -[`p'.``j'']:`g'.`gp' - local delta`j'_`p'g`g'mCFin=r(estimate) - local delta`j'_`p'g`g'mCFin_se=r(se) - if `p'>1{ - qui lincom [`=`p'-1'.``j'']:`g'.`gp' - [`p'.``j'']:`g'.`gp' - local delta`j'_`p'g`g'mCFin = r(estimate) - local delta`j'_`p'g`g'mCFin_se = r(se) - } - matrix delta_mCFin[`j',`=2*`p'-1+`g'']=`delta`j'_`p'g`g'mCFin' - matrix delta_mCFin_se[`j',`=2*`p'-1+`g'']=`delta`j'_`p'g`g'mCFin_se' - } - } - } - if "`group'" != "" { //Variance et se mA - matrix var_mC = (val_mC[1,"/var(THETA)#0bn.`gp'"]\val_mC[2,"/var(THETA)#0bn.`gp'"]) - } - /*group effect*/ - qui lincom [/]:mean(THETA)#1.`gp'-[/]:mean(THETA)#0bn.`gp' - local geffmCFin=r(estimate) - local segeffmCFin=r(se) - qui test [/]:mean(THETA)#1.`gp'-[/]:mean(THETA)#0bn.`gp'=0 - local gcmCFinp=r(p) - local gcmCFinchi=r(chi2) - local gcmCFindf=r(df) - } -} - - ********************************* - *** BILAN *** - ********************************* - - if "`group'" != "" & "`nodif'" == "" { - di - di %~84s as result "SUMMARY" - di as result _col(2) "{hline 80}" - di as result _col(18) "Difference in" - di as result _col(2) "Item" _col(18) "groups at T1" _col(36) "Recalibration" _col(54) "RC " abbrev("`gp'",10) " 0" _col(72) "RC " abbrev("`gp'",10) " 1" - di as result _col(2) "{hline 80}" - forvalues j=1/`nbitems' { - local RC - local RCg0 - local RCg1 - local difft1 - if (dif_rc[`j',3] != . & dif_rc[`j',3] != 0 & dif_rc[`j',4] == 0) { - local RC "Common" - } - if (dif_rc[`j',3] != . & dif_rc[`j',3] != 0 & dif_rc[`j',4] != 0) { - local RC "Differential" - } - if `nbmoda_`j'' > 2 { - if (dif_rc[`j',6]!=. & dif_rc[`j',6] != 0) { - local RCg0 "Uniform" - } - if (dif_rc[`j',6] == 0) { - local RCg0 "Non-uniform" - } - if (dif_rc[`j',8]!=. & dif_rc[`j',8] != 0) { - local RCg1 "Uniform" - } - if ( dif_rc[`j',8] == 0) { - local RCg1 "Non-uniform" - } - if (dif_rc[`j',1] != . ) { - if (dif_rc[`j',2]!=0) { - local difft1 "Uniform" - } - else { - local difft1 "Non-uniform" - } - } - } - else { - if dif_rc[`j',6] != . { - local RCg0 " X " - } - if dif_rc[`j',8] != . { - local RCg1 " X " - } - if dif_rc[`j',1] != . { - local difft1 " X " - } - } - di as result _col(2) abbrev("``j''",15) as text _col(18) "`difft1'" _col(36) "`RC'" _col(54) "`RCg0'" _col(72) "`RCg1'" - } - di as result _col(2) "{hline 80}" - di -} -else if "`group'" != "" & "`nodif'" != "" { - di - di %~90s as result "SUMMARY" - di as result _col(10) "{hline 70}" - di as result _col(10) "Item" _col(26) "Recalibration" _col(46) "RC `gp' 0" _col(62) "RC `gp' 1" - di _col(10) "{hline 70}" - forvalues j=1/`nbitems' { - local RC - local RCg0 - local RCg1 - if (dif_rc[`j',3] != . & dif_rc[`j',3] != 0 & dif_rc[`j',4] == 0) { - local RC "Common" - } - if (dif_rc[`j',3] != . & dif_rc[`j',3] != 0 & dif_rc[`j',4] != 0) { - local RC "Differential" - } - if `nbmoda_`j'' > 2 { - if (dif_rc[`j',6]!=. & dif_rc[`j',6] != 0) { - local RCg0 "Uniform" - } - if (dif_rc[`j',6] == 0) { - local RCg0 "Non-uniform" - } - if (dif_rc[`j',8]!=. & dif_rc[`j',8] != 0) { - local RCg1 "Uniform" - } - if ( dif_rc[`j',8] == 0) { - local RCg1 "Non-uniform" - } - } - else { - if dif_rc[`j',6] != . { - local RCg0 " X " - } - if dif_rc[`j',8] != . { - local RCg1 " X " - } - } - di as result _col(10) "``j''" as text _col(26) "`RC'" _col(44) "`RCg0'" _col(62) "`RCg1'" - } - di as result _col(10) "{hline 70}" -} -else if "`group'" == "" { - di - di %~60s as result "SUMMARY" - di as result _col(10) "{hline 40}" - di _col(10) "Item" _col(36) "Recalibration" - di _col(10) "{hline 40}" - forvalues j=1/`nbitems' { - local RC - if dif_rc[`j',3] != . { - if `nbmoda_`j'' > 2 { - if (dif_rc[`j',6]!=. & dif_rc[`j',6] != 0) { - local RC "Uniform" - } - if (dif_rc[`j',6] == 0) { - local RC "Non-uniform" - } - } - else { - local RC " X " - } - } - di as result _col(10) "``j''" as text _col(38) "`RC'" - } - di as result _col(10) "{hline 40}" - di } -matrix dif_detect = J(1,`nbitems',.) +matrix dif_detect = J(1,2*`nbitems',.) local numdif=1 forvalues j=1/`nbitems' { if dif_rc[`j',1] != . { matrix dif_detect[1,`numdif']=`j' + if dif_rc[`j',2] == 0 { + matrix dif_detect[1,`nbitems'+`numdif']=0 + } + if dif_rc[`j',2] != 0 { + matrix dif_detect[1,`nbitems'+`numdif']=1 + } local numdif = `numdif'+1 } } diff --git a/Modules/rosali_custom/rosali_nolrt_nobf.ado b/Modules/rosali_custom/rosali_nolrt_nobf.ado index 1fe3c3d..3e2f832 100644 --- a/Modules/rosali_custom/rosali_nolrt_nobf.ado +++ b/Modules/rosali_custom/rosali_nolrt_nobf.ado @@ -917,228 +917,19 @@ if "`group'"!="" & "`nodif'"=="" { // PARTIE 1 = Slmt si option group & pas de " local ++boucle } } - - /* MODELE FINAL DE LA PARTIE 1. Si DIFT1 détecté (=Au moins 2 boucles dans l'étape C)*/ - if `nb_stepC' > 1 { - forvalues j=1/`nbitems'{ - local model "" - local listconst "" - if dif_rc[`j',1]==. | dif_rc[`j',1]==0 { /*si pas de DIF: contraintes 1-200*/ - forvalues p=1/`nbdif_`j''{ - qui local listconst "`listconst' `=0+`maxdif'*(`j'-1)+`p''" - qui constraint list `=0+`maxdif'*(`j'-1)+`p'' - } - } - else { - if dif_rc[`j',2]!=. & dif_rc[`j',2]!=0 { /*DIF U: contraintes 201-400*/ - forvalues p=2/`nbdif_`j''{ - qui local listconst "`listconst' `=200+`maxdif'*(`j'-1)+`p''" - qui constraint list `=200+`maxdif'*(`j'-1)+`p'' - } - } - } - } - forvalues j=1/`nbitems'{ - forvalues p=1/`nbdif_`j''{ - local model "`model' (`p'.``j''<-THETA@`p')" - } - } - - qui gsem `model', mlogit tol(0.01) iterate(100) group(`gp') ginvariant(coef loading) var(0: THETA@v) var(1:THETA@v) constraint(`listconst') from(esti_B) latent(THETA) nocapslatent - /* Stockage des estimations du modèle */ - estimates store modeldifCFin - matrix val_mC = r(table) - - /* Calcul des difficultés d'item (delta_j) */ - matrix delta_mCFin=J(`nbitems',`=`nbdif_max'*2',.) - local name_partOneC "" - forvalues p=1/`nbdif_max' { - forvalues g=0/1 { - local name_partOneC "`name_partOneC' delta_`p'_gp`g'" - } - } - local name_partOneL "" - forvalues j=1/`nbitems' { - local name_partOneL "`name_partOneL' ``j''" - } - matrix colnames delta_mCFin = `name_partOneC' - matrix rownames delta_mCFin = `name_partOneL' - - matrix delta_mCFin_se=J(`nbitems',`=`nbdif_max'*2',.) - local name_partOneC_se "" - - forvalues p=1/`nbdif_max' { - forvalues g=0/1 { - local name_partOneC_se "`name_partOneC_se' delta_`p'_gp`g'_se" - } - } - matrix colnames delta_mCFin_se = `name_partOneC_se' - matrix rownames delta_mCFin_se = `name_partOneL' - - forvalues j=1/`nbitems'{ - forvalues p=1/`nbdif_`j''{ - forvalues g=0/1{ - qui lincom -[`p'.``j'']:`g'.`gp' - local delta`j'_`p'g`g'mCFin=r(estimate) - local delta`j'_`p'g`g'mCFin_se=r(se) - if `p'>1{ - qui lincom [`=`p'-1'.``j'']:`g'.`gp' - [`p'.``j'']:`g'.`gp' - local delta`j'_`p'g`g'mCFin = r(estimate) - local delta`j'_`p'g`g'mCFin_se = r(se) - } - matrix delta_mCFin[`j',`=2*`p'-1+`g'']=`delta`j'_`p'g`g'mCFin' - matrix delta_mCFin_se[`j',`=2*`p'-1+`g'']=`delta`j'_`p'g`g'mCFin_se' - } - } - } - if "`group'" != "" { //Variance et se mA - matrix var_mC = (val_mC[1,"/var(THETA)#0bn.`gp'"]\val_mC[2,"/var(THETA)#0bn.`gp'"]) - } - /*group effect*/ - qui lincom [/]:mean(THETA)#1.`gp'-[/]:mean(THETA)#0bn.`gp' - local geffmCFin=r(estimate) - local segeffmCFin=r(se) - qui test [/]:mean(THETA)#1.`gp'-[/]:mean(THETA)#0bn.`gp'=0 - local gcmCFinp=r(p) - local gcmCFinchi=r(chi2) - local gcmCFindf=r(df) - } -} - - ********************************* - *** BILAN *** - ********************************* - - if "`group'" != "" & "`nodif'" == "" { - di - di %~84s as result "SUMMARY" - di as result _col(2) "{hline 80}" - di as result _col(18) "Difference in" - di as result _col(2) "Item" _col(18) "groups at T1" _col(36) "Recalibration" _col(54) "RC " abbrev("`gp'",10) " 0" _col(72) "RC " abbrev("`gp'",10) " 1" - di as result _col(2) "{hline 80}" - forvalues j=1/`nbitems' { - local RC - local RCg0 - local RCg1 - local difft1 - if (dif_rc[`j',3] != . & dif_rc[`j',3] != 0 & dif_rc[`j',4] == 0) { - local RC "Common" - } - if (dif_rc[`j',3] != . & dif_rc[`j',3] != 0 & dif_rc[`j',4] != 0) { - local RC "Differential" - } - if `nbmoda_`j'' > 2 { - if (dif_rc[`j',6]!=. & dif_rc[`j',6] != 0) { - local RCg0 "Uniform" - } - if (dif_rc[`j',6] == 0) { - local RCg0 "Non-uniform" - } - if (dif_rc[`j',8]!=. & dif_rc[`j',8] != 0) { - local RCg1 "Uniform" - } - if ( dif_rc[`j',8] == 0) { - local RCg1 "Non-uniform" - } - if (dif_rc[`j',1] != . ) { - if (dif_rc[`j',2]!=0) { - local difft1 "Uniform" - } - else { - local difft1 "Non-uniform" - } - } - } - else { - if dif_rc[`j',6] != . { - local RCg0 " X " - } - if dif_rc[`j',8] != . { - local RCg1 " X " - } - if dif_rc[`j',1] != . { - local difft1 " X " - } - } - di as result _col(2) abbrev("``j''",15) as text _col(18) "`difft1'" _col(36) "`RC'" _col(54) "`RCg0'" _col(72) "`RCg1'" - } - di as result _col(2) "{hline 80}" - di -} -else if "`group'" != "" & "`nodif'" != "" { - di - di %~90s as result "SUMMARY" - di as result _col(10) "{hline 70}" - di as result _col(10) "Item" _col(26) "Recalibration" _col(46) "RC `gp' 0" _col(62) "RC `gp' 1" - di _col(10) "{hline 70}" - forvalues j=1/`nbitems' { - local RC - local RCg0 - local RCg1 - if (dif_rc[`j',3] != . & dif_rc[`j',3] != 0 & dif_rc[`j',4] == 0) { - local RC "Common" - } - if (dif_rc[`j',3] != . & dif_rc[`j',3] != 0 & dif_rc[`j',4] != 0) { - local RC "Differential" - } - if `nbmoda_`j'' > 2 { - if (dif_rc[`j',6]!=. & dif_rc[`j',6] != 0) { - local RCg0 "Uniform" - } - if (dif_rc[`j',6] == 0) { - local RCg0 "Non-uniform" - } - if (dif_rc[`j',8]!=. & dif_rc[`j',8] != 0) { - local RCg1 "Uniform" - } - if ( dif_rc[`j',8] == 0) { - local RCg1 "Non-uniform" - } - } - else { - if dif_rc[`j',6] != . { - local RCg0 " X " - } - if dif_rc[`j',8] != . { - local RCg1 " X " - } - } - di as result _col(10) "``j''" as text _col(26) "`RC'" _col(44) "`RCg0'" _col(62) "`RCg1'" - } - di as result _col(10) "{hline 70}" -} -else if "`group'" == "" { - di - di %~60s as result "SUMMARY" - di as result _col(10) "{hline 40}" - di _col(10) "Item" _col(36) "Recalibration" - di _col(10) "{hline 40}" - forvalues j=1/`nbitems' { - local RC - if dif_rc[`j',3] != . { - if `nbmoda_`j'' > 2 { - if (dif_rc[`j',6]!=. & dif_rc[`j',6] != 0) { - local RC "Uniform" - } - if (dif_rc[`j',6] == 0) { - local RC "Non-uniform" - } - } - else { - local RC " X " - } - } - di as result _col(10) "``j''" as text _col(38) "`RC'" - } - di as result _col(10) "{hline 40}" - di } -matrix dif_detect = J(1,`nbitems',.) +matrix dif_detect = J(1,2*`nbitems',.) local numdif=1 forvalues j=1/`nbitems' { if dif_rc[`j',1] != . { matrix dif_detect[1,`numdif']=`j' + if dif_rc[`j',2] == 0 { + matrix dif_detect[1,`nbitems'+`numdif']=0 + } + if dif_rc[`j',2] != 0 { + matrix dif_detect[1,`nbitems'+`numdif']=1 + } local numdif = `numdif'+1 } } diff --git a/Modules/rosali_custom/rosali_original.ado b/Modules/rosali_custom/rosali_original.ado index 0b60694..c7aa6c3 100644 --- a/Modules/rosali_custom/rosali_original.ado +++ b/Modules/rosali_custom/rosali_original.ado @@ -460,59 +460,6 @@ qui count local nbpat = r(N) -/********************************* -* AFFICHAGE INITIAL -*********************************/ -di -di _col(5) "{hline 78}" -di _col(15) "Time 1" _col(42) "Time 2" _col(65) "Nb of Answer Cat." -di _col(5) "{hline 78}" -forvalues j=1/`nbitems' { - di as text _col(15) abbrev("``j''",20) _col(42) abbrev("``=`j'+`nbitems'''",20) _col(65) `nbmoda_`j'' -} -di _col(5) "{hline 78}" -if "`group'" != "" { - di _col(10) "Nb of patients: " abbrev("`gp'",20) " 0 = `nbp_gp0' ;", abbrev("`gp'",20) " 1 = `nbp_gp1'" - di _col(5) "{hline 78}" -} -else { - di _col(10) "Nb. of patients: `nbpat'" - di _col(5) "{hline 78}" -} -di -if `nbitems' == 1 { - di as error "The analysis can only be performed with at least 2 items." - error 198 - exit -} -forvalues j = 1/`nbitems' { - if `nbmoda_`j'' == 2 { - di "WARNING: ``j'' has only 2 response categories, no distinction can be made between uniform or non-uniform recalibration." - } - if `nbmoda_`j'' == 1 { - di as error "Only `nbmoda_`j'' response categories of item ``j'' were used by the sample, the analysis cannot be performed." - error 198 - exit - } - if `nbmoda_`j'' == 0 { - di as error "No response categories of item ``j'' were used by the sample, the analysis cannot be performed." - error 198 - exit - } -} -di -if "`group'" != "" { - di _col(2) as text "For all models : - mean of the latent trait in `gp' 0 at time 1 is constrained at 0" - di _col(19) "- equality of variances between groups" - di -} -else { - di _col(2) as text "For all models : mean of the latent trait at time 1 is constrained at 0" - di -} - - - /********************************* * DEFINITION DES CONTRAINTES *********************************/ @@ -786,15 +733,6 @@ if "`group'"!="" & "`nodif'"=="" { // PARTIE 1 = Slmt si option group & pas de " local nbsig=0 local minpval=1 local itemdif=0 - if "`detail'" != ""{ - - di as text "Loop `boucle'" - di as text _col(5) "Adjusted alpha: " %6.4f `pajust' - di - di as text _col(10) "{hline 65}" - di as text _col(10) "Freed item" _col(31) "Chi-Square" _col(48) "DF" _col(57) "P-Value" - di as text _col(10) "{hline 65}" - } /*boucle de test*/ forvalues j=1/`nbitems'{ //if `nbdif_`j'' > 2 { @@ -918,228 +856,19 @@ if "`group'"!="" & "`nodif'"=="" { // PARTIE 1 = Slmt si option group & pas de " local ++boucle } } - - /* MODELE FINAL DE LA PARTIE 1. Si DIFT1 détecté (=Au moins 2 boucles dans l'étape C)*/ - if `nb_stepC' > 1 { - forvalues j=1/`nbitems'{ - local model "" - local listconst "" - if dif_rc[`j',1]==. | dif_rc[`j',1]==0 { /*si pas de DIF: contraintes 1-200*/ - forvalues p=1/`nbdif_`j''{ - qui local listconst "`listconst' `=0+`maxdif'*(`j'-1)+`p''" - qui constraint list `=0+`maxdif'*(`j'-1)+`p'' - } - } - else { - if dif_rc[`j',2]!=. & dif_rc[`j',2]!=0 { /*DIF U: contraintes 201-400*/ - forvalues p=2/`nbdif_`j''{ - qui local listconst "`listconst' `=200+`maxdif'*(`j'-1)+`p''" - qui constraint list `=200+`maxdif'*(`j'-1)+`p'' - } - } - } - } - forvalues j=1/`nbitems'{ - forvalues p=1/`nbdif_`j''{ - local model "`model' (`p'.``j''<-THETA@`p')" - } - } - - qui gsem `model', mlogit tol(0.01) iterate(100) group(`gp') ginvariant(coef loading) var(0: THETA@v) var(1:THETA@v) constraint(`listconst') from(esti_B) latent(THETA) nocapslatent - /* Stockage des estimations du modèle */ - estimates store modeldifCFin - matrix val_mC = r(table) - - /* Calcul des difficultés d'item (delta_j) */ - matrix delta_mCFin=J(`nbitems',`=`nbdif_max'*2',.) - local name_partOneC "" - forvalues p=1/`nbdif_max' { - forvalues g=0/1 { - local name_partOneC "`name_partOneC' delta_`p'_gp`g'" - } - } - local name_partOneL "" - forvalues j=1/`nbitems' { - local name_partOneL "`name_partOneL' ``j''" - } - matrix colnames delta_mCFin = `name_partOneC' - matrix rownames delta_mCFin = `name_partOneL' - - matrix delta_mCFin_se=J(`nbitems',`=`nbdif_max'*2',.) - local name_partOneC_se "" - - forvalues p=1/`nbdif_max' { - forvalues g=0/1 { - local name_partOneC_se "`name_partOneC_se' delta_`p'_gp`g'_se" - } - } - matrix colnames delta_mCFin_se = `name_partOneC_se' - matrix rownames delta_mCFin_se = `name_partOneL' - - forvalues j=1/`nbitems'{ - forvalues p=1/`nbdif_`j''{ - forvalues g=0/1{ - qui lincom -[`p'.``j'']:`g'.`gp' - local delta`j'_`p'g`g'mCFin=r(estimate) - local delta`j'_`p'g`g'mCFin_se=r(se) - if `p'>1{ - qui lincom [`=`p'-1'.``j'']:`g'.`gp' - [`p'.``j'']:`g'.`gp' - local delta`j'_`p'g`g'mCFin = r(estimate) - local delta`j'_`p'g`g'mCFin_se = r(se) - } - matrix delta_mCFin[`j',`=2*`p'-1+`g'']=`delta`j'_`p'g`g'mCFin' - matrix delta_mCFin_se[`j',`=2*`p'-1+`g'']=`delta`j'_`p'g`g'mCFin_se' - } - } - } - if "`group'" != "" { //Variance et se mA - matrix var_mC = (val_mC[1,"/var(THETA)#0bn.`gp'"]\val_mC[2,"/var(THETA)#0bn.`gp'"]) - } - /*group effect*/ - qui lincom [/]:mean(THETA)#1.`gp'-[/]:mean(THETA)#0bn.`gp' - local geffmCFin=r(estimate) - local segeffmCFin=r(se) - qui test [/]:mean(THETA)#1.`gp'-[/]:mean(THETA)#0bn.`gp'=0 - local gcmCFinp=r(p) - local gcmCFinchi=r(chi2) - local gcmCFindf=r(df) - } -} - - ********************************* - *** BILAN *** - ********************************* - - if "`group'" != "" & "`nodif'" == "" { - di - di %~84s as result "SUMMARY" - di as result _col(2) "{hline 80}" - di as result _col(18) "Difference in" - di as result _col(2) "Item" _col(18) "groups at T1" _col(36) "Recalibration" _col(54) "RC " abbrev("`gp'",10) " 0" _col(72) "RC " abbrev("`gp'",10) " 1" - di as result _col(2) "{hline 80}" - forvalues j=1/`nbitems' { - local RC - local RCg0 - local RCg1 - local difft1 - if (dif_rc[`j',3] != . & dif_rc[`j',3] != 0 & dif_rc[`j',4] == 0) { - local RC "Common" - } - if (dif_rc[`j',3] != . & dif_rc[`j',3] != 0 & dif_rc[`j',4] != 0) { - local RC "Differential" - } - if `nbmoda_`j'' > 2 { - if (dif_rc[`j',6]!=. & dif_rc[`j',6] != 0) { - local RCg0 "Uniform" - } - if (dif_rc[`j',6] == 0) { - local RCg0 "Non-uniform" - } - if (dif_rc[`j',8]!=. & dif_rc[`j',8] != 0) { - local RCg1 "Uniform" - } - if ( dif_rc[`j',8] == 0) { - local RCg1 "Non-uniform" - } - if (dif_rc[`j',1] != . ) { - if (dif_rc[`j',2]!=0) { - local difft1 "Uniform" - } - else { - local difft1 "Non-uniform" - } - } - } - else { - if dif_rc[`j',6] != . { - local RCg0 " X " - } - if dif_rc[`j',8] != . { - local RCg1 " X " - } - if dif_rc[`j',1] != . { - local difft1 " X " - } - } - di as result _col(2) abbrev("``j''",15) as text _col(18) "`difft1'" _col(36) "`RC'" _col(54) "`RCg0'" _col(72) "`RCg1'" - } - di as result _col(2) "{hline 80}" - di -} -else if "`group'" != "" & "`nodif'" != "" { - di - di %~90s as result "SUMMARY" - di as result _col(10) "{hline 70}" - di as result _col(10) "Item" _col(26) "Recalibration" _col(46) "RC `gp' 0" _col(62) "RC `gp' 1" - di _col(10) "{hline 70}" - forvalues j=1/`nbitems' { - local RC - local RCg0 - local RCg1 - if (dif_rc[`j',3] != . & dif_rc[`j',3] != 0 & dif_rc[`j',4] == 0) { - local RC "Common" - } - if (dif_rc[`j',3] != . & dif_rc[`j',3] != 0 & dif_rc[`j',4] != 0) { - local RC "Differential" - } - if `nbmoda_`j'' > 2 { - if (dif_rc[`j',6]!=. & dif_rc[`j',6] != 0) { - local RCg0 "Uniform" - } - if (dif_rc[`j',6] == 0) { - local RCg0 "Non-uniform" - } - if (dif_rc[`j',8]!=. & dif_rc[`j',8] != 0) { - local RCg1 "Uniform" - } - if ( dif_rc[`j',8] == 0) { - local RCg1 "Non-uniform" - } - } - else { - if dif_rc[`j',6] != . { - local RCg0 " X " - } - if dif_rc[`j',8] != . { - local RCg1 " X " - } - } - di as result _col(10) "``j''" as text _col(26) "`RC'" _col(44) "`RCg0'" _col(62) "`RCg1'" - } - di as result _col(10) "{hline 70}" -} -else if "`group'" == "" { - di - di %~60s as result "SUMMARY" - di as result _col(10) "{hline 40}" - di _col(10) "Item" _col(36) "Recalibration" - di _col(10) "{hline 40}" - forvalues j=1/`nbitems' { - local RC - if dif_rc[`j',3] != . { - if `nbmoda_`j'' > 2 { - if (dif_rc[`j',6]!=. & dif_rc[`j',6] != 0) { - local RC "Uniform" - } - if (dif_rc[`j',6] == 0) { - local RC "Non-uniform" - } - } - else { - local RC " X " - } - } - di as result _col(10) "``j''" as text _col(38) "`RC'" - } - di as result _col(10) "{hline 40}" - di } -matrix dif_detect = J(1,`nbitems',.) +matrix dif_detect = J(1,2*`nbitems',.) local numdif=1 forvalues j=1/`nbitems' { if dif_rc[`j',1] != . { matrix dif_detect[1,`numdif']=`j' + if dif_rc[`j',2] == 0 { + matrix dif_detect[1,`nbitems'+`numdif']=0 + } + if dif_rc[`j',2] != 0 { + matrix dif_detect[1,`nbitems'+`numdif']=1 + } local numdif = `numdif'+1 } } diff --git a/Scripts/ROSALI-SIM.do b/Scripts/ROSALI-SIM.do index 3cc9030..9d1d471 100644 --- a/Scripts/ROSALI-SIM.do +++ b/Scripts/ROSALI-SIM.do @@ -53,7 +53,7 @@ adopath+"/home/corentin/Documents/These/Recherche/ROSALI-SIM/Modules/rosali_cust else { local nbdif=3 } - local taillemat=`nbitems'+3+`nbdif' + local taillemat=2*`nbitems'+3+`nbdif' mat outmat = J(1000,`taillemat',.) di "Scenario `s'`scen' / N=`Nnn'" @@ -65,27 +65,28 @@ adopath+"/home/corentin/Documents/These/Recherche/ROSALI-SIM/Modules/rosali_cust qui keep if replication==`k' qui rosali_original item1-item`nbitems' item1-item`nbitems', group(TT) qui mat resmat=r(difitems) - forvalues jj=1/`nbitems' { + local nbitems2 = 2*`nbitems' + forvalues jj=1/`nbitems2' { qui mat outmat[`k',`jj']=resmat[1,`jj'] } - qui mat outmat[`k',`nbitems'+1]=`Nn' - qui mat outmat[`k',`nbitems'+2]=`nbitems' - qui mat outmat[`k',`nbitems'+3]=`nbdif' + qui mat outmat[`k',2*`nbitems'+1]=`Nn' + qui mat outmat[`k',2*`nbitems'+2]=`nbitems' + qui mat outmat[`k',2*`nbitems'+3]=`nbdif' if (`nbdif' > 0) { qui levelsof dif1 local ldif1 = r(levels) local diff1: word 1 of `ldif1' - qui mat outmat[`k',`nbitems'+4]=`diff1' + qui mat outmat[`k',2*`nbitems'+4]=`diff1' if (`nbdif' > 1) { qui levelsof dif2 local ldif2 = r(levels) local diff2: word 1 of `ldif2' - qui mat outmat[`k',`nbitems'+5]=`diff2' + qui mat outmat[`k',2*`nbitems'+5]=`diff2' if (`nbdif' > 2) { qui levelsof dif3 local ldif3 = r(levels) local diff3: word 1 of `ldif3' - qui mat outmat[`k',`nbitems'+6]=`diff3' + qui mat outmat[`k',2*`nbitems'+6]=`diff3' } } } @@ -137,7 +138,7 @@ adopath+"/home/corentin/Documents/These/Recherche/ROSALI-SIM/Modules/rosali_cust else { local nbdif=3 } - local taillemat=`nbitems'+3+`nbdif' + local taillemat=2*`nbitems'+3+`nbdif' mat outmat = J(1000,`taillemat',.) di "Scenario `s'`scen' / N=`Nnn'" @@ -149,27 +150,28 @@ adopath+"/home/corentin/Documents/These/Recherche/ROSALI-SIM/Modules/rosali_cust qui keep if replication==`k' qui rosali_nobf item1-item`nbitems' item1-item`nbitems', group(TT) qui mat resmat=r(difitems) - forvalues jj=1/`nbitems' { + local nbitems2 = 2*`nbitems' + forvalues jj=1/`nbitems2' { qui mat outmat[`k',`jj']=resmat[1,`jj'] } - qui mat outmat[`k',`nbitems'+1]=`Nn' - qui mat outmat[`k',`nbitems'+2]=`nbitems' - qui mat outmat[`k',`nbitems'+3]=`nbdif' + qui mat outmat[`k',2*`nbitems'+1]=`Nn' + qui mat outmat[`k',2*`nbitems'+2]=`nbitems' + qui mat outmat[`k',2*`nbitems'+3]=`nbdif' if (`nbdif' > 0) { qui levelsof dif1 local ldif1 = r(levels) local diff1: word 1 of `ldif1' - qui mat outmat[`k',`nbitems'+4]=`diff1' + qui mat outmat[`k',2*`nbitems'+4]=`diff1' if (`nbdif' > 1) { qui levelsof dif2 local ldif2 = r(levels) local diff2: word 1 of `ldif2' - qui mat outmat[`k',`nbitems'+5]=`diff2' + qui mat outmat[`k',2*`nbitems'+5]=`diff2' if (`nbdif' > 2) { qui levelsof dif3 local ldif3 = r(levels) local diff3: word 1 of `ldif3' - qui mat outmat[`k',`nbitems'+6]=`diff3' + qui mat outmat[`k',2*`nbitems'+6]=`diff3' } } } @@ -221,7 +223,7 @@ adopath+"/home/corentin/Documents/These/Recherche/ROSALI-SIM/Modules/rosali_cust else { local nbdif=3 } - local taillemat=`nbitems'+3+`nbdif' + local taillemat=2*`nbitems'+3+`nbdif' mat outmat = J(1000,`taillemat',.) di "Scenario `s'`scen' / N=`Nnn'" @@ -233,27 +235,28 @@ adopath+"/home/corentin/Documents/These/Recherche/ROSALI-SIM/Modules/rosali_cust qui keep if replication==`k' qui rosali_nolrt item1-item`nbitems' item1-item`nbitems', group(TT) qui mat resmat=r(difitems) - forvalues jj=1/`nbitems' { + local nbitems2 = 2*`nbitems' + forvalues jj=1/`nbitems2' { qui mat outmat[`k',`jj']=resmat[1,`jj'] } - qui mat outmat[`k',`nbitems'+1]=`Nn' - qui mat outmat[`k',`nbitems'+2]=`nbitems' - qui mat outmat[`k',`nbitems'+3]=`nbdif' + qui mat outmat[`k',2*`nbitems'+1]=`Nn' + qui mat outmat[`k',2*`nbitems'+2]=`nbitems' + qui mat outmat[`k',2*`nbitems'+3]=`nbdif' if (`nbdif' > 0) { qui levelsof dif1 local ldif1 = r(levels) local diff1: word 1 of `ldif1' - qui mat outmat[`k',`nbitems'+4]=`diff1' + qui mat outmat[`k',2*`nbitems'+4]=`diff1' if (`nbdif' > 1) { qui levelsof dif2 local ldif2 = r(levels) local diff2: word 1 of `ldif2' - qui mat outmat[`k',`nbitems'+5]=`diff2' + qui mat outmat[`k',2*`nbitems'+5]=`diff2' if (`nbdif' > 2) { qui levelsof dif3 local ldif3 = r(levels) local diff3: word 1 of `ldif3' - qui mat outmat[`k',`nbitems'+6]=`diff3' + qui mat outmat[`k',2*`nbitems'+6]=`diff3' } } } @@ -304,7 +307,7 @@ adopath+"/home/corentin/Documents/These/Recherche/ROSALI-SIM/Modules/rosali_cust else { local nbdif=3 } - local taillemat=`nbitems'+3+`nbdif' + local taillemat=2*`nbitems'+3+`nbdif' mat outmat = J(1000,`taillemat',.) di "Scenario `s'`scen' / N=`Nnn'" @@ -316,27 +319,28 @@ adopath+"/home/corentin/Documents/These/Recherche/ROSALI-SIM/Modules/rosali_cust qui keep if replication==`k' qui rosali_nolrt_nobf item1-item`nbitems' item1-item`nbitems', group(TT) qui mat resmat=r(difitems) - forvalues jj=1/`nbitems' { + local nbitems2 = 2*`nbitems' + forvalues jj=1/`nbitems2' { qui mat outmat[`k',`jj']=resmat[1,`jj'] } - qui mat outmat[`k',`nbitems'+1]=`Nn' - qui mat outmat[`k',`nbitems'+2]=`nbitems' - qui mat outmat[`k',`nbitems'+3]=`nbdif' + qui mat outmat[`k',2*`nbitems'+1]=`Nn' + qui mat outmat[`k',2*`nbitems'+2]=`nbitems' + qui mat outmat[`k',2*`nbitems'+3]=`nbdif' if (`nbdif' > 0) { qui levelsof dif1 local ldif1 = r(levels) local diff1: word 1 of `ldif1' - qui mat outmat[`k',`nbitems'+4]=`diff1' + qui mat outmat[`k',2*`nbitems'+4]=`diff1' if (`nbdif' > 1) { qui levelsof dif2 local ldif2 = r(levels) local diff2: word 1 of `ldif2' - qui mat outmat[`k',`nbitems'+5]=`diff2' + qui mat outmat[`k',2*`nbitems'+5]=`diff2' if (`nbdif' > 2) { qui levelsof dif3 local ldif3 = r(levels) local diff3: word 1 of `ldif3' - qui mat outmat[`k',`nbitems'+6]=`diff3' + qui mat outmat[`k',2*`nbitems'+6]=`diff3' } } }