diff --git a/RProject/.Rhistory b/RProject/.Rhistory
index 775b215..b38fa25 100644
--- a/RProject/.Rhistory
+++ b/RProject/.Rhistory
@@ -1,22 +1,3 @@
-lines(unique(plot.dat[plot.dat$scenario %in% c("3B",'3D'),]$N),
-unique(plot.dat[plot.dat$scenario %in% c("3B",'3D'),]$theoretical.power),col='#a12471',lty=4)
-lines(unique(plot.dat[plot.dat$scenario %in% c("4B",'4D'),]$N),
-unique(plot.dat[plot.dat$scenario %in% c("4B",'4D'),]$theoretical.power),col='#a12471',lty=4)
-lines(unique(plot.dat[plot.dat$scenario %in% c("1C",'1E'),]$N),
-unique(plot.dat[plot.dat$scenario %in% c("1C",'1E'),]$theoretical.power),col='#9b6541',lty=4)
-lines(unique(plot.dat[plot.dat$scenario %in% c("2C",'2E'),]$N),
-unique(plot.dat[plot.dat$scenario %in% c("2C",'2E'),]$theoretical.power),col='#9b6541',lty=4)
-lines(unique(plot.dat[plot.dat$scenario %in% c("3C",'3E'),]$N),
-unique(plot.dat[plot.dat$scenario %in% c("3C",'3E'),]$theoretical.power),col='#1a342b',lty=4)
-lines(unique(plot.dat[plot.dat$scenario %in% c("4C",'4E'),]$N),
-unique(plot.dat[plot.dat$scenario %in% c("4C",'4E'),]$theoretical.power),col='#1a342b',lty=4)
-points(unique(plot.dat[plot.dat$scenario %in% c("1A",'1A'),]$N),
-rep(unique(plot.dat[plot.dat$scenario %in% c("1A",'1A'),]$theoretical.power),3),col='#03a18a',pch=17)
-points(unique(plot.dat[plot.dat$scenario %in% c("1B",'1D'),]$N),
-unique(plot.dat[plot.dat$scenario %in% c("1B",'1D'),]$theoretical.power),col='#c0c23b',pch=17)
-points(unique(plot.dat[plot.dat$scenario %in% c("2B",'2D'),]$N),
-unique(plot.dat[plot.dat$scenario %in% c("2B",'2D'),]$theoretical.power),col='#c0c23b',pch=17)
-points(unique(plot.dat[plot.dat$scenario %in% c("3B",'3D'),]$N),
 unique(plot.dat[plot.dat$scenario %in% c("3B",'3D'),]$theoretical.power),col='#a12471',pch=17)
 points(unique(plot.dat[plot.dat$scenario %in% c("4B",'4D'),]$N),
 unique(plot.dat[plot.dat$scenario %in% c("4B",'4D'),]$theoretical.power),col='#a12471',pch=17)
@@ -510,3 +491,22 @@ mean(aaaa$dif2_3,na.rm = T)
 mean(aaaa$dif1_3,na.rm = T)
 mean(aaaa$dif1_1,na.rm = T)
 aaaa
+aaaa <- read_excel("/home/corentin/Documents/These/Recherche/Simulations/Analysis/DIF/N50/out/10A_50.xls")
+library(TAM)
+library(doMC)
+library(parallel)
+library(pbmcapply)
+library(funprog)
+library(dplyr)
+library(readxl)
+aaaa <- read_excel("/home/corentin/Documents/These/Recherche/Simulations/Analysis/DIF/N50/out/10A_50.xls")
+mean(aaaa$item1_3,na.rm = T)
+mean(aaaa$item2_3,na.rm = T)
+mean(aaaa$item3_3,na.rm = T)
+mean(aaaa$item4_3,na.rm = T)
+mean(aaaa$item4_2,na.rm = T)
+mean(aaaa$item1_2,na.rm = T)
+mean(aaaa$item1_1,na.rm = T)
+mean(aaaa$item1_2,na.rm = T)-mean(aaaa$item1_1,na.rm = T)
+mean(aaaa$item1_3,na.rm = T)-mean(aaaa$item1_2,na.rm = T)
+mean(aaaa$item4_3,na.rm = T)-mean(aaaa$item4_2,na.rm = T)
diff --git a/Scripts/Analysis/DIF/pcm_dif_50.do b/Scripts/Analysis/DIF/pcm_dif_50.do
index 76f4811..8f04041 100644
--- a/Scripts/Analysis/DIF/pcm_dif_50.do
+++ b/Scripts/Analysis/DIF/pcm_dif_50.do
@@ -989,7 +989,7 @@ rename TT tt
 * Matrice de taille 1000 * 4 items + 1 DIF + beta + std beta + 1 dif
 local nbitems = 4
 local nbdif = 2
-local taillemat = 3*`nbitems'+6+2+`nbdif'
+local taillemat = 3*`nbitems'+`nbdif'+6+2
 mat outmat = J(1000,`taillemat',.)
 mat colnames outmat = "item1_1" "item1_2" "item1_3" "item2_1" "item2_2" "item2_3" "item3_1" "item3_2" "item3_3" "item4_1" "item4_2" "item4_3" "dif1_1" "dif1_2" "dif1_3" "dif2_1" "dif2_2" "dif2_3" "beta" "se_beta" "dif_item_1" "dif_item_2"
 di "Scenario 12`scen' / N=`Nnn'"
@@ -999,91 +999,297 @@ forvalues k=1/1000 {
   }
   preserve
   qui keep if replication==`k'
+
+
+* MERGE des modalités si non représentées
+    local com_z = 0
+    qui gen comz = 0
+    forvalues j = 1 / `nbitems' {
+    local recoda_`j' = 0
+    qui tab item`j' if tt == 0, matrow(rect1_g0_`j') matcell(nbrt1_g0_`j')
+    local maxm`j'_t1_g0 = rect1_g0_`j'[r(r),1]
+    local minm`j'_t1_g0 = rect1_g0_`j'[1,1]
+
+    qui tab item`j' if tt == 1, matrow(rect1_g1_`j') matcell(nbrt1_g1_`j')
+    local minm`j'_t1_g1 = rect1_g1_`j'[1,1]
+    local maxm`j'_t1_g1 = rect1_g1_`j'[r(r),1]
+
+    local minm_`j' = min(`minm`j'_t1_g0',`minm`j'_t1_g1')
+    local maxm_`j' = max(`maxm`j'_t1_g0',`maxm`j'_t1_g1')
+    local nbm_`j' =  `=`maxm_`j''-`minm_`j'''
+
+    if `minm_`j'' != 0 & `com_z' == 0 {
+      local com_z = 1
+    }
+
+    qui count if item`j' == 3 & tt == 0
+    local mod3plac = r(N)
+    qui count if item`j' == 3 & tt == 1
+    local mod3tt = r(N)
+    local nb_rn3 = min(`mod3plac',`mod3tt')
+    if `nb_rn3'==0 {
+      qui replace comz = 1
+    }
+
+    forvalues m = 0/`=`nbm_`j''-1' {
+      qui count if item`j' == `m' & tt == 0
+      local nb_rn1_g0 = r(N)
+      qui count if item`j' == `m' & tt == 1
+      local nb_rn1_g1 = r(N)
+      local nb_rn = min(`nb_rn1_g0',`nb_rn1_g1')
+      if `nb_rn' == 0 {
+        qui replace comz = 1
+        local recoda_`j' = 1
+        if  `m' == 0 | `m' < `minm`j'_t1_g0' | `m' < `minm`j'_t1_g1' {
+          local stop = 1
+          forvalues kk = 1/`=`nbm_`j''-`m'' {
+            qui count if item`j' == `=`m' + `kk'' & tt == 0
+            local v`kk'1_0 = r(N)
+            qui count if item`j' == `=`m' + `kk'' & tt == 1
+            local v`kk'1_1 = r(N)
+            if (`v`kk'1_0' != 0 | `v`kk'1_1' != 0) & `stop' != 0 {
+              qui replace item`j'= `=`m'+`kk'' if item`j'==`m'
+              local zzz=`j'+`nbitems'
+              *qui replace item`zzz'=`=`m'+`kk'' if item``=`j'+`nbitems'''==`m'
+              *di  "WARNING SCENARIO `k': items `j': answers `m' and `=`m'+`kk'' merged"
+              local stop = 0
+            }
+          }
+        }
+        else if `m' == `=`nbm_`j''-1' | `m' >= `maxm`j'_t1_g1' {
+          local stop = 1
+          forvalues kk = 1/`=`m'' {
+            qui count if item`j' == `=`m' - `kk'' & tt == 0
+            local v`kk'1_0 = r(N)
+            qui count if item`j' == `=`m' - `kk'' & tt == 1
+            local v`kk'1_1 = r(N)
+            if (`v`kk'1_0' != 0 | `v`kk'1_1' != 0) & `stop' != 0 {
+              qui replace item`j'= `=`m' - `kk'' if item`j'==`m'
+              local zzz=`j'+`nbitems'
+              *qui replace item`zzz'= `=`m' - `kk'' if item`zzz'==`m'
+              *di  "WARNING SCENARIO `k': items `j': answers `m' and `=`m'+`kk'' merged"
+              local stop = 0
+            }
+          }
+        }
+        else {
+          if runiform()>0.5{
+            local stop = 1
+            forvalues kk = 1/`m' {
+              qui count if item`j' == `=`m' - `kk'' & tt == 0
+              local v`kk'1_0 = r(N)
+              qui count if item`j' == `=`m' - `kk'' & tt == 1
+              local v`kk'1_1 = r(N)
+              if (`v`kk'1_0' != 0 | `v`kk'1_1' != 0) & `stop' != 0 {
+                qui replace item`j'= `=`m'-`kk'' if item`j'==`m'
+                local zzz=`j'+`nbitems'
+                *qui replace item`zzz'=`=`m'-`kk'' if item``=`j'+`nbitems'''==`m'
+                *di  "WARNING SCENARIO `k': items `j': answers `m' and `=`m'+`kk'' merged"
+                local stop = 0
+              }
+            }
+          }
+          else {
+            local stop = 1
+            forvalues kk = 1/`=`nbm_`j''-`m'' {
+              qui count if item`j' == `=`m' + `kk'' & tt == 0
+              local v`kk'1_0 = r(N)
+              qui count if item`j' == `=`m' + `kk'' & tt == 1
+              local v`kk'1_1 = r(N)
+              if (`v`kk'1_0' != 0 | `v`kk'1_1' != 0) & `stop' != 0{
+                qui replace item`j'=`=`m' + `kk'' if item`j'==`m'
+                local zzz=`j'+`nbitems'
+                *qui replace item`zzz'=`=`m' + `kk'' if item``=`j'+`nbitems'''==`m'
+                *di  "WARNING SCENARIO `k': items `j': answers `m' and `=`m'+`kk'' merged"
+                local stop = 0
+              }
+              else {
+                if `stop' != 0 {
+                  qui replace item`j'= `nbm_`j'' if item`j'==`m'
+                  local zzz=`j'+`nbitems'
+                  *qui replace item`zzz'= `nbm_`j'' if item``=`j'+`nbitems'''==`m'
+                  *di  "WARNING SCENARIO `k': items `j': answers `m' and `=`m'+`kk'' merged"
+                  local stop = 0
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+    qui levelsof item`j'
+    local val = r(levels)
+    local checker: word 1 of `val'
+    local checker2: word 2 of `val'
+    local checker3: word 3 of `val'
+    if (`checker'!=0) {
+      qui recode item`j' (`checker'=0) (`checker2'=1) (`checker3'=2)
+    }
+    else if (`checker2'!=1) {
+      qui recode item`j' (`checker2'=1) (`checker3'=2)
+    }
+    else if (`checker3'!=2) {
+      qui recode item`j' (`checker3'=2)
+    }
+  }
+
+qui valuesof comz
+local val = r(values)
+local checker: word 1 of `val'
+
+* replications avec 3 mod
+if  (`checker' == 1)  {
   local difitems1=dif1
   local difitems2=dif2
-  if (`difitems1'<`difitems2') {
-    local difitemsmin `difitems1'
-    local difitemsmax `difitems2'
+  local difcheck = 0
+  local difcheck2 = 0
+forvalues i=1/`nbitems' {
+  qui sum item`i'
+  local checker2 = r(max)
+
+  if (`i'==`difitems1') {
+    if (`checker2'==3) {
+    local difcheck = 1
+    local constrnt = "constraint 1 2*([1.item`i']_cons-([1.item`i']_cons+[1.item`i'] tt))=([2.item`i']_cons-([2.item`i']_cons+[2.item`i'] tt))"
+    local constrnt3 = "constraint 3 3*([1.item`i']_cons-([1.item`i']_cons+[1.item`i'] tt))=([3.item`i']_cons-([3.item`i']_cons+[3.item`i'] tt))"
   }
   else {
-    local difitemsmin `difitems2'
-    local difitemsmax `difitems1'
+    local constrnt = "constraint 1 2*([1.item`i']_cons-([1.item`i']_cons+[1.item`i'] tt))=([2.item`i']_cons-([2.item`i']_cons+[2.item`i'] tt))"
   }
-  forvalues i=1/`nbitems' {
-    if (`i'==`difitemsmin') {
-      local constrnt = "constraint 1 2*([1.item`i']_cons-([1.item`i']_cons+[1.item`i'] tt))=([2.item`i']_cons-([2.item`i']_cons+[2.item`i'] tt))"
-      local constrnt2 = "constraint 2 3*([1.item`i']_cons-([1.item`i']_cons+[1.item`i'] tt))=([3.item`i']_cons-([3.item`i']_cons+[3.item`i'] tt))"
-    }
   }
-  forvalues i=1/`nbitems' {
-    if (`i'==`difitemsmax') {
-      local constrn3 = "constraint 3 2*([1.item`i']_cons-([1.item`i']_cons+[1.item`i'] tt))=([2.item`i']_cons-([2.item`i']_cons+[2.item`i'] tt))"
-      local constrnt4 = "constraint 4 3*([1.item`i']_cons-([1.item`i']_cons+[1.item`i'] tt))=([3.item`i']_cons-([3.item`i']_cons+[3.item`i'] tt))"
-    }
+  if (`i'==`difitems2') {
+    if (`checker2'==3) {
+    local difcheck2=1
+    local constrnt2 = "constraint 2 2*([1.item`i']_cons-([1.item`i']_cons+[1.item`i'] tt))=([2.item`i']_cons-([2.item`i']_cons+[2.item`i'] tt))"
+    local constrnt4 = "constraint 4 3*([1.item`i']_cons-([1.item`i']_cons+[1.item`i'] tt))=([3.item`i']_cons-([3.item`i']_cons+[3.item`i'] tt))"
   }
-  local mod "gsem "
-  forvalues i=1/`nbitems' {
-    if (`i'==`difitemsmin' | `i'==`difitemsmax') {
+  else {
+    local constrnt2 = "constraint 2 2*([1.item`i']_cons-([1.item`i']_cons+[1.item`i'] tt))=([2.item`i']_cons-([2.item`i']_cons+[2.item`i'] tt))"
+  }
+  }
+}
+local mod "gsem "
+forvalues i=1/`nbitems' {
+  qui sum item`i'
+  local checker2 = r(max)
+  if (`i'==`difitems1'| `i'==`difitems2') {
+    if (`checker2'==3) {
       local mod = "`mod'"+"(1.item`i'<-THETA@1 tt)(2.item`i'<-THETA@2 tt)(3.item`i'<-THETA@3 tt)"
-    }
+  }
     else {
-      local mod = "`mod'"+"(1.item`i'<-THETA@1)(2.item`i'<-THETA@2)(3.item`i'<-THETA@3)"
+      local mod = "`mod'"+"(1.item`i'<-THETA@1 tt)(2.item`i'<-THETA@2 tt)"
     }
   }
-  local mod = "`mod'" + "(THETA<-tt), mlogit tol(0.01) iterate(500) latent(THETA) nocapslatent constraint(1 2 3 4)"
-  qui `constrnt'
-  qui `constrnt2'
-  qui `constrnt3'
-  qui `constrnt4'
-  qui `mod'
-  mat V=r(table)
-  mat W=V[1..2,1...]
-  forvalues j=1/`nbitems' {
-  if (`j'<`difitemsmin') {
-      mat outmat[`k',3*`j'-2] = W[1,7*(`j'-1)+3] // items avant le premier dif
-      mat outmat[`k',3*`j'-1] = W[1,7*(`j'-1)+5] // items avant le premier dif
-      mat outmat[`k',3*`j'] =   W[1,7*(`j'-1)+7] // items avant le premier dif
-      }
-  else if (`j'==`difitemsmin') {
-      mat outmat[`k',3*`j'-2] = W[1,7*(`j'-1)+4] // items du le premier dif
-      mat outmat[`k',3*`j'-1] = W[1,7*(`j'-1)+7] // items du le premier dif
-      mat outmat[`k',3*`j'] =   W[1,7*(`j'-1)+10] // items du le premier dif    }
-    }
-  else if (`j'<`difitemsmax') {
-      mat outmat[`k',3*`j'-2] = W[1,7*(`j'-1)+6] // items avant le premier dif
-      mat outmat[`k',3*`j'-1] = W[1,7*(`j'-1)+8] // items avant le premier dif
-      mat outmat[`k',3*`j'] =   W[1,7*(`j'-1)+10] // items avant le premier dif
-    }
-  else if (`j'==`difitemsmax') {
-      mat outmat[`k',3*`j'-2] = W[1,7*(`j'-1)+7] // items avant le premier dif
-      mat outmat[`k',3*`j'-1] = W[1,7*(`j'-1)+10] // items avant le premier dif
-      mat outmat[`k',3*`j'] =   W[1,7*(`j'-1)+13] // items avant le premier dif
-    }
   else {
-    mat outmat[`k',3*`j'-2] = W[1,7*(`j'-1)+9] // items avant le premier dif
-    mat outmat[`k',3*`j'-1] = W[1,7*(`j'-1)+11] // items avant le premier dif
-    mat outmat[`k',3*`j'] =   W[1,7*(`j'-1)+13] // items avant le premier dif
+    if (`checker2'==3) {
+      local mod = "`mod'"+"(1.item`i'<-THETA@1)(2.item`i'<-THETA@2)(3.item`i'<-THETA@3)"
   }
+  else {
+    local mod = "`mod'"+"(1.item`i'<-THETA@1)(2.item`i'<-THETA@2)"
   }
-    mat outmat[`k',3*`nbitems'+1] = W[1,7*(`difitemsmin'-1)+2] // coef de dif
-    mat outmat[`k',3*`nbitems'+2] = W[1,7*(`difitemsmin'-1)+5] // coef de dif
-    mat outmat[`k',3*`nbitems'+3] = W[1,7*(`difitemsmin'-1)+8] // coef de dif
-    mat outmat[`k',3*`nbitems'+4] = W[1,7*(`difitemsmax'-1)+5] // coef de dif
-    mat outmat[`k',3*`nbitems'+5] = W[1,7*(`difitemsmax'-1)+8] // coef de dif
-    mat outmat[`k',3*`nbitems'+6] = W[1,7*(`difitemsmax'-1)+11] // coef de dif
-    mat outmat[`k',3*`nbitems'+7] = W[1,7*`nbitems'+7] // beta
-    mat outmat[`k',3*`nbitems'+8] = W[2,7*`nbitems'+7] // se beta
-    mat outmat[`k',3*`nbitems'+9] = `difitemsmin' // numéro item de dif
-    mat outmat[`k',3*`nbitems'+10] = `difitemsmax' // numéro item de dif
-    restore
 }
-putexcel set "`path_res'/out/12`scen'_`Nn'.xls", sheet("outmat") replace
-putexcel A1=matrix(outmat), colnames
 }
+if (`difcheck'==1) {
+  if (`difcheck2'==1) {
+    local mod = "`mod'" + "(THETA<-tt), mlogit tol(0.01) iterate(500) latent(THETA) nocapslatent constraint(1 2 3 4)"
+  }
+  else {
+    local mod = "`mod'" + "(THETA<-tt), mlogit tol(0.01) iterate(500) latent(THETA) nocapslatent constraint(1 2 3)"
+  }
 }
