]> henry.ined.fr Git - .git/commitdiff
Summary: version 0.99r39
authorN. Brouard <brouard@ined.fr>
Wed, 14 Sep 2022 14:22:16 +0000 (14:22 +0000)
committerN. Brouard <brouard@ined.fr>
Wed, 14 Sep 2022 14:22:16 +0000 (14:22 +0000)
* imach.c (Module): Version 0.99r39 with colored dummy covariates
(fixed or time varying), using new last columns of
ILK_parameter.txt file.

src/imach.c

index dae9409f5e9fe4412045f158849e985861d4e823..a3f5fb1105993e22951a1f65ce4db96e57fa7002 100644 (file)
@@ -1,6 +1,15 @@
 /* $Id$
   $State$
   $Log$
+  Revision 1.342  2022/09/11 19:54:09  brouard
+  Summary: 0.99r38
+
+  * imach.c (Module): Adding timevarying products of any kinds,
+  should work before shifting cotvar from ncovcol+nqv columns in
+  order to have a correspondance between the column of cotvar and
+  the id of column.
+  (Module): Some cleaning and adding covariates in ILK.txt
+
   Revision 1.341  2022/09/11 07:58:42  brouard
   Summary: Version 0.99r38
 
@@ -1285,6 +1294,8 @@ typedef struct {
 #define MAXLINE 2048 /* Was 256 and 1024. Overflow with 312 with 2 states and 4 covariates. Should be ok */
 
 #define GNUPLOTPROGRAM "gnuplot"
+#define GNUPLOTVERSION 5.1
+double gnuplotversion=GNUPLOTVERSION;
 /*#define GNUPLOTPROGRAM "..\\gp37mgw\\wgnuplot"*/
 #define FILENAMELENGTH 256
 
@@ -1534,8 +1545,8 @@ int **nbcode, *Tvar; /**< model=V2 => Tvar[1]= 2 */
   # States 1=Coresidence, 2 Living alone, 3 Institution
   # V1=sex, V2=raedyrs Quant Fixed, State=livarnb4..livarnb11, V3=iadl4..iald11, V4=adlw4..adlw11, V5=r4bmi..r11bmi
 */
-/*             V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1 */
-/*    k        1  2   3   4     5    6    7     8    9 */
+/*           V5+V4+ V3+V4*V3 +V5*age+V2 +V1*V2+V1*age+V1 */
+/*    kmodel  1  2   3   4     5    6    7     8    9 */
 /*Typevar[k]=  0  0   0   2     1    0    2     1    0 *//*0 for simple covariate (dummy, quantitative,*/
                                                          /* fixed or varying), 1 for age product, 2 for*/
                                                          /* product */
@@ -4218,7 +4229,7 @@ double func( double *x)
        ipmx +=1;
        sw += weight[i];
        ll[s[mw[mi][i]][i]] += 2*weight[i]*lli;
