|
|
|
@ -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
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|