+else {
+  if (`difcheck2'==1) {
+    local mod = "`mod'" + "(THETA<-tt), mlogit tol(0.01) iterate(500) latent(THETA) nocapslatent constraint(1 2 4)"
+  }
+  else {
+    local mod = "`mod'" + "(THETA<-tt), mlogit tol(0.01) iterate(500) latent(THETA) nocapslatent constraint(1 2)"
+  }
+}
+qui `constrnt'
+qui `constrnt2'
+if (`difcheck'==1) {
+  qui `constrnt3'
+}
+if (`difcheck2'==1) {
+  qui `constrnt4'
+}
+qui `mod'
+mat V=r(table)
+mat W=V[1..2,1...]
+forvalues j=1/`nbitems' {
+
+    mat outmat[`k',3*`j'-2] = W[1,colnumb(W,"1.item`j':_cons")] // items avant le premier dif
+    mat outmat[`k',3*`j'-1] = W[1,colnumb(W,"2.item`j':_cons")] // items avant le premier dif
+    mat outmat[`k',3*`j'] =   W[1,colnumb(W,"3.item`j':_cons")] // items avant le premier dif
+}
+  mat outmat[`k',3*`nbitems'+1] = W[1,colnumb(W,"1.item`difitems1':tt")] // coef de dif
+  mat outmat[`k',3*`nbitems'+2] = W[1,colnumb(W,"2.item`difitems1':tt")] // coef de dif
+  mat outmat[`k',3*`nbitems'+3] = W[1,colnumb(W,"3.item`difitems1':tt")] // coef de dif
+  mat outmat[`k',3*`nbitems'+4] = W[1,colnumb(W,"1.item`difitems2':tt")] // coef de dif
+  mat outmat[`k',3*`nbitems'+5] = W[1,colnumb(W,"2.item`difitems2':tt")] // coef de dif
+  mat outmat[`k',3*`nbitems'+6] = W[1,colnumb(W,"3.item`difitems2':tt")] // coef de dif
+  mat outmat[`k',3*`nbitems'+7] = W[1,colnumb(W,"THETA:tt")] // beta
+  mat outmat[`k',3*`nbitems'+8] = W[2,colnumb(W,"THETA:tt")] // se beta
+  mat outmat[`k',3*`nbitems'+9] = `difitems1' // numéro item de dif
+  mat outmat[`k',3*`nbitems'+10] = `difitems2' // numéro item de dif
+  restore
+}
+
+* replications sans problèmes
+else {
+  local difitems1=dif1
+  local difitems2=dif2
+forvalues i=1/`nbitems' {
+  if (`i'==`difitems1') {
+    local constrnt = "constraint 1 2*([1.item`i']_cons-([1.item`i']_cons+[1.item`i'] tt))=([2.item`i']_cons-([2.item`i']_cons+[2.item`i'] tt))"
+    local constrnt2 = "constraint 2 3*([1.item`i']_cons-([1.item`i']_cons+[1.item`i'] tt))=([3.item`i']_cons-([3.item`i']_cons+[3.item`i'] tt))"
+  }
+  if (`i'==`difitems2') {
+    local constrnt3 = "constraint 3 2*([1.item`i']_cons-([1.item`i']_cons+[1.item`i'] tt))=([2.item`i']_cons-([2.item`i']_cons+[2.item`i'] tt))"
+    local constrnt4 = "constraint 4 3*([1.item`i']_cons-([1.item`i']_cons+[1.item`i'] tt))=([3.item`i']_cons-([3.item`i']_cons+[3.item`i'] tt))"
+  }
+}
+local mod "gsem "
+forvalues i=1/`nbitems' {
+  if (`i'==`difitems1' | `i'==`difitems2') {
+    local mod = "`mod'"+"(1.item`i'<-THETA@1 tt)(2.item`i'<-THETA@2 tt)(3.item`i'<-THETA@3 tt)"
+  }
+  else {
+    local mod = "`mod'"+"(1.item`i'<-THETA@1)(2.item`i'<-THETA@2)(3.item`i'<-THETA@3)"
+  }
+}
+local mod = "`mod'" + "(THETA<-tt), mlogit tol(0.01) iterate(500) latent(THETA) nocapslatent constraint(1 2 3 4)"
+qui `constrnt'
+qui `constrnt2'
+qui `constrnt3'
+qui `constrnt4'
+qui `mod'
+mat V=r(table)
+mat W=V[1..2,1...]
+forvalues j=1/`nbitems' {
+      mat outmat[`k',3*`j'-2] = W[1,colnumb(W,"1.item`j':_cons")] // items avant le premier dif
+      mat outmat[`k',3*`j'-1] = W[1,colnumb(W,"2.item`j':_cons")] // items avant le premier dif
+      mat outmat[`k',3*`j'] =   W[1,colnumb(W,"3.item`j':_cons")] // items avant le premier dif
+  }
+  mat outmat[`k',3*`nbitems'+1] = W[1,colnumb(W,"1.item`difitems1':tt")] // coef de dif
+  mat outmat[`k',3*`nbitems'+2] = W[1,colnumb(W,"2.item`difitems1':tt")] // coef de dif
+  mat outmat[`k',3*`nbitems'+3] = W[1,colnumb(W,"3.item`difitems1':tt")] // coef de dif
+  mat outmat[`k',3*`nbitems'+4] = W[1,colnumb(W,"1.item`difitems2':tt")] // coef de dif
+  mat outmat[`k',3*`nbitems'+5] = W[1,colnumb(W,"2.item`difitems2':tt")] // coef de dif
+  mat outmat[`k',3*`nbitems'+6] = W[1,colnumb(W,"3.item`difitems2':tt")] // coef de dif
+  mat outmat[`k',3*`nbitems'+7] = W[1,colnumb(W,"THETA:tt")] // beta
+  mat outmat[`k',3*`nbitems'+8] = W[2,colnumb(W,"THETA:tt")] // se beta
+  mat outmat[`k',3*`nbitems'+9] = `difitems1' // numéro item de dif
+  mat outmat[`k',3*`nbitems'+10] = `difitems2' // numéro item de dif
+  restore
+}
+}
+putexcel set "`path_res'/out/12`scen'_`Nn'.xls", sheet("outmat") replace
+putexcel A1=matrix(outmat), colnames
+}
+}
+
 
-
-
 *==========================
 * Scenarios with : J=7
 *==========================
@@ -1181,7 +1387,7 @@ import delim "`path_data'/scenario_14`scen'_`Nn'.csv", encoding(ISO-8859-2)  cas
 rename TT tt
 
 * Matrice de taille 1000 * 4 items + 1 DIF + beta + std beta + 1 dif
-local nbitems = 7
+local nbitems = 4
 local nbdif = 2
 local taillemat = 3*`nbitems'+6+2+`nbdif'
 mat outmat = J(1000,`taillemat',.)
@@ -1193,83 +1399,290 @@ forvalues k=1/1000 {
   }
   preserve
   qui keep if replication==`k'
+
+
+* MERGE des modalités si non représentées
+    local com_z = 0
+    qui gen comz = 0
+    forvalues j = 1 / `nbitems' {
+    local recoda_`j' = 0
+    qui tab item`j' if tt == 0, matrow(rect1_g0_`j') matcell(nbrt1_g0_`j')
+    local maxm`j'_t1_g0 = rect1_g0_`j'[r(r),1]
+    local minm`j'_t1_g0 = rect1_g0_`j'[1,1]
+
+    qui tab item`j' if tt == 1, matrow(rect1_g1_`j') matcell(nbrt1_g1_`j')
+    local minm`j'_t1_g1 = rect1_g1_`j'[1,1]
+    local maxm`j'_t1_g1 = rect1_g1_`j'[r(r),1]
+
+    local minm_`j' = min(`minm`j'_t1_g0',`minm`j'_t1_g1')
+    local maxm_`j' = max(`maxm`j'_t1_g0',`maxm`j'_t1_g1')
+    local nbm_`j' =  `=`maxm_`j''-`minm_`j'''
+
+    if `minm_`j'' != 0 & `com_z' == 0 {
+      local com_z = 1
+    }
+
+    qui count if item`j' == 3 & tt == 0
+    local mod3plac = r(N)
+    qui count if item`j' == 3 & tt == 1
+    local mod3tt = r(N)
+    local nb_rn3 = min(`mod3plac',`mod3tt')
+    if `nb_rn3'==0 {
+      qui replace comz = 1
+    }
+
+    forvalues m = 0/`=`nbm_`j''-1' {
+      qui count if item`j' == `m' & tt == 0
+      local nb_rn1_g0 = r(N)
+      qui count if item`j' == `m' & tt == 1
+      local nb_rn1_g1 = r(N)
+      local nb_rn = min(`nb_rn1_g0',`nb_rn1_g1')
+      if `nb_rn' == 0 {
+        qui replace comz = 1
+        local recoda_`j' = 1
+        if  `m' == 0 | `m' < `minm`j'_t1_g0' | `m' < `minm`j'_t1_g1' {
+          local stop = 1
+          forvalues kk = 1/`=`nbm_`j''-`m'' {
+            qui count if item`j' == `=`m' + `kk'' & tt == 0
+            local v`kk'1_0 = r(N)
+            qui count if item`j' == `=`m' + `kk'' & tt == 1
+            local v`kk'1_1 = r(N)
+            if (`v`kk'1_0' != 0 | `v`kk'1_1' != 0) & `stop' != 0 {
+              qui replace item`j'= `=`m'+`kk'' if item`j'==`m'
+              local zzz=`j'+`nbitems'
+              *qui replace item`zzz'=`=`m'+`kk'' if item``=`j'+`nbitems'''==`m'
+              *di  "WARNING SCENARIO `k': items `j': answers `m' and `=`m'+`kk'' merged"
+              local stop = 0
+            }
+          }
+        }
+        else if `m' == `=`nbm_`j''-1' | `m' >= `maxm`j'_t1_g1' {
+          local stop = 1
+          forvalues kk = 1/`=`m'' {
+            qui count if item`j' == `=`m' - `kk'' & tt == 0
+            local v`kk'1_0 = r(N)
+            qui count if item`j' == `=`m' - `kk'' & tt == 1
+            local v`kk'1_1 = r(N)
+            if (`v`kk'1_0' != 0 | `v`kk'1_1' != 0) & `stop' != 0 {
+              qui replace item`j'= `=`m' - `kk'' if item`j'==`m'
+              local zzz=`j'+`nbitems'
+              *qui replace item`zzz'= `=`m' - `kk'' if item`zzz'==`m'
+              *di  "WARNING SCENARIO `k': items `j': answers `m' and `=`m'+`kk'' merged"
+              local stop = 0
+            }
+          }
+        }
+        else {
+          if runiform()>0.5{
+            local stop = 1
+            forvalues kk = 1/`m' {
+              qui count if item`j' == `=`m' - `kk'' & tt == 0
+              local v`kk'1_0 = r(N)
+              qui count if item`j' == `=`m' - `kk'' & tt == 1
+              local v`kk'1_1 = r(N)
+              if (`v`kk'1_0' != 0 | `v`kk'1_1' != 0) & `stop' != 0 {
+                qui replace item`j'= `=`m'-`kk'' if item`j'==`m'
+                local zzz=`j'+`nbitems'
+                *qui replace item`zzz'=`=`m'-`kk'' if item``=`j'+`nbitems'''==`m'
+                *di  "WARNING SCENARIO `k': items `j': answers `m' and `=`m'+`kk'' merged"
+                local stop = 0
+              }
+            }
+          }
+          else {
+            local stop = 1
+            forvalues kk = 1/`=`nbm_`j''-`m'' {
+              qui count if item`j' == `=`m' + `kk'' & tt == 0
+              local v`kk'1_0 = r(N)
+              qui count if item`j' == `=`m' + `kk'' & tt == 1
+              local v`kk'1_1 = r(N)
+              if (`v`kk'1_0' != 0 | `v`kk'1_1' != 0) & `stop' != 0{
+                qui replace item`j'=`=`m' + `kk'' if item`j'==`m'
+                local zzz=`j'+`nbitems'
+                *qui replace item`zzz'=`=`m' + `kk'' if item``=`j'+`nbitems'''==`m'
+                *di  "WARNING SCENARIO `k': items `j': answers `m' and `=`m'+`kk'' merged"
+                local stop = 0
+              }
+              else {
+                if `stop' != 0 {
+                  qui replace item`j'= `nbm_`j'' if item`j'==`m'
+                  local zzz=`j'+`nbitems'
+                  *qui replace item`zzz'= `nbm_`j'' if item``=`j'+`nbitems'''==`m'
+                  *di  "WARNING SCENARIO `k': items `j': answers `m' and `=`m'+`kk'' merged"
+                  local stop = 0
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+    qui levelsof item`j'
+    local val = r(levels)
+    local checker: word 1 of `val'
+    local checker2: word 2 of `val'
+    local checker3: word 3 of `val'
+    if (`checker'!=0) {
+      qui recode item`j' (`checker'=0) (`checker2'=1) (`checker3'=2)
+    }
+    else if (`checker2'!=1) {
+      qui recode item`j' (`checker2'=1) (`checker3'=2)
+    }
+    else if (`checker3'!=2) {
+      qui recode item`j' (`checker3'=2)
+    }
+  }
+
+qui valuesof comz
+local val = r(values)
+local checker: word 1 of `val'
+
+* replications avec 3 mod
+if  (`checker' == 1)  {
   local difitems1=dif1
   local difitems2=dif2
-  if (`difitems1'<`difitems2') {
-    local difitemsmin `difitems1'
-    local difitemsmax `difitems2'
+  local difcheck = 0
+  local difcheck2 = 0
+forvalues i=1/`nbitems' {
+  qui sum item`i'
+  local checker2 = r(max)
+
+  if (`i'==`difitems1') {
+    if (`checker2'==3) {
+    local difcheck = 1
+    local constrnt = "constraint 1 2*([1.item`i']_cons-([1.item`i']_cons+[1.item`i'] tt))=([2.item`i']_cons-([2.item`i']_cons+[2.item`i'] tt))"
+    local constrnt3 = "constraint 3 3*([1.item`i']_cons-([1.item`i']_cons+[1.item`i'] tt))=([3.item`i']_cons-([3.item`i']_cons+[3.item`i'] tt))"
   }
   else {
-    local difitemsmin `difitems2'
-    local difitemsmax `difitems1'
+    local constrnt = "constraint 1 2*([1.item`i']_cons-([1.item`i']_cons+[1.item`i'] tt))=([2.item`i']_cons-([2.item`i']_cons+[2.item`i'] tt))"
   }
-  forvalues i=1/`nbitems' {
-    if (`i'==`difitemsmin') {
-      local constrnt = "constraint 1 2*([1.item`i']_cons-([1.item`i']_cons+[1.item`i'] tt))=([2.item`i']_cons-([2.item`i']_cons+[2.item`i'] tt))"
-      local constrnt2 = "constraint 2 3*([1.item`i']_cons-([1.item`i']_cons+[1.item`i'] tt))=([3.item`i']_cons-([3.item`i']_cons+[3.item`i'] tt))"
-    }
   }
-  forvalues i=1/`nbitems' {
-    if (`i'==`difitemsmax') {
-      local constrn3 = "constraint 3 2*([1.item`i']_cons-([1.item`i']_cons+[1.item`i'] tt))=([2.item`i']_cons-([2.item`i']_cons+[2.item`i'] tt))"
-      local constrnt4 = "constraint 4 3*([1.item`i']_cons-([1.item`i']_cons+[1.item`i'] tt))=([3.item`i']_cons-([3.item`i']_cons+[3.item`i'] tt))"
-    }
+  if (`i'==`difitems2') {
+    if (`checker2'==3) {
+    local difcheck2=1
+    local constrnt2 = "constraint 2 2*([1.item`i']_cons-([1.item`i']_cons+[1.item`i'] tt))=([2.item`i']_cons-([2.item`i']_cons+[2.item`i'] tt))"
+    local constrnt4 = "constraint 4 3*([1.item`i']_cons-([1.item`i']_cons+[1.item`i'] tt))=([3.item`i']_cons-([3.item`i']_cons+[3.item`i'] tt))"
   }
-  local mod "gsem "
-  forvalues i=1/`nbitems' {
-    if (`i'==`difitemsmin' | `i'==`difitemsmax') {
+  else {
+    local constrnt2 = "constraint 2 2*([1.item`i']_cons-([1.item`i']_cons+[1.item`i'] tt))=([2.item`i']_cons-([2.item`i']_cons+[2.item`i'] tt))"
+  }
+  }
+}
+local mod "gsem "
+forvalues i=1/`nbitems' {
+  qui sum item`i'
+  local checker2 = r(max)
+  if (`i'==`difitems1'| `i'==`difitems2') {
+    if (`checker2'==3) {
       local mod = "`mod'"+"(1.item`i'<-THETA@1 tt)(2.item`i'<-THETA@2 tt)(3.item`i'<-THETA@3 tt)"
-    }
+  }
     else {
-      local mod = "`mod'"+"(1.item`i'<-THETA@1)(2.item`i'<-THETA@2)(3.item`i'<-THETA@3)"
+      local mod = "`mod'"+"(1.item`i'<-THETA@1 tt)(2.item`i'<-THETA@2 tt)"
     }
   }
-  local mod = "`mod'" + "(THETA<-tt), mlogit tol(0.01) iterate(500) latent(THETA) nocapslatent constraint(1 2 3 4)"
-  qui `constrnt'
-  qui `constrnt2'
+  else {
+    if (`checker2'==3) {
+      local mod = "`mod'"+"(1.item`i'<-THETA@1)(2.item`i'<-THETA@2)(3.item`i'<-THETA@3)"
+  }
+  else {
+    local mod = "`mod'"+"(1.item`i'<-THETA@1)(2.item`i'<-THETA@2)"
+  }
+}
+}
+if (`difcheck'==1) {
+  if (`difcheck2'==1) {
+    local mod = "`mod'" + "(THETA<-tt), mlogit tol(0.01) iterate(500) latent(THETA) nocapslatent constraint(1 2 3 4)"
+  }
+  else {
+    local mod = "`mod'" + "(THETA<-tt), mlogit tol(0.01) iterate(500) latent(THETA) nocapslatent constraint(1 2 3)"
+  }
+}
+else {
+  if (`difcheck2'==1) {
+    local mod = "`mod'" + "(THETA<-tt), mlogit tol(0.01) iterate(500) latent(THETA) nocapslatent constraint(1 2 4)"
+  }
+  else {
+    local mod = "`mod'" + "(THETA<-tt), mlogit tol(0.01) iterate(500) latent(THETA) nocapslatent constraint(1 2)"
+  }
+}
+qui `constrnt'
+qui `constrnt2'
+if (`difcheck'==1) {
   qui `constrnt3'
+}
+if (`difcheck2'==1) {
   qui `constrnt4'
-  qui `mod'
-  mat V=r(table)
-  mat W=V[1..2,1...]
-  forvalues j=1/`nbitems' {
-  if (`j'<`difitemsmin') {
-      mat outmat[`k',3*`j'-2] = W[1,7*(`j'-1)+3] // items avant le premier dif
-      mat outmat[`k',3*`j'-1] = W[1,7*(`j'-1)+5] // items avant le premier dif
-      mat outmat[`k',3*`j'] =   W[1,7*(`j'-1)+7] // items avant le premier dif
-      }
-  else if (`j'==`difitemsmin') {
-      mat outmat[`k',3*`j'-2] = W[1,7*(`j'-1)+4] // items du le premier dif
-      mat outmat[`k',3*`j'-1] = W[1,7*(`j'-1)+7] // items du le premier dif
-      mat outmat[`k',3*`j'] =   W[1,7*(`j'-1)+10] // items du le premier dif    }
-    }
-  else if (`j'<`difitemsmax') {
-      mat outmat[`k',3*`j'-2] = W[1,7*(`j'-1)+6] // items avant le premier dif
-      mat outmat[`k',3*`j'-1] = W[1,7*(`j'-1)+8] // items avant le premier dif
-      mat outmat[`k',3*`j'] =   W[1,7*(`j'-1)+10] // items avant le premier dif
-    }
-  else if (`j'==`difitemsmax') {
-      mat outmat[`k',3*`j'-2] = W[1,7*(`j'-1)+7] // items avant le premier dif
-      mat outmat[`k',3*`j'-1] = W[1,7*(`j'-1)+10] // items avant le premier dif
-      mat outmat[`k',3*`j'] =   W[1,7*(`j'-1)+13] // items avant le premier dif
-    }
+}
+qui `mod'
+mat V=r(table)
+mat W=V[1..2,1...]
+forvalues j=1/`nbitems' {
+
+    mat outmat[`k',3*`j'-2] = W[1,colnumb(W,"1.item`j':_cons")] // items avant le premier dif
+    mat outmat[`k',3*`j'-1] = W[1,colnumb(W,"2.item`j':_cons")] // items avant le premier dif
+    mat outmat[`k',3*`j'] =   W[1,colnumb(W,"3.item`j':_cons")] // items avant le premier dif
+}
+  mat outmat[`k',3*`nbitems'+1] = W[1,colnumb(W,"1.item`difitems1':tt")] // coef de dif
+  mat outmat[`k',3*`nbitems'+2] = W[1,colnumb(W,"2.item`difitems1':tt")] // coef de dif
+  mat outmat[`k',3*`nbitems'+3] = W[1,colnumb(W,"3.item`difitems1':tt")] // coef de dif
+  mat outmat[`k',3*`nbitems'+4] = W[1,colnumb(W,"1.item`difitems2':tt")] // coef de dif
+  mat outmat[`k',3*`nbitems'+5] = W[1,colnumb(W,"2.item`difitems2':tt")] // coef de dif
+  mat outmat[`k',3*`nbitems'+6] = W[1,colnumb(W,"3.item`difitems2':tt")] // coef de dif
+  mat outmat[`k',3*`nbitems'+7] = W[1,colnumb(W,"THETA:tt")] // beta
+  mat outmat[`k',3*`nbitems'+8] = W[2,colnumb(W,"THETA:tt")] // se beta
+  mat outmat[`k',3*`nbitems'+9] = `difitems1' // numéro item de dif
+  mat outmat[`k',3*`nbitems'+10] = `difitems2' // numéro item de dif
+  restore
+}
+
+* replications sans problèmes
+else {
+  local difitems1=dif1
+  local difitems2=dif2
+forvalues i=1/`nbitems' {
+  if (`i'==`difitems1') {
+    local constrnt = "constraint 1 2*([1.item`i']_cons-([1.item`i']_cons+[1.item`i'] tt))=([2.item`i']_cons-([2.item`i']_cons+[2.item`i'] tt))"
+    local constrnt2 = "constraint 2 3*([1.item`i']_cons-([1.item`i']_cons+[1.item`i'] tt))=([3.item`i']_cons-([3.item`i']_cons+[3.item`i'] tt))"
+  }
+  if (`i'==`difitems2') {
+    local constrnt3 = "constraint 3 2*([1.item`i']_cons-([1.item`i']_cons+[1.item`i'] tt))=([2.item`i']_cons-([2.item`i']_cons+[2.item`i'] tt))"
+    local constrnt4 = "constraint 4 3*([1.item`i']_cons-([1.item`i']_cons+[1.item`i'] tt))=([3.item`i']_cons-([3.item`i']_cons+[3.item`i'] tt))"
+  }
+}
+local mod "gsem "
+forvalues i=1/`nbitems' {
+  if (`i'==`difitems1' | `i'==`difitems2') {
+    local mod = "`mod'"+"(1.item`i'<-THETA@1 tt)(2.item`i'<-THETA@2 tt)(3.item`i'<-THETA@3 tt)"
+  }
   else {
-    mat outmat[`k',3*`j'-2] = W[1,7*(`j'-1)+9] // items avant le premier dif
-    mat outmat[`k',3*`j'-1] = W[1,7*(`j'-1)+11] // items avant le premier dif
-    mat outmat[`k',3*`j'] =   W[1,7*(`j'-1)+13] // items avant le premier dif
+    local mod = "`mod'"+"(1.item`i'<-THETA@1)(2.item`i'<-THETA@2)(3.item`i'<-THETA@3)"
   }
+}
+local mod = "`mod'" + "(THETA<-tt), mlogit tol(0.01) iterate(500) latent(THETA) nocapslatent constraint(1 2 3 4)"
+qui `constrnt'
+qui `constrnt2'
+qui `constrnt3'
+qui `constrnt4'
+qui `mod'
+mat V=r(table)
+mat W=V[1..2,1...]
+forvalues j=1/`nbitems' {
+      mat outmat[`k',3*`j'-2] = W[1,colnumb(W,"1.item`j':_cons")] // items avant le premier dif
+      mat outmat[`k',3*`j'-1] = W[1,colnumb(W,"2.item`j':_cons")] // items avant le premier dif
+      mat outmat[`k',3*`j'] =   W[1,colnumb(W,"3.item`j':_cons")] // items avant le premier dif
   }
-    mat outmat[`k',3*`nbitems'+1] = W[1,7*(`difitemsmin'-1)+2] // coef de dif
-    mat outmat[`k',3*`nbitems'+2] = W[1,7*(`difitemsmin'-1)+5] // coef de dif
-    mat outmat[`k',3*`nbitems'+3] = W[1,7*(`difitemsmin'-1)+8] // coef de dif
-    mat outmat[`k',3*`nbitems'+4] = W[1,7*(`difitemsmax'-1)+5] // coef de dif
-    mat outmat[`k',3*`nbitems'+5] = W[1,7*(`difitemsmax'-1)+8] // coef de dif
-    mat outmat[`k',3*`nbitems'+6] = W[1,7*(`difitemsmax'-1)+11] // coef de dif
-    mat outmat[`k',3*`nbitems'+7] = W[1,7*`nbitems'+7] // beta
-    mat outmat[`k',3*`nbitems'+8] = W[2,7*`nbitems'+7] // se beta
-    mat outmat[`k',3*`nbitems'+9] = `difitemsmin' // numéro item de dif
-    mat outmat[`k',3*`nbitems'+10] = `difitemsmax' // numéro item de dif
-    restore
+  mat outmat[`k',3*`nbitems'+1] = W[1,colnumb(W,"1.item`difitems1':tt")] // coef de dif
+  mat outmat[`k',3*`nbitems'+2] = W[1,colnumb(W,"2.item`difitems1':tt")] // coef de dif
+  mat outmat[`k',3*`nbitems'+3] = W[1,colnumb(W,"3.item`difitems1':tt")] // coef de dif
+  mat outmat[`k',3*`nbitems'+4] = W[1,colnumb(W,"1.item`difitems2':tt")] // coef de dif
+  mat outmat[`k',3*`nbitems'+5] = W[1,colnumb(W,"2.item`difitems2':tt")] // coef de dif
+  mat outmat[`k',3*`nbitems'+6] = W[1,colnumb(W,"3.item`difitems2':tt")] // coef de dif
+  mat outmat[`k',3*`nbitems'+7] = W[1,colnumb(W,"THETA:tt")] // beta
+  mat outmat[`k',3*`nbitems'+8] = W[2,colnumb(W,"THETA:tt")] // se beta
+  mat outmat[`k',3*`nbitems'+9] = `difitems1' // numéro item de dif
+  mat outmat[`k',3*`nbitems'+10] = `difitems2' // numéro item de dif
+  restore
+}
 }
 putexcel set "`path_res'/out/14`scen'_`Nn'.xls", sheet("outmat") replace
 putexcel A1=matrix(outmat), colnames
@@ -1377,89 +1790,297 @@ forvalues k=1/1000 {
   }
   preserve
   qui keep if replication==`k'
+
+
+* MERGE des modalités si non représentées
+    local com_z = 0
+    qui gen comz = 0
+    forvalues j = 1 / `nbitems' {
+    local recoda_`j' = 0
+    qui tab item`j' if tt == 0, matrow(rect1_g0_`j') matcell(nbrt1_g0_`j')
+    local maxm`j'_t1_g0 = rect1_g0_`j'[r(r),1]
+    local minm`j'_t1_g0 = rect1_g0_`j'[1,1]
+
+    qui tab item`j' if tt == 1, matrow(rect1_g1_`j') matcell(nbrt1_g1_`j')
+    local minm`j'_t1_g1 = rect1_g1_`j'[1,1]
+    local maxm`j'_t1_g1 = rect1_g1_`j'[r(r),1]
+
+    local minm_`j' = min(`minm`j'_t1_g0',`minm`j'_t1_g1')
+    local maxm_`j' = max(`maxm`j'_t1_g0',`maxm`j'_t1_g1')
+    local nbm_`j' =  `=`maxm_`j''-`minm_`j'''
+
+    if `minm_`j'' != 0 & `com_z' == 0 {
+      local com_z = 1
+    }
+
+    qui count if item`j' == 3 & tt == 0
+    local mod3plac = r(N)
+    qui count if item`j' == 3 & tt == 1
+    local mod3tt = r(N)
+    local nb_rn3 = min(`mod3plac',`mod3tt')
+    if `nb_rn3'==0 {
+      qui replace comz = 1
+    }
+
+    forvalues m = 0/`=`nbm_`j''-1' {
+      qui count if item`j' == `m' & tt == 0
+      local nb_rn1_g0 = r(N)
+      qui count if item`j' == `m' & tt == 1
+      local nb_rn1_g1 = r(N)
+      local nb_rn = min(`nb_rn1_g0',`nb_rn1_g1')
+      if `nb_rn' == 0 {
+        qui replace comz = 1
+        local recoda_`j' = 1
+        if  `m' == 0 | `m' < `minm`j'_t1_g0' | `m' < `minm`j'_t1_g1' {
+          local stop = 1
+          forvalues kk = 1/`=`nbm_`j''-`m'' {
+            qui count if item`j' == `=`m' + `kk'' & tt == 0
+            local v`kk'1_0 = r(N)
+            qui count if item`j' == `=`m' + `kk'' & tt == 1
+            local v`kk'1_1 = r(N)
+            if (`v`kk'1_0' != 0 | `v`kk'1_1' != 0) & `stop' != 0 {
+              qui replace item`j'= `=`m'+`kk'' if item`j'==`m'
+              local zzz=`j'+`nbitems'
+              *qui replace item`zzz'=`=`m'+`kk'' if item``=`j'+`nbitems'''==`m'
+              *di  "WARNING SCENARIO `k': items `j': answers `m' and `=`m'+`kk'' merged"
+              local stop = 0
+            }
+          }
+        }
+        else if `m' == `=`nbm_`j''-1' | `m' >= `maxm`j'_t1_g1' {
+          local stop = 1
+          forvalues kk = 1/`=`m'' {
+            qui count if item`j' == `=`m' - `kk'' & tt == 0
+            local v`kk'1_0 = r(N)
+            qui count if item`j' == `=`m' - `kk'' & tt == 1
+            local v`kk'1_1 = r(N)
+            if (`v`kk'1_0' != 0 | `v`kk'1_1' != 0) & `stop' != 0 {
+              qui replace item`j'= `=`m' - `kk'' if item`j'==`m'
+              local zzz=`j'+`nbitems'
+              *qui replace item`zzz'= `=`m' - `kk'' if item`zzz'==`m'
+              *di  "WARNING SCENARIO `k': items `j': answers `m' and `=`m'+`kk'' merged"
+              local stop = 0
+            }
+          }
+        }
+        else {
+          if runiform()>0.5{
+            local stop = 1
+            forvalues kk = 1/`m' {
+              qui count if item`j' == `=`m' - `kk'' & tt == 0
+              local v`kk'1_0 = r(N)
+              qui count if item`j' == `=`m' - `kk'' & tt == 1
+              local v`kk'1_1 = r(N)
+              if (`v`kk'1_0' != 0 | `v`kk'1_1' != 0) & `stop' != 0 {
+                qui replace item`j'= `=`m'-`kk'' if item`j'==`m'
+                local zzz=`j'+`nbitems'
+                *qui replace item`zzz'=`=`m'-`kk'' if item``=`j'+`nbitems'''==`m'
+                *di  "WARNING SCENARIO `k': items `j': answers `m' and `=`m'+`kk'' merged"
+                local stop = 0
+              }
+            }
+          }
+          else {
+            local stop = 1
+            forvalues kk = 1/`=`nbm_`j''-`m'' {
+              qui count if item`j' == `=`m' + `kk'' & tt == 0
+              local v`kk'1_0 = r(N)
+              qui count if item`j' == `=`m' + `kk'' & tt == 1
+              local v`kk'1_1 = r(N)
+              if (`v`kk'1_0' != 0 | `v`kk'1_1' != 0) & `stop' != 0{
+                qui replace item`j'=`=`m' + `kk'' if item`j'==`m'
+                local zzz=`j'+`nbitems'
+                *qui replace item`zzz'=`=`m' + `kk'' if item``=`j'+`nbitems'''==`m'
+                *di  "WARNING SCENARIO `k': items `j': answers `m' and `=`m'+`kk'' merged"
+                local stop = 0
+              }
+              else {
+                if `stop' != 0 {
+                  qui replace item`j'= `nbm_`j'' if item`j'==`m'
+                  local zzz=`j'+`nbitems'
+                  *qui replace item`zzz'= `nbm_`j'' if item``=`j'+`nbitems'''==`m'
+                  *di  "WARNING SCENARIO `k': items `j': answers `m' and `=`m'+`kk'' merged"
+                  local stop = 0
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+    qui levelsof item`j'
+    local val = r(levels)
+    local checker: word 1 of `val'
+    local checker2: word 2 of `val'
+    local checker3: word 3 of `val'
+    if (`checker'!=0) {
+      qui recode item`j' (`checker'=0) (`checker2'=1) (`checker3'=2)
+    }
+    else if (`checker2'!=1) {
+      qui recode item`j' (`checker2'=1) (`checker3'=2)
+    }
+    else if (`checker3'!=2) {
+      qui recode item`j' (`checker3'=2)
+    }
+  }
+
+qui valuesof comz
+local val = r(values)
+local checker: word 1 of `val'
+
+* replications avec 3 mod
+if  (`checker' == 1)  {
   local difitems1=dif1
   local difitems2=dif2
-  if (`difitems1'<`difitems2') {
-    local difitemsmin `difitems1'
-    local difitemsmax `difitems2'
+  local difcheck = 0
+  local difcheck2 = 0
+forvalues i=1/`nbitems' {
+  qui sum item`i'
+  local checker2 = r(max)
+
+  if (`i'==`difitems1') {
+    if (`checker2'==3) {
+    local difcheck = 1
+    local constrnt = "constraint 1 2*([1.item`i']_cons-([1.item`i']_cons+[1.item`i'] tt))=([2.item`i']_cons-([2.item`i']_cons+[2.item`i'] tt))"
+    local constrnt3 = "constraint 3 3*([1.item`i']_cons-([1.item`i']_cons+[1.item`i'] tt))=([3.item`i']_cons-([3.item`i']_cons+[3.item`i'] tt))"
   }
   else {
-    local difitemsmin `difitems2'
-    local difitemsmax `difitems1'
+    local constrnt = "constraint 1 2*([1.item`i']_cons-([1.item`i']_cons+[1.item`i'] tt))=([2.item`i']_cons-([2.item`i']_cons+[2.item`i'] tt))"
   }
-  forvalues i=1/`nbitems' {
-    if (`i'==`difitemsmin') {
-      local constrnt = "constraint 1 2*([1.item`i']_cons-([1.item`i']_cons+[1.item`i'] tt))=([2.item`i']_cons-([2.item`i']_cons+[2.item`i'] tt))"
-      local constrnt2 = "constraint 2 3*([1.item`i']_cons-([1.item`i']_cons+[1.item`i'] tt))=([3.item`i']_cons-([3.item`i']_cons+[3.item`i'] tt))"
-    }
   }
-  forvalues i=1/`nbitems' {
-    if (`i'==`difitemsmax') {
-      local constrn3 = "constraint 3 2*([1.item`i']_cons-([1.item`i']_cons+[1.item`i'] tt))=([2.item`i']_cons-([2.item`i']_cons+[2.item`i'] tt))"
-      local constrnt4 = "constraint 4 3*([1.item`i']_cons-([1.item`i']_cons+[1.item`i'] tt))=([3.item`i']_cons-([3.item`i']_cons+[3.item`i'] tt))"
-    }
+  if (`i'==`difitems2') {
+    if (`checker2'==3) {
+    local difcheck2=1
+    local constrnt2 = "constraint 2 2*([1.item`i']_cons-([1.item`i']_cons+[1.item`i'] tt))=([2.item`i']_cons-([2.item`i']_cons+[2.item`i'] tt))"
+    local constrnt4 = "constraint 4 3*([1.item`i']_cons-([1.item`i']_cons+[1.item`i'] tt))=([3.item`i']_cons-([3.item`i']_cons+[3.item`i'] tt))"
   }
-  local mod "gsem "
-  forvalues i=1/`nbitems' {
-    if (`i'==`difitemsmin' | `i'==`difitemsmax') {
+  else {
+    local constrnt2 = "constraint 2 2*([1.item`i']_cons-([1.item`i']_cons+[1.item`i'] tt))=([2.item`i']_cons-([2.item`i']_cons+[2.item`i'] tt))"
+  }
+  }
+}
+local mod "gsem "
+forvalues i=1/`nbitems' {
+  qui sum item`i'
+  local checker2 = r(max)
+  if (`i'==`difitems1'| `i'==`difitems2') {
+    if (`checker2'==3) {
       local mod = "`mod'"+"(1.item`i'<-THETA@1 tt)(2.item`i'<-THETA@2 tt)(3.item`i'<-THETA@3 tt)"
-    }
+  }
     else {
-      local mod = "`mod'"+"(1.item`i'<-THETA@1)(2.item`i'<-THETA@2)(3.item`i'<-THETA@3)"
+      local mod = "`mod'"+"(1.item`i'<-THETA@1 tt)(2.item`i'<-THETA@2 tt)"
     }
   }
-  local mod = "`mod'" + "(THETA<-tt), mlogit tol(0.01) iterate(500) latent(THETA) nocapslatent constraint(1 2 3 4)"
-  qui `constrnt'
-  qui `constrnt2'
+  else {
+    if (`checker2'==3) {
+      local mod = "`mod'"+"(1.item`i'<-THETA@1)(2.item`i'<-THETA@2)(3.item`i'<-THETA@3)"
+  }
+  else {
+    local mod = "`mod'"+"(1.item`i'<-THETA@1)(2.item`i'<-THETA@2)"
+  }
+}
+}
+if (`difcheck'==1) {
+  if (`difcheck2'==1) {
+    local mod = "`mod'" + "(THETA<-tt), mlogit tol(0.01) iterate(500) latent(THETA) nocapslatent constraint(1 2 3 4)"
+  }
+  else {
+    local mod = "`mod'" + "(THETA<-tt), mlogit tol(0.01) iterate(500) latent(THETA) nocapslatent constraint(1 2 3)"
+  }
+}
+else {
+  if (`difcheck2'==1) {
+    local mod = "`mod'" + "(THETA<-tt), mlogit tol(0.01) iterate(500) latent(THETA) nocapslatent constraint(1 2 4)"
+  }
+  else {
+    local mod = "`mod'" + "(THETA<-tt), mlogit tol(0.01) iterate(500) latent(THETA) nocapslatent constraint(1 2)"
+  }
+}
+qui `constrnt'
+qui `constrnt2'
+if (`difcheck'==1) {
   qui `constrnt3'
+}
+if (`difcheck2'==1) {
   qui `constrnt4'
-  qui `mod'
-  mat V=r(table)
-  mat W=V[1..2,1...]
-  forvalues j=1/`nbitems' {
-  if (`j'<`difitemsmin') {
-      mat outmat[`k',3*`j'-2] = W[1,7*(`j'-1)+3] // items avant le premier dif
-      mat outmat[`k',3*`j'-1] = W[1,7*(`j'-1)+5] // items avant le premier dif
-      mat outmat[`k',3*`j'] =   W[1,7*(`j'-1)+7] // items avant le premier dif
-      }
-  else if (`j'==`difitemsmin') {
-      mat outmat[`k',3*`j'-2] = W[1,7*(`j'-1)+4] // items du le premier dif
-      mat outmat[`k',3*`j'-1] = W[1,7*(`j'-1)+7] // items du le premier dif
-      mat outmat[`k',3*`j'] =   W[1,7*(`j'-1)+10] // items du le premier dif    }
-    }
-  else if (`j'<`difitemsmax') {
-      mat outmat[`k',3*`j'-2] = W[1,7*(`j'-1)+6] // items avant le premier dif
-      mat outmat[`k',3*`j'-1] = W[1,7*(`j'-1)+8] // items avant le premier dif
-      mat outmat[`k',3*`j'] =   W[1,7*(`j'-1)+10] // items avant le premier dif
-    }
-  else if (`j'==`difitemsmax') {
-      mat outmat[`k',3*`j'-2] = W[1,7*(`j'-1)+7] // items avant le premier dif
-      mat outmat[`k',3*`j'-1] = W[1,7*(`j'-1)+10] // items avant le premier dif
-      mat outmat[`k',3*`j'] =   W[1,7*(`j'-1)+13] // items avant le premier dif
-    }
+}
+qui `mod'
+mat V=r(table)
+mat W=V[1..2,1...]
+forvalues j=1/`nbitems' {
+
+    mat outmat[`k',3*`j'-2] = W[1,colnumb(W,"1.item`j':_cons")] // items avant le premier dif
+    mat outmat[`k',3*`j'-1] = W[1,colnumb(W,"2.item`j':_cons")] // items avant le premier dif
+    mat outmat[`k',3*`j'] =   W[1,colnumb(W,"3.item`j':_cons")] // items avant le premier dif
+}
+  mat outmat[`k',3*`nbitems'+1] = W[1,colnumb(W,"1.item`difitems1':tt")] // coef de dif
+  mat outmat[`k',3*`nbitems'+2] = W[1,colnumb(W,"2.item`difitems1':tt")] // coef de dif
+  mat outmat[`k',3*`nbitems'+3] = W[1,colnumb(W,"3.item`difitems1':tt")] // coef de dif
+  mat outmat[`k',3*`nbitems'+4] = W[1,colnumb(W,"1.item`difitems2':tt")] // coef de dif
+  mat outmat[`k',3*`nbitems'+5] = W[1,colnumb(W,"2.item`difitems2':tt")] // coef de dif
+  mat outmat[`k',3*`nbitems'+6] = W[1,colnumb(W,"3.item`difitems2':tt")] // coef de dif
+  mat outmat[`k',3*`nbitems'+7] = W[1,colnumb(W,"THETA:tt")] // beta
+  mat outmat[`k',3*`nbitems'+8] = W[2,colnumb(W,"THETA:tt")] // se beta
+  mat outmat[`k',3*`nbitems'+9] = `difitems1' // numéro item de dif
+  mat outmat[`k',3*`nbitems'+10] = `difitems2' // numéro item de dif
+  restore
+}
+
+* replications sans problèmes
+else {
+  local difitems1=dif1
+  local difitems2=dif2
+forvalues i=1/`nbitems' {
+  if (`i'==`difitems1') {
+    local constrnt = "constraint 1 2*([1.item`i']_cons-([1.item`i']_cons+[1.item`i'] tt))=([2.item`i']_cons-([2.item`i']_cons+[2.item`i'] tt))"
+    local constrnt2 = "constraint 2 3*([1.item`i']_cons-([1.item`i']_cons+[1.item`i'] tt))=([3.item`i']_cons-([3.item`i']_cons+[3.item`i'] tt))"
+  }
+  if (`i'==`difitems2') {
+    local constrnt3 = "constraint 3 2*([1.item`i']_cons-([1.item`i']_cons+[1.item`i'] tt))=([2.item`i']_cons-([2.item`i']_cons+[2.item`i'] tt))"
+    local constrnt4 = "constraint 4 3*([1.item`i']_cons-([1.item`i']_cons+[1.item`i'] tt))=([3.item`i']_cons-([3.item`i']_cons+[3.item`i'] tt))"
+  }
+}
+local mod "gsem "
+forvalues i=1/`nbitems' {
+  if (`i'==`difitems1' | `i'==`difitems2') {
+    local mod = "`mod'"+"(1.item`i'<-THETA@1 tt)(2.item`i'<-THETA@2 tt)(3.item`i'<-THETA@3 tt)"
+  }
   else {
-    mat outmat[`k',3*`j'-2] = W[1,7*(`j'-1)+9] // items avant le premier dif
-    mat outmat[`k',3*`j'-1] = W[1,7*(`j'-1)+11] // items avant le premier dif
-    mat outmat[`k',3*`j'] =   W[1,7*(`j'-1)+13] // items avant le premier dif
+    local mod = "`mod'"+"(1.item`i'<-THETA@1)(2.item`i'<-THETA@2)(3.item`i'<-THETA@3)"
   }
+}
+local mod = "`mod'" + "(THETA<-tt), mlogit tol(0.01) iterate(500) latent(THETA) nocapslatent constraint(1 2 3 4)"
+qui `constrnt'
+qui `constrnt2'
+qui `constrnt3'
+qui `constrnt4'
+qui `mod'
+mat V=r(table)
+mat W=V[1..2,1...]
+forvalues j=1/`nbitems' {
+      mat outmat[`k',3*`j'-2] = W[1,colnumb(W,"1.item`j':_cons")] // items avant le premier dif
+      mat outmat[`k',3*`j'-1] = W[1,colnumb(W,"2.item`j':_cons")] // items avant le premier dif
+      mat outmat[`k',3*`j'] =   W[1,colnumb(W,"3.item`j':_cons")] // items avant le premier dif
   }
-    mat outmat[`k',3*`nbitems'+1] = W[1,7*(`difitemsmin'-1)+2] // coef de dif
-    mat outmat[`k',3*`nbitems'+2] = W[1,7*(`difitemsmin'-1)+5] // coef de dif
-    mat outmat[`k',3*`nbitems'+3] = W[1,7*(`difitemsmin'-1)+8] // coef de dif
-    mat outmat[`k',3*`nbitems'+4] = W[1,7*(`difitemsmax'-1)+5] // coef de dif
-    mat outmat[`k',3*`nbitems'+5] = W[1,7*(`difitemsmax'-1)+8] // coef de dif
-    mat outmat[`k',3*`nbitems'+6] = W[1,7*(`difitemsmax'-1)+11] // coef de dif
-    mat outmat[`k',3*`nbitems'+7] = W[1,7*`nbitems'+7] // beta
-    mat outmat[`k',3*`nbitems'+8] = W[2,7*`nbitems'+7] // se beta
-    mat outmat[`k',3*`nbitems'+9] = `difitemsmin' // numéro item de dif
-    mat outmat[`k',3*`nbitems'+10] = `difitemsmax' // numéro item de dif
-    restore
+  mat outmat[`k',3*`nbitems'+1] = W[1,colnumb(W,"1.item`difitems1':tt")] // coef de dif
+  mat outmat[`k',3*`nbitems'+2] = W[1,colnumb(W,"2.item`difitems1':tt")] // coef de dif
+  mat outmat[`k',3*`nbitems'+3] = W[1,colnumb(W,"3.item`difitems1':tt")] // coef de dif
+  mat outmat[`k',3*`nbitems'+4] = W[1,colnumb(W,"1.item`difitems2':tt")] // coef de dif
+  mat outmat[`k',3*`nbitems'+5] = W[1,colnumb(W,"2.item`difitems2':tt")] // coef de dif
+  mat outmat[`k',3*`nbitems'+6] = W[1,colnumb(W,"3.item`difitems2':tt")] // coef de dif
+  mat outmat[`k',3*`nbitems'+7] = W[1,colnumb(W,"THETA:tt")] // beta
+  mat outmat[`k',3*`nbitems'+8] = W[2,colnumb(W,"THETA:tt")] // se beta
+  mat outmat[`k',3*`nbitems'+9] = `difitems1' // numéro item de dif
+  mat outmat[`k',3*`nbitems'+10] = `difitems2' // numéro item de dif
+  restore
+}
 }
 putexcel set "`path_res'/out/16`scen'_`Nn'.xls", sheet("outmat") replace
 putexcel A1=matrix(outmat), colnames
 }
 }
 
+
 ***************************************************** Scenarios with DIF on 3 items
 
 * Load pcm.ado
@@ -1581,6 +2202,283 @@ forvalues k=1/1000 {
   }
   preserve
   qui keep if replication==`k'
+
+
+* MERGE des modalités si non représentées
+    local com_z = 0
+    qui gen comz = 0
+    forvalues j = 1 / `nbitems' {
+    local recoda_`j' = 0
+    qui tab item`j' if tt == 0, matrow(rect1_g0_`j') matcell(nbrt1_g0_`j')
+    local maxm`j'_t1_g0 = rect1_g0_`j'[r(r),1]
+    local minm`j'_t1_g0 = rect1_g0_`j'[1,1]
+
+    qui tab item`j' if tt == 1, matrow(rect1_g1_`j') matcell(nbrt1_g1_`j')
+    local minm`j'_t1_g1 = rect1_g1_`j'[1,1]
+    local maxm`j'_t1_g1 = rect1_g1_`j'[r(r),1]
+
+    local minm_`j' = min(`minm`j'_t1_g0',`minm`j'_t1_g1')
+    local maxm_`j' = max(`maxm`j'_t1_g0',`maxm`j'_t1_g1')
+    local nbm_`j' =  `=`maxm_`j''-`minm_`j'''
+
+    if `minm_`j'' != 0 & `com_z' == 0 {
+      local com_z = 1
+    }
+    qui count if item`j' == 3 & tt == 0
+    local mod3plac = r(N)
+    qui count if item`j' == 3 & tt == 1
+    local mod3tt = r(N)
+    local nb_rn3 = min(`mod3plac',`mod3tt')
+    if `nb_rn3'==0 {
+      qui replace comz = 1
+    }
+
+    forvalues m = 0/`=`nbm_`j''-1' {
+      qui count if item`j' == `m' & tt == 0
+      local nb_rn1_g0 = r(N)
+      qui count if item`j' == `m' & tt == 1
+      local nb_rn1_g1 = r(N)
+      local nb_rn = min(`nb_rn1_g0',`nb_rn1_g1')
+      if `nb_rn' == 0 {
+        qui replace comz = 1
+        local recoda_`j' = 1
+        if  `m' == 0 | `m' < `minm`j'_t1_g0' | `m' < `minm`j'_t1_g1' {
+          local stop = 1
+          forvalues kk = 1/`=`nbm_`j''-`m'' {
+            qui count if item`j' == `=`m' + `kk'' & tt == 0
+            local v`kk'1_0 = r(N)
+            qui count if item`j' == `=`m' + `kk'' & tt == 1
+            local v`kk'1_1 = r(N)
+            if (`v`kk'1_0' != 0 | `v`kk'1_1' != 0) & `stop' != 0 {
+              qui replace item`j'= `=`m'+`kk'' if item`j'==`m'
+              local zzz=`j'+`nbitems'
+              *qui replace item`zzz'=`=`m'+`kk'' if item``=`j'+`nbitems'''==`m'
+              *di  "WARNING SCENARIO `k': items `j': answers `m' and `=`m'+`kk'' merged"
+              local stop = 0
+            }
+          }
+        }
+        else if `m' == `=`nbm_`j''-1' | `m' >= `maxm`j'_t1_g1' {
+          local stop = 1
+          forvalues kk = 1/`=`m'' {
+            qui count if item`j' == `=`m' - `kk'' & tt == 0
+            local v`kk'1_0 = r(N)
+            qui count if item`j' == `=`m' - `kk'' & tt == 1
+            local v`kk'1_1 = r(N)
+            if (`v`kk'1_0' != 0 | `v`kk'1_1' != 0) & `stop' != 0 {
+              qui replace item`j'= `=`m' - `kk'' if item`j'==`m'
+              local zzz=`j'+`nbitems'
+              *qui replace item`zzz'= `=`m' - `kk'' if item`zzz'==`m'
+              *di  "WARNING SCENARIO `k': items `j': answers `m' and `=`m'+`kk'' merged"
+              local stop = 0
+            }
+          }
+        }
+        else {
+          if runiform()>0.5{
+            local stop = 1
+            forvalues kk = 1/`m' {
+              qui count if item`j' == `=`m' - `kk'' & tt == 0
+              local v`kk'1_0 = r(N)
+              qui count if item`j' == `=`m' - `kk'' & tt == 1
+              local v`kk'1_1 = r(N)
+              if (`v`kk'1_0' != 0 | `v`kk'1_1' != 0) & `stop' != 0 {
+                qui replace item`j'= `=`m'-`kk'' if item`j'==`m'
+                local zzz=`j'+`nbitems'
+                *qui replace item`zzz'=`=`m'-`kk'' if item``=`j'+`nbitems'''==`m'
+                *di  "WARNING SCENARIO `k': items `j': answers `m' and `=`m'+`kk'' merged"
+                local stop = 0
+              }
+            }
+          }
+          else {
+            local stop = 1
+            forvalues kk = 1/`=`nbm_`j''-`m'' {
+              qui count if item`j' == `=`m' + `kk'' & tt == 0
+              local v`kk'1_0 = r(N)
+              qui count if item`j' == `=`m' + `kk'' & tt == 1
+              local v`kk'1_1 = r(N)
+              if (`v`kk'1_0' != 0 | `v`kk'1_1' != 0) & `stop' != 0{
+                qui replace item`j'=`=`m' + `kk'' if item`j'==`m'
+                local zzz=`j'+`nbitems'
+                *qui replace item`zzz'=`=`m' + `kk'' if item``=`j'+`nbitems'''==`m'
+                *di  "WARNING SCENARIO `k': items `j': answers `m' and `=`m'+`kk'' merged"
+                local stop = 0
+              }
+              else {
+                if `stop' != 0 {
+                  qui replace item`j'= `nbm_`j'' if item`j'==`m'
+                  local zzz=`j'+`nbitems'
+                  *qui replace item`zzz'= `nbm_`j'' if item``=`j'+`nbitems'''==`m'
+                  *di  "WARNING SCENARIO `k': items `j': answers `m' and `=`m'+`kk'' merged"
+                  local stop = 0
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+    qui levelsof item`j'
+    local val = r(levels)
+    local checker: word 1 of `val'
+    local checker2: word 2 of `val'
+    local checker3: word 3 of `val'
+    if (`checker'!=0) {
+      qui recode item`j' (`checker'=0) (`checker2'=1) (`checker3'=2)
+    }
+    else if (`checker2'!=1) {
+      qui recode item`j' (`checker2'=1) (`checker3'=2)
+    }
+    else if (`checker3'!=2) {
+      qui recode item`j' (`checker3'=2)
+    }
+  }
+qui valuesof comz
+local val = r(values)
+local checker: word 1 of `val'
+
+* replications avec 3 mod
+if  (`checker' == 1)  {
+  local difitems1=dif1
+  local difitems2=dif2
+  local difitems3=dif3
+  local difcheck = 0
+  local difcheck2 = 0
+  local difcheck3 = 0
+forvalues i=1/`nbitems' {
+  qui sum item`i'
+  local checker2 = r(max)
+
+  if (`i'==`difitems1') {
+    if (`checker2'==3) {
+    local difcheck = 1
+    local constrnt = "constraint 1 2*([1.item`i']_cons-([1.item`i']_cons+[1.item`i'] tt))=([2.item`i']_cons-([2.item`i']_cons+[2.item`i'] tt))"
+    local constrnt3 = "constraint 3 3*([1.item`i']_cons-([1.item`i']_cons+[1.item`i'] tt))=([3.item`i']_cons-([3.item`i']_cons+[3.item`i'] tt))"
+  }
+  else {
+    local constrnt = "constraint 1 2*([1.item`i']_cons-([1.item`i']_cons+[1.item`i'] tt))=([2.item`i']_cons-([2.item`i']_cons+[2.item`i'] tt))"
+  }
+  }
+  if (`i'==`difitems2') {
+    if (`checker2'==3) {
+    local difcheck2=1
+    local constrnt2 = "constraint 2 2*([1.item`i']_cons-([1.item`i']_cons+[1.item`i'] tt))=([2.item`i']_cons-([2.item`i']_cons+[2.item`i'] tt))"
+    local constrnt4 = "constraint 4 3*([1.item`i']_cons-([1.item`i']_cons+[1.item`i'] tt))=([3.item`i']_cons-([3.item`i']_cons+[3.item`i'] tt))"
+  }
+  else {
+    local constrnt2 = "constraint 2 2*([1.item`i']_cons-([1.item`i']_cons+[1.item`i'] tt))=([2.item`i']_cons-([2.item`i']_cons+[2.item`i'] tt))"
+  }
+  }
+  if (`i'==`difitems3') {
+    if (`checker2'==3) {
+    local difcheck3=1
+    local constrnt5 = "constraint 5 2*([1.item`i']_cons-([1.item`i']_cons+[1.item`i'] tt))=([2.item`i']_cons-([2.item`i']_cons+[2.item`i'] tt))"
+    local constrnt6 = "constraint 6 3*([1.item`i']_cons-([1.item`i']_cons+[1.item`i'] tt))=([3.item`i']_cons-([3.item`i']_cons+[3.item`i'] tt))"
+  }
+  else {
+    local constrnt5 = "constraint 5 2*([1.item`i']_cons-([1.item`i']_cons+[1.item`i'] tt))=([2.item`i']_cons-([2.item`i']_cons+[2.item`i'] tt))"
+  }
+  }
+}
+
+local mod "gsem "
+forvalues i=1/`nbitems' {
+  qui sum item`i'
+  local checker2 = r(max)
+  if (`i'==`difitems1'| `i'==`difitems2'| `i'==`difitems3') {
+    if (`checker2'==3) {
+      local mod = "`mod'"+"(1.item`i'<-THETA@1 tt)(2.item`i'<-THETA@2 tt)(3.item`i'<-THETA@3 tt)"
+  }
+    else {
+      local mod = "`mod'"+"(1.item`i'<-THETA@1 tt)(2.item`i'<-THETA@2 tt)"
+    }
+  }
+  else {
+    if (`checker2'==3) {
+      local mod = "`mod'"+"(1.item`i'<-THETA@1)(2.item`i'<-THETA@2)(3.item`i'<-THETA@3)"
+  }
+  else {
+    local mod = "`mod'"+"(1.item`i'<-THETA@1)(2.item`i'<-THETA@2)"
+  }
+}
+}
+if (`difcheck'==1) {
+  if (`difcheck2'==1) {
+    if (`difcheck3'==1) {
+      local mod = "`mod'" + "(THETA<-tt), mlogit tol(0.01) iterate(500) latent(THETA) nocapslatent constraint(1 2 3 4 5 6)"
+    }
+    else {
+      local mod = "`mod'" + "(THETA<-tt), mlogit tol(0.01) iterate(500) latent(THETA) nocapslatent constraint(1 2 3 4 5)"
+    }
+  }
+  else {
+    if (`difcheck3'==1) {
+      local mod = "`mod'" + "(THETA<-tt), mlogit tol(0.01) iterate(500) latent(THETA) nocapslatent constraint(1 2 3 5 6)"
+    }
+    else {
+      local mod = "`mod'" + "(THETA<-tt), mlogit tol(0.01) iterate(500) latent(THETA) nocapslatent constraint(1 2 3 5)"
+    }
+  }
+}
+else {
+  if (`difcheck2'==1) {
+    if (`difcheck3'==1) {
+      local mod = "`mod'" + "(THETA<-tt), mlogit tol(0.01) iterate(500) latent(THETA) nocapslatent constraint(1 2 4 5 6)"
+    }
+    else {
+      local mod = "`mod'" + "(THETA<-tt), mlogit tol(0.01) iterate(500) latent(THETA) nocapslatent constraint(1 2 4 5)"
+    }
+  }
+  else {
+    if (`difcheck3'==1) {
+      local mod = "`mod'" + "(THETA<-tt), mlogit tol(0.01) iterate(500) latent(THETA) nocapslatent constraint(1 2 5 6)"
+    }
+    else {
+      local mod = "`mod'" + "(THETA<-tt), mlogit tol(0.01) iterate(500) latent(THETA) nocapslatent constraint(1 2 5)"
+    }
+  }
+}
+qui `constrnt'
+qui `constrnt2'
+qui `constrnt5'
+if (`difcheck'==1) {
+  qui `constrnt3'
+}
+if (`difcheck2'==1) {
+  qui `constrnt4'
+}
+if (`difcheck3'==1) {
+  qui `constrnt6'
+}
+qui `mod'
+mat V=r(table)
+mat W=V[1..2,1...]
+forvalues j=1/`nbitems' {
+
+    mat outmat[`k',3*`j'-2] = W[1,colnumb(W,"1.item`j':_cons")] // items avant le premier dif
+    mat outmat[`k',3*`j'-1] = W[1,colnumb(W,"2.item`j':_cons")] // items avant le premier dif
+    mat outmat[`k',3*`j'] =   W[1,colnumb(W,"3.item`j':_cons")] // items avant le premier dif
+}
+  mat outmat[`k',3*`nbitems'+1] = W[1,colnumb(W,"1.item`difitems1':tt")] // coef de dif
+  mat outmat[`k',3*`nbitems'+2] = W[1,colnumb(W,"2.item`difitems1':tt")] // coef de dif
+  mat outmat[`k',3*`nbitems'+3] = W[1,colnumb(W,"3.item`difitems1':tt")] // coef de dif
+  mat outmat[`k',3*`nbitems'+4] = W[1,colnumb(W,"1.item`difitems2':tt")] // coef de dif
+  mat outmat[`k',3*`nbitems'+5] = W[1,colnumb(W,"2.item`difitems2':tt")] // coef de dif
+  mat outmat[`k',3*`nbitems'+6] = W[1,colnumb(W,"3.item`difitems2':tt")] // coef de dif
+  mat outmat[`k',3*`nbitems'+7] = W[1,colnumb(W,"1.item`difitems3':tt")] // coef de dif
+  mat outmat[`k',3*`nbitems'+8] = W[1,colnumb(W,"2.item`difitems3':tt")] // coef de dif
+  mat outmat[`k',3*`nbitems'+9] = W[1,colnumb(W,"3.item`difitems3':tt")] // coef de dif
+  mat outmat[`k',3*`nbitems'+10] = W[1,colnumb(W,"THETA:tt")] // beta
+  mat outmat[`k',3*`nbitems'+11] = W[2,colnumb(W,"THETA:tt")] // se beta
+  mat outmat[`k',3*`nbitems'+12] = `difitems1' // numéro item de dif
+  mat outmat[`k',3*`nbitems'+13] = `difitems2' // numéro item de dif
+  mat outmat[`k',3*`nbitems'+14] = `difitems3' // numéro item de dif
+  restore
+}
+
+* replications sans problèmes
+else {
   local difitems1=dif1
   local difitems2=dif2
   local difitems3=dif3
@@ -1693,11 +2591,13 @@ forvalues k=1/1000 {
     mat outmat[`k',3*`nbitems'+14] = `difitemsmax' // numéro item de dif
     restore
 }
+}
 putexcel set "`path_res'/out/18`scen'_`Nn'.xls", sheet("outmat") replace
 putexcel A1=matrix(outmat), colnames
 }
 }
 
+
 ************************************************** Scenario 19: J = 7 items / M = 2 modalities / DIF size 0.5 x3
   local N = "50"
   foreach Nnn in `N' {
@@ -1814,6 +2714,283 @@ forvalues k=1/1000 {
   }
   preserve
   qui keep if replication==`k'
+
+
+* MERGE des modalités si non représentées
+    local com_z = 0
+    qui gen comz = 0
+    forvalues j = 1 / `nbitems' {
+    local recoda_`j' = 0
+    qui tab item`j' if tt == 0, matrow(rect1_g0_`j') matcell(nbrt1_g0_`j')
+    local maxm`j'_t1_g0 = rect1_g0_`j'[r(r),1]
+    local minm`j'_t1_g0 = rect1_g0_`j'[1,1]
+
+    qui tab item`j' if tt == 1, matrow(rect1_g1_`j') matcell(nbrt1_g1_`j')
+    local minm`j'_t1_g1 = rect1_g1_`j'[1,1]
+    local maxm`j'_t1_g1 = rect1_g1_`j'[r(r),1]
+
+    local minm_`j' = min(`minm`j'_t1_g0',`minm`j'_t1_g1')
+    local maxm_`j' = max(`maxm`j'_t1_g0',`maxm`j'_t1_g1')
+    local nbm_`j' =  `=`maxm_`j''-`minm_`j'''
+
+    if `minm_`j'' != 0 & `com_z' == 0 {
+      local com_z = 1
+    }
+    qui count if item`j' == 3 & tt == 0
+    local mod3plac = r(N)
+    qui count if item`j' == 3 & tt == 1
+    local mod3tt = r(N)
+    local nb_rn3 = min(`mod3plac',`mod3tt')
+    if `nb_rn3'==0 {
+      qui replace comz = 1
+    }
+
+    forvalues m = 0/`=`nbm_`j''-1' {
+      qui count if item`j' == `m' & tt == 0
+      local nb_rn1_g0 = r(N)
+      qui count if item`j' == `m' & tt == 1
+      local nb_rn1_g1 = r(N)
+      local nb_rn = min(`nb_rn1_g0',`nb_rn1_g1')
+      if `nb_rn' == 0 {
+        qui replace comz = 1
+        local recoda_`j' = 1
+        if  `m' == 0 | `m' < `minm`j'_t1_g0' | `m' < `minm`j'_t1_g1' {
+          local stop = 1
+          forvalues kk = 1/`=`nbm_`j''-`m'' {
+            qui count if item`j' == `=`m' + `kk'' & tt == 0
+            local v`kk'1_0 = r(N)
+            qui count if item`j' == `=`m' + `kk'' & tt == 1
+            local v`kk'1_1 = r(N)
+            if (`v`kk'1_0' != 0 | `v`kk'1_1' != 0) & `stop' != 0 {
+              qui replace item`j'= `=`m'+`kk'' if item`j'==`m'
+              local zzz=`j'+`nbitems'
+              *qui replace item`zzz'=`=`m'+`kk'' if item``=`j'+`nbitems'''==`m'
+              *di  "WARNING SCENARIO `k': items `j': answers `m' and `=`m'+`kk'' merged"
+              local stop = 0
+            }
+          }
+        }
+        else if `m' == `=`nbm_`j''-1' | `m' >= `maxm`j'_t1_g1' {
+          local stop = 1
+          forvalues kk = 1/`=`m'' {
+            qui count if item`j' == `=`m' - `kk'' & tt == 0
+            local v`kk'1_0 = r(N)
+            qui count if item`j' == `=`m' - `kk'' & tt == 1
+            local v`kk'1_1 = r(N)
+            if (`v`kk'1_0' != 0 | `v`kk'1_1' != 0) & `stop' != 0 {
+              qui replace item`j'= `=`m' - `kk'' if item`j'==`m'
+              local zzz=`j'+`nbitems'
+              *qui replace item`zzz'= `=`m' - `kk'' if item`zzz'==`m'
+              *di  "WARNING SCENARIO `k': items `j': answers `m' and `=`m'+`kk'' merged"
+              local stop = 0
+            }
+          }
+        }
+        else {
+          if runiform()>0.5{
+            local stop = 1
+            forvalues kk = 1/`m' {
+              qui count if item`j' == `=`m' - `kk'' & tt == 0
+              local v`kk'1_0 = r(N)
+              qui count if item`j' == `=`m' - `kk'' & tt == 1
+              local v`kk'1_1 = r(N)
+              if (`v`kk'1_0' != 0 | `v`kk'1_1' != 0) & `stop' != 0 {
+                qui replace item`j'= `=`m'-`kk'' if item`j'==`m'
+                local zzz=`j'+`nbitems'
+                *qui replace item`zzz'=`=`m'-`kk'' if item``=`j'+`nbitems'''==`m'
+                *di  "WARNING SCENARIO `k': items `j': answers `m' and `=`m'+`kk'' merged"
+                local stop = 0
+              }
+            }
+          }
+          else {
+            local stop = 1
+            forvalues kk = 1/`=`nbm_`j''-`m'' {
+              qui count if item`j' == `=`m' + `kk'' & tt == 0
+              local v`kk'1_0 = r(N)
+              qui count if item`j' == `=`m' + `kk'' & tt == 1
+              local v`kk'1_1 = r(N)
+              if (`v`kk'1_0' != 0 | `v`kk'1_1' != 0) & `stop' != 0{
+                qui replace item`j'=`=`m' + `kk'' if item`j'==`m'
+                local zzz=`j'+`nbitems'
+                *qui replace item`zzz'=`=`m' + `kk'' if item``=`j'+`nbitems'''==`m'
+                *di  "WARNING SCENARIO `k': items `j': answers `m' and `=`m'+`kk'' merged"
+                local stop = 0
+              }
+              else {
+                if `stop' != 0 {
+                  qui replace item`j'= `nbm_`j'' if item`j'==`m'
+                  local zzz=`j'+`nbitems'
+                  *qui replace item`zzz'= `nbm_`j'' if item``=`j'+`nbitems'''==`m'
+                  *di  "WARNING SCENARIO `k': items `j': answers `m' and `=`m'+`kk'' merged"
+                  local stop = 0
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+    qui levelsof item`j'
+    local val = r(levels)
+    local checker: word 1 of `val'
+    local checker2: word 2 of `val'
+    local checker3: word 3 of `val'
+    if (`checker'!=0) {
+      qui recode item`j' (`checker'=0) (`checker2'=1) (`checker3'=2)
+    }
+    else if (`checker2'!=1) {
+      qui recode item`j' (`checker2'=1) (`checker3'=2)
+    }
+    else if (`checker3'!=2) {
+      qui recode item`j' (`checker3'=2)
+    }
+  }
+qui valuesof comz
+local val = r(values)
+local checker: word 1 of `val'
+
+* replications avec 3 mod
+if  (`checker' == 1)  {
+  local difitems1=dif1
+  local difitems2=dif2
+  local difitems3=dif3
+  local difcheck = 0
+  local difcheck2 = 0
+  local difcheck3 = 0
+forvalues i=1/`nbitems' {
+  qui sum item`i'
+  local checker2 = r(max)
+
+  if (`i'==`difitems1') {
+    if (`checker2'==3) {
+    local difcheck = 1
+    local constrnt = "constraint 1 2*([1.item`i']_cons-([1.item`i']_cons+[1.item`i'] tt))=([2.item`i']_cons-([2.item`i']_cons+[2.item`i'] tt))"
+    local constrnt3 = "constraint 3 3*([1.item`i']_cons-([1.item`i']_cons+[1.item`i'] tt))=([3.item`i']_cons-([3.item`i']_cons+[3.item`i'] tt))"
+  }
+  else {
+    local constrnt = "constraint 1 2*([1.item`i']_cons-([1.item`i']_cons+[1.item`i'] tt))=([2.item`i']_cons-([2.item`i']_cons+[2.item`i'] tt))"
+  }
+  }
+  if (`i'==`difitems2') {
+    if (`checker2'==3) {
+    local difcheck2=1
+    local constrnt2 = "constraint 2 2*([1.item`i']_cons-([1.item`i']_cons+[1.item`i'] tt))=([2.item`i']_cons-([2.item`i']_cons+[2.item`i'] tt))"
+    local constrnt4 = "constraint 4 3*([1.item`i']_cons-([1.item`i']_cons+[1.item`i'] tt))=([3.item`i']_cons-([3.item`i']_cons+[3.item`i'] tt))"
+  }
+  else {
+    local constrnt2 = "constraint 2 2*([1.item`i']_cons-([1.item`i']_cons+[1.item`i'] tt))=([2.item`i']_cons-([2.item`i']_cons+[2.item`i'] tt))"
+  }
+  }
+  if (`i'==`difitems3') {
+    if (`checker2'==3) {
+    local difcheck3=1
+    local constrnt5 = "constraint 5 2*([1.item`i']_cons-([1.item`i']_cons+[1.item`i'] tt))=([2.item`i']_cons-([2.item`i']_cons+[2.item`i'] tt))"
+    local constrnt6 = "constraint 6 3*([1.item`i']_cons-([1.item`i']_cons+[1.item`i'] tt))=([3.item`i']_cons-([3.item`i']_cons+[3.item`i'] tt))"
+  }
+  else {
+    local constrnt5 = "constraint 5 2*([1.item`i']_cons-([1.item`i']_cons+[1.item`i'] tt))=([2.item`i']_cons-([2.item`i']_cons+[2.item`i'] tt))"
+  }
+  }
+}
+
+local mod "gsem "
+forvalues i=1/`nbitems' {
+  qui sum item`i'
+  local checker2 = r(max)
+  if (`i'==`difitems1'| `i'==`difitems2'| `i'==`difitems3') {
+    if (`checker2'==3) {
+      local mod = "`mod'"+"(1.item`i'<-THETA@1 tt)(2.item`i'<-THETA@2 tt)(3.item`i'<-THETA@3 tt)"
+  }
+    else {
+      local mod = "`mod'"+"(1.item`i'<-THETA@1 tt)(2.item`i'<-THETA@2 tt)"
+    }
+  }
+  else {
+    if (`checker2'==3) {
+      local mod = "`mod'"+"(1.item`i'<-THETA@1)(2.item`i'<-THETA@2)(3.item`i'<-THETA@3)"
+  }
+  else {
+    local mod = "`mod'"+"(1.item`i'<-THETA@1)(2.item`i'<-THETA@2)"
+  }
+}
+}
+if (`difcheck'==1) {
+  if (`difcheck2'==1) {
+    if (`difcheck3'==1) {
+      local mod = "`mod'" + "(THETA<-tt), mlogit tol(0.01) iterate(500) latent(THETA) nocapslatent constraint(1 2 3 4 5 6)"
+    }
+    else {
+      local mod = "`mod'" + "(THETA<-tt), mlogit tol(0.01) iterate(500) latent(THETA) nocapslatent constraint(1 2 3 4 5)"
+    }
+  }
+  else {
+    if (`difcheck3'==1) {
+      local mod = "`mod'" + "(THETA<-tt), mlogit tol(0.01) iterate(500) latent(THETA) nocapslatent constraint(1 2 3 5 6)"
+    }
+    else {
+      local mod = "`mod'" + "(THETA<-tt), mlogit tol(0.01) iterate(500) latent(THETA) nocapslatent constraint(1 2 3 5)"
+    }
+  }
+}
+else {
+  if (`difcheck2'==1) {
+    if (`difcheck3'==1) {
+      local mod = "`mod'" + "(THETA<-tt), mlogit tol(0.01) iterate(500) latent(THETA) nocapslatent constraint(1 2 4 5 6)"
+    }
+    else {
+      local mod = "`mod'" + "(THETA<-tt), mlogit tol(0.01) iterate(500) latent(THETA) nocapslatent constraint(1 2 4 5)"
+    }
+  }
+  else {
+    if (`difcheck3'==1) {
+      local mod = "`mod'" + "(THETA<-tt), mlogit tol(0.01) iterate(500) latent(THETA) nocapslatent constraint(1 2 5 6)"
+    }
+    else {
+      local mod = "`mod'" + "(THETA<-tt), mlogit tol(0.01) iterate(500) latent(THETA) nocapslatent constraint(1 2 5)"
+    }
+  }
+}
+qui `constrnt'
+qui `constrnt2'
+qui `constrnt5'
+if (`difcheck'==1) {
+  qui `constrnt3'
+}
+if (`difcheck2'==1) {
+  qui `constrnt4'
+}
+if (`difcheck3'==1) {
+  qui `constrnt6'
+}
+qui `mod'
+mat V=r(table)
+mat W=V[1..2,1...]
+forvalues j=1/`nbitems' {
+
+    mat outmat[`k',3*`j'-2] = W[1,colnumb(W,"1.item`j':_cons")] // items avant le premier dif
+    mat outmat[`k',3*`j'-1] = W[1,colnumb(W,"2.item`j':_cons")] // items avant le premier dif
+    mat outmat[`k',3*`j'] =   W[1,colnumb(W,"3.item`j':_cons")] // items avant le premier dif
+}
+  mat outmat[`k',3*`nbitems'+1] = W[1,colnumb(W,"1.item`difitems1':tt")] // coef de dif
+  mat outmat[`k',3*`nbitems'+2] = W[1,colnumb(W,"2.item`difitems1':tt")] // coef de dif
+  mat outmat[`k',3*`nbitems'+3] = W[1,colnumb(W,"3.item`difitems1':tt")] // coef de dif
+  mat outmat[`k',3*`nbitems'+4] = W[1,colnumb(W,"1.item`difitems2':tt")] // coef de dif
+  mat outmat[`k',3*`nbitems'+5] = W[1,colnumb(W,"2.item`difitems2':tt")] // coef de dif
+  mat outmat[`k',3*`nbitems'+6] = W[1,colnumb(W,"3.item`difitems2':tt")] // coef de dif
+  mat outmat[`k',3*`nbitems'+7] = W[1,colnumb(W,"1.item`difitems3':tt")] // coef de dif
+  mat outmat[`k',3*`nbitems'+8] = W[1,colnumb(W,"2.item`difitems3':tt")] // coef de dif
+  mat outmat[`k',3*`nbitems'+9] = W[1,colnumb(W,"3.item`difitems3':tt")] // coef de dif
+  mat outmat[`k',3*`nbitems'+10] = W[1,colnumb(W,"THETA:tt")] // beta
+  mat outmat[`k',3*`nbitems'+11] = W[2,colnumb(W,"THETA:tt")] // se beta
+  mat outmat[`k',3*`nbitems'+12] = `difitems1' // numéro item de dif
+  mat outmat[`k',3*`nbitems'+13] = `difitems2' // numéro item de dif
+  mat outmat[`k',3*`nbitems'+14] = `difitems3' // numéro item de dif
+  restore
+}
+
+* replications sans problèmes
+else {
   local difitems1=dif1
   local difitems2=dif2
   local difitems3=dif3
@@ -1926,6 +3103,7 @@ forvalues k=1/1000 {
     mat outmat[`k',3*`nbitems'+14] = `difitemsmax' // numéro item de dif
     restore
 }
+}
 putexcel set "`path_res'/out/20`scen'_`Nn'.xls", sheet("outmat") replace
 putexcel A1=matrix(outmat), colnames
 }
diff --git a/Scripts/Analysis/DIF/temp/temp.do b/Scripts/Analysis/DIF/temp/temp.do
index b725c9a..3852aa0 100644
--- a/Scripts/Analysis/DIF/temp/temp.do
+++ b/Scripts/Analysis/DIF/temp/temp.do
@@ -1,81 +1,3 @@
-
-
-
-** Scenario 11: J = 4 items / M = 2 modalities / DIF size 0.5 x2
-  local N = "50"
-  foreach Nnn in `N' {
-  local Nn =  `Nnn'
-  local path_data = "/home/corentin/Documents/These/Recherche/Simulations/Data/DIF/N`Nn'"
-  local path_res = "/home/corentin/Documents/These/Recherche/Simulations/Analysis/DIF/N`Nn'"
-  local scenarios = "A B C D E F G"
-  foreach scen in `scenarios' {
-  clear
-  import delim "`path_data'/scenario_11`scen'_`Nn'.csv", encoding(ISO-8859-2)  case(preserve) clear
-  rename TT tt
-
-  * Matrice de taille 1000 * 4 items + 1 DIF + beta + std beta + 1 dif
-  local nbitems = 4
-  local nbdif = 2
-  local taillemat = `nbitems'+`nbdif'+4
-  mat outmat = J(1000,`taillemat',.)
-  mat colnames outmat = "item1" "item2" "item3" "item4" "dif1" "dif2" "beta" "se_beta" "dif_item_1" "dif_item_2"
-  di "Scenario 11`scen' / N=`Nnn'"
-  forvalues k=1/1000 {
-    if (mod(`k',100)==0) {
-      di "`k'/1000"
-    }
-    preserve
-    qui keep if replication==`k'
-    local difitems1=dif1
-    local difitems2=dif2
-    if (`difitems1'<`difitems2') {
-      local difitemsmin `difitems1'
-      local difitemsmax `difitems2'
-    }
-    else {
-      local difitemsmin `difitems2'
-      local difitemsmax `difitems1'
-    }
-    local mod "gsem "
-    forvalues i=1/`nbitems' {
-      if (`i'==`difitemsmin' | `i'==`difitemsmax') {
-        local mod = "`mod'"+"(1.item`i'<-THETA@1 tt)"
-      }
-      else {
-        local mod = "`mod'"+"(1.item`i'<-THETA@1)"
-      }
-    }
-    local mod = "`mod'" + "(THETA<-tt), mlogit tol(0.01) iterate(500) latent(THETA) nocapslatent"
-    qui `mod'
-    mat V=r(table)
-    mat W=V[1..2,1...]
-    forvalues j=1/`nbitems' {
-      if (`j'<`difitemsmin') {
-        mat outmat[`k',`j'] = W[1,3*`j'] // items avant le premier dif
-      }
-      else if (`j'<`difitemsmax') {
-        mat outmat[`k',`j'] = W[1,1+3*`j'] // items après le premier dif
-      }
-      else {
-        mat outmat[`k',`j'] = W[1,2+3*`j'] // items après le deuxieme dif
-      }
-    }
-    mat outmat[`k',`nbitems'+1] = W[1,3*`difitemsmin'-1] // coef de dif
-    mat outmat[`k',`nbitems'+2] = W[1,3*`difitemsmax'] // coef de dif
-    mat outmat[`k',`nbitems'+3] = W[1,3*`nbitems'+3] // beta
-    mat outmat[`k',`nbitems'+4] = W[2,3*`nbitems'+3] // se beta
-    mat outmat[`k',`nbitems'+5] = `difitemsmin' // numéro item de dif
-    mat outmat[`k',`nbitems'+6] = `difitemsmax' // numéro item de dif
-    restore
-  }
-  putexcel set "`path_res'/out/11`scen'_`Nn'.xls", sheet("outmat") replace
-  putexcel A1=matrix(outmat), colnames
-}
-}
-
-
-
-** Scenario 12: J = 4 items / M = 4 modalities / DIF size 0.5 x2
 local N = "50"
 foreach Nnn in `N' {
 local Nn =  `Nnn'
@@ -84,837 +6,299 @@ local path_res = "/home/corentin/Documents/These/Recherche/Simulations/Analysis/
 local scenarios = "A B C D E F G"
 foreach scen in `scenarios' {
 clear
-import delim "`path_data'/scenario_12`scen'_`Nn'.csv", encoding(ISO-8859-2)  case(preserve) clear
+import delim "`path_data'/scenario_20`scen'_`Nn'.csv", encoding(ISO-8859-2)  case(preserve) clear
 rename TT tt
 
 * Matrice de taille 1000 * 4 items + 1 DIF + beta + std beta + 1 dif
-local nbitems = 4
-local nbdif = 2
-local taillemat = 3*`nbitems'+6+2+`nbdif'
+local nbitems = 7
+local nbdif = 3
+local taillemat = 3*`nbitems'+9+2+`nbdif'
 mat outmat = J(1000,`taillemat',.)
-mat colnames outmat = "item1_1" "item1_2" "item1_3" "item2_1" "item2_2" "item2_3" "item3_1" "item3_2" "item3_3" "item4_1" "item4_2" "item4_3" "dif1_1" "dif1_2" "dif1_3" "dif2_1" "dif2_2" "dif2_3" "beta" "se_beta" "dif_item_1" "dif_item_2"
-di "Scenario 12`scen' / N=`Nnn'"
+mat colnames outmat = "item1_1" "item1_2" "item1_3" "item2_1" "item2_2" "item2_3" "item3_1" "item3_2" "item3_3" "item4_1" "item4_2" "item4_3" "item5_1" "item5_2" "item5_3" "item6_1" "item6_2" "item6_3" "item7_1" "item7_2" "item7_3" "dif1_1" "dif1_2" "dif1_3" "dif2_1" "dif2_2" "dif2_3" "dif3_1" "dif3_2" "dif3_3" "beta" "se_beta" "dif_item_1" "dif_item_2" "dif_item_3"
+di "Scenario 20`scen' / N=`Nnn'"
 forvalues k=1/1000 {
   if (mod(`k',100)==0) {
     di "`k'/1000"
   }
   preserve
   qui keep if replication==`k'
+
+
+* MERGE des modalités si non représentées
+    local com_z = 0
+    qui gen comz = 0
+    forvalues j = 1 / `nbitems' {
+    local recoda_`j' = 0
+    qui tab item`j' if tt == 0, matrow(rect1_g0_`j') matcell(nbrt1_g0_`j')
+    local maxm`j'_t1_g0 = rect1_g0_`j'[r(r),1]
+    local minm`j'_t1_g0 = rect1_g0_`j'[1,1]
+
+    qui tab item`j' if tt == 1, matrow(rect1_g1_`j') matcell(nbrt1_g1_`j')
+    local minm`j'_t1_g1 = rect1_g1_`j'[1,1]
+    local maxm`j'_t1_g1 = rect1_g1_`j'[r(r),1]
+
+    local minm_`j' = min(`minm`j'_t1_g0',`minm`j'_t1_g1')
+    local maxm_`j' = max(`maxm`j'_t1_g0',`maxm`j'_t1_g1')
+    local nbm_`j' =  `=`maxm_`j''-`minm_`j'''
+
+    if `minm_`j'' != 0 & `com_z' == 0 {
+      local com_z = 1
+    }
+    qui count if item`j' == 3 & tt == 0
+    local mod3plac = r(N)
+    qui count if item`j' == 3 & tt == 1
+    local mod3tt = r(N)
+    local nb_rn3 = min(`mod3plac',`mod3tt')
+    if `nb_rn3'==0 {
+      qui replace comz = 1
+    }
+
+    forvalues m = 0/`=`nbm_`j''-1' {
+      qui count if item`j' == `m' & tt == 0
+      local nb_rn1_g0 = r(N)
+      qui count if item`j' == `m' & tt == 1
+      local nb_rn1_g1 = r(N)
+      local nb_rn = min(`nb_rn1_g0',`nb_rn1_g1')
+      if `nb_rn' == 0 {
+        qui replace comz = 1
+        local recoda_`j' = 1
+        if  `m' == 0 | `m' < `minm`j'_t1_g0' | `m' < `minm`j'_t1_g1' {
+          local stop = 1
+          forvalues kk = 1/`=`nbm_`j''-`m'' {
+            qui count if item`j' == `=`m' + `kk'' & tt == 0
+            local v`kk'1_0 = r(N)
+            qui count if item`j' == `=`m' + `kk'' & tt == 1
+            local v`kk'1_1 = r(N)
+            if (`v`kk'1_0' != 0 | `v`kk'1_1' != 0) & `stop' != 0 {
+              qui replace item`j'= `=`m'+`kk'' if item`j'==`m'
+              local zzz=`j'+`nbitems'
+              *qui replace item`zzz'=`=`m'+`kk'' if item``=`j'+`nbitems'''==`m'
+              *di  "WARNING SCENARIO `k': items `j': answers `m' and `=`m'+`kk'' merged"
+              local stop = 0
+            }
+          }
+        }
+        else if `m' == `=`nbm_`j''-1' | `m' >= `maxm`j'_t1_g1' {
+          local stop = 1
+          forvalues kk = 1/`=`m'' {
+            qui count if item`j' == `=`m' - `kk'' & tt == 0
+            local v`kk'1_0 = r(N)
+            qui count if item`j' == `=`m' - `kk'' & tt == 1
+            local v`kk'1_1 = r(N)
+            if (`v`kk'1_0' != 0 | `v`kk'1_1' != 0) & `stop' != 0 {
+              qui replace item`j'= `=`m' - `kk'' if item`j'==`m'
+              local zzz=`j'+`nbitems'
+              *qui replace item`zzz'= `=`m' - `kk'' if item`zzz'==`m'
+              *di  "WARNING SCENARIO `k': items `j': answers `m' and `=`m'+`kk'' merged"
+              local stop = 0
+            }
+          }
+        }
+        else {
+          if runiform()>0.5{
+            local stop = 1
+            forvalues kk = 1/`m' {
+              qui count if item`j' == `=`m' - `kk'' & tt == 0
+              local v`kk'1_0 = r(N)
+              qui count if item`j' == `=`m' - `kk'' & tt == 1
+              local v`kk'1_1 = r(N)
+              if (`v`kk'1_0' != 0 | `v`kk'1_1' != 0) & `stop' != 0 {
+                qui replace item`j'= `=`m'-`kk'' if item`j'==`m'
+                local zzz=`j'+`nbitems'
+                *qui replace item`zzz'=`=`m'-`kk'' if item``=`j'+`nbitems'''==`m'
+                *di  "WARNING SCENARIO `k': items `j': answers `m' and `=`m'+`kk'' merged"
+                local stop = 0
+              }
+            }
+          }
+          else {
+            local stop = 1
+            forvalues kk = 1/`=`nbm_`j''-`m'' {
+              qui count if item`j' == `=`m' + `kk'' & tt == 0
+              local v`kk'1_0 = r(N)
+              qui count if item`j' == `=`m' + `kk'' & tt == 1
+              local v`kk'1_1 = r(N)
+              if (`v`kk'1_0' != 0 | `v`kk'1_1' != 0) & `stop' != 0{
+                qui replace item`j'=`=`m' + `kk'' if item`j'==`m'
+                local zzz=`j'+`nbitems'
+                *qui replace item`zzz'=`=`m' + `kk'' if item``=`j'+`nbitems'''==`m'
+                *di  "WARNING SCENARIO `k': items `j': answers `m' and `=`m'+`kk'' merged"
+                local stop = 0
+              }
+              else {
+                if `stop' != 0 {
+                  qui replace item`j'= `nbm_`j'' if item`j'==`m'
+                  local zzz=`j'+`nbitems'
+                  *qui replace item`zzz'= `nbm_`j'' if item``=`j'+`nbitems'''==`m'
+                  *di  "WARNING SCENARIO `k': items `j': answers `m' and `=`m'+`kk'' merged"
+                  local stop = 0
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+    qui levelsof item`j'
+    local val = r(levels)
+    local checker: word 1 of `val'
+    local checker2: word 2 of `val'
+    local checker3: word 3 of `val'
+    if (`checker'!=0) {
+      qui recode item`j' (`checker'=0) (`checker2'=1) (`checker3'=2)
+    }
+    else if (`checker2'!=1) {
+      qui recode item`j' (`checker2'=1) (`checker3'=2)
+    }
+    else if (`checker3'!=2) {
+      qui recode item`j' (`checker3'=2)
+    }
+  }
+qui valuesof comz
+local val = r(values)
+local checker: word 1 of `val'
+
+* replications avec 3 mod
+if  (`checker' == 1)  {
   local difitems1=dif1
   local difitems2=dif2
-  if (`difitems1'<`difitems2') {
-    local difitemsmin `difitems1'
-    local difitemsmax `difitems2'
+  local difitems3=dif3
+  local difcheck = 0
+  local difcheck2 = 0
+  local difcheck3 = 0
+forvalues i=1/`nbitems' {
+  qui sum item`i'
+  local checker2 = r(max)
+
+  if (`i'==`difitems1') {
+    if (`checker2'==3) {
+    local difcheck = 1
+    local constrnt = "constraint 1 2*([1.item`i']_cons-([1.item`i']_cons+[1.item`i'] tt))=([2.item`i']_cons-([2.item`i']_cons+[2.item`i'] tt))"
+    local constrnt3 = "constraint 3 3*([1.item`i']_cons-([1.item`i']_cons+[1.item`i'] tt))=([3.item`i']_cons-([3.item`i']_cons+[3.item`i'] tt))"
   }
   else {
-    local difitemsmin `difitems2'
-    local difitemsmax `difitems1'
+    local constrnt = "constraint 1 2*([1.item`i']_cons-([1.item`i']_cons+[1.item`i'] tt))=([2.item`i']_cons-([2.item`i']_cons+[2.item`i'] tt))"
   }
-  forvalues i=1/`nbitems' {
-    if (`i'==`difitemsmin') {
-      local constrnt = "constraint 1 2*([1.item`i']_cons-([1.item`i']_cons+[1.item`i'] tt))=([2.item`i']_cons-([2.item`i']_cons+[2.item`i'] tt))"
-      local constrnt2 = "constraint 2 3*([1.item`i']_cons-([1.item`i']_cons+[1.item`i'] tt))=([3.item`i']_cons-([3.item`i']_cons+[3.item`i'] tt))"
-    }
   }
-  forvalues i=1/`nbitems' {
-    if (`i'==`difitemsmax') {
-      local constrn3 = "constraint 3 2*([1.item`i']_cons-([1.item`i']_cons+[1.item`i'] tt))=([2.item`i']_cons-([2.item`i']_cons+[2.item`i'] tt))"
-      local constrnt4 = "constraint 4 3*([1.item`i']_cons-([1.item`i']_cons+[1.item`i'] tt))=([3.item`i']_cons-([3.item`i']_cons+[3.item`i'] tt))"
-    }
+  if (`i'==`difitems2') {
+    if (`checker2'==3) {
+    local difcheck2=1
+    local constrnt2 = "constraint 2 2*([1.item`i']_cons-([1.item`i']_cons+[1.item`i'] tt))=([2.item`i']_cons-([2.item`i']_cons+[2.item`i'] tt))"
+    local constrnt4 = "constraint 4 3*([1.item`i']_cons-([1.item`i']_cons+[1.item`i'] tt))=([3.item`i']_cons-([3.item`i']_cons+[3.item`i'] tt))"
   }
-  local mod "gsem "
-  forvalues i=1/`nbitems' {
-    if (`i'==`difitemsmin' | `i'==`difitemsmax') {
-      local mod = "`mod'"+"(1.item`i'<-THETA@1 tt)(2.item`i'<-THETA@2 tt)(3.item`i'<-THETA@3 tt)"
-    }
-    else {
-      local mod = "`mod'"+"(1.item`i'<-THETA@1)(2.item`i'<-THETA@2)(3.item`i'<-THETA@3)"
-    }
-  }
-  local mod = "`mod'" + "(THETA<-tt), mlogit tol(0.01) iterate(500) latent(THETA) nocapslatent constraint(1 2 3 4)"
-  qui `constrnt'
-  qui `constrnt2'
-  qui `constrnt3'
-  qui `constrnt4'
-  qui `mod'
-  mat V=r(table)
-  mat W=V[1..2,1...]
-  forvalues j=1/`nbitems' {
-  if (`j'<`difitemsmin') {
-      mat outmat[`k',3*`j'-2] = W[1,7*(`j'-1)+3] // items avant le premier dif
-      mat outmat[`k',3*`j'-1] = W[1,7*(`j'-1)+5] // items avant le premier dif
-      mat outmat[`k',3*`j'] =   W[1,7*(`j'-1)+7] // items avant le premier dif
-      }
-  else if (`j'==`difitemsmin') {
-      mat outmat[`k',3*`j'-2] = W[1,7*(`j'-1)+4] // items du le premier dif
-      mat outmat[`k',3*`j'-1] = W[1,7*(`j'-1)+7] // items du le premier dif
-      mat outmat[`k',3*`j'] =   W[1,7*(`j'-1)+10] // items du le premier dif    }
-    }
-  else if (`j'<`difitemsmax') {
-      mat outmat[`k',3*`j'-2] = W[1,7*(`j'-1)+6] // items avant le premier dif
-      mat outmat[`k',3*`j'-1] = W[1,7*(`j'-1)+8] // items avant le premier dif
-      mat outmat[`k',3*`j'] =   W[1,7*(`j'-1)+10] // items avant le premier dif
-    }
-  else if (`j'==`difitemsmax') {
-      mat outmat[`k',3*`j'-2] = W[1,7*(`j'-1)+7] // items avant le premier dif
-      mat outmat[`k',3*`j'-1] = W[1,7*(`j'-1)+10] // items avant le premier dif
-      mat outmat[`k',3*`j'] =   W[1,7*(`j'-1)+13] // items avant le premier dif
-    }
   else {
-    mat outmat[`k',3*`j'-2] = W[1,7*(`j'-1)+9] // items avant le premier dif
-    mat outmat[`k',3*`j'-1] = W[1,7*(`j'-1)+11] // items avant le premier dif
-    mat outmat[`k',3*`j'] =   W[1,7*(`j'-1)+13] // items avant le premier dif
+    local constrnt2 = "constraint 2 2*([1.item`i']_cons-([1.item`i']_cons+[1.item`i'] tt))=([2.item`i']_cons-([2.item`i']_cons+[2.item`i'] tt))"
   }
   }
-    mat outmat[`k',3*`nbitems'+1] = W[1,7*(`difitemsmin'-1)+2] // coef de dif
-    mat outmat[`k',3*`nbitems'+2] = W[1,7*(`difitemsmin'-1)+5] // coef de dif
-    mat outmat[`k',3*`nbitems'+3] = W[1,7*(`difitemsmin'-1)+8] // coef de dif
-    mat outmat[`k',3*`nbitems'+4] = W[1,7*(`difitemsmax'-1)+5] // coef de dif
-    mat outmat[`k',3*`nbitems'+5] = W[1,7*(`difitemsmax'-1)+8] // coef de dif
-    mat outmat[`k',3*`nbitems'+6] = W[1,7*(`difitemsmax'-1)+11] // coef de dif
-    mat outmat[`k',3*`nbitems'+7] = W[1,7*`nbitems'+7] // beta
-    mat outmat[`k',3*`nbitems'+8] = W[2,7*`nbitems'+7] // se beta
-    mat outmat[`k',3*`nbitems'+9] = `difitemsmin' // numéro item de dif
-    mat outmat[`k',3*`nbitems'+10] = `difitemsmax' // numéro item de dif
-    restore
-}
-putexcel set "`path_res'/out/12`scen'_`Nn'.xls", sheet("outmat") replace
-putexcel A1=matrix(outmat), colnames
-}
-}
-
-
-
-*==========================
-* Scenarios with : J=7
-*==========================
-
-
-****** Scenarios with DIF on 2 items
-
-* Load pcm.ado
-adopath+"/home/corentin/Documents/These/Recherche/Simulations/Modules/"
-
-** Scenario 13: J = 7 items / M = 2 modalities / DIF size 0.3 x2
-  local N = "50"
-  foreach Nnn in `N' {
-  local Nn =  `Nnn'
-  local path_data = "/home/corentin/Documents/These/Recherche/Simulations/Data/DIF/N`Nn'"
-  local path_res = "/home/corentin/Documents/These/Recherche/Simulations/Analysis/DIF/N`Nn'"
-  local scenarios = "A B C D E F G"
-  foreach scen in `scenarios' {
-  clear
-  import delim "`path_data'/scenario_13`scen'_`Nn'.csv", encoding(ISO-8859-2)  case(preserve) clear
-  rename TT tt
-
-  * Matrice de taille 1000 * 4 items + 1 DIF + beta + std beta + 1 dif
-  local nbitems = 7
-  local nbdif = 2
-  local taillemat = `nbitems'+`nbdif'+4
-  mat outmat = J(1000,`taillemat',.)
-  mat colnames outmat = "item1" "item2" "item3" "item4" "item5" "item6" "item7" "dif1" "dif2" "beta" "se_beta" "dif_item_1" "dif_item_2"
-  di "Scenario 13`scen' / N=`Nnn'"
-  forvalues k=1/1000 {
-    if (mod(`k',100)==0) {
-      di "`k'/1000"
-    }
-    preserve
-    qui keep if replication==`k'
-    local difitems1=dif1
-    local difitems2=dif2
-    if (`difitems1'<`difitems2') {
-      local difitemsmin `difitems1'
-      local difitemsmax `difitems2'
-    }
-    else {
-      local difitemsmin `difitems2'
-      local difitemsmax `difitems1'
-    }
-    local mod "gsem "
-    forvalues i=1/`nbitems' {
-      if (`i'==`difitemsmin' | `i'==`difitemsmax') {
-        local mod = "`mod'"+"(1.item`i'<-THETA@1 tt)"
-      }
-      else {
-        local mod = "`mod'"+"(1.item`i'<-THETA@1)"
-      }
-    }
-    local mod = "`mod'" + "(THETA<-tt), mlogit tol(0.01) iterate(500) latent(THETA) nocapslatent"
-    qui `mod'
-    mat V=r(table)
-    mat W=V[1..2,1...]
-    forvalues j=1/`nbitems' {
-      if (`j'<`difitemsmin') {
-        mat outmat[`k',`j'] = W[1,3*`j'] // items avant le premier dif
-      }
-      else if (`j'<`difitemsmax') {
-        mat outmat[`k',`j'] = W[1,1+3*`j'] // items après le premier dif
-      }
-      else {
-        mat outmat[`k',`j'] = W[1,2+3*`j'] // items après le deuxieme dif
-      }
-    }
-    mat outmat[`k',`nbitems'+1] = W[1,3*`difitemsmin'-1] // coef de dif
-    mat outmat[`k',`nbitems'+2] = W[1,3*`difitemsmax'] // coef de dif
-    mat outmat[`k',`nbitems'+3] = W[1,3*`nbitems'+3] // beta
-    mat outmat[`k',`nbitems'+4] = W[2,3*`nbitems'+3] // se beta
-    mat outmat[`k',`nbitems'+5] = `difitemsmin' // numéro item de dif
-    mat outmat[`k',`nbitems'+6] = `difitemsmax' // numéro item de dif
-    restore
-  }
-  putexcel set "`path_res'/out/13`scen'_`Nn'.xls", sheet("outmat") replace
-  putexcel A1=matrix(outmat), colnames
-}
-}
-
-
-
-** Scenario 14: J = 7 items / M = 4 modalities / DIF size 0.3 x2
-local N = "50"
-foreach Nnn in `N' {
-local Nn =  `Nnn'
-local path_data = "/home/corentin/Documents/These/Recherche/Simulations/Data/DIF/N`Nn'"
-local path_res = "/home/corentin/Documents/These/Recherche/Simulations/Analysis/DIF/N`Nn'"
-local scenarios = "A B C D E F G"
-foreach scen in `scenarios' {
-clear
-import delim "`path_data'/scenario_14`scen'_`Nn'.csv", encoding(ISO-8859-2)  case(preserve) clear
-rename TT tt
-
-* Matrice de taille 1000 * 4 items + 1 DIF + beta + std beta + 1 dif
-local nbitems = 7
-local nbdif = 2
-local taillemat = 3*`nbitems'+6+2+`nbdif'
-mat outmat = J(1000,`taillemat',.)
-mat colnames outmat = "item1_1" "item1_2" "item1_3" "item2_1" "item2_2" "item2_3" "item3_1" "item3_2" "item3_3" "item4_1" "item4_2" "item4_3" "item5_1" "item5_2" "item5_3" "item6_1" "item6_2" "item6_3" "item7_1" "item7_2" "item7_3" "dif1_1" "dif1_2" "dif1_3" "dif2_1" "dif2_2" "dif2_3" "beta" "se_beta" "dif_item_1" "dif_item_2"
-di "Scenario 14`scen' / N=`Nnn'"
-forvalues k=1/1000 {
-  if (mod(`k',100)==0) {
-    di "`k'/1000"
-  }
-  preserve
-  qui keep if replication==`k'
-  local difitems1=dif1
-  local difitems2=dif2
-  if (`difitems1'<`difitems2') {
-    local difitemsmin `difitems1'
-    local difitemsmax `difitems2'
+  if (`i'==`difitems3') {
+    if (`checker2'==3) {
+    local difcheck3=1
+    local constrnt5 = "constraint 5 2*([1.item`i']_cons-([1.item`i']_cons+[1.item`i'] tt))=([2.item`i']_cons-([2.item`i']_cons+[2.item`i'] tt))"
+    local constrnt6 = "constraint 6 3*([1.item`i']_cons-([1.item`i']_cons+[1.item`i'] tt))=([3.item`i']_cons-([3.item`i']_cons+[3.item`i'] tt))"
   }
   else {
-    local difitemsmin `difitems2'
-    local difitemsmax `difitems1'
+    local constrnt5 = "constraint 5 2*([1.item`i']_cons-([1.item`i']_cons+[1.item`i'] tt))=([2.item`i']_cons-([2.item`i']_cons+[2.item`i'] tt))"
   }
-  forvalues i=1/`nbitems' {
-    if (`i'==`difitemsmin') {
-      local constrnt = "constraint 1 2*([1.item`i']_cons-([1.item`i']_cons+[1.item`i'] tt))=([2.item`i']_cons-([2.item`i']_cons+[2.item`i'] tt))"
-      local constrnt2 = "constraint 2 3*([1.item`i']_cons-([1.item`i']_cons+[1.item`i'] tt))=([3.item`i']_cons-([3.item`i']_cons+[3.item`i'] tt))"
-    }
-  }
-  forvalues i=1/`nbitems' {
-    if (`i'==`difitemsmax') {
-      local constrn3 = "constraint 3 2*([1.item`i']_cons-([1.item`i']_cons+[1.item`i'] tt))=([2.item`i']_cons-([2.item`i']_cons+[2.item`i'] tt))"
-      local constrnt4 = "constraint 4 3*([1.item`i']_cons-([1.item`i']_cons+[1.item`i'] tt))=([3.item`i']_cons-([3.item`i']_cons+[3.item`i'] tt))"
-    }
   }
-  local mod "gsem "
-  forvalues i=1/`nbitems' {
-    if (`i'==`difitemsmin' | `i'==`difitemsmax') {
+}
+
+local mod "gsem "
+forvalues i=1/`nbitems' {
+  qui sum item`i'
+  local checker2 = r(max)
+  if (`i'==`difitems1'| `i'==`difitems2'| `i'==`difitems3') {
+    if (`checker2'==3) {
       local mod = "`mod'"+"(1.item`i'<-THETA@1 tt)(2.item`i'<-THETA@2 tt)(3.item`i'<-THETA@3 tt)"
-    }
+  }
     else {
-      local mod = "`mod'"+"(1.item`i'<-THETA@1)(2.item`i'<-THETA@2)(3.item`i'<-THETA@3)"
+      local mod = "`mod'"+"(1.item`i'<-THETA@1 tt)(2.item`i'<-THETA@2 tt)"
     }
   }