-       /* printf("i=%6d s1=%1d s2=%1d mi=%1d mw=%1d dh=%3d prob=%10.6f w=%6.4f out=%10.6f sav=%10.6f\n",i,s1,s2,mi,mw[mi][i],dh[mi][i],exp(lli),weight[i],out[s1][s2],savm[s1][s2]); */
+       /* printf("num[i]=%09ld, i=%6d s1=%1d s2=%1d mi=%1d mw=%1d dh=%3d prob=%10.6f w=%6.4f out=%10.6f sav=%10.6f\n",num[i],i,s1,s2,mi,mw[mi][i],dh[mi][i],exp(lli),weight[i],(s2==-1? -1: out[s1][s2]),(s2==-1? -1: savm[s1][s2])); */
       } /* end of wave */
     } /* end of individual */
   }else{  /* ml=5 no inter-extrapolation no jackson =0.8a */
@@ -4357,10 +4368,9 @@ double funcone( double *x)
       *      k=         1   2     3     4         5        6        7       8        9
       *  varying            1     2                                 3       4        5
       *  ncovv              1     2                                3 4     5 6      7 8
-      *  TvarVV            V3     5                                1 3     3 5      1 5
+      * TvarVV[ncovv]      V3     5                                1 3     3 5      1 5
       * TvarVVind           2     3                                7 7     8 8      9 9
       * TvarFind[k]     1   0     0     0         0        0        0       0        0
-      * cotvar starts at ntv=2 (because of V3 V4)
       */
       for(ncovv=1, iposold=0; ncovv <= ncovvt ; ncovv++){ /* Varying  covariates (single and product but no age) including individual from products */
        itv=TvarVV[ncovv]; /*  TvarVV={3, 1, 3} gives the name of each varying covariate */
@@ -4475,49 +4485,49 @@ double funcone( double *x)
       sw += weight[i];
       ll[s[mw[mi][i]][i]] += 2*weight[i]*lli;
       /* Printing covariates values for each contribution for checking */
-      /* printf(" s1=%1d s2=%1d mi=%1d mw=%1d dh=%3d prob=%10.6f w=%6.4f out=%10.6f sav=%10.6f\n",s1,s2,mi,mw[mi][i],dh[mi][i],exp(lli),weight[i],(s2==-1? -1: out[s1][s2]),(s2==-1? -1: savm[s1][s2])); */
+      /* printf("num[i]=%09ld, i=%6d s1=%1d s2=%1d mi=%1d mw=%1d dh=%3d prob=%10.6f w=%6.4f out=%10.6f sav=%10.6f\n",num[i],i,s1,s2,mi,mw[mi][i],dh[mi][i],exp(lli),weight[i],(s2==-1? -1: out[s1][s2]),(s2==-1? -1: savm[s1][s2])); */
       if(globpr){
        fprintf(ficresilk,"%09ld %6.1f %6.1f %6d %2d %2d %2d %2d %3d %15.6f %8.4f %8.3f\
  %11.6f %11.6f %11.6f ", \
                num[i], agebegin, ageend, i,s1,s2,mi,mw[mi][i],dh[mi][i],exp(lli),weight[i],weight[i]*gipmx/gsw,
                2*weight[i]*lli,(s2==-1? -1: out[s1][s2]),(s2==-1? -1: savm[s1][s2]));
/*    printf("%09ld %6.1f %6.1f %6d %2d %2d %2d %2d %3d %15.6f %8.4f %8.3f\ */
- /* %11.6f %11.6f %11.6f ", \ */
/*            num[i], agebegin, ageend, i,s1,s2,mi,mw[mi][i],dh[mi][i],exp(lli),weight[i],weight[i]*gipmx/gsw, */
/*            2*weight[i]*lli,(s2==-1? -1: out[s1][s2]),(s2==-1? -1: savm[s1][s2])); */
      /*      printf("%09ld %6.1f %6.1f %6d %2d %2d %2d %2d %3d %15.6f %8.4f %8.3f\ */
      /* %11.6f %11.6f %11.6f ", \ */
      /*              num[i], agebegin, ageend, i,s1,s2,mi,mw[mi][i],dh[mi][i],exp(lli),weight[i],weight[i]*gipmx/gsw, */
      /*              2*weight[i]*lli,(s2==-1? -1: out[s1][s2]),(s2==-1? -1: savm[s1][s2])); */
        for(k=1,llt=0.,l=0.; k<=nlstate; k++){
          llt +=ll[k]*gipmx/gsw;
          fprintf(ficresilk," %10.6f",-ll[k]*gipmx/gsw);
          /* printf(" %10.6f",-ll[k]*gipmx/gsw); */
        }
-       fprintf(ficresilk," %10.6f", -llt);
+       fprintf(ficresilk," %10.6f ", -llt);
        /* printf(" %10.6f\n", -llt); */
        /* if(debugILK){ /\* debugILK is set by a #d in a comment line *\/ */
-         fprintf(ficresilk,"%09ld ", num[i]);
-         for (kf=1; kf<=ncovf;kf++){ /* Simple and product fixed covariates without age* products *//* Missing values are set to -1 but should be dropped */
-           fprintf(ficresilk," %g",covar[Tvar[TvarFind[kf]]][i]);
-         }
-         for(ncovv=1, iposold=0; ncovv <= ncovvt ; ncovv++){ /* Varying  covariates (single and product but no age) including individual from products */
-           ipos=TvarVVind[ncovv]; /* TvarVVind={2, 5, 5] gives the position in the model of the ncovv th varying covariate*/
-           if(ipos!=iposold){ /* Not a product or first of a product */
-             fprintf(ficresilk," %g",cov[ioffset+ipos]);
-             /* printf(" %g",cov[ioffset+ipos]); */
-           }else{
-             fprintf(ficresilk,"*");
-             /* printf("*"); */
-           }
-           iposold=ipos;
+       /* fprintf(ficresilk,"%09ld ", num[i]); */ /* not necessary */
+       for (kf=1; kf<=ncovf;kf++){ /* Simple and product fixed covariates without age* products *//* Missing values are set to -1 but should be dropped */
+         fprintf(ficresilk," %g",covar[Tvar[TvarFind[kf]]][i]);
+       }
+       for(ncovv=1, iposold=0; ncovv <= ncovvt ; ncovv++){ /* Varying  covariates (single and product but no age) including individual from products */
+         ipos=TvarVVind[ncovv]; /* TvarVVind={2, 5, 5] gives the position in the model of the ncovv th varying covariate*/
+         if(ipos!=iposold){ /* Not a product or first of a product */
+           fprintf(ficresilk," %g",cov[ioffset+ipos]);
+           /* printf(" %g",cov[ioffset+ipos]); */
+         }else{
+           fprintf(ficresilk,"*");
+           /* printf("*"); */
          }
-         for (kk=1; kk<=cptcovage;kk++) {
-           if(!FixedV[Tvar[Tage[kk]]]){
-             fprintf(ficresilk," %g*age",covar[Tvar[Tage[kk]]][i]);
-             /* printf(" %g*age",covar[Tvar[Tage[kk]]][i]); */
-           }else{
-             fprintf(ficresilk," %g*age",cotvar[mw[mi][i]][Tvar[Tage[kk]]][i]);/* because cotvar starts now at first ncovcol+nqv+ (1 to nqtv) */ 
-             /* printf(" %g*age",cotvar[mw[mi][i]][Tvar[Tage[kk]]][i]);/\* because cotvar starts now at first ncovcol+nqv+ (1 to nqtv) *\/  */
-           }
+         iposold=ipos;
+       }
+       for (kk=1; kk<=cptcovage;kk++) {
+         if(!FixedV[Tvar[Tage[kk]]]){
+           fprintf(ficresilk," %g*age",covar[Tvar[Tage[kk]]][i]);
+           /* printf(" %g*age",covar[Tvar[Tage[kk]]][i]); */
+         }else{
+           fprintf(ficresilk," %g*age",cotvar[mw[mi][i]][Tvar[Tage[kk]]][i]);/* because cotvar starts now at first ncovcol+nqv+ (1 to nqtv) */ 
+           /* printf(" %g*age",cotvar[mw[mi][i]][Tvar[Tage[kk]]][i]);/\* because cotvar starts now at first ncovcol+nqv+ (1 to nqtv) *\/  */
          }
-         /* printf("\n"); */
+       }
+       /* printf("\n"); */
        /* } /\*  End debugILK *\/ */
        fprintf(ficresilk,"\n");
       } /* End if globpr */
@@ -4530,7 +4540,7 @@ double funcone( double *x)
     gipmx=ipmx;
     gsw=sw;
   }
-return -l;
+  return -l;
 }
 
 
@@ -4543,7 +4553,7 @@ void likelione(FILE *ficres,double p[], int npar, int nlstate, int *globpri, lon
      Plotting could be done.
   */
   void pstamp(FILE *ficres);
-  int k, kf, kk, ncovv, iposold, ipos;
+  int k, kf, kk, kvar, ncovv, iposold, ipos;
 
   if(*globpri !=0){ /* Just counts and sums, no printings */
     strcpy(fileresilk,"ILK_"); 
@@ -4566,14 +4576,14 @@ void likelione(FILE *ficres,double p[], int npar, int nlstate, int *globpri, lon
        /* printf("V%d",Tvar[TvarFind[kf]]); */
       }
       for(ncovv=1, iposold=0; ncovv <= ncovvt ; ncovv++){
-       ipos=TvarVVind[ncovv]; /* TvarVVind={2, 5, 5] gives the position in the model of the ncovv th varying covariate*/
+       ipos=TvarVVind[ncovv]; /* TvarVVind={2, 5, 5] gives the position in the model of the ncovv th varying covariate */
        if(ipos!=iposold){ /* Not a product or first of a product */
          /* printf(" %d",ipos); */
          fprintf(ficresilk," V%d",TvarVV[ncovv]);
        }else{
          /* printf("*"); */
          fprintf(ficresilk,"*");
-           }
+       }
        iposold=ipos;
       }
       for (kk=1; kk<=cptcovage;kk++) {
@@ -4600,16 +4610,68 @@ void likelione(FILE *ficres,double p[], int npar, int nlstate, int *globpri, lon
     fprintf(fichtm," You should at least run with mle >= 1 to get starting values corresponding to the optimized parameters in order to visualize the real contribution of each individual/wave: <a href=\"%s\">%s</a><br>\n",subdirf(fileresilk),subdirf(fileresilk));
     fprintf(fichtm,"\n<br>Equation of the model: <b>model=1+age+%s</b><br>\n",model); 
       
-    for (k=1; k<= nlstate ; k++) {
-      fprintf(fichtm,"<br>- Probability p<sub>%dj</sub> by origin %d and destination j. Dot's sizes are related to corresponding weight: <a href=\"%s-p%dj.png\">%s-p%dj.png</a><br> \
-<img src=\"%s-p%dj.png\">",k,k,subdirf2(optionfilefiname,"ILK_"),k,subdirf2(optionfilefiname,"ILK_"),k,subdirf2(optionfilefiname,"ILK_"),k);
-    }
     fprintf(fichtm,"<br>- The function drawn is -2Log(L) in Log scale: by state of origin <a href=\"%s-ori.png\">%s-ori.png</a><br> \
-<img src=\"%s-ori.png\">",subdirf2(optionfilefiname,"ILK_"),subdirf2(optionfilefiname,"ILK_"),subdirf2(optionfilefiname,"ILK_"));
+<img src=\"%s-ori.png\">\n",subdirf2(optionfilefiname,"ILK_"),subdirf2(optionfilefiname,"ILK_"),subdirf2(optionfilefiname,"ILK_"));
     fprintf(fichtm,"<br>- and by state of destination <a href=\"%s-dest.png\">%s-dest.png</a><br> \
-<img src=\"%s-dest.png\">",subdirf2(optionfilefiname,"ILK_"),subdirf2(optionfilefiname,"ILK_"),subdirf2(optionfilefiname,"ILK_"));
+<img src=\"%s-dest.png\">\n",subdirf2(optionfilefiname,"ILK_"),subdirf2(optionfilefiname,"ILK_"),subdirf2(optionfilefiname,"ILK_"));
+    
+    for (k=1; k<= nlstate ; k++) {
+      fprintf(fichtm,"<br>- Probability p<sub>%dj</sub> by origin %d and destination j. Dot's sizes are related to corresponding weight: <a href=\"%s-p%dj.png\">%s-p%dj.png</a><br>\n \
+<img src=\"%s-p%dj.png\">\n",k,k,subdirf2(optionfilefiname,"ILK_"),k,subdirf2(optionfilefiname,"ILK_"),k,subdirf2(optionfilefiname,"ILK_"),k);
+      for(kf=1; kf <= ncovf; kf++){ /* For each simple dummy covariate of the model */
+       /* kvar=Tvar[TvarFind[kf]]; */ /* variable */
+       fprintf(fichtm,"<br>- Probability p<sub>%dj</sub> by origin %d and destination j with colored covariate V%d. Same dot size of all points but with a different color for transitions with dummy variable V%d=1 at beginning of transition (keeping former color for V%d=0): <a href=\"%s-p%dj.png\">%s-p%dj.png</a><br> \
+<img src=\"%s-p%dj-%d.png\">",k,k,Tvar[TvarFind[kf]],Tvar[TvarFind[kf]],Tvar[TvarFind[kf]],subdirf2(optionfilefiname,"ILK_"),k,subdirf2(optionfilefiname,"ILK_"),k,subdirf2(optionfilefiname,"ILK_"),k,Tvar[TvarFind[kf]]);
+      }
+      for(ncovv=1, iposold=0; ncovv <= ncovvt ; ncovv++){ /* Loop on the time varying extended covariates (with extension of Vn*Vm */
+       ipos=TvarVVind[ncovv]; /* TvarVVind={2, 5, 5] gives the position in the model of the ncovv th varying covariate */
+       kvar=TvarVV[ncovv]; /*  TvarVV={3, 1, 3} gives the name of each varying covariate */
+       /* printf("DebugILK fichtm ncovv=%d, kvar=TvarVV[ncovv]=V%d, ipos=TvarVVind[ncovv]=%d, Dummy[ipos]=%d, Typevar[ipos]=%d\n", ncovv,kvar,ipos,Dummy[ipos],Typevar[ipos]); */
+       if(ipos!=iposold){ /* Not a product or first of a product */
+         /* fprintf(ficresilk," V%d",TvarVV[ncovv]); */
+         /* printf(" DebugILK fichtm ipos=%d != iposold=%d\n", ipos, iposold); */
+         if(Dummy[ipos]==0 && Typevar[ipos]==0){ /* Only if dummy time varying: Dummy(0, 1=quant singor prod without age,2 dummy*age, 3quant*age) Typevar (0 single, 1=*age,2=Vn*vm)  */
+           fprintf(fichtm,"<br>- Probability p<sub>%dj</sub> by origin %d and destination j with colored time varying dummy covariate V%d. Same dot size of all points but with a different color for transitions with dummy variable V%d=1 at beginning of transition (keeping former color for V%d=0): <a href=\"%s-p%dj.png\">%s-p%dj.png</a><br> \
+<img src=\"%s-p%dj-%d.png\">",k,k,kvar,kvar,kvar,subdirf2(optionfilefiname,"ILK_"),k,subdirf2(optionfilefiname,"ILK_"),k,subdirf2(optionfilefiname,"ILK_"),k,kvar);
+         } /* End only for dummies time varying (single?) */
+       }else{ /* Useless product */
+         /* printf("*"); */
+         /* fprintf(ficresilk,"*"); */ 
+       }
+       iposold=ipos;
+      } /* For each time varying covariate */
+    } /* End loop on states */
+
+/*     if(debugILK){ */
+/*       for(kf=1; kf <= ncovf; kf++){ /\* For each simple dummy covariate of the model *\/ */
+/*     /\* kvar=Tvar[TvarFind[kf]]; *\/ /\* variable *\/ */
+/*     for (k=1; k<= nlstate ; k++) { */
+/*       fprintf(fichtm,"<br>- Probability p<sub>%dj</sub> by origin %d and destination j with colored covariate V%. Same dot size of all points but with a different color for transitions with dummy variable V%d=1 at beginning of transition (keeping former color for V%d=0): <a href=\"%s-p%dj.png\">%s-p%dj.png</a><br> \ */
+/* <img src=\"%s-p%dj-%d.png\">",k,k,Tvar[TvarFind[kf]],Tvar[TvarFind[kf]],Tvar[TvarFind[kf]],subdirf2(optionfilefiname,"ILK_"),k,subdirf2(optionfilefiname,"ILK_"),k,subdirf2(optionfilefiname,"ILK_"),k,Tvar[TvarFind[kf]]); */
+/*     } */
+/*       } */
+/*       for(ncovv=1, iposold=0; ncovv <= ncovvt ; ncovv++){ /\* Loop on the time varying extended covariates (with extension of Vn*Vm *\/ */
+/*     ipos=TvarVVind[ncovv]; /\* TvarVVind={2, 5, 5] gives the position in the model of the ncovv th varying covariate *\/ */
+/*     kvar=TvarVV[ncovv]; /\*  TvarVV={3, 1, 3} gives the name of each varying covariate *\/ */
+/*     /\* printf("DebugILK fichtm ncovv=%d, kvar=TvarVV[ncovv]=V%d, ipos=TvarVVind[ncovv]=%d, Dummy[ipos]=%d, Typevar[ipos]=%d\n", ncovv,kvar,ipos,Dummy[ipos],Typevar[ipos]); *\/ */
+/*     if(ipos!=iposold){ /\* Not a product or first of a product *\/ */
+/*       /\* fprintf(ficresilk," V%d",TvarVV[ncovv]); *\/ */
+/*       /\* printf(" DebugILK fichtm ipos=%d != iposold=%d\n", ipos, iposold); *\/ */
+/*       if(Dummy[ipos]==0 && Typevar[ipos]==0){ /\* Only if dummy time varying: Dummy(0, 1=quant singor prod without age,2 dummy*age, 3quant*age) Typevar (0 single, 1=*age,2=Vn*vm)  *\/ */
+/*         for (k=1; k<= nlstate ; k++) { */
+/*           fprintf(fichtm,"<br>- Probability p<sub>%dj</sub> by origin %d and destination j. Same dot size of all points but with a different color for transitions with dummy variable V%d=1 at beginning of transition (keeping former color for V%d=0): <a href=\"%s-p%dj.png\">%s-p%dj.png</a><br> \ */
+/* <img src=\"%s-p%dj-%d.png\">",k,k,kvar,kvar,subdirf2(optionfilefiname,"ILK_"),k,subdirf2(optionfilefiname,"ILK_"),k,subdirf2(optionfilefiname,"ILK_"),k,kvar); */
+/*         } /\* End state *\/ */
+/*       } /\* End only for dummies time varying (single?) *\/ */
+/*     }else{ /\* Useless product *\/ */
+/*       /\* printf("*"); *\/ */
+/*       /\* fprintf(ficresilk,"*"); *\/  */
+/*     } */
+/*     iposold=ipos; */
+/*       } /\* For each time varying covariate *\/ */
+/*     }/\* End debugILK *\/ */
     fflush(fichtm);
-  }
+  }/* End globpri */
   return;
 }
 