-  local mod = "`mod'" + "(THETA<-tt), mlogit tol(0.01) iterate(500) latent(THETA) nocapslatent constraint(1 2 3 4)"
-  qui `constrnt'
-  qui `constrnt2'
-  qui `constrnt3'
-  qui `constrnt4'
-  qui `mod'
-  mat V=r(table)
-  mat W=V[1..2,1...]
-  forvalues j=1/`nbitems' {
-  if (`j'<`difitemsmin') {
-      mat outmat[`k',3*`j'-2] = W[1,7*(`j'-1)+3] // items avant le premier dif
-      mat outmat[`k',3*`j'-1] = W[1,7*(`j'-1)+5] // items avant le premier dif
-      mat outmat[`k',3*`j'] =   W[1,7*(`j'-1)+7] // items avant le premier dif
-      }
-  else if (`j'==`difitemsmin') {
-      mat outmat[`k',3*`j'-2] = W[1,7*(`j'-1)+4] // items du le premier dif
-      mat outmat[`k',3*`j'-1] = W[1,7*(`j'-1)+7] // items du le premier dif
-      mat outmat[`k',3*`j'] =   W[1,7*(`j'-1)+10] // items du le premier dif    }
-    }
-  else if (`j'<`difitemsmax') {
-      mat outmat[`k',3*`j'-2] = W[1,7*(`j'-1)+6] // items avant le premier dif
-      mat outmat[`k',3*`j'-1] = W[1,7*(`j'-1)+8] // items avant le premier dif
-      mat outmat[`k',3*`j'] =   W[1,7*(`j'-1)+10] // items avant le premier dif
-    }
-  else if (`j'==`difitemsmax') {
-      mat outmat[`k',3*`j'-2] = W[1,7*(`j'-1)+7] // items avant le premier dif
-      mat outmat[`k',3*`j'-1] = W[1,7*(`j'-1)+10] // items avant le premier dif
-      mat outmat[`k',3*`j'] =   W[1,7*(`j'-1)+13] // items avant le premier dif
-    }
   else {
-    mat outmat[`k',3*`j'-2] = W[1,7*(`j'-1)+9] // items avant le premier dif
-    mat outmat[`k',3*`j'-1] = W[1,7*(`j'-1)+11] // items avant le premier dif
-    mat outmat[`k',3*`j'] =   W[1,7*(`j'-1)+13] // items avant le premier dif
+    if (`checker2'==3) {
+      local mod = "`mod'"+"(1.item`i'<-THETA@1)(2.item`i'<-THETA@2)(3.item`i'<-THETA@3)"
   }
+  else {
+    local mod = "`mod'"+"(1.item`i'<-THETA@1)(2.item`i'<-THETA@2)"
   }
-    mat outmat[`k',3*`nbitems'+1] = W[1,7*(`difitemsmin'-1)+2] // coef de dif
-    mat outmat[`k',3*`nbitems'+2] = W[1,7*(`difitemsmin'-1)+5] // coef de dif
-    mat outmat[`k',3*`nbitems'+3] = W[1,7*(`difitemsmin'-1)+8] // coef de dif
-    mat outmat[`k',3*`nbitems'+4] = W[1,7*(`difitemsmax'-1)+5] // coef de dif
-    mat outmat[`k',3*`nbitems'+5] = W[1,7*(`difitemsmax'-1)+8] // coef de dif
-    mat outmat[`k',3*`nbitems'+6] = W[1,7*(`difitemsmax'-1)+11] // coef de dif
-    mat outmat[`k',3*`nbitems'+7] = W[1,7*`nbitems'+7] // beta
-    mat outmat[`k',3*`nbitems'+8] = W[2,7*`nbitems'+7] // se beta
-    mat outmat[`k',3*`nbitems'+9] = `difitemsmin' // numéro item de dif
-    mat outmat[`k',3*`nbitems'+10] = `difitemsmax' // numéro item de dif
-    restore
-}
-putexcel set "`path_res'/out/14`scen'_`Nn'.xls", sheet("outmat") replace
-putexcel A1=matrix(outmat), colnames
 }
 }