@@ -6178,7 +6240,7 @@ void  concatwav(int wav[], int **dh, int **bh,  int **mw, int **s, double *agedc
    /* Loop on covariates without age and products and no quantitative variable */
    for (k=1; k<=cptcovt; k++) { /* cptcovt: total number of covariates of the model (2) nbocc(+)+1 = 8 excepting constant and age and age*age */
      for (j=-1; (j < maxncov); j++) Ndum[j]=0;
-     printf("Testing k=%d, cptcovt=%d\n",k, cptcovt);
+     /* printf("Testing k=%d, cptcovt=%d\n",k, cptcovt); */
      if(Dummy[k]==0 && Typevar[k] !=1 && Typevar[k] != 2){ /* Dummy covariate and not age product nor fixed product */ 
        switch(Fixed[k]) {
        case 0: /* Testing on fixed dummy covariate, simple or product of fixed */
@@ -7392,7 +7454,7 @@ To be simple, these graphs help to understand the significativity of each parame
 
        /* Including quantitative variables of the resultline to be done */
        for (z1=1; z1<=cptcovs; z1++){ /* Loop on each variable of this resultline  */
-        printf("Varprob modelresult[%d][%d]=%d model=1+age+%s \n",nres, z1, modelresult[nres][z1], model);
+        /* printf("Varprob modelresult[%d][%d]=%d model=1+age+%s \n",nres, z1, modelresult[nres][z1], model); */
         fprintf(ficlog,"Varprob modelresult[%d][%d]=%d model=1+age+%s \n",nres, z1, modelresult[nres][z1], model);
         /* fprintf(ficlog,"Varprob modelresult[%d][%d]=%d model=1+age+%s resultline[%d]=%s \n",nres, z1, modelresult[nres][z1], model, nres, resultline[nres]); */
         if(Dummy[modelresult[nres][z1]]==0){/* Dummy variable of the variable in position modelresult in the model corresponding to z1 in resultline  */
@@ -8051,7 +8113,7 @@ void printinggnuplot(char fileresu[], char optionfilefiname[], double ageminpar,
 
   char dirfileres[132],optfileres[132];
   char gplotcondition[132], gplotlabel[132];
-  int cpt=0,k1=0,i=0,k=0,j=0,jk=0,k2=0,k3=0,k4=0,ij=0, ijp=0, l=0;
+  int cpt=0,k1=0,i=0,k=0,j=0,jk=0,k2=0,k3=0,k4=0,kf=0,kvar=0,kk=0,ipos=0,iposold=0,ij=0, ijp=0, l=0;
   int lv=0, vlv=0, kl=0;
   int ng=0;
   int vpopbased;
@@ -8077,7 +8139,7 @@ void printinggnuplot(char fileresu[], char optionfilefiname[], double ageminpar,
   fprintf(ficgp,"yoff=(%d > 2? 0:1);\n",nlstate);
   fprintf(ficgp,"\n#Peripheral arrows\nset for [i=1:%d] for [j=1:%d] arrow i*10+j from cos(pi*((1-(%d/2)*2./%d)/2+(i-1)*2./%d))-(i!=j?(i-j)/abs(i-j)*delta:0), yoff +sin(pi*((1-(%d/2)*2./%d)/2+(i-1)*2./%d)) + (i!=j?(i-j)/abs(i-j)*delta:0) rto -0.95*(cos(pi*((1-(%d/2)*2./%d)/2+(i-1)*2./%d))+(i!=j?(i-j)/abs(i-j)*delta:0) - cos(pi*((1-(%d/2)*2./%d)/2+(j-1)*2./%d)) + (i!=j?(i-j)/abs(i-j)*delta2:0)), -0.95*(sin(pi*((1-(%d/2)*2./%d)/2+(i-1)*2./%d)) + (i!=j?(i-j)/abs(i-j)*delta:0) - sin(pi*((1-(%d/2)*2./%d)/2+(j-1)*2./%d))+( i!=j?(i-j)/abs(i-j)*delta2:0)) ls (i < j? 1:2)\n",nlstate,nlstate,nlstate,nlstate,nlstate,nlstate,nlstate,nlstate,nlstate,nlstate,nlstate,nlstate,nlstate,nlstate,nlstate,nlstate,nlstate,nlstate,nlstate,nlstate);
 
-  fprintf(ficgp,"\n#Centripete arrows (turning in other direction (1-i) instead of (i-1)) \nset for [i=1:%d] arrow (%d+1)*10+i from cos(pi*((1-(%d/2)*2./%d)/2+(1-i)*2./%d))-(i!=j?(i-j)/abs(i-j)*delta:0), yoff +sin(pi*((1-(%d/2)*2./%d)/2+(1-i)*2./%d)) + (i!=j?(i-j)/abs(i-j)*delta:0) rto -0.80*(cos(pi*((1-(%d/2)*2./%d)/2+(1-i)*2./%d))+(i!=j?(i-j)/abs(i-j)*delta:0)  ), -0.80*(sin(pi*((1-(%d/2)*2./%d)/2+(1-i)*2./%d)) + (i!=j?(i-j)/abs(i-j)*delta:0) + yoff ) ls 4\n",nlstate,nlstate,nlstate,nlstate,nlstate,nlstate,nlstate,nlstate,nlstate,nlstate,nlstate,nlstate,nlstate,nlstate);
+  fprintf(ficgp,"\n#Centripete arrows (turning in other direction (1-i) instead of (i-1)) \nset for [i=1:%d] for [j=1:%d] arrow (%d+1)*10+i from cos(pi*((1-(%d/2)*2./%d)/2+(1-i)*2./%d))-(i!=j?(i-j)/abs(i-j)*delta:0), yoff +sin(pi*((1-(%d/2)*2./%d)/2+(1-i)*2./%d)) + (i!=j?(i-j)/abs(i-j)*delta:0) rto -0.80*(cos(pi*((1-(%d/2)*2./%d)/2+(1-i)*2./%d))+(i!=j?(i-j)/abs(i-j)*delta:0)  ), -0.80*(sin(pi*((1-(%d/2)*2./%d)/2+(1-i)*2./%d)) + (i!=j?(i-j)/abs(i-j)*delta:0) + yoff ) ls 4\n",nlstate, nlstate,nlstate,nlstate,nlstate,nlstate,nlstate,nlstate,nlstate,nlstate,nlstate,nlstate,nlstate,nlstate,nlstate);
   fprintf(ficgp,"\n#show arrow\nunset label\n");
   fprintf(ficgp,"\n#States labels, starting from 2 (2-i) instead of (1-i), was (i-1)\nset for [i=1:%d] label i sprintf(\"State %%d\",i) center at cos(pi*((1-(%d/2)*2./%d)/2+(2-i)*2./%d)), yoff+sin(pi*((1-(%d/2)*2./%d)/2+(2-i)*2./%d)) font \"helvetica, 16\" tc rgbcolor \"blue\"\n",nlstate,nlstate,nlstate,nlstate,nlstate,nlstate,nlstate);
   fprintf(ficgp,"\nset label %d+1 sprintf(\"State %%d\",%d+1) center at 0.,0.  font \"helvetica, 16\" tc rgbcolor \"red\"\n",nlstate,nlstate);
@@ -8114,6 +8176,78 @@ void printinggnuplot(char fileresu[], char optionfilefiname[], double ageminpar,
   fprintf(ficgp,"\nset out;unset log\n");
   /* fprintf(ficgp,"\nset out \"%s.svg\"; replot; set out; # bug gnuplot",subdirf2(optionfilefiname,"ILK_")); */
 
+  /* Plot the probability implied in the likelihood by covariate value */
+  fprintf(ficgp,"\nset ter pngcairo size 640, 480");
+  /* if(debugILK==1){ */
+  for(kf=1; kf <= ncovf; kf++){ /* For each simple dummy covariate of the model */
+    kvar=Tvar[TvarFind[kf]]; /* variable */
+    k=18+Tvar[TvarFind[kf]];/*offset because there are 18 columns in the ILK_ file */
+    for (i=1; i<= nlstate ; i ++) {
+      fprintf(ficgp,"\nset out \"%s-p%dj-%d.png\";set ylabel \"Probability for each individual/wave\";",subdirf2(optionfilefiname,"ILK_"),i,kvar);
+      fprintf(ficgp,"unset log;\n# For each simple dummy covariate of the model \n plot  \"%s\"",subdirf(fileresilk));
+      fprintf(ficgp,"  u  2:($5 == %d && $6==%d ? $10 : 1/0):($%d==0 ? 7 : 9):($%d==0 ? $6 : $6+4) t \"p%d%d V%d\" with points pt variable ps 0.4 lc variable \\\n",i,1,k,k,i,1,kvar);
+      for (j=2; j<= nlstate+ndeath ; j ++) {
+       fprintf(ficgp,",\\\n \"\" u  2:($5 == %d && $6==%d ? $10 : 1/0):($%d==0 ? 7 : 9):($%d==0 ? $6 : $6+4) t \"p%d%d V%d\" with points pt variable ps 0.4 lc variable ",i,j,k,k,i,j,kvar);
+      }
+      fprintf(ficgp,";\nset out; unset ylabel;\n"); 
+    }
+  } /* End of each covariate dummy */
+  for(ncovv=1, iposold=0, kk=0; ncovv <= ncovvt ; ncovv++){
+    /* Other example        V1 + V3 + V5 + age*V1  + age*V3 + age*V5 + V1*V3  + V3*V5  + V1*V5 
+     *     kmodel       =     1   2     3     4         5        6        7       8        9
+     *  varying                   1     2                                 3       4        5
+     *  ncovv                     1     2                                3 4     5 6      7 8
+     * TvarVV[ncovv]             V3     5                                1 3     3 5      1 5
+     * TvarVVind[ncovv]=kmodel    2     3                                7 7     8 8      9 9
+     * TvarFind[kmodel]       1   0     0     0         0        0        0       0        0
+     * kdata     ncovcol=[V1 V2] nqv=0 ntv=[V3 V4] nqtv=V5
+     * Dummy[kmodel]          0   0     1     2         2        3        1       1        1
+     */
+    ipos=TvarVVind[ncovv]; /* TvarVVind={2, 5, 5] gives the position in the model of the ncovv th varying covariate */
+    kvar=TvarVV[ncovv]; /*  TvarVV={3, 1, 3} gives the name of each varying covariate */
+    /* printf("DebugILK ficgp ncovv=%d, kvar=TvarVV[ncovv]=%d, ipos=TvarVVind[ncovv]=%d, Dummy[ipos]=%d, Typevar[ipos]=%d\n", ncovv,kvar,ipos,Dummy[ipos],Typevar[ipos]); */
+    if(ipos!=iposold){ /* Not a product or first of a product */
+      /* printf(" %d",ipos); */
+      /* fprintf(ficresilk," V%d",TvarVV[ncovv]); */
+      /* printf(" DebugILK ficgp suite ipos=%d != iposold=%d\n", ipos, iposold); */
+      kk++; /* Position of the ncovv column in ILK_ */
+      k=18+ncovf+kk; /*offset because there are 18 columns in the ILK_ file plus ncovf fixed covariate */
+      if(Dummy[ipos]==0 && Typevar[ipos]==0){ /* Only if dummy time varying: Dummy(0, 1=quant singor prod without age,2 dummy*age, 3quant*age) Typevar (0 single, 1=*age,2=Vn*vm)  */
+       for (i=1; i<= nlstate ; i ++) {
+         fprintf(ficgp,"\nset out \"%s-p%dj-%d.png\";set ylabel \"Probability for each individual/wave\";",subdirf2(optionfilefiname,"ILK_"),i,kvar);
+         fprintf(ficgp,"unset log;\n# For each simple dummy covariate of the model \n plot  \"%s\"",subdirf(fileresilk));
+
+         if(gnuplotversion >=5.2){ /* Former gnuplot versions do not have variable pointsize!! */
+           /* printf("DebugILK gnuplotversion=%g >=5.2\n",gnuplotversion); */
+           fprintf(ficgp,"  u  2:($5 == %d && $6==%d ? $10 : 1/0):($%d==0 ? 7 : 9):($%d==0 ? $6 : $6+4) t \"p%d%d V%d\" with points pt variable ps 0.4 lc variable \\\n",i,1,k,k,i,1,kvar);
+           for (j=2; j<= nlstate+ndeath ; j ++) {
+             fprintf(ficgp,",\\\n \"\" u  2:($5 == %d && $6==%d ? $10 : 1/0):($%d==0 ? 7 : 9):($%d==0 ? $6 : $6+4) t \"p%d%d V%d\" with points pt variable ps 0.4 lc variable ",i,j,k,k,i,j,kvar);
+           }
+         }else{
+           /* printf("DebugILK gnuplotversion=%g <5.2\n",gnuplotversion); */
+           fprintf(ficgp,"  u  2:($5 == %d && $6==%d ? $10 : 1/0):($%d==0 ? $6 : $6+4) t \"p%d%d V%d\" with points pt 7 ps 0.4 lc variable \\\n",i,1,k,i,1,kvar);
+           for (j=2; j<= nlstate+ndeath ; j ++) {
+             fprintf(ficgp,",\\\n \"\" u  2:($5 == %d && $6==%d ? $10 : 1/0):($%d==0 ? $6 : $6+4) t \"p%d%d V%d\" with points pt 7 ps 0.4 lc variable ",i,j,k,i,j,kvar);
+           }
+         }
+         fprintf(ficgp,";\nset out; unset ylabel;\n"); 
+       }
+      }/* End if dummy varying */
+    }else{ /*Product */
+      /* printf("*"); */
+      /* fprintf(ficresilk,"*"); */
+    }
+    iposold=ipos;
+  } /* For each time varying covariate */
+  /* } /\* debugILK==1 *\/ */
+  /* unset log; plot  "rrtest1_sorted_4/ILK_rrtest1_sorted_4.txt" u  2:($4 == 1 && $5==2 ? $9 : 1/0):5 t "p12" with points lc variable */               
+  /* fprintf(ficgp,"\nset log y;plot  \"%s\" u 2:(-$11):3 t \"All sample, all transitions\" with dots lc variable",subdirf(fileresilk)); */
+  /* fprintf(ficgp,"\nreplot  \"%s\" u 2:($3 <= 3 ? -$11 : 1/0):3 t \"First 3 individuals\" with line lc variable", subdirf(fileresilk)); */
+  fprintf(ficgp,"\nset out;unset log\n");
+  /* fprintf(ficgp,"\nset out \"%s.svg\"; replot; set out; # bug gnuplot",subdirf2(optionfilefiname,"ILK_")); */
+
+
+  
   strcpy(dirfileres,optionfilefiname);
   strcpy(optfileres,"vpl");
   /* 1eme*/
@@ -11135,7 +11269,7 @@ Fixed[k] 0=fixed (product or simple), 1 varying, 2 fixed with age product, 3 var
 Dummy[k] 0=dummy (0 1), 1 quantitative (single or product without age), 2 dummy with age product, 3 quant with age product\n",model);
   for(k=-1;k<=NCOVMAX; k++){ Fixed[k]=0; Dummy[k]=0;}
   for(k=1;k<=NCOVMAX; k++){TvarFind[k]=0; TvarVind[k]=0;}
-  for(k=1, ncovf=0, nsd=0, nsq=0, ncovv=0, ncova=0, ncoveff=0, nqfveff=0, ntveff=0, nqtveff=0, ncovvt=0;k<=cptcovt; k++){ /* or cptocvt */
+  for(k=1, ncovf=0, nsd=0, nsq=0, ncovv=0, ncova=0, ncoveff=0, nqfveff=0, ntveff=0, nqtveff=0, ncovvt=0;k<=cptcovt; k++){ /* or cptocvt loop on k from model */
     if (Tvar[k] <=ncovcol && Typevar[k]==0 ){ /* Simple fixed dummy (<=ncovcol) covariates */
       Fixed[k]= 0;
       Dummy[k]= 0;
@@ -12562,7 +12696,7 @@ int main(int argc, char *argv[])
     if(line[1]=='q'){ /* This #q will quit imach (the answer is q) */
       z[0]=line[1];
     }else if(line[1]=='d'){ /* For debugging individual values of covariates in ficresilk */
-      debugILK=1;
+      debugILK=1;printf("DebugILK\n");
     }
     /* printf("****line [1] = %c \n",line[1]); */
     fputs(line, stdout);