-
-
-
-** Scenario 15: J = 7 items / M = 2 modalities / DIF size 0.5 x2
-  local N = "50"
-  foreach Nnn in `N' {
-  local Nn =  `Nnn'
-  local path_data = "/home/corentin/Documents/These/Recherche/Simulations/Data/DIF/N`Nn'"
-  local path_res = "/home/corentin/Documents/These/Recherche/Simulations/Analysis/DIF/N`Nn'"
-  local scenarios = "A B C D E F G"
-  foreach scen in `scenarios' {
-  clear
-  import delim "`path_data'/scenario_15`scen'_`Nn'.csv", encoding(ISO-8859-2)  case(preserve) clear
-  rename TT tt
-
-  * Matrice de taille 1000 * 4 items + 1 DIF + beta + std beta + 1 dif
-  local nbitems = 7
-  local nbdif = 2
-  local taillemat = `nbitems'+`nbdif'+4
-  mat outmat = J(1000,`taillemat',.)
-  mat colnames outmat = "item1" "item2" "item3" "item4" "item5" "item6" "item7" "dif1" "dif2" "beta" "se_beta" "dif_item_1" "dif_item_2"
-  di "Scenario 15`scen' / N=`Nnn'"
-  forvalues k=1/1000 {
-    if (mod(`k',100)==0) {
-      di "`k'/1000"
-    }
-    preserve
-    qui keep if replication==`k'
-    local difitems1=dif1
-    local difitems2=dif2
-    if (`difitems1'<`difitems2') {
-      local difitemsmin `difitems1'
-      local difitemsmax `difitems2'
+if (`difcheck'==1) {
+  if (`difcheck2'==1) {
+    if (`difcheck3'==1) {
+      local mod = "`mod'" + "(THETA<-tt), mlogit tol(0.01) iterate(500) latent(THETA) nocapslatent constraint(1 2 3 4 5 6)"
     }
     else {
-      local difitemsmin `difitems2'
-      local difitemsmax `difitems1'
+      local mod = "`mod'" + "(THETA<-tt), mlogit tol(0.01) iterate(500) latent(THETA) nocapslatent constraint(1 2 3 4 5)"
     }
-    local mod "gsem "
-    forvalues i=1/`nbitems' {
-      if (`i'==`difitemsmin' | `i'==`difitemsmax') {
-        local mod = "`mod'"+"(1.item`i'<-THETA@1 tt)"
-      }
-      else {
-        local mod = "`mod'"+"(1.item`i'<-THETA@1)"
-      }
-    }
-    local mod = "`mod'" + "(THETA<-tt), mlogit tol(0.01) iterate(500) latent(THETA) nocapslatent"
-    qui `mod'
-    mat V=r(table)
-    mat W=V[1..2,1...]
-    forvalues j=1/`nbitems' {
-      if (`j'<`difitemsmin') {
-        mat outmat[`k',`j'] = W[1,3*`j'] // items avant le premier dif
-      }
-      else if (`j'<`difitemsmax') {
-        mat outmat[`k',`j'] = W[1,1+3*`j'] // items après le premier dif
-      }
-      else {
-        mat outmat[`k',`j'] = W[1,2+3*`j'] // items après le deuxieme dif
-      }
-    }
-    mat outmat[`k',`nbitems'+1] = W[1,3*`difitemsmin'-1] // coef de dif
-    mat outmat[`k',`nbitems'+2] = W[1,3*`difitemsmax'] // coef de dif
-    mat outmat[`k',`nbitems'+3] = W[1,3*`nbitems'+3] // beta
-    mat outmat[`k',`nbitems'+4] = W[2,3*`nbitems'+3] // se beta
-    mat outmat[`k',`nbitems'+5] = `difitemsmin' // numéro item de dif
-    mat outmat[`k',`nbitems'+6] = `difitemsmax' // numéro item de dif
-    restore
-  }
-  putexcel set "`path_res'/out/15`scen'_`Nn'.xls", sheet("outmat") replace
-  putexcel A1=matrix(outmat), colnames
-}
-}
-
-
-
-** Scenario 16: J = 7 items / M = 4 modalities / DIF size 0.5 x2
-local N = "50"
-foreach Nnn in `N' {
-local Nn =  `Nnn'
-local path_data = "/home/corentin/Documents/These/Recherche/Simulations/Data/DIF/N`Nn'"
-local path_res = "/home/corentin/Documents/These/Recherche/Simulations/Analysis/DIF/N`Nn'"
-local scenarios = "A B C D E F G"
-foreach scen in `scenarios' {
-clear
-import delim "`path_data'/scenario_16`scen'_`Nn'.csv", encoding(ISO-8859-2)  case(preserve) clear
-rename TT tt
-
-* Matrice de taille 1000 * 4 items + 1 DIF + beta + std beta + 1 dif
-local nbitems = 7
-local nbdif = 2
-local taillemat = 3*`nbitems'+6+2+`nbdif'
-mat outmat = J(1000,`taillemat',.)
-mat colnames outmat = "item1_1" "item1_2" "item1_3" "item2_1" "item2_2" "item2_3" "item3_1" "item3_2" "item3_3" "item4_1" "item4_2" "item4_3" "item5_1" "item5_2" "item5_3" "item6_1" "item6_2" "item6_3" "item7_1" "item7_2" "item7_3" "dif1_1" "dif1_2" "dif1_3" "dif2_1" "dif2_2" "dif2_3" "beta" "se_beta" "dif_item_1" "dif_item_2"
-di "Scenario 16`scen' / N=`Nnn'"
-forvalues k=1/1000 {
-  if (mod(`k',100)==0) {
-    di "`k'/1000"
-  }
-  preserve
-  qui keep if replication==`k'
-  local difitems1=dif1
-  local difitems2=dif2
-  if (`difitems1'<`difitems2') {
-    local difitemsmin `difitems1'
-    local difitemsmax `difitems2'
   }
   else {
-    local difitemsmin `difitems2'
-    local difitemsmax `difitems1'
-  }
-  forvalues i=1/`nbitems' {
-    if (`i'==`difitemsmin') {
-      local constrnt = "constraint 1 2*([1.item`i']_cons-([1.item`i']_cons+[1.item`i'] tt))=([2.item`i']_cons-([2.item`i']_cons+[2.item`i'] tt))"
-      local constrnt2 = "constraint 2 3*([1.item`i']_cons-([1.item`i']_cons+[1.item`i'] tt))=([3.item`i']_cons-([3.item`i']_cons+[3.item`i'] tt))"
-    }
-  }
-  forvalues i=1/`nbitems' {
-    if (`i'==`difitemsmax') {
-      local constrn3 = "constraint 3 2*([1.item`i']_cons-([1.item`i']_cons+[1.item`i'] tt))=([2.item`i']_cons-([2.item`i']_cons+[2.item`i'] tt))"
-      local constrnt4 = "constraint 4 3*([1.item`i']_cons-([1.item`i']_cons+[1.item`i'] tt))=([3.item`i']_cons-([3.item`i']_cons+[3.item`i'] tt))"
-    }
-  }
-  local mod "gsem "
-  forvalues i=1/`nbitems' {
-    if (`i'==`difitemsmin' | `i'==`difitemsmax') {
-      local mod = "`mod'"+"(1.item`i'<-THETA@1 tt)(2.item`i'<-THETA@2 tt)(3.item`i'<-THETA@3 tt)"
+    if (`difcheck3'==1) {
+      local mod = "`mod'" + "(THETA<-tt), mlogit tol(0.01) iterate(500) latent(THETA) nocapslatent constraint(1 2 3 5 6)"
     }
     else {
-      local mod = "`mod'"+"(1.item`i'<-THETA@1)(2.item`i'<-THETA@2)(3.item`i'<-THETA@3)"
-    }
-  }
-  local mod = "`mod'" + "(THETA<-tt), mlogit tol(0.01) iterate(500) latent(THETA) nocapslatent constraint(1 2 3 4)"
-  qui `constrnt'
-  qui `constrnt2'
-  qui `constrnt3'
-  qui `constrnt4'
-  qui `mod'
-  mat V=r(table)
-  mat W=V[1..2,1...]
-  forvalues j=1/`nbitems' {
-  if (`j'<`difitemsmin') {
-      mat outmat[`k',3*`j'-2] = W[1,7*(`j'-1)+3] // items avant le premier dif
-      mat outmat[`k',3*`j'-1] = W[1,7*(`j'-1)+5] // items avant le premier dif
-      mat outmat[`k',3*`j'] =   W[1,7*(`j'-1)+7] // items avant le premier dif
-      }
-  else if (`j'==`difitemsmin') {
-      mat outmat[`k',3*`j'-2] = W[1,7*(`j'-1)+4] // items du le premier dif
-      mat outmat[`k',3*`j'-1] = W[1,7*(`j'-1)+7] // items du le premier dif
-      mat outmat[`k',3*`j'] =   W[1,7*(`j'-1)+10] // items du le premier dif    }
-    }
-  else if (`j'<`difitemsmax') {
-      mat outmat[`k',3*`j'-2] = W[1,7*(`j'-1)+6] // items avant le premier dif
-      mat outmat[`k',3*`j'-1] = W[1,7*(`j'-1)+8] // items avant le premier dif
-      mat outmat[`k',3*`j'] =   W[1,7*(`j'-1)+10] // items avant le premier dif
-    }
-  else if (`j'==`difitemsmax') {
-      mat outmat[`k',3*`j'-2] = W[1,7*(`j'-1)+7] // items avant le premier dif
-      mat outmat[`k',3*`j'-1] = W[1,7*(`j'-1)+10] // items avant le premier dif
-      mat outmat[`k',3*`j'] =   W[1,7*(`j'-1)+13] // items avant le premier dif
+      local mod = "`mod'" + "(THETA<-tt), mlogit tol(0.01) iterate(500) latent(THETA) nocapslatent constraint(1 2 3 5)"
     }
-  else {
-    mat outmat[`k',3*`j'-2] = W[1,7*(`j'-1)+9] // items avant le premier dif
-    mat outmat[`k',3*`j'-1] = W[1,7*(`j'-1)+11] // items avant le premier dif
-    mat outmat[`k',3*`j'] =   W[1,7*(`j'-1)+13] // items avant le premier dif
-  }
   }
-    mat outmat[`k',3*`nbitems'+1] = W[1,7*(`difitemsmin'-1)+2] // coef de dif
-    mat outmat[`k',3*`nbitems'+2] = W[1,7*(`difitemsmin'-1)+5] // coef de dif
-    mat outmat[`k',3*`nbitems'+3] = W[1,7*(`difitemsmin'-1)+8] // coef de dif
-    mat outmat[`k',3*`nbitems'+4] = W[1,7*(`difitemsmax'-1)+5] // coef de dif
-    mat outmat[`k',3*`nbitems'+5] = W[1,7*(`difitemsmax'-1)+8] // coef de dif
-    mat outmat[`k',3*`nbitems'+6] = W[1,7*(`difitemsmax'-1)+11] // coef de dif
-    mat outmat[`k',3*`nbitems'+7] = W[1,7*`nbitems'+7] // beta
-    mat outmat[`k',3*`nbitems'+8] = W[2,7*`nbitems'+7] // se beta
-    mat outmat[`k',3*`nbitems'+9] = `difitemsmin' // numéro item de dif
-    mat outmat[`k',3*`nbitems'+10] = `difitemsmax' // numéro item de dif
-    restore
-}
-putexcel set "`path_res'/out/16`scen'_`Nn'.xls", sheet("outmat") replace
-putexcel A1=matrix(outmat), colnames
 }
-}
-
-***** Scenarios with DIF on 3 items
-
-* Load pcm.ado
-adopath+"/home/corentin/Documents/These/Recherche/Simulations/Modules/"
-
-** Scenario 17: J = 7 items / M = 2 modalities / DIF size 0.3 x3
-  local N = "50"
-  foreach Nnn in `N' {
-  local Nn =  `Nnn'
-  local path_data = "/home/corentin/Documents/These/Recherche/Simulations/Data/DIF/N`Nn'"
-  local path_res = "/home/corentin/Documents/These/Recherche/Simulations/Analysis/DIF/N`Nn'"
-  local scenarios = "A B C D E F G"
-  foreach scen in `scenarios' {
-  clear
-  import delim "`path_data'/scenario_17`scen'_`Nn'.csv", encoding(ISO-8859-2)  case(preserve) clear
-  rename TT tt
-
-  * Matrice de taille 1000 * 4 items + 1 DIF + beta + std beta + 1 dif
-  local nbitems = 7
-  local nbdif = 3
-  local taillemat = `nbitems'+`nbdif'+5
-  mat outmat = J(1000,`taillemat',.)
-  mat colnames outmat = "item1" "item2" "item3" "item4" "item5" "item6" "item7" "dif1" "dif2" "dif3" "beta" "se_beta" "dif_item_1" "dif_item_2" "dif_item_3"
-  di "Scenario 17`scen' / N=`Nnn'"
-  forvalues k=1/1000 {
-    if (mod(`k',100)==0) {
-      di "`k'/1000"
-    }
-    preserve
-    qui keep if replication==`k'
-    local difitems1=dif1
-    local difitems2=dif2
-    local difitems3=dif3
-    if (`difitems1' < `difitems2') {
-      local difitemsmin= `difitems1'
-      local difitemsmax= `difitems2'
-    }
-    else {
-      local difitemsmin= `difitems2'
-      local difitemsmax= `difitems1'
-    }
-    if (`difitems3' < `difitemsmin') {
-      local difitemsmid = `difitemsmin'
-      local difitemsmin= `difitems3'
-    }
-    else if (`difitems3' > `difitemsmax') {
-      local difitemsmid = `difitemsmax'
-      local difitemsmax= `difitems3'
+else {
+  if (`difcheck2'==1) {
+    if (`difcheck3'==1) {
+      local mod = "`mod'" + "(THETA<-tt), mlogit tol(0.01) iterate(500) latent(THETA) nocapslatent constraint(1 2 4 5 6)"
     }
     else {
-      local difitemsmid = `difitems3'
+      local mod = "`mod'" + "(THETA<-tt), mlogit tol(0.01) iterate(500) latent(THETA) nocapslatent constraint(1 2 4 5)"
     }
-    local mod "gsem "
-    forvalues i=1/`nbitems' {
-      if (`i'==`difitemsmin' | `i'==`difitemsmax' | `i'==`difitemsmid') {
-        local mod = "`mod'"+"(1.item`i'<-THETA@1 tt)"
-      }
-      else {
-        local mod = "`mod'"+"(1.item`i'<-THETA@1)"
-      }
-    }
-    local mod = "`mod'" + "(THETA<-tt), mlogit tol(0.01) iterate(500) latent(THETA) nocapslatent"
-    qui `mod'
-    mat V=r(table)
-    mat W=V[1..2,1...]
-    forvalues j=1/`nbitems' {
-      if (`j'<`difitemsmin') {
-        mat outmat[`k',`j'] = W[1,3*`j'] // items avant le premier dif
-      }
-      else if (`j'<`difitemsmid') {
-        mat outmat[`k',`j'] = W[1,1+3*`j'] // items après le premier dif
-      }
-      else if (`j'<`difitemsmax') {
-        mat outmat[`k',`j'] = W[1,2+3*`j'] // items après le deuxieme dif
-      }
-      else {
-        mat outmat[`k',`j'] = W[1,3+3*`j'] // items après le deuxieme dif
-      }
-    }
-    mat outmat[`k',`nbitems'+1] = W[1,3*`difitemsmin'-1] // coef de dif
-    mat outmat[`k',`nbitems'+2] = W[1,3*`difitemsmid'] // coef de dif
-    mat outmat[`k',`nbitems'+3] = W[1,3*`difitemsmax'+1] // coef de dif
-    mat outmat[`k',`nbitems'+4] = W[1,3*`nbitems'+4] // beta
-    mat outmat[`k',`nbitems'+5] = W[2,3*`nbitems'+4] // se beta
-    mat outmat[`k',`nbitems'+6] = `difitemsmin' // numéro item de dif
-    mat outmat[`k',`nbitems'+7] = `difitemsmid' // numéro item de dif
-    mat outmat[`k',`nbitems'+8] = `difitemsmax' // numéro item de dif
-    restore
-  }
-  putexcel set "`path_res'/out/17`scen'_`Nn'.xls", sheet("outmat") replace
-  putexcel A1=matrix(outmat), colnames
-}
-}
-
-
-
-** Scenario 18: J = 7 items / M = 4 modalities / DIF size 0.3 x3
-local N = "50"
-foreach Nnn in `N' {
-local Nn =  `Nnn'
-local path_data = "/home/corentin/Documents/These/Recherche/Simulations/Data/DIF/N`Nn'"
-local path_res = "/home/corentin/Documents/These/Recherche/Simulations/Analysis/DIF/N`Nn'"
-local scenarios = "A B C D E F G"
-foreach scen in `scenarios' {
-clear
-import delim "`path_data'/scenario_18`scen'_`Nn'.csv", encoding(ISO-8859-2)  case(preserve) clear
-rename TT tt
-
-* Matrice de taille 1000 * 4 items + 1 DIF + beta + std beta + 1 dif
-local nbitems = 7
-local nbdif = 3
-local taillemat = 3*`nbitems'+9+2+`nbdif'
-mat outmat = J(1000,`taillemat',.)
-mat colnames outmat = "item1_1" "item1_2" "item1_3" "item2_1" "item2_2" "item2_3" "item3_1" "item3_2" "item3_3" "item4_1" "item4_2" "item4_3" "item5_1" "item5_2" "item5_3" "item6_1" "item6_2" "item6_3" "item7_1" "item7_2" "item7_3" "dif1_1" "dif1_2" "dif1_3" "dif2_1" "dif2_2" "dif2_3" "dif3_1" "dif3_2" "dif3_3" "beta" "se_beta" "dif_item_1" "dif_item_2" "dif_item_3"
-di "Scenario 18`scen' / N=`Nnn'"
-forvalues k=1/1000 {
-  if (mod(`k',100)==0) {
-    di "`k'/1000"
-  }
-  preserve
-  qui keep if replication==`k'
-  local difitems1=dif1
-  local difitems2=dif2
-  local difitems3=dif3
-  if (`difitems1' < `difitems2') {
-    local difitemsmin= `difitems1'
-    local difitemsmax= `difitems2'
-  }
-  else {
-    local difitemsmin= `difitems2'
-    local difitemsmax= `difitems1'
-  }
-  if (`difitems3' < `difitemsmin') {
-    local difitemsmid = `difitemsmin'
-    local difitemsmin= `difitems3'
-  }
-  else if (`difitems3' > `difitemsmax') {
-    local difitemsmid = `difitemsmax'
-    local difitemsmax= `difitems3'
   }
   else {
-    local difitemsmid = `difitems3'
-  }
-  forvalues i=1/`nbitems' {
-    if (`i'==`difitemsmin') {
-      local constrnt = "constraint 1 2*([1.item`i']_cons-([1.item`i']_cons+[1.item`i'] tt))=([2.item`i']_cons-([2.item`i']_cons+[2.item`i'] tt))"
-      local constrnt2 = "constraint 2 3*([1.item`i']_cons-([1.item`i']_cons+[1.item`i'] tt))=([3.item`i']_cons-([3.item`i']_cons+[3.item`i'] tt))"
-    }
-  }
-  forvalues i=1/`nbitems' {
-    if (`i'==`difitemsmax') {
-      local constrn3 = "constraint 3 2*([1.item`i']_cons-([1.item`i']_cons+[1.item`i'] tt))=([2.item`i']_cons-([2.item`i']_cons+[2.item`i'] tt))"
-      local constrnt4 = "constraint 4 3*([1.item`i']_cons-([1.item`i']_cons+[1.item`i'] tt))=([3.item`i']_cons-([3.item`i']_cons+[3.item`i'] tt))"
-    }
-  }
-  forvalues i=1/`nbitems' {
-    if (`i'==`difitemsmid') {
-      local constrn5 = "constraint 5 2*([1.item`i']_cons-([1.item`i']_cons+[1.item`i'] tt))=([2.item`i']_cons-([2.item`i']_cons+[2.item`i'] tt))"
-      local constrnt6 = "constraint 6 3*([1.item`i']_cons-([1.item`i']_cons+[1.item`i'] tt))=([3.item`i']_cons-([3.item`i']_cons+[3.item`i'] tt))"
-    }
-  }
-  local mod "gsem "
-  forvalues i=1/`nbitems' {
-    if (`i'==`difitemsmin' | `i'==`difitemsmax' | `i'==`difitemsmid') {
-      local mod = "`mod'"+"(1.item`i'<-THETA@1 tt)(2.item`i'<-THETA@2 tt)(3.item`i'<-THETA@3 tt)"
+    if (`difcheck3'==1) {
+      local mod = "`mod'" + "(THETA<-tt), mlogit tol(0.01) iterate(500) latent(THETA) nocapslatent constraint(1 2 5 6)"
     }
     else {
-      local mod = "`mod'"+"(1.item`i'<-THETA@1)(2.item`i'<-THETA@2)(3.item`i'<-THETA@3)"
+      local mod = "`mod'" + "(THETA<-tt), mlogit tol(0.01) iterate(500) latent(THETA) nocapslatent constraint(1 2 5)"
     }
   }
-  local mod = "`mod'" + "(THETA<-tt), mlogit tol(0.01) iterate(500) latent(THETA) nocapslatent constraint(1 2 3 4 5 6)"
-  qui `constrnt'
-  qui `constrnt2'
+}
+qui `constrnt'
+qui `constrnt2'
+qui `constrnt5'
+if (`difcheck'==1) {
   qui `constrnt3'
-  qui `constrnt4'
-  qui `constrnt6'
-  qui `constrnt6'
-  qui `mod'
-  mat V=r(table)
-  mat W=V[1..2,1...]
-  forvalues j=1/`nbitems' {
-  if (`j'<`difitemsmin') {
-      mat outmat[`k',3*`j'-2] = W[1,7*(`j'-1)+3] // items avant le premier dif
-      mat outmat[`k',3*`j'-1] = W[1,7*(`j'-1)+5] // items avant le premier dif
-      mat outmat[`k',3*`j'] =   W[1,7*(`j'-1)+7] // items avant le premier dif
-      }
-  else if (`j'==`difitemsmin') {
-      mat outmat[`k',3*`j'-2] = W[1,7*(`j'-1)+4] // items du le premier dif
-      mat outmat[`k',3*`j'-1] = W[1,7*(`j'-1)+7] // items du le premier dif
-      mat outmat[`k',3*`j'] =   W[1,7*(`j'-1)+10] // items du le premier dif    }
-    }
-  else if (`j'<`difitemsmid') {
-      mat outmat[`k',3*`j'-2] = W[1,7*(`j'-1)+6] // items avant le premier dif
-      mat outmat[`k',3*`j'-1] = W[1,7*(`j'-1)+8] // items avant le premier dif
-      mat outmat[`k',3*`j'] =   W[1,7*(`j'-1)+10] // items avant le premier dif
-    }
-  else if (`j'==`difitemsmid') {
-      mat outmat[`k',3*`j'-2] = W[1,7*(`j'-1)+7] // items avant le premier dif
-      mat outmat[`k',3*`j'-1] = W[1,7*(`j'-1)+10] // items avant le premier dif
-      mat outmat[`k',3*`j'] =   W[1,7*(`j'-1)+13] // items avant le premier dif
-    }
-  else if (`j'<`difitemsmax') {
-    mat outmat[`k',3*`j'-2] = W[1,7*(`j'-1)+9] // items avant le premier dif
-    mat outmat[`k',3*`j'-1] = W[1,7*(`j'-1)+11] // items avant le premier dif
-    mat outmat[`k',3*`j'] =   W[1,7*(`j'-1)+13] // items avant le premier dif
-  }
-  else if (`j'==`difitemsmax') {
-    mat outmat[`k',3*`j'-2] = W[1,7*(`j'-1)+10] // items avant le premier dif
-    mat outmat[`k',3*`j'-1] = W[1,7*(`j'-1)+13] // items avant le premier dif
-    mat outmat[`k',3*`j'] =   W[1,7*(`j'-1)+16] // items avant le premier dif
-  }
-  else {
-    mat outmat[`k',3*`j'-2] = W[1,7*(`j'-1)+12] // items avant le premier dif
-    mat outmat[`k',3*`j'-1] = W[1,7*(`j'-1)+14] // items avant le premier dif
-    mat outmat[`k',3*`j'] =   W[1,7*(`j'-1)+16] // items avant le premier dif
-  }
-  }
-    mat outmat[`k',3*`nbitems'+1] = W[1,7*(`difitemsmin'-1)+2] // coef de dif
-    mat outmat[`k',3*`nbitems'+2] = W[1,7*(`difitemsmin'-1)+5] // coef de dif
-    mat outmat[`k',3*`nbitems'+3] = W[1,7*(`difitemsmin'-1)+8] // coef de dif
-    mat outmat[`k',3*`nbitems'+4] = W[1,7*(`difitemsmid'-1)+5] // coef de dif
-    mat outmat[`k',3*`nbitems'+5] = W[1,7*(`difitemsmid'-1)+8] // coef de dif
-    mat outmat[`k',3*`nbitems'+6] = W[1,7*(`difitemsmid'-1)+11] // coef de dif
-    mat outmat[`k',3*`nbitems'+7] = W[1,7*(`difitemsmax'-1)+8] // coef de dif
-    mat outmat[`k',3*`nbitems'+8] = W[1,7*(`difitemsmax'-1)+11] // coef de dif
-    mat outmat[`k',3*`nbitems'+9] = W[1,7*(`difitemsmax'-1)+14] // coef de dif
-    mat outmat[`k',3*`nbitems'+10] = W[1,7*`nbitems'+10] // beta
-    mat outmat[`k',3*`nbitems'+11] = W[2,7*`nbitems'+10] // se beta
-    mat outmat[`k',3*`nbitems'+12] = `difitemsmin' // numéro item de dif
-    mat outmat[`k',3*`nbitems'+13] = `difitemsmid' // numéro item de dif
-    mat outmat[`k',3*`nbitems'+14] = `difitemsmax' // numéro item de dif
-    restore
 }
-putexcel set "`path_res'/out/18`scen'_`Nn'.xls", sheet("outmat") replace
-putexcel A1=matrix(outmat), colnames
+if (`difcheck2'==1) {
+  qui `constrnt4'
 }
+if (`difcheck3'==1) {
+  qui `constrnt6'
 }
-
-** Scenario 19: J = 7 items / M = 2 modalities / DIF size 0.5 x3
-  local N = "50"
-  foreach Nnn in `N' {
-  local Nn =  `Nnn'
-  local path_data = "/home/corentin/Documents/These/Recherche/Simulations/Data/DIF/N`Nn'"
-  local path_res = "/home/corentin/Documents/These/Recherche/Simulations/Analysis/DIF/N`Nn'"
-  local scenarios = "A B C D E F G"
-  foreach scen in `scenarios' {
-  clear
-  import delim "`path_data'/scenario_19`scen'_`Nn'.csv", encoding(ISO-8859-2)  case(preserve) clear
-  rename TT tt
-
-  * Matrice de taille 1000 * 4 items + 1 DIF + beta + std beta + 1 dif
-  local nbitems = 7
-  local nbdif = 3
-  local taillemat = `nbitems'+`nbdif'+5
-  mat outmat = J(1000,`taillemat',.)
-  mat colnames outmat = "item1" "item2" "item3" "item4" "item5" "item6" "item7" "dif1" "dif2" "dif3" "beta" "se_beta" "dif_item_1" "dif_item_2" "dif_item_3"
-  di "Scenario 19`scen' / N=`Nnn'"
-  forvalues k=1/1000 {
-    if (mod(`k',100)==0) {
-      di "`k'/1000"
-    }
-    preserve
-    qui keep if replication==`k'
-    local difitems1=dif1
-    local difitems2=dif2
-    local difitems3=dif3
-    if (`difitems1' < `difitems2') {
-      local difitemsmin= `difitems1'
-      local difitemsmax= `difitems2'
-    }
-    else {
-      local difitemsmin= `difitems2'
-      local difitemsmax= `difitems1'
-    }
-    if (`difitems3' < `difitemsmin') {
-      local difitemsmid = `difitemsmin'
-      local difitemsmin= `difitems3'
-    }
-    else if (`difitems3' > `difitemsmax') {
-      local difitemsmid = `difitemsmax'
-      local difitemsmax= `difitems3'
-    }
-    else {
-      local difitemsmid = `difitems3'
-    }
-    local mod "gsem "
-    forvalues i=1/`nbitems' {
-      if (`i'==`difitemsmin' | `i'==`difitemsmax' | `i'==`difitemsmid') {
-        local mod = "`mod'"+"(1.item`i'<-THETA@1 tt)"
-      }
-      else {
-        local mod = "`mod'"+"(1.item`i'<-THETA@1)"
-      }
-    }
-    local mod = "`mod'" + "(THETA<-tt), mlogit tol(0.01) iterate(500) latent(THETA) nocapslatent"
-    qui `mod'
-    mat V=r(table)
-    mat W=V[1..2,1...]
-    forvalues j=1/`nbitems' {
-      if (`j'<`difitemsmin') {
-        mat outmat[`k',`j'] = W[1,3*`j'] // items avant le premier dif
-      }
-      else if (`j'<`difitemsmid') {
-        mat outmat[`k',`j'] = W[1,1+3*`j'] // items après le premier dif
-      }
-      else if (`j'<`difitemsmax') {
-        mat outmat[`k',`j'] = W[1,2+3*`j'] // items après le deuxieme dif
-      }
-      else {
-        mat outmat[`k',`j'] = W[1,3+3*`j'] // items après le deuxieme dif
-      }
-    }
-    mat outmat[`k',`nbitems'+1] = W[1,3*`difitemsmin'-1] // coef de dif
-    mat outmat[`k',`nbitems'+2] = W[1,3*`difitemsmid'] // coef de dif
-    mat outmat[`k',`nbitems'+3] = W[1,3*`difitemsmax'+1] // coef de dif
-    mat outmat[`k',`nbitems'+4] = W[1,3*`nbitems'+4] // beta
-    mat outmat[`k',`nbitems'+5] = W[2,3*`nbitems'+4] // se beta
-    mat outmat[`k',`nbitems'+6] = `difitemsmin' // numéro item de dif
-    mat outmat[`k',`nbitems'+7] = `difitemsmid' // numéro item de dif
-    mat outmat[`k',`nbitems'+8] = `difitemsmax' // numéro item de dif
-    restore
-  }
-  putexcel set "`path_res'/out/19`scen'_`Nn'.xls", sheet("outmat") replace
-  putexcel A1=matrix(outmat), colnames
+qui `mod'
+mat V=r(table)
+mat W=V[1..2,1...]
+forvalues j=1/`nbitems' {
+
+    mat outmat[`k',3*`j'-2] = W[1,colnumb(W,"1.item`j':_cons")] // items avant le premier dif
+    mat outmat[`k',3*`j'-1] = W[1,colnumb(W,"2.item`j':_cons")] // items avant le premier dif
+    mat outmat[`k',3*`j'] =   W[1,colnumb(W,"3.item`j':_cons")] // items avant le premier dif
 }
+  mat outmat[`k',3*`nbitems'+1] = W[1,colnumb(W,"1.item`difitems1':tt")] // coef de dif
+  mat outmat[`k',3*`nbitems'+2] = W[1,colnumb(W,"2.item`difitems1':tt")] // coef de dif
+  mat outmat[`k',3*`nbitems'+3] = W[1,colnumb(W,"3.item`difitems1':tt")] // coef de dif
+  mat outmat[`k',3*`nbitems'+4] = W[1,colnumb(W,"1.item`difitems2':tt")] // coef de dif
+  mat outmat[`k',3*`nbitems'+5] = W[1,colnumb(W,"2.item`difitems2':tt")] // coef de dif
+  mat outmat[`k',3*`nbitems'+6] = W[1,colnumb(W,"3.item`difitems2':tt")] // coef de dif
+  mat outmat[`k',3*`nbitems'+7] = W[1,colnumb(W,"1.item`difitems3':tt")] // coef de dif
+  mat outmat[`k',3*`nbitems'+8] = W[1,colnumb(W,"2.item`difitems3':tt")] // coef de dif
+  mat outmat[`k',3*`nbitems'+9] = W[1,colnumb(W,"3.item`difitems3':tt")] // coef de dif
+  mat outmat[`k',3*`nbitems'+10] = W[1,colnumb(W,"THETA:tt")] // beta
+  mat outmat[`k',3*`nbitems'+11] = W[2,colnumb(W,"THETA:tt")] // se beta
+  mat outmat[`k',3*`nbitems'+12] = `difitems1' // numéro item de dif
+  mat outmat[`k',3*`nbitems'+13] = `difitems2' // numéro item de dif
+  mat outmat[`k',3*`nbitems'+14] = `difitems3' // numéro item de dif
+  restore
 }
 
-
-
-** Scenario 20: J = 7 items / M = 4 modalities / DIF size 0.5 x3
-local N = "50"
-foreach Nnn in `N' {
-local Nn =  `Nnn'
-local path_data = "/home/corentin/Documents/These/Recherche/Simulations/Data/DIF/N`Nn'"
-local path_res = "/home/corentin/Documents/These/Recherche/Simulations/Analysis/DIF/N`Nn'"
-local scenarios = "A B C D E F G"
-foreach scen in `scenarios' {
-clear
-import delim "`path_data'/scenario_20`scen'_`Nn'.csv", encoding(ISO-8859-2)  case(preserve) clear
-rename TT tt
-
-* Matrice de taille 1000 * 4 items + 1 DIF + beta + std beta + 1 dif
-local nbitems = 7
-local nbdif = 3
-local taillemat = 3*`nbitems'+9+2+`nbdif'
-mat outmat = J(1000,`taillemat',.)
-mat colnames outmat = "item1_1" "item1_2" "item1_3" "item2_1" "item2_2" "item2_3" "item3_1" "item3_2" "item3_3" "item4_1" "item4_2" "item4_3" "item5_1" "item5_2" "item5_3" "item6_1" "item6_2" "item6_3" "item7_1" "item7_2" "item7_3" "dif1_1" "dif1_2" "dif1_3" "dif2_1" "dif2_2" "dif2_3" "dif3_1" "dif3_2" "dif3_3" "beta" "se_beta" "dif_item_1" "dif_item_2" "dif_item_3"
-di "Scenario 20`scen' / N=`Nnn'"
-forvalues k=1/1000 {
-  if (mod(`k',100)==0) {
-    di "`k'/1000"
-  }
-  preserve
-  qui keep if replication==`k'
+* replications sans problèmes
+else {
   local difitems1=dif1
   local difitems2=dif2
   local difitems3=dif3
@@ -1027,6 +411,7 @@ forvalues k=1/1000 {
     mat outmat[`k',3*`nbitems'+14] = `difitemsmax' // numéro item de dif
     restore
 }
+}
 putexcel set "`path_res'/out/20`scen'_`Nn'.xls", sheet("outmat") replace
 putexcel A1=matrix(outmat), colnames
 }