Diff for /imach/src/imach.c between versions 1.231 and 1.238

version 1.231, 2016/08/22 07:17:15 version 1.238, 2016/08/26 14:23:35
Line 1 Line 1
 /* $Id$  /* $Id$
   $State$    $State$
   $Log$    $Log$
     Revision 1.238  2016/08/26 14:23:35  brouard
     Summary: Starting tests of 0.99
   
     Revision 1.237  2016/08/26 09:20:19  brouard
     Summary: to valgrind
   
     Revision 1.236  2016/08/25 10:50:18  brouard
     *** empty log message ***
   
     Revision 1.235  2016/08/25 06:59:23  brouard
     *** empty log message ***
   
     Revision 1.234  2016/08/23 16:51:20  brouard
     *** empty log message ***
   
     Revision 1.233  2016/08/23 07:40:50  brouard
     Summary: not working
   
     Revision 1.232  2016/08/22 14:20:21  brouard
     Summary: not working
   
   Revision 1.231  2016/08/22 07:17:15  brouard    Revision 1.231  2016/08/22 07:17:15  brouard
   Summary: not working    Summary: not working
   
Line 911  int cptcovsnq=0; /**< cptcovsnq number o Line 932  int cptcovsnq=0; /**< cptcovsnq number o
 int cptcovage=0; /**< Number of covariates with age: V3*age only =1 */  int cptcovage=0; /**< Number of covariates with age: V3*age only =1 */
 int cptcovprodnoage=0; /**< Number of covariate products without age */     int cptcovprodnoage=0; /**< Number of covariate products without age */   
 int cptcoveff=0; /* Total number of covariates to vary for printing results */  int cptcoveff=0; /* Total number of covariates to vary for printing results */
 int ncoveff=0; /* Total number of effective covariates in the model */  int ncovf=0; /* Total number of effective fixed covariates (dummy or quantitative) in the model */
   int ncovv=0; /* Total number of effective (wave) varying covariates (dummy or quantitative) in the model */
   int ncova=0; /* Total number of effective (wave and stepm) varying with age covariates (dummy of quantitative) in the model */
   int nsd=0; /**< Total number of single dummy variables (output) */
   int nsq=0; /**< Total number of single quantitative variables (output) */
   int ncoveff=0; /* Total number of effective fixed dummy covariates in the model */
 int nqfveff=0; /**< nqfveff Number of Quantitative Fixed Variables Effective */  int nqfveff=0; /**< nqfveff Number of Quantitative Fixed Variables Effective */
 int ntveff=0; /**< ntveff number of effective time varying variables */  int ntveff=0; /**< ntveff number of effective time varying variables */
 int nqtveff=0; /**< ntqveff number of effective time varying quantitative variables */  int nqtveff=0; /**< ntqveff number of effective time varying quantitative variables */
Line 968  char fileresv[FILENAMELENGTH]; Line 994  char fileresv[FILENAMELENGTH];
 FILE  *ficresvpl;  FILE  *ficresvpl;
 char fileresvpl[FILENAMELENGTH];  char fileresvpl[FILENAMELENGTH];
 char title[MAXLINE];  char title[MAXLINE];
   char model[MAXLINE]; /**< The model line */
 char optionfile[FILENAMELENGTH], datafile[FILENAMELENGTH],  filerespl[FILENAMELENGTH],  fileresplb[FILENAMELENGTH];  char optionfile[FILENAMELENGTH], datafile[FILENAMELENGTH],  filerespl[FILENAMELENGTH],  fileresplb[FILENAMELENGTH];
 char plotcmd[FILENAMELENGTH], pplotcmd[FILENAMELENGTH];  char plotcmd[FILENAMELENGTH], pplotcmd[FILENAMELENGTH];
 char tmpout[FILENAMELENGTH],  tmpout2[FILENAMELENGTH];   char tmpout[FILENAMELENGTH],  tmpout2[FILENAMELENGTH]; 
Line 1067  double ***cotvar; /* Time varying covari Line 1094  double ***cotvar; /* Time varying covari
 double ***cotqvar; /* Time varying quantitative covariate itqv */  double ***cotqvar; /* Time varying quantitative covariate itqv */
 double  idx;   double  idx; 
 int **nbcode, *Tvar; /**< model=V2 => Tvar[1]= 2 */  int **nbcode, *Tvar; /**< model=V2 => Tvar[1]= 2 */
   /*           V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1 */
   /*k          1  2   3   4     5    6    7     8    9 */
   /*Tvar[k]=   5  4   3   6     5    2    7     1    1 */
   /* Tndvar[k]    1   2   3               4          5 */
   /*TDvar         4   3   6               7          1 */ /* For outputs only; combination of dummies fixed or varying */
   /* Tns[k]    1  2   2              4               5 */ /* Number of single cova */
   /* TvarsD[k]    1   2                              3 */ /* Number of single dummy cova */
   /* TvarsDind    2   3                              9 */ /* position K of single dummy cova */
   /* TvarsQ[k] 1                     2                 */ /* Number of single quantitative cova */
   /* TvarsQind 1                     6                 */ /* position K of single quantitative cova */
   /* Tprod[i]=k           4               7            */
   /* Tage[i]=k                  5               8      */
   /* */
   /* Type                    */
   /* V         1  2  3  4  5 */
   /*           F  F  V  V  V */
   /*           D  Q  D  D  Q */
   /*                         */
   int *TvarsD;
   int *TvarsDind;
   int *TvarsQ;
   int *TvarsQind;
   
   #define MAXRESULTLINES 10
   int nresult=0;
   int TKresult[MAXRESULTLINES];
   int Tresult[MAXRESULTLINES][NCOVMAX];/* For dummy variable , value (output) */
   int Tinvresult[MAXRESULTLINES][NCOVMAX];/* For dummy variable , value (output) */
   int Tvresult[MAXRESULTLINES][NCOVMAX]; /* For dummy variable , variable # (output) */
   double Tqresult[MAXRESULTLINES][NCOVMAX]; /* For quantitative variable , value (output) */
   double Tqinvresult[MAXRESULTLINES][NCOVMAX]; /* For quantitative variable , value (output) */
   int Tvqresult[MAXRESULTLINES][NCOVMAX]; /* For quantitative variable , variable # (output) */
   
   /* int *TDvar; /\**< TDvar[1]=4,  TDvarF[2]=3, TDvar[3]=6  in V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1 *\/ */
   int *TvarF; /**< TvarF[1]=Tvar[6]=2,  TvarF[2]=Tvar[7]=7, TvarF[3]=Tvar[9]=1  in V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1 */
   int *TvarFind; /**< TvarFind[1]=6,  TvarFind[2]=7, Tvarind[3]=9  in V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1 */
   int *TvarV; /**< TvarV[1]=Tvar[1]=5, TvarV[2]=Tvar[2]=4  in V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1 */
   int *TvarVind; /**< TvarVind[1]=1, TvarVind[2]=2  in V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1 */
   int *TvarA; /**< TvarA[1]=Tvar[5]=5, TvarA[2]=Tvar[8]=1  in V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1 */
   int *TvarAind; /**< TvarindA[1]=5, TvarAind[2]=8  in V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1 */
 int *TvarFD; /**< TvarFD[1]=V1 in V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1 */  int *TvarFD; /**< TvarFD[1]=V1 in V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1 */
 int *TvarFDind; /* TvarFDind[1]=9 in V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1 */  int *TvarFDind; /* TvarFDind[1]=9 in V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1 */
 int *TvarFQ; /* TvarFQ[1]=V2 in V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1 */ /* Only simple fixed quantitative variable */  int *TvarFQ; /* TvarFQ[1]=V2 in V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1 */ /* Only simple fixed quantitative variable */
Line 1081  double *Tvalsel; /**< Selected modality Line 1148  double *Tvalsel; /**< Selected modality
 int *Typevar; /**< 0 for simple covariate (dummy, quantitative, fixed or varying), 1 for age product, 2 for  product */  int *Typevar; /**< 0 for simple covariate (dummy, quantitative, fixed or varying), 1 for age product, 2 for  product */
 int *Fixed; /** Fixed[k] 0=fixed, 1 varying, 2 fixed with age product, 3 varying with age product */   int *Fixed; /** Fixed[k] 0=fixed, 1 varying, 2 fixed with age product, 3 varying with age product */ 
 int *Dummy; /** Dummy[k] 0=dummy (0 1), 1 quantitative (single or product without age), 2 dummy with age product, 3 quant with age product */   int *Dummy; /** Dummy[k] 0=dummy (0 1), 1 quantitative (single or product without age), 2 dummy with age product, 3 quant with age product */ 
   int *DummyV; /** Dummy[v] 0=dummy (0 1), 1 quantitative */
   int *FixedV; /** FixedV[v] 0 fixed, 1 varying */
 int *Tage;  int *Tage;
 int anyvaryingduminmodel=0; /**< Any varying dummy in Model=1 yes, 0 no, to avoid a loop on waves in freq */   int anyvaryingduminmodel=0; /**< Any varying dummy in Model=1 yes, 0 no, to avoid a loop on waves in freq */ 
 int *Tmodelind; /** Tmodelind[Tvaraff[3]]=9 for V1 position,Tvaraff[1]@9={4, 3, 1, 0, 0, 0, 0, 0, 0}, model=V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1*/  int *Tmodelind; /** Tmodelind[Tvaraff[3]]=9 for V1 position,Tvaraff[1]@9={4, 3, 1, 0, 0, 0, 0, 0, 0}, model=V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1*/
Line 1090  int *Ndum; /** Freq of modality (tricode Line 1159  int *Ndum; /** Freq of modality (tricode
 /* int **codtab;*/ /**< codtab=imatrix(1,100,1,10); */  /* int **codtab;*/ /**< codtab=imatrix(1,100,1,10); */
 int **Tvard;  int **Tvard;
 int *Tprod;/**< Gives the k position of the k1 product */  int *Tprod;/**< Gives the k position of the k1 product */
   /* Tprod[k1=1]=3(=V1*V4) for V2+V1+V1*V4+age*V3  */
 int *Tposprod; /**< Gives the k1 product from the k position */  int *Tposprod; /**< Gives the k1 product from the k position */
 /* Tprod[k1=1]=3(=V1*V4) for V2+V1+V1*V4+age*V3     /* if  V2+V1+V1*V4+age*V3+V3*V2   TProd[k1=2]=5 (V3*V2) */
    if  V2+V1+V1*V4+age*V3+V3*V2   TProd[k1=2]=5 (V3*V2)     /* Tposprod[k]=k1 , Tposprod[3]=1, Tposprod[5(V3*V2)]=2 (2nd product without age) */
    Tposprod[k]=k1 , Tposprod[3]=1, Tposprod[5]=2   
 */  
 int cptcovprod, *Tvaraff, *invalidvarcomb;  int cptcovprod, *Tvaraff, *invalidvarcomb;
 double *lsurv, *lpop, *tpop;  double *lsurv, *lpop, *tpop;
   
Line 1320  int nbocc(char *s, char occ) Line 1388  int nbocc(char *s, char occ)
   i=0;    i=0;
   lg=strlen(s);    lg=strlen(s);
   for(i=0; i<= lg; i++) {    for(i=0; i<= lg; i++) {
   if  (s[i] == occ ) j++;      if  (s[i] == occ ) j++;
   }    }
   return j;    return j;
 }  }
Line 2211  void powell(double p[], double **xi, int Line 2279  void powell(double p[], double **xi, int
       if (directest < 0.0) { /* Then we use it for new direction */        if (directest < 0.0) { /* Then we use it for new direction */
 #endif  #endif
 #ifdef DEBUGLINMIN  #ifdef DEBUGLINMIN
                                 printf("Before linmin in direction P%d-P0\n",n);          printf("Before linmin in direction P%d-P0\n",n);
                                 for (j=1;j<=n;j++) {          for (j=1;j<=n;j++) {
                                         printf(" Before xit[%d]= %12.7f p[%d]= %12.7f",j,xit[j],j,p[j]);            printf(" Before xit[%d]= %12.7f p[%d]= %12.7f",j,xit[j],j,p[j]);
                                         fprintf(ficlog," Before xit[%d]= %12.7f p[%d]= %12.7f",j,xit[j],j,p[j]);            fprintf(ficlog," Before xit[%d]= %12.7f p[%d]= %12.7f",j,xit[j],j,p[j]);
                                         if(j % ncovmodel == 0){            if(j % ncovmodel == 0){
                                                 printf("\n");              printf("\n");
                                                 fprintf(ficlog,"\n");              fprintf(ficlog,"\n");
                                         }            }
                                 }          }
 #endif  #endif
 #ifdef LINMINORIGINAL  #ifdef LINMINORIGINAL
                                 linmin(p,xit,n,fret,func); /* computes minimum on the extrapolated direction: changes p and rescales xit.*/          linmin(p,xit,n,fret,func); /* computes minimum on the extrapolated direction: changes p and rescales xit.*/
 #else  #else
                                 linmin(p,xit,n,fret,func,&flat); /* computes minimum on the extrapolated direction: changes p and rescales xit.*/          linmin(p,xit,n,fret,func,&flat); /* computes minimum on the extrapolated direction: changes p and rescales xit.*/
                                 flatdir[i]=flat; /* Function is vanishing in that direction i */          flatdir[i]=flat; /* Function is vanishing in that direction i */
 #endif  #endif
           
 #ifdef DEBUGLINMIN  #ifdef DEBUGLINMIN
                                 for (j=1;j<=n;j++) {           for (j=1;j<=n;j++) { 
                                         printf("After xit[%d]= %12.7f p[%d]= %12.7f",j,xit[j],j,p[j]);            printf("After xit[%d]= %12.7f p[%d]= %12.7f",j,xit[j],j,p[j]);
                                         fprintf(ficlog,"After xit[%d]= %12.7f p[%d]= %12.7f",j,xit[j],j,p[j]);            fprintf(ficlog,"After xit[%d]= %12.7f p[%d]= %12.7f",j,xit[j],j,p[j]);
                                         if(j % ncovmodel == 0){            if(j % ncovmodel == 0){
                                                 printf("\n");              printf("\n");
                                                 fprintf(ficlog,"\n");              fprintf(ficlog,"\n");
                                         }            }
                                 }          }
 #endif  #endif
                                 for (j=1;j<=n;j++) {           for (j=1;j<=n;j++) { 
                                         xi[j][ibig]=xi[j][n]; /* Replace direction with biggest decrease by last direction n */            xi[j][ibig]=xi[j][n]; /* Replace direction with biggest decrease by last direction n */
                                         xi[j][n]=xit[j];      /* and this nth direction by the by the average p_0 p_n */            xi[j][n]=xit[j];      /* and this nth direction by the by the average p_0 p_n */
                                 }          }
 #ifdef LINMINORIGINAL  #ifdef LINMINORIGINAL
 #else  #else
                                 for (j=1, flatd=0;j<=n;j++) {          for (j=1, flatd=0;j<=n;j++) {
                                         if(flatdir[j]>0)            if(flatdir[j]>0)
                                                 flatd++;              flatd++;
                                 }          }
                                 if(flatd >0){          if(flatd >0){
                                         printf("%d flat directions\n",flatd);            printf("%d flat directions\n",flatd);
                                         fprintf(ficlog,"%d flat directions\n",flatd);            fprintf(ficlog,"%d flat directions\n",flatd);
                                         for (j=1;j<=n;j++) {             for (j=1;j<=n;j++) { 
                                                 if(flatdir[j]>0){              if(flatdir[j]>0){
                                                         printf("%d ",j);                printf("%d ",j);
                                                         fprintf(ficlog,"%d ",j);                fprintf(ficlog,"%d ",j);
                                                 }              }
                                         }            }
                                         printf("\n");            printf("\n");
                                         fprintf(ficlog,"\n");            fprintf(ficlog,"\n");
                                 }          }
 #endif  #endif
                                 printf("Gaining to use new average direction of P0 P%d instead of biggest increase direction %d :\n",n,ibig);          printf("Gaining to use new average direction of P0 P%d instead of biggest increase direction %d :\n",n,ibig);
                                 fprintf(ficlog,"Gaining to use new average direction of P0 P%d instead of biggest increase direction %d :\n",n,ibig);          fprintf(ficlog,"Gaining to use new average direction of P0 P%d instead of biggest increase direction %d :\n",n,ibig);
                                           
 #ifdef DEBUG  #ifdef DEBUG
                                 printf("Direction changed  last moved %d in place of ibig=%d, new last is the average:\n",n,ibig);          printf("Direction changed  last moved %d in place of ibig=%d, new last is the average:\n",n,ibig);
                                 fprintf(ficlog,"Direction changed  last moved %d in place of ibig=%d, new last is the average:\n",n,ibig);          fprintf(ficlog,"Direction changed  last moved %d in place of ibig=%d, new last is the average:\n",n,ibig);
                                 for(j=1;j<=n;j++){          for(j=1;j<=n;j++){
                                         printf(" %lf",xit[j]);            printf(" %lf",xit[j]);
                                         fprintf(ficlog," %lf",xit[j]);            fprintf(ficlog," %lf",xit[j]);
                                 }          }
                                 printf("\n");          printf("\n");
                                 fprintf(ficlog,"\n");          fprintf(ficlog,"\n");
 #endif  #endif
       } /* end of t or directest negative */        } /* end of t or directest negative */
 #ifdef POWELLNOF3INFF1TEST  #ifdef POWELLNOF3INFF1TEST
 #else  #else
     } /* end if (fptt < fp)  */        } /* end if (fptt < fp)  */
 #endif  #endif
 #ifdef NODIRECTIONCHANGEDUNTILNITER  /* No change in drections until some iterations are done */  #ifdef NODIRECTIONCHANGEDUNTILNITER  /* No change in drections until some iterations are done */
                 } /*NODIRECTIONCHANGEDUNTILNITER  No change in drections until some iterations are done */      } /*NODIRECTIONCHANGEDUNTILNITER  No change in drections until some iterations are done */
 #else  #else
 #endif  #endif
   } /* loop iteration */                   } /* loop iteration */ 
 }   } 
     
 /**** Prevalence limit (stable or period prevalence)  ****************/  /**** Prevalence limit (stable or period prevalence)  ****************/
     
 double **prevalim(double **prlim, int nlstate, double x[], double age, double **oldm, double **savm, double ftolpl, int *ncvyear, int ij)    double **prevalim(double **prlim, int nlstate, double x[], double age, double **oldm, double **savm, double ftolpl, int *ncvyear, int ij, int nres)
 {    {
   /* Computes the prevalence limit in each live state at age x and for covariate ij by left multiplying the unit      /* Computes the prevalence limit in each live state at age x and for covariate combination ij 
      matrix by transitions matrix until convergence is reached with precision ftolpl */         (and selected quantitative values in nres)
          by left multiplying the unit
          matrix by transitions matrix until convergence is reached with precision ftolpl */
   /* Wx= Wx-1 Px-1= Wx-2 Px-2 Px-1  = Wx-n Px-n ... Px-2 Px-1 I */    /* Wx= Wx-1 Px-1= Wx-2 Px-2 Px-1  = Wx-n Px-n ... Px-2 Px-1 I */
   /* Wx is row vector: population in state 1, population in state 2, population dead */    /* Wx is row vector: population in state 1, population in state 2, population dead */
   /* or prevalence in state 1, prevalence in state 2, 0 */    /* or prevalence in state 1, prevalence in state 2, 0 */
Line 2309  double **prevalim(double **prlim, int nl Line 2379  double **prevalim(double **prlim, int nl
   /* {0.51571254859325999, 0.4842874514067399, */    /* {0.51571254859325999, 0.4842874514067399, */
   /*  0.51326036147820708, 0.48673963852179264} */    /*  0.51326036147820708, 0.48673963852179264} */
   /* If we start from prlim again, prlim tends to a constant matrix */    /* If we start from prlim again, prlim tends to a constant matrix */
       
   int i, ii,j,k;    int i, ii,j,k;
   double *min, *max, *meandiff, maxmax,sumnew=0.;    double *min, *max, *meandiff, maxmax,sumnew=0.;
   /* double **matprod2(); */ /* test */    /* double **matprod2(); */ /* test */
Line 2339  double **prevalim(double **prlim, int nl Line 2409  double **prevalim(double **prlim, int nl
     cov[2]=agefin;      cov[2]=agefin;
     if(nagesqr==1)      if(nagesqr==1)
       cov[3]= agefin*agefin;;        cov[3]= agefin*agefin;;
     for (k=1; k<=cptcovn;k++) {      for (k=1; k<=nsd;k++) { /* For single dummy covariates only */
       /* cov[2+nagesqr+k]=nbcode[Tvar[k]][codtabm(ij,Tvar[k])]; */                          /* Here comes the value of the covariate 'ij' after renumbering k with single dummy covariates */
                         /* Here comes the value of the covariate 'ij' */        cov[2+nagesqr+TvarsDind[k]]=nbcode[TvarsD[k]][codtabm(ij,k)];
       cov[2+nagesqr+k]=nbcode[Tvar[k]][codtabm(ij,k)];        /* printf("prevalim Dummy combi=%d k=%d TvarsD[%d]=V%d TvarsDind[%d]=%d nbcode=%d cov=%lf codtabm(%d,Tvar[%d])=%d \n",ij,k, k, TvarsD[k],k,TvarsDind[k],nbcode[TvarsD[k]][codtabm(ij,k)],cov[2+nagesqr+TvarsDind[k]], ij, k, codtabm(ij,k)); */
       /* printf("prevalim ij=%d k=%d Tvar[%d]=%d nbcode=%d cov=%lf codtabm(%d,Tvar[%d])=%d \n",ij,k, k, Tvar[k],nbcode[Tvar[k]][codtabm(ij,Tvar[k])],cov[2+k], ij, k, codtabm(ij,Tvar[k])]); */      }
       for (k=1; k<=nsq;k++) { /* For single varying covariates only */
                           /* Here comes the value of quantitative after renumbering k with single quantitative covariates */
         cov[2+nagesqr+TvarsQind[k]]=Tqresult[nres][k]; 
         /* printf("prevalim Quantitative k=%d  TvarsQind[%d]=%d, TvarsQ[%d]=V%d,Tqresult[%d][%d]=%f\n",k,k,TvarsQind[k],k,TvarsQ[k],nres,k,Tqresult[nres][k]); */
       }
       for (k=1; k<=cptcovage;k++){  /* For product with age */
         if(Dummy[Tvar[Tage[k]]]){
           cov[2+nagesqr+Tage[k]]=nbcode[Tvar[Tage[k]]][codtabm(ij,k)]*cov[2];
         } else{
           cov[2+nagesqr+Tage[k]]=Tqresult[nres][k]; 
         }
         /* printf("prevalim Age combi=%d k=%d  Tage[%d]=V%d Tqresult[%d][%d]=%f\n",ij,k,k,Tage[k],nres,k,Tqresult[nres][k]); */
       }
       for (k=1; k<=cptcovprod;k++){ /* For product without age */
         /* printf("prevalim Prod ij=%d k=%d  Tprod[%d]=%d Tvard[%d][1]=V%d, Tvard[%d][2]=V%d\n",ij,k,k,Tprod[k], k,Tvard[k][1], k,Tvard[k][2]); */
         if(Dummy[Tvard[k][1]==0]){
           if(Dummy[Tvard[k][2]==0]){
             cov[2+nagesqr+Tprod[k]]=nbcode[Tvard[k][1]][codtabm(ij,k)] * nbcode[Tvard[k][2]][codtabm(ij,k)];
           }else{
             cov[2+nagesqr+Tprod[k]]=nbcode[Tvard[k][1]][codtabm(ij,k)] * Tqresult[nres][k];
           }
         }else{
           if(Dummy[Tvard[k][2]==0]){
             cov[2+nagesqr+Tprod[k]]=nbcode[Tvard[k][2]][codtabm(ij,k)] * Tqinvresult[nres][Tvard[k][1]];
           }else{
             cov[2+nagesqr+Tprod[k]]=Tqinvresult[nres][Tvard[k][1]]*  Tqinvresult[nres][Tvard[k][2]];
           }
         }
     }      }
     /*wrong? for (k=1; k<=cptcovage;k++) cov[2+Tage[k]]=cov[2+Tage[k]]*cov[2]; */  
     /* for (k=1; k<=cptcovage;k++) cov[2+nagesqr+Tage[k]]=nbcode[Tvar[k]][codtabm(ij,Tvar[k])]*cov[2]; */  
     for (k=1; k<=cptcovage;k++) cov[2+nagesqr+Tage[k]]=nbcode[Tvar[k]][codtabm(ij,k)]*cov[2];  
     for (k=1; k<=cptcovprod;k++) /* Useless */  
       /* cov[2+nagesqr+Tprod[k]]=nbcode[Tvard[k][1]][codtabm(ij,Tvard[k][1])] * nbcode[Tvard[k][2]][codtabm(ij,Tvard[k][2])]; */  
       cov[2+nagesqr+Tprod[k]]=nbcode[Tvard[k][1]][codtabm(ij,k)] * nbcode[Tvard[k][2]][codtabm(ij,k)];  
       
     /*printf("ij=%d cptcovprod=%d tvar=%d ", ij, cptcovprod, Tvar[1]);*/      /*printf("ij=%d cptcovprod=%d tvar=%d ", ij, cptcovprod, Tvar[1]);*/
     /*printf("ij=%d cov[3]=%lf cov[4]=%lf \n",ij, cov[3],cov[4]);*/      /*printf("ij=%d cov[3]=%lf cov[4]=%lf \n",ij, cov[3],cov[4]);*/
     /*printf("ij=%d cov[3]=%lf \n",ij, cov[3]);*/      /*printf("ij=%d cov[3]=%lf \n",ij, cov[3]);*/
Line 2473  Earliest age to start was %d-%d=%d, ncvl Line 2564  Earliest age to start was %d-%d=%d, ncvl
       cov[2+nagesqr+k]=nbcode[Tvar[k]][codtabm(ij,k)];        cov[2+nagesqr+k]=nbcode[Tvar[k]][codtabm(ij,k)];
       /* printf("prevalim ij=%d k=%d Tvar[%d]=%d nbcode=%d cov=%lf codtabm(%d,Tvar[%d])=%d \n",ij,k, k, Tvar[k],nbcode[Tvar[k]][codtabm(ij,Tvar[k])],cov[2+k], ij, k, codtabm(ij,Tvar[k])]); */        /* printf("prevalim ij=%d k=%d Tvar[%d]=%d nbcode=%d cov=%lf codtabm(%d,Tvar[%d])=%d \n",ij,k, k, Tvar[k],nbcode[Tvar[k]][codtabm(ij,Tvar[k])],cov[2+k], ij, k, codtabm(ij,Tvar[k])]); */
     }      }
     /*wrong? for (k=1; k<=cptcovage;k++) cov[2+Tage[k]]=cov[2+Tage[k]]*cov[2]; */  
     /* for (k=1; k<=cptcovage;k++) cov[2+nagesqr+Tage[k]]=nbcode[Tvar[k]][codtabm(ij,Tvar[k])]*cov[2]; */  
     for (k=1; k<=cptcovage;k++) cov[2+nagesqr+Tage[k]]=nbcode[Tvar[k]][codtabm(ij,k)]*cov[2];      for (k=1; k<=cptcovage;k++) cov[2+nagesqr+Tage[k]]=nbcode[Tvar[k]][codtabm(ij,k)]*cov[2];
     for (k=1; k<=cptcovprod;k++) /* Useless */      for (k=1; k<=cptcovprod;k++) /* Useless */
       /* cov[2+nagesqr+Tprod[k]]=nbcode[Tvard[k][1]][codtabm(ij,Tvard[k][1])] * nbcode[Tvard[k][2]][codtabm(ij,Tvard[k][2])]; */        /* cov[2+nagesqr+Tprod[k]]=nbcode[Tvard[k][1]][codtabm(ij,Tvard[k][1])] * nbcode[Tvard[k][2]][codtabm(ij,Tvard[k][2])]; */
Line 2501  Earliest age to start was %d-%d=%d, ncvl Line 2590  Earliest age to start was %d-%d=%d, ncvl
     }      }
     for(j=1; j<=nlstate; j++){       for(j=1; j<=nlstate; j++){ 
       for(i=1;i<=nlstate;i++){        for(i=1;i<=nlstate;i++){
                                 /* bprlim[i][j]= newm[i][j]/(1-sumnew); */          /* bprlim[i][j]= newm[i][j]/(1-sumnew); */
                                 bprlim[i][j]= newm[i][j];          bprlim[i][j]= newm[i][j];
                                 max[i]=FMAX(max[i],bprlim[i][j]); /* Max in line */          max[i]=FMAX(max[i],bprlim[i][j]); /* Max in line */
                                 min[i]=FMIN(min[i],bprlim[i][j]);          min[i]=FMIN(min[i],bprlim[i][j]);
       }        }
     }      }
                                   
Line 2699  double **bpmij(double **ps, double *cov, Line 2788  double **bpmij(double **ps, double *cov,
   /*double t34;*/    /*double t34;*/
   int i,j, nc, ii, jj;    int i,j, nc, ii, jj;
   
         for(i=1; i<= nlstate; i++){    for(i=1; i<= nlstate; i++){
                 for(j=1; j<i;j++){      for(j=1; j<i;j++){
                         for (nc=1, lnpijopii=0.;nc <=ncovmodel; nc++){        for (nc=1, lnpijopii=0.;nc <=ncovmodel; nc++){
                                 /*lnpijopii += param[i][j][nc]*cov[nc];*/          /*lnpijopii += param[i][j][nc]*cov[nc];*/
                                 lnpijopii += x[nc+((i-1)*(nlstate+ndeath-1)+j-1)*ncovmodel]*cov[nc];          lnpijopii += x[nc+((i-1)*(nlstate+ndeath-1)+j-1)*ncovmodel]*cov[nc];
                                 /*       printf("Int j<i s1=%.17e, lnpijopii=%.17e\n",s1,lnpijopii); */          /*       printf("Int j<i s1=%.17e, lnpijopii=%.17e\n",s1,lnpijopii); */
                         }        }
                         ps[i][j]=lnpijopii; /* In fact ln(pij/pii) */        ps[i][j]=lnpijopii; /* In fact ln(pij/pii) */
                         /*      printf("s1=%.17e, lnpijopii=%.17e\n",s1,lnpijopii); */        /*        printf("s1=%.17e, lnpijopii=%.17e\n",s1,lnpijopii); */
                 }      }
                 for(j=i+1; j<=nlstate+ndeath;j++){      for(j=i+1; j<=nlstate+ndeath;j++){
                         for (nc=1, lnpijopii=0.;nc <=ncovmodel; nc++){        for (nc=1, lnpijopii=0.;nc <=ncovmodel; nc++){
                                 /*lnpijopii += x[(i-1)*nlstate*ncovmodel+(j-2)*ncovmodel+nc+(i-1)*(ndeath-1)*ncovmodel]*cov[nc];*/          /*lnpijopii += x[(i-1)*nlstate*ncovmodel+(j-2)*ncovmodel+nc+(i-1)*(ndeath-1)*ncovmodel]*cov[nc];*/
                                 lnpijopii += x[nc + ((i-1)*(nlstate+ndeath-1)+(j-2))*ncovmodel]*cov[nc];          lnpijopii += x[nc + ((i-1)*(nlstate+ndeath-1)+(j-2))*ncovmodel]*cov[nc];
                                 /*        printf("Int j>i s1=%.17e, lnpijopii=%.17e %lx %lx\n",s1,lnpijopii,s1,lnpijopii); */          /*        printf("Int j>i s1=%.17e, lnpijopii=%.17e %lx %lx\n",s1,lnpijopii,s1,lnpijopii); */
                         }        }
                         ps[i][j]=lnpijopii; /* In fact ln(pij/pii) */        ps[i][j]=lnpijopii; /* In fact ln(pij/pii) */
                 }      }
         }    }
             
         for(i=1; i<= nlstate; i++){    for(i=1; i<= nlstate; i++){
                 s1=0;      s1=0;
                 for(j=1; j<i; j++){      for(j=1; j<i; j++){
                         s1+=exp(ps[i][j]); /* In fact sums pij/pii */        s1+=exp(ps[i][j]); /* In fact sums pij/pii */
                         /*printf("debug1 %d %d ps=%lf exp(ps)=%lf s1+=%lf\n",i,j,ps[i][j],exp(ps[i][j]),s1); */        /*printf("debug1 %d %d ps=%lf exp(ps)=%lf s1+=%lf\n",i,j,ps[i][j],exp(ps[i][j]),s1); */
                 }      }
                 for(j=i+1; j<=nlstate+ndeath; j++){      for(j=i+1; j<=nlstate+ndeath; j++){
                         s1+=exp(ps[i][j]); /* In fact sums pij/pii */        s1+=exp(ps[i][j]); /* In fact sums pij/pii */
                         /*printf("debug2 %d %d ps=%lf exp(ps)=%lf s1+=%lf\n",i,j,ps[i][j],exp(ps[i][j]),s1); */        /*printf("debug2 %d %d ps=%lf exp(ps)=%lf s1+=%lf\n",i,j,ps[i][j],exp(ps[i][j]),s1); */
                 }      }
                 /* s1= sum_{j<>i} pij/pii=(1-pii)/pii and thus pii is known from s1 */      /* s1= sum_{j<>i} pij/pii=(1-pii)/pii and thus pii is known from s1 */
                 ps[i][i]=1./(s1+1.);      ps[i][i]=1./(s1+1.);
                 /* Computing other pijs */      /* Computing other pijs */
                 for(j=1; j<i; j++)      for(j=1; j<i; j++)
                         ps[i][j]= exp(ps[i][j])*ps[i][i];        ps[i][j]= exp(ps[i][j])*ps[i][i];
                 for(j=i+1; j<=nlstate+ndeath; j++)      for(j=i+1; j<=nlstate+ndeath; j++)
                         ps[i][j]= exp(ps[i][j])*ps[i][i];        ps[i][j]= exp(ps[i][j])*ps[i][i];
                 /* ps[i][nlstate+1]=1.-s1- ps[i][i];*/ /* Sum should be 1 */      /* ps[i][nlstate+1]=1.-s1- ps[i][i];*/ /* Sum should be 1 */
         } /* end i */    } /* end i */
             
         for(ii=nlstate+1; ii<= nlstate+ndeath; ii++){    for(ii=nlstate+1; ii<= nlstate+ndeath; ii++){
                 for(jj=1; jj<= nlstate+ndeath; jj++){      for(jj=1; jj<= nlstate+ndeath; jj++){
                         ps[ii][jj]=0;        ps[ii][jj]=0;
                         ps[ii][ii]=1;        ps[ii][ii]=1;
                 }      }
         }    }
         /* Added for backcast */ /* Transposed matrix too */    /* Added for backcast */ /* Transposed matrix too */
         for(jj=1; jj<= nlstate+ndeath; jj++){    for(jj=1; jj<= nlstate+ndeath; jj++){
                 s1=0.;      s1=0.;
                 for(ii=1; ii<= nlstate+ndeath; ii++){      for(ii=1; ii<= nlstate+ndeath; ii++){
                         s1+=ps[ii][jj];        s1+=ps[ii][jj];
                 }      }
                 for(ii=1; ii<= nlstate; ii++){      for(ii=1; ii<= nlstate; ii++){
                         ps[ii][jj]=ps[ii][jj]/s1;        ps[ii][jj]=ps[ii][jj]/s1;
                 }      }
         }    }
         /* Transposition */    /* Transposition */
         for(jj=1; jj<= nlstate+ndeath; jj++){    for(jj=1; jj<= nlstate+ndeath; jj++){
                 for(ii=jj; ii<= nlstate+ndeath; ii++){      for(ii=jj; ii<= nlstate+ndeath; ii++){
                         s1=ps[ii][jj];        s1=ps[ii][jj];
                         ps[ii][jj]=ps[jj][ii];        ps[ii][jj]=ps[jj][ii];
                         ps[jj][ii]=s1;        ps[jj][ii]=s1;
                 }      }
         }    }
         /* for(ii=1; ii<= nlstate+ndeath; ii++){ */    /* for(ii=1; ii<= nlstate+ndeath; ii++){ */
         /*   for(jj=1; jj<= nlstate+ndeath; jj++){ */    /*   for(jj=1; jj<= nlstate+ndeath; jj++){ */
         /*      printf(" pmij  ps[%d][%d]=%lf ",ii,jj,ps[ii][jj]); */    /*    printf(" pmij  ps[%d][%d]=%lf ",ii,jj,ps[ii][jj]); */
         /*   } */    /*   } */
         /*   printf("\n "); */    /*   printf("\n "); */
         /* } */    /* } */
         /* printf("\n ");printf("%lf ",cov[2]);*/    /* printf("\n ");printf("%lf ",cov[2]);*/
         /*    /*
                 for(i=1; i<= npar; i++) printf("%f ",x[i]);      for(i=1; i<= npar; i++) printf("%f ",x[i]);
                 goto end;*/      goto end;*/
         return ps;    return ps;
 }  }
   
   
Line 2799  double **matprod2(double **out, double * Line 2888  double **matprod2(double **out, double *
   
 /************* Higher Matrix Product ***************/  /************* Higher Matrix Product ***************/
   
 double ***hpxij(double ***po, int nhstepm, double age, int hstepm, double *x, int nlstate, int stepm, double **oldm, double **savm, int ij )  double ***hpxij(double ***po, int nhstepm, double age, int hstepm, double *x, int nlstate, int stepm, double **oldm, double **savm, int ij, int nres )
 {  {
   /* Computes the transition matrix starting at age 'age' and combination of covariate values corresponding to ij over     /* Computes the transition matrix starting at age 'age' and combination of covariate values corresponding to ij over 
      'nhstepm*hstepm*stepm' months (i.e. until       'nhstepm*hstepm*stepm' months (i.e. until
Line 2835  double ***hpxij(double ***po, int nhstep Line 2924  double ***hpxij(double ***po, int nhstep
       cov[2]=agexact;        cov[2]=agexact;
       if(nagesqr==1)        if(nagesqr==1)
         cov[3]= agexact*agexact;          cov[3]= agexact*agexact;
       for (k=1; k<=cptcovn;k++)         for (k=1; k<=nsd;k++) { /* For single dummy covariates only */
         cov[2+nagesqr+k]=nbcode[Tvar[k]][codtabm(ij,k)];                          /* Here comes the value of the covariate 'ij' after renumbering k with single dummy covariates */
       /* cov[2+nagesqr+k]=nbcode[Tvar[k]][codtabm(ij,Tvar[k])]; */          cov[2+nagesqr+TvarsDind[k]]=nbcode[TvarsD[k]][codtabm(ij,k)];
       for (k=1; k<=cptcovage;k++) /* Should start at cptcovn+1 */          /* printf("hpxij Dummy combi=%d k=%d TvarsD[%d]=V%d TvarsDind[%d]=%d nbcode=%d cov=%lf codtabm(%d,Tvar[%d])=%d \n",ij,k, k, TvarsD[k],k,TvarsDind[k],nbcode[TvarsD[k]][codtabm(ij,k)],cov[2+nagesqr+TvarsDind[k]], ij, k, codtabm(ij,k)); */
         /* cov[2+Tage[k]]=cov[2+Tage[k]]*cov[2]; */        }
         cov[2+nagesqr+Tage[k]]=nbcode[Tvar[Tage[k]]][codtabm(ij,k)]*cov[2];        for (k=1; k<=nsq;k++) { /* For single varying covariates only */
       /* cov[2+nagesqr+Tage[k]]=nbcode[Tvar[Tage[k]]][codtabm(ij,Tvar[Tage[k]])]*cov[2]; */          /* Here comes the value of quantitative after renumbering k with single quantitative covariates */
       for (k=1; k<=cptcovprod;k++) /* Useless because included in cptcovn */          cov[2+nagesqr+TvarsQind[k]]=Tqresult[nres][k]; 
         cov[2+nagesqr+Tprod[k]]=nbcode[Tvard[k][1]][codtabm(ij,k)]*nbcode[Tvard[k][2]][codtabm(ij,k)];          /* printf("hPxij Quantitative k=%d  TvarsQind[%d]=%d, TvarsQ[%d]=V%d,Tqresult[%d][%d]=%f\n",k,k,TvarsQind[k],k,TvarsQ[k],nres,k,Tqresult[nres][k]); */
       /* cov[2+nagesqr+Tprod[k]]=nbcode[Tvard[k][1]][codtabm(ij,Tvard[k][1])]*nbcode[Tvard[k][2]][codtabm(ij,Tvard[k][2])]; */        }
         for (k=1; k<=cptcovage;k++){
           if(Dummy[Tvar[Tage[k]]]){
             cov[2+nagesqr+Tage[k]]=nbcode[Tvar[Tage[k]]][codtabm(ij,k)]*cov[2];
           } else{
             cov[2+nagesqr+Tage[k]]=Tqresult[nres][k]; 
           }
           /* printf("hPxij Age combi=%d k=%d  Tage[%d]=V%d Tqresult[%d][%d]=%f\n",ij,k,k,Tage[k],nres,k,Tqresult[nres][k]); */
         }
         for (k=1; k<=cptcovprod;k++){ /*  */
           /* printf("hPxij Prod ij=%d k=%d  Tprod[%d]=%d Tvard[%d][1]=V%d, Tvard[%d][2]=V%d\n",ij,k,k,Tprod[k], k,Tvard[k][1], k,Tvard[k][2]); */
           cov[2+nagesqr+Tprod[k]]=nbcode[Tvard[k][1]][codtabm(ij,k)] * nbcode[Tvard[k][2]][codtabm(ij,k)];
         }
         /* for (k=1; k<=cptcovn;k++)  */
         /*        cov[2+nagesqr+k]=nbcode[Tvar[k]][codtabm(ij,k)]; */
         /* for (k=1; k<=cptcovage;k++) /\* Should start at cptcovn+1 *\/ */
         /*        cov[2+nagesqr+Tage[k]]=nbcode[Tvar[Tage[k]]][codtabm(ij,k)]*cov[2]; */
         /* for (k=1; k<=cptcovprod;k++) /\* Useless because included in cptcovn *\/ */
         /*        cov[2+nagesqr+Tprod[k]]=nbcode[Tvard[k][1]][codtabm(ij,k)]*nbcode[Tvard[k][2]][codtabm(ij,k)]; */
               
               
       /*printf("hxi cptcov=%d cptcode=%d\n",cptcov,cptcode);*/        /*printf("hxi cptcov=%d cptcode=%d\n",cptcov,cptcode);*/
Line 3024  double func( double *x) Line 3131  double func( double *x)
          to be observed in j being in i according to the model.           to be observed in j being in i according to the model.
       */        */
       ioffset=2+nagesqr+cptcovage;        ioffset=2+nagesqr+cptcovage;
       /* for (k=1; k<=cptcovn;k++){ /\* Simple and product covariates without age* products *\/ */     /* Fixed */
       for (k=1; k<=ncoveff;k++){ /* Simple and product covariates without age* products */        for (k=1; k<=ncovf;k++){ /* Simple and product fixed covariates without age* products */
         cov[++ioffset]=covar[Tvar[k]][i];          cov[ioffset+TvarFind[k]]=covar[Tvar[TvarFind[k]]][i];/* V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1, only V1 is fixed (k=6)*/
       }  
       for(iqv=1; iqv <= nqfveff; iqv++){ /* Quantitatives and Fixed covariates */  
         cov[++ioffset]=coqvar[Tvar[iqv]][i];  
       }        }
   
       /* In model V2+V1*V4+age*V3+V3*V2 Tvar[1] is V2, Tvar[2=V1*V4]         /* In model V2+V1*V4+age*V3+V3*V2 Tvar[1] is V2, Tvar[2=V1*V4] 
          is 6, Tvar[3=age*V3] should not be computed because of age Tvar[4=V3*V2]            is 6, Tvar[3=age*V3] should not be computed because of age Tvar[4=V3*V2] 
          has been calculated etc */           has been calculated etc */
Line 3045  double func( double *x) Line 3148  double func( double *x)
          meaning that decodemodel should be used cotvar[mw[mi+1][i]][TTvar[iv]][i]           meaning that decodemodel should be used cotvar[mw[mi+1][i]][TTvar[iv]][i]
       */        */
       for(mi=1; mi<= wav[i]-1; mi++){        for(mi=1; mi<= wav[i]-1; mi++){
                                 for(itv=1; itv <= ntveff; itv++){ /* Varying dummy covariates */          for(k=1; k <= ncovv ; k++){ /* Varying  covariates (single and product but no age )*/
                                         /* cov[ioffset+itv]=cotvar[mw[mi][i]][Tvar[itv]][i]; /\* Not sure, Tvar V4+V3+V5 Tvaraff ? *\/ */            cov[ioffset+TvarVind[k]]=cotvar[mw[mi][i]][Tvar[TvarVind[k]]][i];
                                         cov[ioffset+itv]=cotvar[mw[mi][i]][TmodelInvind[itv]][i];          }
                                 }          for (ii=1;ii<=nlstate+ndeath;ii++)
                                 for(iqtv=1; iqtv <= nqtveff; iqtv++){ /* Varying quantitatives covariates */            for (j=1;j<=nlstate+ndeath;j++){
                                         if(cotqvar[mw[mi][i]][iqtv][i] == -1){              oldm[ii][j]=(ii==j ? 1.0 : 0.0);
                                                 printf("i=%d, mi=%d, iqtv=%d, cotqvar[mw[mi][i]][iqtv][i]=%f",i,mi,iqtv,cotqvar[mw[mi][i]][iqtv][i]);              savm[ii][j]=(ii==j ? 1.0 : 0.0);
                                         }            }
                                         cov[ioffset+ntveff+iqtv]=cotqvar[mw[mi][i]][TmodelInvQind[iqtv]][i];          for(d=0; d<dh[mi][i]; d++){
                                         /* cov[ioffset+ntveff+iqtv]=cotqvar[mw[mi][i]][iqtv][i]; */            newm=savm;
                                 }            agexact=agev[mw[mi][i]][i]+d*stepm/YEARM;
                                 /* ioffset=2+nagesqr+cptcovn+nqv+ntv+nqtv; */            cov[2]=agexact;
                                 for (ii=1;ii<=nlstate+ndeath;ii++)            if(nagesqr==1)
                                         for (j=1;j<=nlstate+ndeath;j++){              cov[3]= agexact*agexact;  /* Should be changed here */
                                                 oldm[ii][j]=(ii==j ? 1.0 : 0.0);            for (kk=1; kk<=cptcovage;kk++) {
                                                 savm[ii][j]=(ii==j ? 1.0 : 0.0);              cov[Tage[kk]+2+nagesqr]=covar[Tvar[Tage[kk]]][i]*agexact; /* Tage[kk] gives the data-covariate associated with age */
                                         }            }
                                 for(d=0; d<dh[mi][i]; d++){            out=matprod2(newm,oldm,1,nlstate+ndeath,1,nlstate+ndeath,
                                         newm=savm;                         1,nlstate+ndeath,pmij(pmmij,cov,ncovmodel,x,nlstate));
                                         agexact=agev[mw[mi][i]][i]+d*stepm/YEARM;            savm=oldm;
                                         cov[2]=agexact;            oldm=newm;
                                         if(nagesqr==1)          } /* end mult */
                                                 cov[3]= agexact*agexact;  /* Should be changed here */          
                                         for (kk=1; kk<=cptcovage;kk++) {          /*lli=log(out[s[mw[mi][i]][i]][s[mw[mi+1][i]][i]]);*/ /* Original formula */
                                                 cov[Tage[kk]+2+nagesqr]=covar[Tvar[Tage[kk]]][i]*agexact; /* Tage[kk] gives the data-covariate associated with age */          /* But now since version 0.9 we anticipate for bias at large stepm.
                                         }           * If stepm is larger than one month (smallest stepm) and if the exact delay 
                                         out=matprod2(newm,oldm,1,nlstate+ndeath,1,nlstate+ndeath,           * (in months) between two waves is not a multiple of stepm, we rounded to 
                                                                                          1,nlstate+ndeath,pmij(pmmij,cov,ncovmodel,x,nlstate));           * the nearest (and in case of equal distance, to the lowest) interval but now
                                         savm=oldm;           * we keep into memory the bias bh[mi][i] and also the previous matrix product
                                         oldm=newm;           * (i.e to dh[mi][i]-1) saved in 'savm'. Then we inter(extra)polate the
                                 } /* end mult */           * probability in order to take into account the bias as a fraction of the way
                                   
                                 /*lli=log(out[s[mw[mi][i]][i]][s[mw[mi+1][i]][i]]);*/ /* Original formula */  
                                 /* But now since version 0.9 we anticipate for bias at large stepm.  
                                  * If stepm is larger than one month (smallest stepm) and if the exact delay   
                                  * (in months) between two waves is not a multiple of stepm, we rounded to   
                                  * the nearest (and in case of equal distance, to the lowest) interval but now  
                                  * we keep into memory the bias bh[mi][i] and also the previous matrix product  
                                  * (i.e to dh[mi][i]-1) saved in 'savm'. Then we inter(extra)polate the  
                                  * probability in order to take into account the bias as a fraction of the way  
                                  * from savm to out if bh is negative or even beyond if bh is positive. bh varies                                   * from savm to out if bh is negative or even beyond if bh is positive. bh varies
                                  * -stepm/2 to stepm/2 .                                   * -stepm/2 to stepm/2 .
                                  * For stepm=1 the results are the same as for previous versions of Imach.                                   * For stepm=1 the results are the same as for previous versions of Imach.
                                  * For stepm > 1 the results are less biased than in previous versions.                                    * For stepm > 1 the results are less biased than in previous versions. 
                                  */                                   */
                                 s1=s[mw[mi][i]][i];          s1=s[mw[mi][i]][i];
                                 s2=s[mw[mi+1][i]][i];          s2=s[mw[mi+1][i]][i];
                                 bbh=(double)bh[mi][i]/(double)stepm;           bbh=(double)bh[mi][i]/(double)stepm; 
                                 /* bias bh is positive if real duration          /* bias bh is positive if real duration
                                  * is higher than the multiple of stepm and negative otherwise.           * is higher than the multiple of stepm and negative otherwise.
                                  */           */
                                 /* lli= (savm[s1][s2]>1.e-8 ?(1.+bbh)*log(out[s1][s2])- bbh*log(savm[s1][s2]):log((1.+bbh)*out[s1][s2]));*/          /* lli= (savm[s1][s2]>1.e-8 ?(1.+bbh)*log(out[s1][s2])- bbh*log(savm[s1][s2]):log((1.+bbh)*out[s1][s2]));*/
                                 if( s2 > nlstate){           if( s2 > nlstate){ 
                                         /* i.e. if s2 is a death state and if the date of death is known             /* i.e. if s2 is a death state and if the date of death is known 
                                                  then the contribution to the likelihood is the probability to                then the contribution to the likelihood is the probability to 
                                                  die between last step unit time and current  step unit time,                die between last step unit time and current  step unit time, 
                                                  which is also equal to probability to die before dh                which is also equal to probability to die before dh 
                                                  minus probability to die before dh-stepm .                minus probability to die before dh-stepm . 
                                                  In version up to 0.92 likelihood was computed               In version up to 0.92 likelihood was computed
                                                  as if date of death was unknown. Death was treated as any other               as if date of death was unknown. Death was treated as any other
                                                  health state: the date of the interview describes the actual state               health state: the date of the interview describes the actual state
                                                  and not the date of a change in health state. The former idea was               and not the date of a change in health state. The former idea was
                                                  to consider that at each interview the state was recorded               to consider that at each interview the state was recorded
                                                  (healthy, disable or death) and IMaCh was corrected; but when we               (healthy, disable or death) and IMaCh was corrected; but when we
                                                  introduced the exact date of death then we should have modified               introduced the exact date of death then we should have modified
                                                  the contribution of an exact death to the likelihood. This new               the contribution of an exact death to the likelihood. This new
                                                  contribution is smaller and very dependent of the step unit               contribution is smaller and very dependent of the step unit
                                                  stepm. It is no more the probability to die between last interview               stepm. It is no more the probability to die between last interview
                                                  and month of death but the probability to survive from last               and month of death but the probability to survive from last
                                                  interview up to one month before death multiplied by the               interview up to one month before death multiplied by the
                                                  probability to die within a month. Thanks to Chris               probability to die within a month. Thanks to Chris
                                                  Jackson for correcting this bug.  Former versions increased               Jackson for correcting this bug.  Former versions increased
                                                  mortality artificially. The bad side is that we add another loop               mortality artificially. The bad side is that we add another loop
                                                  which slows down the processing. The difference can be up to 10%               which slows down the processing. The difference can be up to 10%
                                                  lower mortality.               lower mortality.
                                         */            */
                                         /* If, at the beginning of the maximization mostly, the            /* If, at the beginning of the maximization mostly, the
                                                  cumulative probability or probability to be dead is               cumulative probability or probability to be dead is
                                                  constant (ie = 1) over time d, the difference is equal to               constant (ie = 1) over time d, the difference is equal to
                                                  0.  out[s1][3] = savm[s1][3]: probability, being at state               0.  out[s1][3] = savm[s1][3]: probability, being at state
                                                  s1 at precedent wave, to be dead a month before current               s1 at precedent wave, to be dead a month before current
                                                  wave is equal to probability, being at state s1 at               wave is equal to probability, being at state s1 at
                                                  precedent wave, to be dead at mont of the current               precedent wave, to be dead at mont of the current
                                                  wave. Then the observed probability (that this person died)               wave. Then the observed probability (that this person died)
                                                  is null according to current estimated parameter. In fact,               is null according to current estimated parameter. In fact,
                                                  it should be very low but not zero otherwise the log go to               it should be very low but not zero otherwise the log go to
                                                  infinity.               infinity.
                                         */            */
 /* #ifdef INFINITYORIGINAL */  /* #ifdef INFINITYORIGINAL */
 /*          lli=log(out[s1][s2] - savm[s1][s2]); */  /*          lli=log(out[s1][s2] - savm[s1][s2]); */
 /* #else */  /* #else */
Line 3352  double funcone( double *x) Line 3446  double funcone( double *x)
   ioffset=0;    ioffset=0;
   for (i=1,ipmx=0, sw=0.; i<=imx; i++){    for (i=1,ipmx=0, sw=0.; i<=imx; i++){
     ioffset=2+nagesqr+cptcovage;      ioffset=2+nagesqr+cptcovage;
       /* Fixed */
     /* for (k=1; k<=cptcovn;k++) cov[2+nagesqr+k]=covar[Tvar[k]][i]; */      /* for (k=1; k<=cptcovn;k++) cov[2+nagesqr+k]=covar[Tvar[k]][i]; */
     for (k=1; k<=ncoveff;k++){ /* Simple and product fixed Dummy covariates without age* products */      /* for (k=1; k<=ncoveff;k++){ /\* Simple and product fixed Dummy covariates without age* products *\/ */
       cov[++ioffset]=covar[TvarFD[k]][i];/* V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1, only V1 is fixed (k=6)*/      for (k=1; k<=ncovf;k++){ /* Simple and product fixed covariates without age* products */
     }        cov[ioffset+TvarFind[k]]=covar[Tvar[TvarFind[k]]][i];/* V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1, only V1 is fixed (k=6)*/
     for (k=1; k<=nqfveff;k++){ /* Simple and product fixed Quantitative covariates without age* products */  /*    cov[ioffset+TvarFind[1]]=covar[Tvar[TvarFind[1]]][i];  */
       cov[++ioffset]=coqvar[TvarFQ[k]][i];/* V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1, only V2 and V1*V2 is fixed (k=6 and 7?)*/  /*    cov[2+6]=covar[Tvar[6]][i];  */
   /*    cov[2+6]=covar[2][i]; V2  */
   /*    cov[TvarFind[2]]=covar[Tvar[TvarFind[2]]][i];  */
   /*    cov[2+7]=covar[Tvar[7]][i];  */
   /*    cov[2+7]=covar[7][i]; V7=V1*V2  */
   /*    cov[TvarFind[3]]=covar[Tvar[TvarFind[3]]][i];  */
   /*    cov[2+9]=covar[Tvar[9]][i];  */
   /*    cov[2+9]=covar[1][i]; V1  */
     }      }
       /* for (k=1; k<=nqfveff;k++){ /\* Simple and product fixed Quantitative covariates without age* products *\/ */
       /*   cov[++ioffset]=coqvar[TvarFQ[k]][i];/\* V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1, only V2 and V1*V2 is fixed (k=6 and 7?)*\/ */
       /* } */
     /* for(iqv=1; iqv <= nqfveff; iqv++){ /\* Quantitative fixed covariates *\/ */      /* for(iqv=1; iqv <= nqfveff; iqv++){ /\* Quantitative fixed covariates *\/ */
     /*   cov[++ioffset]=coqvar[Tvar[iqv]][i]; /\* Only V2 k=6 and V1*V2 7 *\/ */      /*   cov[++ioffset]=coqvar[Tvar[iqv]][i]; /\* Only V2 k=6 and V1*V2 7 *\/ */
     /* } */      /* } */
           
   
     for(mi=1; mi<= wav[i]-1; mi++){  /* Varying with waves */      for(mi=1; mi<= wav[i]-1; mi++){  /* Varying with waves */
       for(itv=1; itv <= ntveff; itv++){ /* Varying dummy covariates (single??)*/      /* Wave varying (but not age varying) */
         for(k=1; k <= ncovv ; k++){ /* Varying  covariates (single and product but no age )*/
                                   cov[ioffset+TvarVind[k]]=cotvar[mw[mi][i]][Tvar[TvarVind[k]]][i];
                           }
         /* for(itv=1; itv <= ntveff; itv++){ /\* Varying dummy covariates (single??)*\/ */
                                 /* iv= Tvar[Tmodelind[ioffset-2-nagesqr-cptcovage+itv]]-ncovcol-nqv; /\* Counting the # varying covariate from 1 to ntveff *\/ */                                  /* iv= Tvar[Tmodelind[ioffset-2-nagesqr-cptcovage+itv]]-ncovcol-nqv; /\* Counting the # varying covariate from 1 to ntveff *\/ */
                                 /* cov[ioffset+iv]=cotvar[mw[mi][i]][iv][i]; */                                  /* cov[ioffset+iv]=cotvar[mw[mi][i]][iv][i]; */
                                 k=ioffset-2-nagesqr-cptcovage+itv; /* position in simple model */                                  /* k=ioffset-2-nagesqr-cptcovage+itv; /\* position in simple model *\/ */
                                 cov[ioffset+itv]=cotvar[mw[mi][i]][TmodelInvind[itv]][i];                                  /* cov[ioffset+itv]=cotvar[mw[mi][i]][TmodelInvind[itv]][i]; */
                                 /* printf(" i=%d,mi=%d,itv=%d,TmodelInvind[itv]=%d,cotvar[mw[mi][i]][TmodelInvind[itv]][i]=%f\n", i, mi, itv, TmodelInvind[itv],cotvar[mw[mi][i]][TmodelInvind[itv]][i]); */                                  /* printf(" i=%d,mi=%d,itv=%d,TmodelInvind[itv]=%d,cotvar[mw[mi][i]][TmodelInvind[itv]][i]=%f\n", i, mi, itv, TmodelInvind[itv],cotvar[mw[mi][i]][TmodelInvind[itv]][i]); */
       }        /* for(iqtv=1; iqtv <= nqtveff; iqtv++){ /\* Varying quantitatives covariates *\/ */
       for(iqtv=1; iqtv <= nqtveff; iqtv++){ /* Varying quantitatives covariates */                          /*      iv=TmodelInvQind[iqtv]; /\* Counting the # varying covariate from 1 to ntveff *\/ */
                                 iv=TmodelInvQind[iqtv]; /* Counting the # varying covariate from 1 to ntveff */                          /*      /\* printf(" i=%d,mi=%d,iqtv=%d,TmodelInvQind[iqtv]=%d,cotqvar[mw[mi][i]][TmodelInvQind[iqtv]][i]=%f\n", i, mi, iqtv, TmodelInvQind[iqtv],cotqvar[mw[mi][i]][TmodelInvQind[iqtv]][i]); *\/ */
                                 /* printf(" i=%d,mi=%d,iqtv=%d,TmodelInvQind[iqtv]=%d,cotqvar[mw[mi][i]][TmodelInvQind[iqtv]][i]=%f\n", i, mi, iqtv, TmodelInvQind[iqtv],cotqvar[mw[mi][i]][TmodelInvQind[iqtv]][i]); */                          /*      cov[ioffset+ntveff+iqtv]=cotqvar[mw[mi][i]][TmodelInvQind[iqtv]][i]; */
                                 cov[ioffset+ntveff+iqtv]=cotqvar[mw[mi][i]][TmodelInvQind[iqtv]][i];        /* } */
       }  
       for (ii=1;ii<=nlstate+ndeath;ii++)        for (ii=1;ii<=nlstate+ndeath;ii++)
                                 for (j=1;j<=nlstate+ndeath;j++){                                  for (j=1;j<=nlstate+ndeath;j++){
                                         oldm[ii][j]=(ii==j ? 1.0 : 0.0);                                          oldm[ii][j]=(ii==j ? 1.0 : 0.0);
Line 3416  double funcone( double *x) Line 3525  double funcone( double *x)
        * is higher than the multiple of stepm and negative otherwise.         * is higher than the multiple of stepm and negative otherwise.
        */         */
       if( s2 > nlstate && (mle <5) ){  /* Jackson */        if( s2 > nlstate && (mle <5) ){  /* Jackson */
         lli=log(out[s1][s2] - savm[s1][s2]);                                  lli=log(out[s1][s2] - savm[s1][s2]);
       } else if  ( s2==-1 ) { /* alive */        } else if  ( s2==-1 ) { /* alive */
         for (j=1,survp=0. ; j<=nlstate; j++)                                   for (j=1,survp=0. ; j<=nlstate; j++) 
           survp += (1.+bbh)*out[s1][j]- bbh*savm[s1][j];                                          survp += (1.+bbh)*out[s1][j]- bbh*savm[s1][j];
         lli= log(survp);                                  lli= log(survp);
       }else if (mle==1){        }else if (mle==1){
         lli= log((1.+bbh)*out[s1][s2]- bbh*savm[s1][s2]); /* linear interpolation */                                  lli= log((1.+bbh)*out[s1][s2]- bbh*savm[s1][s2]); /* linear interpolation */
       } else if(mle==2){        } else if(mle==2){
         lli= (savm[s1][s2]>(double)1.e-8 ?log((1.+bbh)*out[s1][s2]- bbh*savm[s1][s2]):log((1.+bbh)*out[s1][s2])); /* linear interpolation */                                  lli= (savm[s1][s2]>(double)1.e-8 ?log((1.+bbh)*out[s1][s2]- bbh*savm[s1][s2]):log((1.+bbh)*out[s1][s2])); /* linear interpolation */
       } else if(mle==3){  /* exponential inter-extrapolation */        } else if(mle==3){  /* exponential inter-extrapolation */
         lli= (savm[s1][s2]>(double)1.e-8 ?(1.+bbh)*log(out[s1][s2])- bbh*log(savm[s1][s2]):log((1.+bbh)*out[s1][s2])); /* exponential inter-extrapolation */                                  lli= (savm[s1][s2]>(double)1.e-8 ?(1.+bbh)*log(out[s1][s2])- bbh*log(savm[s1][s2]):log((1.+bbh)*out[s1][s2])); /* exponential inter-extrapolation */
       } else if (mle==4){  /* mle=4 no inter-extrapolation */        } else if (mle==4){  /* mle=4 no inter-extrapolation */
         lli=log(out[s1][s2]); /* Original formula */                                  lli=log(out[s1][s2]); /* Original formula */
       } else{  /* mle=0 back to 1 */        } else{  /* mle=0 back to 1 */
         lli= log((1.+bbh)*out[s1][s2]- bbh*savm[s1][s2]); /* linear interpolation */                                  lli= log((1.+bbh)*out[s1][s2]- bbh*savm[s1][s2]); /* linear interpolation */
         /*lli=log(out[s1][s2]); */ /* Original formula */                                  /*lli=log(out[s1][s2]); */ /* Original formula */
       } /* End of if */        } /* End of if */
       ipmx +=1;        ipmx +=1;
       sw += weight[i];        sw += weight[i];
       ll[s[mw[mi][i]][i]] += 2*weight[i]*lli;        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("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]); */
       if(globpr){        if(globpr){
         fprintf(ficresilk,"%9ld %6.1f %6.1f %6d %2d %2d %2d %2d %3d %15.6f %8.4f %8.3f\                                  fprintf(ficresilk,"%9ld %6.1f %6.1f %6d %2d %2d %2d %2d %3d %15.6f %8.4f %8.3f\
  %11.6f %11.6f %11.6f ", \   %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,                                                                  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,out[s1][s2],savm[s1][s2]);                                                                  2*weight[i]*lli,out[s1][s2],savm[s1][s2]);
         for(k=1,llt=0.,l=0.; k<=nlstate; k++){                                  for(k=1,llt=0.,l=0.; k<=nlstate; k++){
           llt +=ll[k]*gipmx/gsw;                                          llt +=ll[k]*gipmx/gsw;
           fprintf(ficresilk," %10.6f",-ll[k]*gipmx/gsw);                                          fprintf(ficresilk," %10.6f",-ll[k]*gipmx/gsw);
         }                                  }
         fprintf(ficresilk," %10.6f\n", -llt);                                  fprintf(ficresilk," %10.6f\n", -llt);
       }        }
     } /* end of wave */          } /* end of wave */
   } /* end of individual */  } /* end of individual */
   for(k=1,l=0.; k<=nlstate; k++) l += ll[k];  for(k=1,l=0.; k<=nlstate; k++) l += ll[k];
   /* printf("l1=%f l2=%f ",ll[1],ll[2]); */  /* printf("l1=%f l2=%f ",ll[1],ll[2]); */
   l= l*ipmx/sw; /* To get the same order of magnitude as if weight=1 for every body */  l= l*ipmx/sw; /* To get the same order of magnitude as if weight=1 for every body */
   if(globpr==0){ /* First time we count the contributions and weights */  if(globpr==0){ /* First time we count the contributions and weights */
     gipmx=ipmx;          gipmx=ipmx;
     gsw=sw;          gsw=sw;
   }  }
   return -l;  return -l;
 }  }
   
   
Line 3999  void  freqsummary(char fileres[], int ia Line 4108  void  freqsummary(char fileres[], int ia
 Title=%s <br>Datafile=%s Firstpass=%d Lastpass=%d Stepm=%d Weight=%d Model=1+age+%s<br>\n",\  Title=%s <br>Datafile=%s Firstpass=%d Lastpass=%d Stepm=%d Weight=%d Model=1+age+%s<br>\n",\
             fileresphtm,version,fullversion,title,datafile,firstpass,lastpass,stepm, weightopt, model);              fileresphtm,version,fullversion,title,datafile,firstpass,lastpass,stepm, weightopt, model);
   }    }
   fprintf(ficresphtm,"Current page is file <a href=\"%s\">%s</a><br>\n\n<h4>Frequencies and prevalence by age at begin of transition</h4>\n",fileresphtm, fileresphtm);    fprintf(ficresphtm,"Current page is file <a href=\"%s\">%s</a><br>\n\n<h4>Frequencies and prevalence by age at begin of transition and dummy covariate value at beginning of transition</h4>\n",fileresphtm, fileresphtm);
           
   strcpy(fileresphtmfr,subdirfext(optionfilefiname,"PHTMFR_",".htm"));    strcpy(fileresphtmfr,subdirfext(optionfilefiname,"PHTMFR_",".htm"));
   if((ficresphtmfr=fopen(fileresphtmfr,"w"))==NULL) {    if((ficresphtmfr=fopen(fileresphtmfr,"w"))==NULL) {
Line 4060  Title=%s <br>Datafile=%s Firstpass=%d La Line 4169  Title=%s <br>Datafile=%s Firstpass=%d La
     for (iind=1; iind<=imx; iind++) { /* For each individual iind */      for (iind=1; iind<=imx; iind++) { /* For each individual iind */
       bool=1;        bool=1;
       if(anyvaryingduminmodel==0){ /* If All fixed covariates */        if(anyvaryingduminmodel==0){ /* If All fixed covariates */
                                 if (cptcoveff >0) { /* Filter is here: Must be looked at for model=V1+V2+V3+V4 */          if (cptcoveff >0) { /* Filter is here: Must be looked at for model=V1+V2+V3+V4 */
           /* for (z1=1; z1<= nqfveff; z1++) {   */            /* for (z1=1; z1<= nqfveff; z1++) {   */
           /*   meanq[z1]+=coqvar[Tvar[z1]][iind];  /\* Computes mean of quantitative with selected filter *\/ */            /*   meanq[z1]+=coqvar[Tvar[z1]][iind];  /\* Computes mean of quantitative with selected filter *\/ */
           /* } */            /* } */
                                         for (z1=1; z1<=cptcoveff; z1++) {              for (z1=1; z1<=cptcoveff; z1++) {  
                                                 /* if(Tvaraff[z1] ==-20){ */              /* if(Tvaraff[z1] ==-20){ */
                                                 /*       /\* sumnew+=cotvar[mw[mi][iind]][z1][iind]; *\/ */              /*   /\* sumnew+=cotvar[mw[mi][iind]][z1][iind]; *\/ */
                                                 /* }else  if(Tvaraff[z1] ==-10){ */              /* }else  if(Tvaraff[z1] ==-10){ */
                                                 /*       /\* sumnew+=coqvar[z1][iind]; *\/ */              /*   /\* sumnew+=coqvar[z1][iind]; *\/ */
                                                 /* }else  */              /* }else  */
                                                 if (covar[Tvaraff[z1]][iind]!= nbcode[Tvaraff[z1]][codtabm(j1,z1)]){              if (covar[Tvaraff[z1]][iind]!= nbcode[Tvaraff[z1]][codtabm(j1,z1)]){
                                                         /* Tests if this individual iind responded to j1 (V4=1 V3=0) */                /* Tests if this individual iind responded to j1 (V4=1 V3=0) */
                                                         bool=0;                bool=0;
                                                         /* printf("bool=%d i=%d, z1=%d, Tvaraff[%d]=%d, covar[Tvarff][%d]=%2f, codtabm(%d,%d)=%d, nbcode[Tvaraff][codtabm(%d,%d)=%d, j1=%d\n",                 /* printf("bool=%d i=%d, z1=%d, Tvaraff[%d]=%d, covar[Tvarff][%d]=%2f, codtabm(%d,%d)=%d, nbcode[Tvaraff][codtabm(%d,%d)=%d, j1=%d\n", 
                                                                  bool,i,z1, z1, Tvaraff[z1],i,covar[Tvaraff[z1]][i],j1,z1,codtabm(j1,z1),                   bool,i,z1, z1, Tvaraff[z1],i,covar[Tvaraff[z1]][i],j1,z1,codtabm(j1,z1),
                                                                  j1,z1,nbcode[Tvaraff[z1]][codtabm(j1,z1)],j1);*/                   j1,z1,nbcode[Tvaraff[z1]][codtabm(j1,z1)],j1);*/
                                                         /* For j1=7 in V1+V2+V3+V4 = 0 1 1 0 and codtabm(7,3)=1 and nbcde[3][?]=1*/                /* For j1=7 in V1+V2+V3+V4 = 0 1 1 0 and codtabm(7,3)=1 and nbcde[3][?]=1*/
                                                 } /* Onlyf fixed */              } /* Onlyf fixed */
                                         } /* end z1 */            } /* end z1 */
                                 } /* cptcovn > 0 */          } /* cptcovn > 0 */
       } /* end any */        } /* end any */
       if (bool==1){ /* We selected an individual iind satisfying combination j1 or all fixed */        if (bool==1){ /* We selected an individual iind satisfying combination j1 or all fixed */
                                 /* for(m=firstpass; m<=lastpass; m++){ */          /* for(m=firstpass; m<=lastpass; m++){ */
                                 for(mi=1; mi<wav[iind];mi++){ /* For that wave */          for(mi=1; mi<wav[iind];mi++){ /* For that wave */
                                         m=mw[mi][iind];            m=mw[mi][iind];
                                         if(anyvaryingduminmodel==1){ /* Some are varying covariates */            if(anyvaryingduminmodel==1){ /* Some are varying covariates */
                                                 for (z1=1; z1<=cptcoveff; z1++) {              for (z1=1; z1<=cptcoveff; z1++) {
                                                         if( Fixed[Tmodelind[z1]]==1){                if( Fixed[Tmodelind[z1]]==1){
                                                                 iv= Tvar[Tmodelind[z1]]-ncovcol-nqv;                  iv= Tvar[Tmodelind[z1]]-ncovcol-nqv;
                                                                 if (cotvar[m][iv][iind]!= nbcode[Tvaraff[z1]][codtabm(j1,z1)]) /* iv=1 to ntv, right modality */                  if (cotvar[m][iv][iind]!= nbcode[Tvaraff[z1]][codtabm(j1,z1)]) /* iv=1 to ntv, right modality */
                                                                         bool=0;                    bool=0;
                                                         }else if( Fixed[Tmodelind[z1]]== 0) { /* fixed */                }else if( Fixed[Tmodelind[z1]]== 0) { /* fixed */
                                                                 if (covar[Tvaraff[z1]][iind]!= nbcode[Tvaraff[z1]][codtabm(j1,z1)]) {                  if (covar[Tvaraff[z1]][iind]!= nbcode[Tvaraff[z1]][codtabm(j1,z1)]) {
                                                                         bool=0;                    bool=0;
                                                                 }                  }
                                                         }                }
                                                 }              }
                                         }/* Some are varying covariates, we tried to speed up if all fixed covariates in the model, avoiding waves loop  */            }/* Some are varying covariates, we tried to speed up if all fixed covariates in the model, avoiding waves loop  */
                                         /* bool =0 we keep that guy which corresponds to the combination of dummy values */            /* bool =0 we keep that guy which corresponds to the combination of dummy values */
                                         if(bool==1){            if(bool==1){
                                                 /* dh[m][iind] or dh[mw[mi][iind]][iind] is the delay between two effective (mi) waves m=mw[mi][iind]              /* dh[m][iind] or dh[mw[mi][iind]][iind] is the delay between two effective (mi) waves m=mw[mi][iind]
                                                          and mw[mi+1][iind]. dh depends on stepm. */                 and mw[mi+1][iind]. dh depends on stepm. */
                                                 agebegin=agev[m][iind]; /* Age at beginning of wave before transition*/              agebegin=agev[m][iind]; /* Age at beginning of wave before transition*/
                                                 ageend=agev[m][iind]+(dh[m][iind])*stepm/YEARM; /* Age at end of wave and transition */              ageend=agev[m][iind]+(dh[m][iind])*stepm/YEARM; /* Age at end of wave and transition */
                                                 if(m >=firstpass && m <=lastpass){              if(m >=firstpass && m <=lastpass){
                                                         k2=anint[m][iind]+(mint[m][iind]/12.);                k2=anint[m][iind]+(mint[m][iind]/12.);
                                                         /*if ((k2>=dateprev1) && (k2<=dateprev2)) {*/                /*if ((k2>=dateprev1) && (k2<=dateprev2)) {*/
                                                         if(agev[m][iind]==0) agev[m][iind]=iagemax+1;  /* All ages equal to 0 are in iagemax+1 */                if(agev[m][iind]==0) agev[m][iind]=iagemax+1;  /* All ages equal to 0 are in iagemax+1 */
                                                         if(agev[m][iind]==1) agev[m][iind]=iagemax+2;  /* All ages equal to 1 are in iagemax+2 */                if(agev[m][iind]==1) agev[m][iind]=iagemax+2;  /* All ages equal to 1 are in iagemax+2 */
                                                         if (s[m][iind]>0 && s[m][iind]<=nlstate)  /* If status at wave m is known and a live state */                if (s[m][iind]>0 && s[m][iind]<=nlstate)  /* If status at wave m is known and a live state */
                                                                 prop[s[m][iind]][(int)agev[m][iind]] += weight[iind];  /* At age of beginning of transition, where status is known */                  prop[s[m][iind]][(int)agev[m][iind]] += weight[iind];  /* At age of beginning of transition, where status is known */
                                                         if (m<lastpass) {                if (m<lastpass) {
                                                                 /* if(s[m][iind]==4 && s[m+1][iind]==4) */                  /* if(s[m][iind]==4 && s[m+1][iind]==4) */
                                                                 /*   printf(" num=%ld m=%d, iind=%d s1=%d s2=%d agev at m=%d\n", num[iind], m, iind,s[m][iind],s[m+1][iind], (int)agev[m][iind]); */                  /*   printf(" num=%ld m=%d, iind=%d s1=%d s2=%d agev at m=%d\n", num[iind], m, iind,s[m][iind],s[m+1][iind], (int)agev[m][iind]); */
                                                                 if(s[m][iind]==-1)                  if(s[m][iind]==-1)
                                                                         printf(" num=%ld m=%d, iind=%d s1=%d s2=%d agev at m=%d agebegin=%.2f ageend=%.2f, agemed=%d\n", num[iind], m, iind,s[m][iind],s[m+1][iind], (int)agev[m][iind],agebegin, ageend, (int)((agebegin+ageend)/2.));                    printf(" num=%ld m=%d, iind=%d s1=%d s2=%d agev at m=%d agebegin=%.2f ageend=%.2f, agemed=%d\n", num[iind], m, iind,s[m][iind],s[m+1][iind], (int)agev[m][iind],agebegin, ageend, (int)((agebegin+ageend)/2.));
                                                                 freq[s[m][iind]][s[m+1][iind]][(int)agev[m][iind]] += weight[iind]; /* At age of beginning of transition, where status is known */                  freq[s[m][iind]][s[m+1][iind]][(int)agev[m][iind]] += weight[iind]; /* At age of beginning of transition, where status is known */
                                                                 /* freq[s[m][iind]][s[m+1][iind]][(int)((agebegin+ageend)/2.)] += weight[iind]; */                  /* freq[s[m][iind]][s[m+1][iind]][(int)((agebegin+ageend)/2.)] += weight[iind]; */
                                                                 freq[s[m][iind]][s[m+1][iind]][iagemax+3] += weight[iind]; /* Total is in iagemax+3 *//* At age of beginning of transition, where status is known */                  freq[s[m][iind]][s[m+1][iind]][iagemax+3] += weight[iind]; /* Total is in iagemax+3 *//* At age of beginning of transition, where status is known */
                                                         }                }
                                                 } /* end if between passes */                } /* end if between passes */  
                                                 if ((agev[m][iind]>1) && (agev[m][iind]< (iagemax+3)) && (anint[m][iind]!=9999) && (mint[m][iind]!=99)) {              if ((agev[m][iind]>1) && (agev[m][iind]< (iagemax+3)) && (anint[m][iind]!=9999) && (mint[m][iind]!=99)) {
                                                         dateintsum=dateintsum+k2;                dateintsum=dateintsum+k2;
                                                         k2cpt++;                k2cpt++;
                                                         /* printf("iind=%ld dateintmean = %lf dateintsum=%lf k2cpt=%lf k2=%lf\n",iind, dateintsum/k2cpt, dateintsum,k2cpt, k2); */                /* printf("iind=%ld dateintmean = %lf dateintsum=%lf k2cpt=%lf k2=%lf\n",iind, dateintsum/k2cpt, dateintsum,k2cpt, k2); */
                                                 }              }
                                         } /* end bool 2 */            } /* end bool 2 */
                                 } /* end m */          } /* end m */
       } /* end bool */        } /* end bool */
     } /* end iind = 1 to imx */      } /* end iind = 1 to imx */
     /* prop[s][age] is feeded for any initial and valid live state as well as      /* prop[s][age] is feeded for any initial and valid live state as well as
Line 4142  Title=%s <br>Datafile=%s Firstpass=%d La Line 4251  Title=%s <br>Datafile=%s Firstpass=%d La
       fprintf(ficresphtm, "\n<br/><br/><h3>********** Variable ");         fprintf(ficresphtm, "\n<br/><br/><h3>********** Variable "); 
       fprintf(ficresphtmfr, "\n<br/><br/><h3>********** Variable ");         fprintf(ficresphtmfr, "\n<br/><br/><h3>********** Variable "); 
       for (z1=1; z1<=cptcoveff; z1++){        for (z1=1; z1<=cptcoveff; z1++){
                                 fprintf(ficresp, "V%d=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtabm(j1,z1)]);          fprintf(ficresp, "V%d=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtabm(j1,z1)]);
                                 fprintf(ficresphtm, "V%d=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtabm(j1,z1)]);          fprintf(ficresphtm, "V%d=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtabm(j1,z1)]);
                                 fprintf(ficresphtmfr, "V%d=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtabm(j1,z1)]);          fprintf(ficresphtmfr, "V%d=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtabm(j1,z1)]);
       }        }
       fprintf(ficresp, "**********\n#");        fprintf(ficresp, "**********\n#");
       fprintf(ficresphtm, "**********</h3>\n");        fprintf(ficresphtm, "**********</h3>\n");
Line 4166  Title=%s <br>Datafile=%s Firstpass=%d La Line 4275  Title=%s <br>Datafile=%s Firstpass=%d La
     fprintf(ficresphtmfr,"<th>Age</th> ");      fprintf(ficresphtmfr,"<th>Age</th> ");
     for(jk=-1; jk <=nlstate+ndeath; jk++){      for(jk=-1; jk <=nlstate+ndeath; jk++){
       for(m=-1; m <=nlstate+ndeath; m++){        for(m=-1; m <=nlstate+ndeath; m++){
                                 if(jk!=0 && m!=0)          if(jk!=0 && m!=0)
                                         fprintf(ficresphtmfr,"<th>%d%d</th> ",jk,m);            fprintf(ficresphtmfr,"<th>%d%d</th> ",jk,m);
       }        }
     }      }
     fprintf(ficresphtmfr, "\n");      fprintf(ficresphtmfr, "\n");
Line 4803  void  concatwav(int wav[], int **dh, int Line 4912  void  concatwav(int wav[], int **dh, int
   
 /*********** Health Expectancies ****************/  /*********** Health Expectancies ****************/
   
 void evsij(double ***eij, double x[], int nlstate, int stepm, int bage, int fage, double **oldm, double **savm, int cij, int estepm,char strstart[] )   void evsij(double ***eij, double x[], int nlstate, int stepm, int bage, int fage, double **oldm, double **savm, int cij, int estepm,char strstart[], int nres )
   
 {  {
   /* Health expectancies, no variances */    /* Health expectancies, no variances */
Line 4813  void evsij(double ***eij, double x[], in Line 4922  void evsij(double ***eij, double x[], in
   double ***p3mat;    double ***p3mat;
   double eip;    double eip;
   
   pstamp(ficreseij);    /* pstamp(ficreseij); */
   fprintf(ficreseij,"# (a) Life expectancies by health status at initial age and (b) health expectancies by health status at initial age\n");    fprintf(ficreseij,"# (a) Life expectancies by health status at initial age and (b) health expectancies by health status at initial age\n");
   fprintf(ficreseij,"# Age");    fprintf(ficreseij,"# Age");
   for(i=1; i<=nlstate;i++){    for(i=1; i<=nlstate;i++){
Line 4876  void evsij(double ***eij, double x[], in Line 4985  void evsij(double ***eij, double x[], in
     /* Computed by stepm unit matrices, product of hstepma matrices, stored      /* Computed by stepm unit matrices, product of hstepma matrices, stored
        in an array of nhstepma length: nhstepma=10, hstepm=4, stepm=6 months */         in an array of nhstepma length: nhstepma=10, hstepm=4, stepm=6 months */
           
     hpxij(p3mat,nhstepma,age,hstepm,x,nlstate,stepm,oldm, savm, cij);        hpxij(p3mat,nhstepma,age,hstepm,x,nlstate,stepm,oldm, savm, cij, nres);  
           
     hf=hstepm*stepm/YEARM;  /* Duration of hstepm expressed in year unit. */      hf=hstepm*stepm/YEARM;  /* Duration of hstepm expressed in year unit. */
           
Line 4911  void evsij(double ***eij, double x[], in Line 5020  void evsij(double ***eij, double x[], in
       
 }  }
   
 void cvevsij(double ***eij, double x[], int nlstate, int stepm, int bage, int fage, double **oldm, double **savm, int cij, int estepm,double delti[],double **matcov,char strstart[] )   void cvevsij(double ***eij, double x[], int nlstate, int stepm, int bage, int fage, double **oldm, double **savm, int cij, int estepm,double delti[],double **matcov,char strstart[], int nres )
   
 {  {
   /* Covariances of health expectancies eij and of total life expectancies according    /* Covariances of health expectancies eij and of total life expectancies according
Line 5024  void cvevsij(double ***eij, double x[], Line 5133  void cvevsij(double ***eij, double x[],
         xp[i] = x[i] + (i==theta ?delti[theta]:0);          xp[i] = x[i] + (i==theta ?delti[theta]:0);
         xm[i] = x[i] - (i==theta ?delti[theta]:0);          xm[i] = x[i] - (i==theta ?delti[theta]:0);
       }        }
       hpxij(p3matp,nhstepm,age,hstepm,xp,nlstate,stepm,oldm,savm, cij);          hpxij(p3matp,nhstepm,age,hstepm,xp,nlstate,stepm,oldm,savm, cij, nres);  
       hpxij(p3matm,nhstepm,age,hstepm,xm,nlstate,stepm,oldm,savm, cij);          hpxij(p3matm,nhstepm,age,hstepm,xm,nlstate,stepm,oldm,savm, cij, nres);  
                                                   
       for(j=1; j<= nlstate; j++){        for(j=1; j<= nlstate; j++){
         for(i=1; i<=nlstate; i++){          for(i=1; i<=nlstate; i++){
Line 5066  void cvevsij(double ***eij, double x[], Line 5175  void cvevsij(double ***eij, double x[],
     }      }
                                   
     /* Computing expectancies */      /* Computing expectancies */
     hpxij(p3matm,nhstepm,age,hstepm,x,nlstate,stepm,oldm, savm, cij);        hpxij(p3matm,nhstepm,age,hstepm,x,nlstate,stepm,oldm, savm, cij,nres);  
     for(i=1; i<=nlstate;i++)      for(i=1; i<=nlstate;i++)
       for(j=1; j<=nlstate;j++)        for(j=1; j<=nlstate;j++)
         for (h=0, eij[i][j][(int)age]=0; h<=nhstepm-1; h++){          for (h=0, eij[i][j][(int)age]=0; h<=nhstepm-1; h++){
Line 5121  void cvevsij(double ***eij, double x[], Line 5230  void cvevsij(double ***eij, double x[],
 }  }
     
 /************ Variance ******************/  /************ Variance ******************/
  void varevsij(char optionfilefiname[], double ***vareij, double **matcov, double x[], double delti[], int nlstate, int stepm, double bage, double fage, double **oldm, double **savm, double **prlim, double ftolpl, int *ncvyearp, int ij, int estepm, int cptcov, int cptcod, int popbased, int mobilav, char strstart[])   void varevsij(char optionfilefiname[], double ***vareij, double **matcov, double x[], double delti[], int nlstate, int stepm, double bage, double fage, double **oldm, double **savm, double **prlim, double ftolpl, int *ncvyearp, int ij, int estepm, int cptcov, int cptcod, int popbased, int mobilav, char strstart[], int nres)
  {   {
    /* Variance of health expectancies */     /* Variance of health expectancies */
    /*  double **prevalim(double **prlim, int nlstate, double *xp, double age, double **oldm, double ** savm,double ftolpl);*/     /*  double **prevalim(double **prlim, int nlstate, double *xp, double age, double **oldm, double ** savm,double ftolpl);*/
Line 5178  void cvevsij(double ***eij, double x[], Line 5287  void cvevsij(double ***eij, double x[],
    fprintf(ficlog,"Computing total mortality p.j=w1*p1j+w2*p2j+..: result on file '%s' \n",fileresprobmorprev);     fprintf(ficlog,"Computing total mortality p.j=w1*p1j+w2*p2j+..: result on file '%s' \n",fileresprobmorprev);
    pstamp(ficresprobmorprev);     pstamp(ficresprobmorprev);
    fprintf(ficresprobmorprev,"# probabilities of dying before estepm=%d months for people of exact age and weighted probabilities w1*p1j+w2*p2j+... stand dev in()\n",estepm);     fprintf(ficresprobmorprev,"# probabilities of dying before estepm=%d months for people of exact age and weighted probabilities w1*p1j+w2*p2j+... stand dev in()\n",estepm);
      fprintf(ficresprobmorprev,"# Selected quantitative variables and dummies");
      for (j=1; j<= nsq; j++){ /* For each selected (single) quantitative value */
        fprintf(ficresprobmorprev," V%d=%f ",Tvqresult[nres][j],Tqresult[nres][j]);
      }
      for(j=1;j<=cptcoveff;j++) 
        fprintf(ficresprobmorprev,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(ij,j)]);
      fprintf(ficresprobmorprev,"\n");
   
    fprintf(ficresprobmorprev,"# Age cov=%-d",ij);     fprintf(ficresprobmorprev,"# Age cov=%-d",ij);
    for(j=nlstate+1; j<=(nlstate+ndeath);j++){     for(j=nlstate+1; j<=(nlstate+ndeath);j++){
      fprintf(ficresprobmorprev," p.%-d SE",j);       fprintf(ficresprobmorprev," p.%-d SE",j);
Line 5247  void cvevsij(double ***eij, double x[], Line 5364  void cvevsij(double ***eij, double x[],
          xp[i] = x[i] + (i==theta ?delti[theta]:0);           xp[i] = x[i] + (i==theta ?delti[theta]:0);
        }         }
                                                   
        prevalim(prlim,nlstate,xp,age,oldm,savm,ftolpl,ncvyearp,ij);         prevalim(prlim,nlstate,xp,age,oldm,savm,ftolpl,ncvyearp,ij, nresult);
                                                   
        if (popbased==1) {         if (popbased==1) {
          if(mobilav ==0){           if(mobilav ==0){
Line 5259  void cvevsij(double ***eij, double x[], Line 5376  void cvevsij(double ***eij, double x[],
          }           }
        }         }
                                                   
        hpxij(p3mat,nhstepm,age,hstepm,xp,nlstate,stepm,oldm,savm, ij);  /* Returns p3mat[i][j][h] for h=1 to nhstepm */         hpxij(p3mat,nhstepm,age,hstepm,xp,nlstate,stepm,oldm,savm, ij,nres);  /* Returns p3mat[i][j][h] for h=1 to nhstepm */
        for(j=1; j<= nlstate; j++){         for(j=1; j<= nlstate; j++){
          for(h=0; h<=nhstepm; h++){           for(h=0; h<=nhstepm; h++){
            for(i=1, gp[h][j]=0.;i<=nlstate;i++)             for(i=1, gp[h][j]=0.;i<=nlstate;i++)
Line 5279  void cvevsij(double ***eij, double x[], Line 5396  void cvevsij(double ***eij, double x[],
        for(i=1; i<=npar; i++) /* Computes gradient x - delta */         for(i=1; i<=npar; i++) /* Computes gradient x - delta */
          xp[i] = x[i] - (i==theta ?delti[theta]:0);           xp[i] = x[i] - (i==theta ?delti[theta]:0);
                                                   
        prevalim(prlim,nlstate,xp,age,oldm,savm,ftolpl,ncvyearp, ij);         prevalim(prlim,nlstate,xp,age,oldm,savm,ftolpl,ncvyearp, ij, nresult);
                                                   
        if (popbased==1) {         if (popbased==1) {
          if(mobilav ==0){           if(mobilav ==0){
Line 5291  void cvevsij(double ***eij, double x[], Line 5408  void cvevsij(double ***eij, double x[],
          }           }
        }         }
                                                   
        hpxij(p3mat,nhstepm,age,hstepm,xp,nlstate,stepm,oldm,savm, ij);           hpxij(p3mat,nhstepm,age,hstepm,xp,nlstate,stepm,oldm,savm, ij,nres);  
                                                   
        for(j=1; j<= nlstate; j++){  /* Sum of wi * eij = e.j */         for(j=1; j<= nlstate; j++){  /* Sum of wi * eij = e.j */
          for(h=0; h<=nhstepm; h++){           for(h=0; h<=nhstepm; h++){
Line 5356  void cvevsij(double ***eij, double x[], Line 5473  void cvevsij(double ***eij, double x[],
      /* end ppptj */       /* end ppptj */
      /*  x centered again */       /*  x centered again */
                                   
      prevalim(prlim,nlstate,x,age,oldm,savm,ftolpl,ncvyearp,ij);       prevalim(prlim,nlstate,x,age,oldm,savm,ftolpl,ncvyearp,ij, nresult);
                                   
      if (popbased==1) {       if (popbased==1) {
        if(mobilav ==0){         if(mobilav ==0){
Line 5372  void cvevsij(double ***eij, double x[], Line 5489  void cvevsij(double ***eij, double x[],
         computed over hstepm (estepm) matrices product = hstepm*stepm months)           computed over hstepm (estepm) matrices product = hstepm*stepm months) 
         as a weighted average of prlim.          as a weighted average of prlim.
      */       */
      hpxij(p3mat,nhstepm,age,hstepm,x,nlstate,stepm,oldm,savm, ij);         hpxij(p3mat,nhstepm,age,hstepm,x,nlstate,stepm,oldm,savm, ij, nres);  
      for(j=nlstate+1;j<=nlstate+ndeath;j++){       for(j=nlstate+1;j<=nlstate+ndeath;j++){
        for(i=1,gmp[j]=0.;i<= nlstate; i++)          for(i=1,gmp[j]=0.;i<= nlstate; i++) 
          gmp[j] += prlim[i][i]*p3mat[i][j][1];            gmp[j] += prlim[i][i]*p3mat[i][j][1]; 
Line 5435  void cvevsij(double ***eij, double x[], Line 5552  void cvevsij(double ***eij, double x[],
  }  /* end varevsij */   }  /* end varevsij */
   
 /************ Variance of prevlim ******************/  /************ Variance of prevlim ******************/
  void varprevlim(char fileres[], double **varpl, double **matcov, double x[], double delti[], int nlstate, int stepm, double bage, double fage, double **oldm, double **savm, double **prlim, double ftolpl, int *ncvyearp, int ij, char strstart[])   void varprevlim(char fileres[], double **varpl, double **matcov, double x[], double delti[], int nlstate, int stepm, double bage, double fage, double **oldm, double **savm, double **prlim, double ftolpl, int *ncvyearp, int ij, char strstart[], int nres)
 {  {
   /* Variance of prevalence limit  for each state ij using current parameters x[] and estimates of neighbourhood give by delti*/    /* Variance of prevalence limit  for each state ij using current parameters x[] and estimates of neighbourhood give by delti*/
   /*  double **prevalim(double **prlim, int nlstate, double *xp, double age, double **oldm, double **savm,double ftolpl);*/    /*  double **prevalim(double **prlim, int nlstate, double *xp, double age, double **oldm, double **savm,double ftolpl);*/
Line 5478  void cvevsij(double ***eij, double x[], Line 5595  void cvevsij(double ***eij, double x[],
         xp[i] = x[i] + (i==theta ?delti[theta]:0);          xp[i] = x[i] + (i==theta ?delti[theta]:0);
       }        }
       if((int)age==79 ||(int)age== 80 ||(int)age== 81 )        if((int)age==79 ||(int)age== 80 ||(int)age== 81 )
         prevalim(prlim,nlstate,xp,age,oldm,savm,ftolpl,ncvyearp,ij);          prevalim(prlim,nlstate,xp,age,oldm,savm,ftolpl,ncvyearp,ij,nres);
       else        else
         prevalim(prlim,nlstate,xp,age,oldm,savm,ftolpl,ncvyearp,ij);          prevalim(prlim,nlstate,xp,age,oldm,savm,ftolpl,ncvyearp,ij,nres);
       for(i=1;i<=nlstate;i++){        for(i=1;i<=nlstate;i++){
         gp[i] = prlim[i][i];          gp[i] = prlim[i][i];
         mgp[theta][i] = prlim[i][i];          mgp[theta][i] = prlim[i][i];
Line 5488  void cvevsij(double ***eij, double x[], Line 5605  void cvevsij(double ***eij, double x[],
       for(i=1; i<=npar; i++) /* Computes gradient */        for(i=1; i<=npar; i++) /* Computes gradient */
         xp[i] = x[i] - (i==theta ?delti[theta]:0);          xp[i] = x[i] - (i==theta ?delti[theta]:0);
       if((int)age==79 ||(int)age== 80 ||(int)age== 81 )        if((int)age==79 ||(int)age== 80 ||(int)age== 81 )
         prevalim(prlim,nlstate,xp,age,oldm,savm,ftolpl,ncvyearp,ij);          prevalim(prlim,nlstate,xp,age,oldm,savm,ftolpl,ncvyearp,ij,nres);
       else        else
         prevalim(prlim,nlstate,xp,age,oldm,savm,ftolpl,ncvyearp,ij);          prevalim(prlim,nlstate,xp,age,oldm,savm,ftolpl,ncvyearp,ij,nres);
       for(i=1;i<=nlstate;i++){        for(i=1;i<=nlstate;i++){
         gm[i] = prlim[i][i];          gm[i] = prlim[i][i];
         mgm[theta][i] = prlim[i][i];          mgm[theta][i] = prlim[i][i];
Line 5898  void printinghtml(char fileresu[], char Line 6015  void printinghtml(char fileresu[], char
                   int popforecast, int prevfcast, int backcast, int estepm , \                    int popforecast, int prevfcast, int backcast, int estepm , \
                   double jprev1, double mprev1,double anprev1, double dateprev1, \                    double jprev1, double mprev1,double anprev1, double dateprev1, \
                   double jprev2, double mprev2,double anprev2, double dateprev2){                    double jprev2, double mprev2,double anprev2, double dateprev2){
   int jj1, k1, i1, cpt;    int jj1, k1, i1, cpt, k4, nres;
   
    fprintf(fichtm,"<ul><li><a href='#firstorder'>Result files (first order: no variance)</a>\n \     fprintf(fichtm,"<ul><li><a href='#firstorder'>Result files (first order: no variance)</a>\n \
    <li><a href='#secondorder'>Result files (second order (variance)</a>\n \     <li><a href='#secondorder'>Result files (second order (variance)</a>\n \
 </ul>");  </ul>");
      fprintf(fichtm,"<ul><li> model=1+age+%s\n \
   </ul>", model);
    fprintf(fichtm,"<ul><li><h4><a name='firstorder'>Result files (first order: no variance)</a></h4>\n");     fprintf(fichtm,"<ul><li><h4><a name='firstorder'>Result files (first order: no variance)</a></h4>\n");
    fprintf(fichtm,"<li>- Observed frequency between two states (during the period defined between %.lf/%.lf/%.lf and %.lf/%.lf/%.lf): <a href=\"%s\">%s</a> (html file)<br/>\n",     fprintf(fichtm,"<li>- Observed frequency between two states (during the period defined between %.lf/%.lf/%.lf and %.lf/%.lf/%.lf): <a href=\"%s\">%s</a> (html file)<br/>\n",
            jprev1, mprev1,anprev1,jprev2, mprev2,anprev2,subdirfext3(optionfilefiname,"PHTMFR_",".htm"),subdirfext3(optionfilefiname,"PHTMFR_",".htm"));             jprev1, mprev1,anprev1,jprev2, mprev2,anprev2,subdirfext3(optionfilefiname,"PHTMFR_",".htm"),subdirfext3(optionfilefiname,"PHTMFR_",".htm"));
Line 5937  void printinghtml(char fileresu[], char Line 6056  void printinghtml(char fileresu[], char
    if (cptcovn < 1) {m=1;ncodemax[1]=1;}     if (cptcovn < 1) {m=1;ncodemax[1]=1;}
   
    jj1=0;     jj1=0;
   
      for(nres=1; nres <= nresult; nres++) /* For each resultline */
    for(k1=1; k1<=m;k1++){     for(k1=1; k1<=m;k1++){
        if(TKresult[nres]!= k1)
          continue;
   
      /* for(i1=1; i1<=ncodemax[k1];i1++){ */       /* for(i1=1; i1<=ncodemax[k1];i1++){ */
      jj1++;       jj1++;
      if (cptcovn > 0) {       if (cptcovn > 0) {
        fprintf(fichtm,"<hr  size=\"2\" color=\"#EC5E5E\">************ Results for covariates");         fprintf(fichtm,"<hr  size=\"2\" color=\"#EC5E5E\">************ Results for covariates");
        for (cpt=1; cpt<=cptcoveff;cpt++){          for (cpt=1; cpt<=cptcoveff;cpt++){ 
          fprintf(fichtm," V%d=%d ",Tvaraff[cpt],nbcode[Tvaraff[cpt]][codtabm(jj1,cpt)]);           fprintf(fichtm," V%d=%d ",Tvresult[nres][cpt],(int)Tresult[nres][cpt]);
          printf(" V%d=%d ",Tvaraff[cpt],nbcode[Tvaraff[cpt]][codtabm(jj1,cpt)]);fflush(stdout);           printf(" V%d=%d ",Tvresult[nres][cpt],Tresult[nres][cpt]);fflush(stdout);
            /* fprintf(fichtm," V%d=%d ",Tvaraff[cpt],nbcode[Tvaraff[cpt]][codtabm(jj1,cpt)]); */
            /* printf(" V%d=%d ",Tvaraff[cpt],nbcode[Tvaraff[cpt]][codtabm(jj1,cpt)]);fflush(stdout); */
        }         }
          for (k4=1; k4<= nsq; k4++){ /* For each selected (single) quantitative value */
           fprintf(fichtm," V%d=%f ",Tvqresult[nres][k4],Tqresult[nres][k4]);
           printf(" V%d=%f ",Tvqresult[nres][k4],Tqresult[nres][k4]);fflush(stdout);
         }
          
        /* if(nqfveff+nqtveff 0) */ /* Test to be done */         /* if(nqfveff+nqtveff 0) */ /* Test to be done */
        fprintf(fichtm," ************\n<hr size=\"2\" color=\"#EC5E5E\">");         fprintf(fichtm," ************\n<hr size=\"2\" color=\"#EC5E5E\">");
        if(invalidvarcomb[k1]){         if(invalidvarcomb[k1]){
Line 6058  See page 'Matrix of variance-covariance Line 6188  See page 'Matrix of variance-covariance
    if (cptcovn < 1) {m=1;ncodemax[1]=1;}     if (cptcovn < 1) {m=1;ncodemax[1]=1;}
   
    jj1=0;     jj1=0;
   
      for(nres=1; nres <= nresult; nres++) /* For each resultline */
    for(k1=1; k1<=m;k1++){     for(k1=1; k1<=m;k1++){
        if(TKresult[nres]!= k1)
          continue;
      /* for(i1=1; i1<=ncodemax[k1];i1++){ */       /* for(i1=1; i1<=ncodemax[k1];i1++){ */
      jj1++;       jj1++;
      if (cptcovn > 0) {       if (cptcovn > 0) {
        fprintf(fichtm,"<hr  size=\"2\" color=\"#EC5E5E\">************ Results for covariates");         fprintf(fichtm,"<hr  size=\"2\" color=\"#EC5E5E\">************ Results for covariates");
        for (cpt=1; cpt<=cptcoveff;cpt++)  /**< cptcoveff number of variables */         for (cpt=1; cpt<=cptcoveff;cpt++)  /**< cptcoveff number of variables */
          fprintf(fichtm," V%d=%d ",Tvaraff[cpt],nbcode[Tvaraff[cpt]][codtabm(jj1,cpt)]);           fprintf(fichtm," V%d=%d ",Tvresult[nres][cpt],Tresult[nres][cpt]);
            /* fprintf(fichtm," V%d=%d ",Tvaraff[cpt],nbcode[Tvaraff[cpt]][codtabm(jj1,cpt)]); */
          for (k4=1; k4<= nsq; k4++){ /* For each selected (single) quantitative value */
           fprintf(fichtm," V%d=%f ",Tvqresult[nres][k4],Tqresult[nres][k4]);
         }
   
        fprintf(fichtm," ************\n<hr size=\"2\" color=\"#EC5E5E\">");         fprintf(fichtm," ************\n<hr size=\"2\" color=\"#EC5E5E\">");
   
        if(invalidvarcomb[k1]){         if(invalidvarcomb[k1]){
Line 6094  void printinggnuplot(char fileresu[], ch Line 6233  void printinggnuplot(char fileresu[], ch
   
   char dirfileres[132],optfileres[132];    char dirfileres[132],optfileres[132];
   char gplotcondition[132];    char gplotcondition[132];
   int cpt=0,k1=0,i=0,k=0,j=0,jk=0,k2=0,k3=0,ij=0,l=0;    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 lv=0, vlv=0, kl=0;    int lv=0, vlv=0, kl=0;
   int ng=0;    int ng=0;
   int vpopbased;    int vpopbased;
   int ioffset; /* variable offset for columns */    int ioffset; /* variable offset for columns */
     int nres=0; /* Index of resultline */
   
 /*   if((ficgp=fopen(optionfilegnuplot,"a"))==NULL) { */  /*   if((ficgp=fopen(optionfilegnuplot,"a"))==NULL) { */
 /*     printf("Problem with file %s",optionfilegnuplot); */  /*     printf("Problem with file %s",optionfilegnuplot); */
Line 6142  void printinggnuplot(char fileresu[], ch Line 6282  void printinggnuplot(char fileresu[], ch
   strcpy(dirfileres,optionfilefiname);    strcpy(dirfileres,optionfilefiname);
   strcpy(optfileres,"vpl");    strcpy(optfileres,"vpl");
   /* 1eme*/    /* 1eme*/
   for (cpt=1; cpt<= nlstate ; cpt ++) { /* For each live state */    for (cpt=1; cpt<= nlstate ; cpt ++){ /* For each live state */
     for (k1=1; k1<= m && selected(k1) ; k1 ++) { /* For each valid combination of covariate */      for (k1=1; k1<= m ; k1 ++){ /* For each valid combination of covariate */
       /* plot [100000000000000000000:-100000000000000000000] "mysbiaspar/vplrmysbiaspar.txt to check */        for(nres=1; nres <= nresult; nres++){ /* For each resultline */
       fprintf(ficgp,"\n# 1st: Period (stable) prevalence with CI: 'VPL_' files ");          /* plot [100000000000000000000:-100000000000000000000] "mysbiaspar/vplrmysbiaspar.txt to check */
       for (k=1; k<=cptcoveff; k++){    /* For each covariate k get corresponding value lv for combination k1 */          if(TKresult[nres]!= k1)
         lv= decodtabm(k1,k,cptcoveff); /* Should be the value of the covariate corresponding to k1 combination */            continue;
         /* decodtabm(1,1,4) = 1 because h=1  k= (1) 1  1  1 */          /* We are interested in selected combination by the resultline */
         /* decodtabm(1,2,4) = 1 because h=1  k=  1 (1) 1  1 */          printf("\n# 1st: Period (stable) prevalence with CI: 'VPL_' files and live state =%d ", cpt);
         /* decodtabm(13,3,4)= 2 because h=13 k=  1  1 (2) 2 */          fprintf(ficgp,"\n# 1st: Period (stable) prevalence with CI: 'VPL_' files  and live state =%d ", cpt);
         vlv= nbcode[Tvaraff[k]][lv]; /* vlv is the value of the covariate lv, 0 or 1 */          for (k=1; k<=cptcoveff; k++){    /* For each covariate k get corresponding value lv for combination k1 */
         /* For each combination of covariate k1 (V1=1, V3=0), we printed the current covariate k and its value vlv */            lv= decodtabm(k1,k,cptcoveff); /* Should be the value of the covariate corresponding to k1 combination */
         fprintf(ficgp," V%d=%d ",Tvaraff[k],vlv);            /* decodtabm(1,1,4) = 1 because h=1  k= (1) 1  1  1 */
       }            /* decodtabm(1,2,4) = 1 because h=1  k=  1 (1) 1  1 */
       fprintf(ficgp,"\n#\n");            /* decodtabm(13,3,4)= 2 because h=13 k=  1  1 (2) 2 */
       if(invalidvarcomb[k1]){            vlv= nbcode[Tvaraff[k]][lv]; /* vlv is the value of the covariate lv, 0 or 1 */
         fprintf(ficgp,"#Combination (%d) ignored because no cases \n",k1);             /* For each combination of covariate k1 (V1=1, V3=0), we printed the current covariate k and its value vlv */
         continue;            printf(" V%d=%d ",Tvaraff[k],vlv);
       }            fprintf(ficgp," V%d=%d ",Tvaraff[k],vlv);
           }
       fprintf(ficgp,"\nset out \"%s_%d-%d.svg\" \n",subdirf2(optionfilefiname,"V_"),cpt,k1);          for (k4=1; k4<= nsq; k4++){ /* For each selected (single) quantitative value */
       fprintf(ficgp,"\n#set out \"V_%s_%d-%d.svg\" \n",optionfilefiname,cpt,k1);            printf(" V%d=%f ",Tvqresult[nres][k4],Tqresult[nres][k4]);
       fprintf(ficgp,"set xlabel \"Age\" \n\            fprintf(ficgp," V%d=%f ",Tvqresult[nres][k4],Tqresult[nres][k4]);
 set ylabel \"Probability\" \n   \          }       
 set ter svg size 640, 480\n     \          printf("\n#\n");
           fprintf(ficgp,"\n#\n");
           if(invalidvarcomb[k1]){
             fprintf(ficgp,"#Combination (%d) ignored because no cases \n",k1); 
             continue;
           }
         
           fprintf(ficgp,"\nset out \"%s_%d-%d.svg\" \n",subdirf2(optionfilefiname,"V_"),cpt,k1);
           fprintf(ficgp,"\n#set out \"V_%s_%d-%d.svg\" \n",optionfilefiname,cpt,k1);
           fprintf(ficgp,"set xlabel \"Age\" \n\
   set ylabel \"Probability\" \n             \
   set ter svg size 640, 480\n                                             \
 plot [%.f:%.f] \"%s\" every :::%d::%d u 1:2 \"%%lf",ageminpar,fage,subdirf2(fileresu,"VPL_"),k1-1,k1-1);  plot [%.f:%.f] \"%s\" every :::%d::%d u 1:2 \"%%lf",ageminpar,fage,subdirf2(fileresu,"VPL_"),k1-1,k1-1);
                                 
       for (i=1; i<= nlstate ; i ++) {          for (i=1; i<= nlstate ; i ++) {
         if (i==cpt) fprintf(ficgp," %%lf (%%lf)");            if (i==cpt) fprintf(ficgp," %%lf (%%lf)");
         else        fprintf(ficgp," %%*lf (%%*lf)");            else        fprintf(ficgp," %%*lf (%%*lf)");
       }          }
       fprintf(ficgp,"\" t\"Period (stable) prevalence\" w l lt 0,\"%s\" every :::%d::%d u 1:($2+1.96*$3) \"%%lf",subdirf2(fileresu,"VPL_"),k1-1,k1-1);          fprintf(ficgp,"\" t\"Period (stable) prevalence\" w l lt 0,\"%s\" every :::%d::%d u 1:($2+1.96*$3) \"%%lf",subdirf2(fileresu,"VPL_"),k1-1,k1-1);
       for (i=1; i<= nlstate ; i ++) {          for (i=1; i<= nlstate ; i ++) {
         if (i==cpt) fprintf(ficgp," %%lf (%%lf)");            if (i==cpt) fprintf(ficgp," %%lf (%%lf)");
         else fprintf(ficgp," %%*lf (%%*lf)");            else fprintf(ficgp," %%*lf (%%*lf)");
       }           } 
       fprintf(ficgp,"\" t\"95%% CI\" w l lt 1,\"%s\" every :::%d::%d u 1:($2-1.96*$3) \"%%lf",subdirf2(fileresu,"VPL_"),k1-1,k1-1);           fprintf(ficgp,"\" t\"95%% CI\" w l lt 1,\"%s\" every :::%d::%d u 1:($2-1.96*$3) \"%%lf",subdirf2(fileresu,"VPL_"),k1-1,k1-1); 
       for (i=1; i<= nlstate ; i ++) {          for (i=1; i<= nlstate ; i ++) {
         if (i==cpt) fprintf(ficgp," %%lf (%%lf)");            if (i==cpt) fprintf(ficgp," %%lf (%%lf)");
         else fprintf(ficgp," %%*lf (%%*lf)");            else fprintf(ficgp," %%*lf (%%*lf)");
       }            }  
       fprintf(ficgp,"\" t\"\" w l lt 1,\"%s\" every :::%d::%d u 1:($%d) t\"Observed prevalence\" w l lt 2",subdirf2(fileresu,"P_"),k1-1,k1-1,2+4*(cpt-1));          fprintf(ficgp,"\" t\"\" w l lt 1,\"%s\" every :::%d::%d u 1:($%d) t\"Observed prevalence\" w l lt 2",subdirf2(fileresu,"P_"),k1-1,k1-1,2+4*(cpt-1));
       if(backcast==1){ /* We need to get the corresponding values of the covariates involved in this combination k1 */          if(backcast==1){ /* We need to get the corresponding values of the covariates involved in this combination k1 */
         /* fprintf(ficgp,",\"%s\" every :::%d::%d u 1:($%d) t\"Backward stable prevalence\" w l lt 3",subdirf2(fileresu,"PLB_"),k1-1,k1-1,1+cpt); */            /* fprintf(ficgp,",\"%s\" every :::%d::%d u 1:($%d) t\"Backward stable prevalence\" w l lt 3",subdirf2(fileresu,"PLB_"),k1-1,k1-1,1+cpt); */
         fprintf(ficgp,",\"%s\" u 1:((",subdirf2(fileresu,"PLB_")); /* Age is in 1 */            fprintf(ficgp,",\"%s\" u 1:((",subdirf2(fileresu,"PLB_")); /* Age is in 1 */
         if(cptcoveff ==0){            if(cptcoveff ==0){
           fprintf(ficgp,"$%d)) t 'Backward prevalence in state %d' with line ",  2+(cpt-1),  cpt );              fprintf(ficgp,"$%d)) t 'Backward prevalence in state %d' with line ",        2+(cpt-1),  cpt );
         }else{            }else{
           kl=0;              kl=0;
           for (k=1; k<=cptcoveff; k++){    /* For each combination of covariate  */              for (k=1; k<=cptcoveff; k++){    /* For each combination of covariate  */
             lv= decodtabm(k1,k,cptcoveff); /* Should be the covariate value corresponding to k1 combination and kth covariate */                lv= decodtabm(k1,k,cptcoveff); /* Should be the covariate value corresponding to k1 combination and kth covariate */
             /* decodtabm(1,1,4) = 1 because h=1  k= (1) 1  1  1 */                /* decodtabm(1,1,4) = 1 because h=1  k= (1) 1  1  1 */
             /* decodtabm(1,2,4) = 1 because h=1  k=  1 (1) 1  1 */                /* decodtabm(1,2,4) = 1 because h=1  k=  1 (1) 1  1 */
             /* decodtabm(13,3,4)= 2 because h=13 k=  1  1 (2) 2 */                /* decodtabm(13,3,4)= 2 because h=13 k=  1  1 (2) 2 */
             vlv= nbcode[Tvaraff[k]][lv];                vlv= nbcode[Tvaraff[k]][lv];
             kl++;  
             /* kl=6+(cpt-1)*(nlstate+1)+1+(i-1); /\* 6+(1-1)*(2+1)+1+(1-1)=7, 6+(2-1)(2+1)+1+(1-1)=10 *\/ */  
             /*6+(cpt-1)*(nlstate+1)+1+(i-1)+(nlstate+1)*nlstate; 6+(1-1)*(2+1)+1+(1-1) +(2+1)*2=13 */   
             /*6+1+(i-1)+(nlstate+1)*nlstate; 6+1+(1-1) +(2+1)*2=13 */   
             /* ''  u 6:(($1==1 && $2==0 && $3==2 && $4==0)? $9/(1.-$15) : 1/0):($5==2000? 3:2) t 'p.1' with line lc variable*/  
             if(k==cptcoveff){  
               fprintf(ficgp,"$%d==%d && $%d==%d)? $%d : 1/0) t 'Backward prevalence in state %d' ",kl+1, Tvaraff[k],kl+1+1,nbcode[Tvaraff[k]][lv], \  
                       4+(cpt-1),  cpt );  /* 4 or 6 ?*/  
             }else{  
               fprintf(ficgp,"$%d==%d && $%d==%d && ",kl+1, Tvaraff[k],kl+1+1,nbcode[Tvaraff[k]][lv]);  
               kl++;                kl++;
             }                /* kl=6+(cpt-1)*(nlstate+1)+1+(i-1); /\* 6+(1-1)*(2+1)+1+(1-1)=7, 6+(2-1)(2+1)+1+(1-1)=10 *\/ */
           } /* end covariate */                /*6+(cpt-1)*(nlstate+1)+1+(i-1)+(nlstate+1)*nlstate; 6+(1-1)*(2+1)+1+(1-1) +(2+1)*2=13 */ 
         } /* end if no covariate */                /*6+1+(i-1)+(nlstate+1)*nlstate; 6+1+(1-1) +(2+1)*2=13 */ 
       } /* end if backcast */                /* ''  u 6:(($1==1 && $2==0 && $3==2 && $4==0)? $9/(1.-$15) : 1/0):($5==2000? 3:2) t 'p.1' with line lc variable*/
       fprintf(ficgp,"\nset out \n");                if(k==cptcoveff){
                   fprintf(ficgp,"$%d==%d && $%d==%d)? $%d : 1/0) t 'Backward prevalence in state %d' ",kl+1, Tvaraff[k],kl+1+1,nbcode[Tvaraff[k]][lv], \
                           4+(cpt-1),  cpt );  /* 4 or 6 ?*/
                 }else{
                   fprintf(ficgp,"$%d==%d && $%d==%d && ",kl+1, Tvaraff[k],kl+1+1,nbcode[Tvaraff[k]][lv]);
                   kl++;
                 }
               } /* end covariate */
             } /* end if no covariate */
           } /* end if backcast */
           fprintf(ficgp,"\nset out \n");
         } /* nres */
     } /* k1 */      } /* k1 */
   } /* cpt */    } /* cpt */
   /*2 eme*/  
   for (k1=1; k1<= m ; k1 ++) {   
   
     fprintf(ficgp,"\n# 2nd: Total life expectancy with CI: 't' files ");  
     for (k=1; k<=cptcoveff; k++){    /* For each covariate and each value */  
       lv= decodtabm(k1,k,cptcoveff); /* Should be the covariate number corresponding to k1 combination */  
       /* decodtabm(1,1,4) = 1 because h=1  k= (1) 1  1  1 */  
       /* decodtabm(1,2,4) = 1 because h=1  k=  1 (1) 1  1 */  
       /* decodtabm(13,3,4)= 2 because h=13 k=  1  1 (2) 2 */  
       vlv= nbcode[Tvaraff[k]][lv];  
       fprintf(ficgp," V%d=%d ",Tvaraff[k],vlv);  
     }  
     fprintf(ficgp,"\n#\n");  
     if(invalidvarcomb[k1]){  
       fprintf(ficgp,"#Combination (%d) ignored because no cases \n",k1);   
       continue;  
     }  
                           
     fprintf(ficgp,"\nset out \"%s_%d.svg\" \n",subdirf2(optionfilefiname,"E_"),k1);  
     for(vpopbased=0; vpopbased <= popbased; vpopbased++){ /* Done for vpopbased=0 and vpopbased=1 if popbased==1*/  
       if(vpopbased==0)  
         fprintf(ficgp,"set ylabel \"Years\" \nset ter svg size 640, 480\nplot [%.f:%.f] ",ageminpar,fage);  
       else  
         fprintf(ficgp,"\nreplot ");  
       for (i=1; i<= nlstate+1 ; i ++) {  
         k=2*i;  
         fprintf(ficgp,"\"%s\" every :::%d::%d u 1:($2==%d && $4!=0 ?$4 : 1/0) \"%%lf %%lf %%lf",subdirf2(fileresu,"T_"),k1-1,k1-1, vpopbased);  
         for (j=1; j<= nlstate+1 ; j ++) {  
           if (j==i) fprintf(ficgp," %%lf (%%lf)");  
           else fprintf(ficgp," %%*lf (%%*lf)");  
         }     
         if (i== 1) fprintf(ficgp,"\" t\"TLE\" w l lt %d, \\\n",i);  
         else fprintf(ficgp,"\" t\"LE in state (%d)\" w l lt %d, \\\n",i-1,i+1);  
         fprintf(ficgp,"\"%s\" every :::%d::%d u 1:($2==%d && $4!=0 ? $4-$5*2 : 1/0) \"%%lf %%lf %%lf",subdirf2(fileresu,"T_"),k1-1,k1-1,vpopbased);  
         for (j=1; j<= nlstate+1 ; j ++) {  
           if (j==i) fprintf(ficgp," %%lf (%%lf)");  
           else fprintf(ficgp," %%*lf (%%*lf)");  
         }     
         fprintf(ficgp,"\" t\"\" w l lt 0,");  
         fprintf(ficgp,"\"%s\" every :::%d::%d u 1:($2==%d && $4!=0 ? $4+$5*2 : 1/0) \"%%lf %%lf %%lf",subdirf2(fileresu,"T_"),k1-1,k1-1,vpopbased);  
         for (j=1; j<= nlstate+1 ; j ++) {  
           if (j==i) fprintf(ficgp," %%lf (%%lf)");  
           else fprintf(ficgp," %%*lf (%%*lf)");  
         }     
         if (i== (nlstate+1)) fprintf(ficgp,"\" t\"\" w l lt 0");  
         else fprintf(ficgp,"\" t\"\" w l lt 0,\\\n");  
       } /* state */  
     } /* vpopbased */  
     fprintf(ficgp,"\nset out;set out \"%s_%d.svg\"; replot; set out; \n",subdirf2(optionfilefiname,"E_"),k1); /* Buggy gnuplot */  
   } /* k1 */  
           
           
   /*3eme*/  
   for (k1=1; k1<= m ; k1 ++) {   
   
     for (cpt=1; cpt<= nlstate ; cpt ++) {    
       fprintf(ficgp,"\n# 3d: Life expectancy with EXP_ files:  cov=%d state=%d",k1, cpt);    /*2 eme*/
     for (k1=1; k1<= m ; k1 ++){  
       for(nres=1; nres <= nresult; nres++){ /* For each resultline */
         if(TKresult[nres]!= k1)
           continue;
         fprintf(ficgp,"\n# 2nd: Total life expectancy with CI: 't' files ");
       for (k=1; k<=cptcoveff; k++){    /* For each covariate and each value */        for (k=1; k<=cptcoveff; k++){    /* For each covariate and each value */
         lv= decodtabm(k1,k,cptcoveff); /* Should be the covariate number corresponding to k1 combination */          lv= decodtabm(k1,k,cptcoveff); /* Should be the covariate number corresponding to k1 combination */
         /* decodtabm(1,1,4) = 1 because h=1  k= (1) 1  1  1 */          /* decodtabm(1,1,4) = 1 because h=1  k= (1) 1  1  1 */
Line 6279  plot [%.f:%.f] \"%s\" every :::%d::%d u Line 6382  plot [%.f:%.f] \"%s\" every :::%d::%d u
         vlv= nbcode[Tvaraff[k]][lv];          vlv= nbcode[Tvaraff[k]][lv];
         fprintf(ficgp," V%d=%d ",Tvaraff[k],vlv);          fprintf(ficgp," V%d=%d ",Tvaraff[k],vlv);
       }        }
         /* for(k=1; k <= ncovds; k++){ */
         for (k4=1; k4<= nsq; k4++){ /* For each selected (single) quantitative value */
           printf(" V%d=%f ",Tvqresult[nres][k4],Tqresult[nres][k4]);
           fprintf(ficgp," V%d=%f ",Tvqresult[nres][k4],Tqresult[nres][k4]);
         }
       fprintf(ficgp,"\n#\n");        fprintf(ficgp,"\n#\n");
       if(invalidvarcomb[k1]){        if(invalidvarcomb[k1]){
         fprintf(ficgp,"#Combination (%d) ignored because no cases \n",k1);           fprintf(ficgp,"#Combination (%d) ignored because no cases \n",k1); 
         continue;          continue;
       }        }
                                                   
       /*       k=2+nlstate*(2*cpt-2); */        fprintf(ficgp,"\nset out \"%s_%d.svg\" \n",subdirf2(optionfilefiname,"E_"),k1);
       k=2+(nlstate+1)*(cpt-1);        for(vpopbased=0; vpopbased <= popbased; vpopbased++){ /* Done for vpopbased=0 and vpopbased=1 if popbased==1*/
       fprintf(ficgp,"\nset out \"%s_%d%d.svg\" \n",subdirf2(optionfilefiname,"EXP_"),cpt,k1);          if(vpopbased==0)
       fprintf(ficgp,"set ter svg size 640, 480\n\            fprintf(ficgp,"set ylabel \"Years\" \nset ter svg size 640, 480\nplot [%.f:%.f] ",ageminpar,fage);
           else
             fprintf(ficgp,"\nreplot ");
           for (i=1; i<= nlstate+1 ; i ++) {
             k=2*i;
             fprintf(ficgp,"\"%s\" every :::%d::%d u 1:($2==%d && $4!=0 ?$4 : 1/0) \"%%lf %%lf %%lf",subdirf2(fileresu,"T_"),k1-1,k1-1, vpopbased);
             for (j=1; j<= nlstate+1 ; j ++) {
               if (j==i) fprintf(ficgp," %%lf (%%lf)");
               else fprintf(ficgp," %%*lf (%%*lf)");
             }   
             if (i== 1) fprintf(ficgp,"\" t\"TLE\" w l lt %d, \\\n",i);
             else fprintf(ficgp,"\" t\"LE in state (%d)\" w l lt %d, \\\n",i-1,i+1);
             fprintf(ficgp,"\"%s\" every :::%d::%d u 1:($2==%d && $4!=0 ? $4-$5*2 : 1/0) \"%%lf %%lf %%lf",subdirf2(fileresu,"T_"),k1-1,k1-1,vpopbased);
             for (j=1; j<= nlstate+1 ; j ++) {
               if (j==i) fprintf(ficgp," %%lf (%%lf)");
               else fprintf(ficgp," %%*lf (%%*lf)");
             }   
             fprintf(ficgp,"\" t\"\" w l lt 0,");
             fprintf(ficgp,"\"%s\" every :::%d::%d u 1:($2==%d && $4!=0 ? $4+$5*2 : 1/0) \"%%lf %%lf %%lf",subdirf2(fileresu,"T_"),k1-1,k1-1,vpopbased);
             for (j=1; j<= nlstate+1 ; j ++) {
               if (j==i) fprintf(ficgp," %%lf (%%lf)");
               else fprintf(ficgp," %%*lf (%%*lf)");
             }   
             if (i== (nlstate+1)) fprintf(ficgp,"\" t\"\" w l lt 0");
             else fprintf(ficgp,"\" t\"\" w l lt 0,\\\n");
           } /* state */
         } /* vpopbased */
         fprintf(ficgp,"\nset out;set out \"%s_%d.svg\"; replot; set out; \n",subdirf2(optionfilefiname,"E_"),k1); /* Buggy gnuplot */
       } /* end nres */
     } /* k1 end 2 eme*/
           
           
     /*3eme*/
     for (k1=1; k1<= m ; k1 ++){
       for(nres=1; nres <= nresult; nres++){ /* For each resultline */
         if(TKresult[nres]!= k)
           continue;
   
         for (cpt=1; cpt<= nlstate ; cpt ++) {
           fprintf(ficgp,"\n# 3d: Life expectancy with EXP_ files:  combination=%d state=%d",k1, cpt);
           for (k=1; k<=cptcoveff; k++){    /* For each covariate and each value */
             lv= decodtabm(k1,k,cptcoveff); /* Should be the covariate number corresponding to k1 combination */
             /* decodtabm(1,1,4) = 1 because h=1  k= (1) 1  1  1 */
             /* decodtabm(1,2,4) = 1 because h=1  k=  1 (1) 1  1 */
             /* decodtabm(13,3,4)= 2 because h=13 k=  1  1 (2) 2 */
             vlv= nbcode[Tvaraff[k]][lv];
             fprintf(ficgp," V%d=%d ",Tvaraff[k],vlv);
           }
           for (k4=1; k4<= nsq; k4++){ /* For each selected (single) quantitative value */
             fprintf(ficgp," V%d=%f ",Tvqresult[nres][k4],Tqresult[nres][k4]);
           }       
           fprintf(ficgp,"\n#\n");
           if(invalidvarcomb[k1]){
             fprintf(ficgp,"#Combination (%d) ignored because no cases \n",k1); 
             continue;
           }
                           
           /*       k=2+nlstate*(2*cpt-2); */
           k=2+(nlstate+1)*(cpt-1);
           fprintf(ficgp,"\nset out \"%s_%d%d.svg\" \n",subdirf2(optionfilefiname,"EXP_"),cpt,k1);
           fprintf(ficgp,"set ter svg size 640, 480\n\
 plot [%.f:%.f] \"%s\" every :::%d::%d u 1:%d t \"e%d1\" w l",ageminpar,fage,subdirf2(fileresu,"E_"),k1-1,k1-1,k,cpt);  plot [%.f:%.f] \"%s\" every :::%d::%d u 1:%d t \"e%d1\" w l",ageminpar,fage,subdirf2(fileresu,"E_"),k1-1,k1-1,k,cpt);
       /*fprintf(ficgp,",\"e%s\" every :::%d::%d u 1:($%d-2*$%d) \"\%%lf ",fileres,k1-1,k1-1,k,k+1);          /*fprintf(ficgp,",\"e%s\" every :::%d::%d u 1:($%d-2*$%d) \"\%%lf ",fileres,k1-1,k1-1,k,k+1);
         for (i=1; i<= nlstate*2 ; i ++) fprintf(ficgp,"\%%lf (\%%lf) ");            for (i=1; i<= nlstate*2 ; i ++) fprintf(ficgp,"\%%lf (\%%lf) ");
         fprintf(ficgp,"\" t \"e%d1\" w l",cpt);            fprintf(ficgp,"\" t \"e%d1\" w l",cpt);
         fprintf(ficgp,",\"e%s\" every :::%d::%d u 1:($%d+2*$%d) \"\%%lf ",fileres,k1-1,k1-1,k,k+1);            fprintf(ficgp,",\"e%s\" every :::%d::%d u 1:($%d+2*$%d) \"\%%lf ",fileres,k1-1,k1-1,k,k+1);
         for (i=1; i<= nlstate*2 ; i ++) fprintf(ficgp,"\%%lf (\%%lf) ");            for (i=1; i<= nlstate*2 ; i ++) fprintf(ficgp,"\%%lf (\%%lf) ");
         fprintf(ficgp,"\" t \"e%d1\" w l",cpt);            fprintf(ficgp,"\" t \"e%d1\" w l",cpt);
                                                                   
       */          */
       for (i=1; i< nlstate ; i ++) {          for (i=1; i< nlstate ; i ++) {
         fprintf(ficgp," ,\"%s\" every :::%d::%d u 1:%d t \"e%d%d\" w l",subdirf2(fileresu,"E_"),k1-1,k1-1,k+i,cpt,i+1);            fprintf(ficgp," ,\"%s\" every :::%d::%d u 1:%d t \"e%d%d\" w l",subdirf2(fileresu,"E_"),k1-1,k1-1,k+i,cpt,i+1);
         /*      fprintf(ficgp," ,\"%s\" every :::%d::%d u 1:%d t \"e%d%d\" w l",subdirf2(fileres,"e"),k1-1,k1-1,k+2*i,cpt,i+1);*/            /*    fprintf(ficgp," ,\"%s\" every :::%d::%d u 1:%d t \"e%d%d\" w l",subdirf2(fileres,"e"),k1-1,k1-1,k+2*i,cpt,i+1);*/
                                                                   
       }           } 
       fprintf(ficgp," ,\"%s\" every :::%d::%d u 1:%d t \"e%d.\" w l",subdirf2(fileresu,"E_"),k1-1,k1-1,k+nlstate,cpt);          fprintf(ficgp," ,\"%s\" every :::%d::%d u 1:%d t \"e%d.\" w l",subdirf2(fileresu,"E_"),k1-1,k1-1,k+nlstate,cpt);
     }        }
   }      } /* end nres */
     } /* end kl 3eme */
       
   /* 4eme */    /* 4eme */
   /* Survival functions (period) from state i in state j by initial state i */    /* Survival functions (period) from state i in state j by initial state i */
   for (k1=1; k1<= m ; k1 ++) { /* For each multivariate if any */    for (k1=1; k1<=m; k1++){    /* For each covariate and each value */
       for(nres=1; nres <= nresult; nres++){ /* For each resultline */
     for (cpt=1; cpt<=nlstate ; cpt ++) { /* For each life state */        if(TKresult[nres]!= k1)
       fprintf(ficgp,"\n#\n#\n# Survival functions in state j : 'LIJ_' files, cov=%d state=%d",k1, cpt);  
       for (k=1; k<=cptcoveff; k++){    /* For each covariate and each value */  
         lv= decodtabm(k1,k,cptcoveff); /* Should be the covariate number corresponding to k1 combination */  
         /* decodtabm(1,1,4) = 1 because h=1  k= (1) 1  1  1 */  
         /* decodtabm(1,2,4) = 1 because h=1  k=  1 (1) 1  1 */  
         /* decodtabm(13,3,4)= 2 because h=13 k=  1  1 (2) 2 */  
         vlv= nbcode[Tvaraff[k]][lv];  
         fprintf(ficgp," V%d=%d ",Tvaraff[k],vlv);  
       }  
       fprintf(ficgp,"\n#\n");  
       if(invalidvarcomb[k1]){  
         fprintf(ficgp,"#Combination (%d) ignored because no cases \n",k1);   
         continue;          continue;
       }        for (cpt=1; cpt<=nlstate ; cpt ++) { /* For each life state cpt*/
                                   fprintf(ficgp,"\n#\n#\n# Survival functions in state j : 'LIJ_' files, cov=%d state=%d",k1, cpt);
       fprintf(ficgp,"\nset out \"%s_%d-%d.svg\" \n",subdirf2(optionfilefiname,"LIJ_"),cpt,k1);          for (k=1; k<=cptcoveff; k++){    /* For each covariate and each value */
       fprintf(ficgp,"set xlabel \"Age\" \nset ylabel \"Probability to be alive\" \n\            lv= decodtabm(k1,k,cptcoveff); /* Should be the covariate number corresponding to k1 combination */
 set ter svg size 640, 480\n                                                                                                                                                                                     \            /* decodtabm(1,1,4) = 1 because h=1  k= (1) 1  1  1 */
 unset log y\n                                                                                                                                                                                                                                           \            /* decodtabm(1,2,4) = 1 because h=1  k=  1 (1) 1  1 */
 plot [%.f:%.f]  ", ageminpar, agemaxpar);            /* decodtabm(13,3,4)= 2 because h=13 k=  1  1 (2) 2 */
       k=3;            vlv= nbcode[Tvaraff[k]][lv];
       for (i=1; i<= nlstate ; i ++){            fprintf(ficgp," V%d=%d ",Tvaraff[k],vlv);
         if(i==1){  
           fprintf(ficgp,"\"%s\"",subdirf2(fileresu,"PIJ_"));  
         }else{  
           fprintf(ficgp,", '' ");  
         }          }
         l=(nlstate+ndeath)*(i-1)+1;          for (k4=1; k4<= nsq; k4++){ /* For each selected (single) quantitative value */
         fprintf(ficgp," u ($1==%d ? ($3):1/0):($%d/($%d",k1,k+l+(cpt-1),k+l);            fprintf(ficgp," V%d=%f ",Tvqresult[nres][k4],Tqresult[nres][k4]);
         for (j=2; j<= nlstate+ndeath ; j ++)          }       
           fprintf(ficgp,"+$%d",k+l+j-1);          fprintf(ficgp,"\n#\n");
         fprintf(ficgp,")) t \"l(%d,%d)\" w l",i,cpt);          if(invalidvarcomb[k1]){
       } /* nlstate */            fprintf(ficgp,"#Combination (%d) ignored because no cases \n",k1); 
       fprintf(ficgp,"\nset out\n");            continue;
     } /* end cpt state*/           }
   } /* end covariate */          
                   fprintf(ficgp,"\nset out \"%s_%d-%d.svg\" \n",subdirf2(optionfilefiname,"LIJ_"),cpt,k1);
           fprintf(ficgp,"set xlabel \"Age\" \nset ylabel \"Probability to be alive\" \n\
   set ter svg size 640, 480\nunset log y\nplot [%.f:%.f]  ", ageminpar, agemaxpar);
           k=3;
           for (i=1; i<= nlstate ; i ++){
             if(i==1){
               fprintf(ficgp,"\"%s\"",subdirf2(fileresu,"PIJ_"));
             }else{
               fprintf(ficgp,", '' ");
             }
             l=(nlstate+ndeath)*(i-1)+1;
             fprintf(ficgp," u ($1==%d ? ($3):1/0):($%d/($%d",k1,k+l+(cpt-1),k+l);
             for (j=2; j<= nlstate+ndeath ; j ++)
               fprintf(ficgp,"+$%d",k+l+j-1);
             fprintf(ficgp,")) t \"l(%d,%d)\" w l",i,cpt);
           } /* nlstate */
           fprintf(ficgp,"\nset out\n");
         } /* end cpt state*/ 
       } /* end nres */
     } /* end covariate k1 */  
   
 /* 5eme */  /* 5eme */
   /* Survival functions (period) from state i in state j by final state j */    /* Survival functions (period) from state i in state j by final state j */
   for (k1=1; k1<= m ; k1 ++) { /* For each covariate if any */    for (k1=1; k1<= m ; k1++){ /* For each covariate combination if any */
     for (cpt=1; cpt<=nlstate ; cpt ++) { /* For each inital state  */      for(nres=1; nres <= nresult; nres++){ /* For each resultline */
                                 if(TKresult[nres]!= k1)
       fprintf(ficgp,"\n#\n#\n# Survival functions in state j and all livestates from state i by final state j: 'lij' files, cov=%d state=%d",k1, cpt);  
       for (k=1; k<=cptcoveff; k++){    /* For each covariate and each value */  
         lv= decodtabm(k1,k,cptcoveff); /* Should be the covariate number corresponding to k1 combination */  
         /* decodtabm(1,1,4) = 1 because h=1  k= (1) 1  1  1 */  
         /* decodtabm(1,2,4) = 1 because h=1  k=  1 (1) 1  1 */  
         /* decodtabm(13,3,4)= 2 because h=13 k=  1  1 (2) 2 */  
         vlv= nbcode[Tvaraff[k]][lv];  
         fprintf(ficgp," V%d=%d ",Tvaraff[k],vlv);  
       }  
       fprintf(ficgp,"\n#\n");  
       if(invalidvarcomb[k1]){  
         fprintf(ficgp,"#Combination (%d) ignored because no cases \n",k1);   
         continue;          continue;
       }        for (cpt=1; cpt<=nlstate ; cpt ++) { /* For each inital state  */
           fprintf(ficgp,"\n#\n#\n# Survival functions in state j and all livestates from state i by final state j: 'lij' files, cov=%d state=%d",k1, cpt);
           for (k=1; k<=cptcoveff; k++){    /* For each covariate and each value */
             lv= decodtabm(k1,k,cptcoveff); /* Should be the covariate number corresponding to k1 combination */
             /* decodtabm(1,1,4) = 1 because h=1  k= (1) 1  1  1 */
             /* decodtabm(1,2,4) = 1 because h=1  k=  1 (1) 1  1 */
             /* decodtabm(13,3,4)= 2 because h=13 k=  1  1 (2) 2 */
             vlv= nbcode[Tvaraff[k]][lv];
             fprintf(ficgp," V%d=%d ",Tvaraff[k],vlv);
           }
           for (k4=1; k4<= nsq; k4++){ /* For each selected (single) quantitative value */
             fprintf(ficgp," V%d=%f ",Tvqresult[nres][k4],Tqresult[nres][k4]);
           }       
           fprintf(ficgp,"\n#\n");
           if(invalidvarcomb[k1]){
             fprintf(ficgp,"#Combination (%d) ignored because no cases \n",k1); 
             continue;
           }
               
       fprintf(ficgp,"\nset out \"%s_%d-%d.svg\" \n",subdirf2(optionfilefiname,"LIJT_"),cpt,k1);          fprintf(ficgp,"\nset out \"%s_%d-%d.svg\" \n",subdirf2(optionfilefiname,"LIJT_"),cpt,k1);
       fprintf(ficgp,"set xlabel \"Age\" \nset ylabel \"Probability to be alive\" \n\          fprintf(ficgp,"set xlabel \"Age\" \nset ylabel \"Probability to be alive\" \n\
 set ter svg size 640, 480\n                                             \  set ter svg size 640, 480\nunset log y\nplot [%.f:%.f]  ", ageminpar, agemaxpar);
 unset log y\n                                                           \          k=3;
 plot [%.f:%.f]  ", ageminpar, agemaxpar);          for (j=1; j<= nlstate ; j ++){ /* Lived in state j */
       k=3;            if(j==1)
       for (j=1; j<= nlstate ; j ++){ /* Lived in state j */              fprintf(ficgp,"\"%s\"",subdirf2(fileresu,"PIJ_"));
         if(j==1)            else
           fprintf(ficgp,"\"%s\"",subdirf2(fileresu,"PIJ_"));              fprintf(ficgp,", '' ");
         else            l=(nlstate+ndeath)*(cpt-1) +j;
           fprintf(ficgp,", '' ");            fprintf(ficgp," u (($1==%d && (floor($2)%%5 == 0)) ? ($3):1/0):($%d",k1,k+l);
         l=(nlstate+ndeath)*(cpt-1) +j;            /* for (i=2; i<= nlstate+ndeath ; i ++) */
         fprintf(ficgp," u (($1==%d && (floor($2)%%5 == 0)) ? ($3):1/0):($%d",k1,k+l);            /*   fprintf(ficgp,"+$%d",k+l+i-1); */
         /* for (i=2; i<= nlstate+ndeath ; i ++) */            fprintf(ficgp,") t \"l(%d,%d)\" w l",cpt,j);
         /*   fprintf(ficgp,"+$%d",k+l+i-1); */          } /* nlstate */
         fprintf(ficgp,") t \"l(%d,%d)\" w l",cpt,j);          fprintf(ficgp,", '' ");
       } /* nlstate */          fprintf(ficgp," u (($1==%d && (floor($2)%%5 == 0)) ? ($3):1/0):(",k1);
       fprintf(ficgp,", '' ");          for (j=1; j<= nlstate ; j ++){ /* Lived in state j */
       fprintf(ficgp," u (($1==%d && (floor($2)%%5 == 0)) ? ($3):1/0):(",k1);            l=(nlstate+ndeath)*(cpt-1) +j;
       for (j=1; j<= nlstate ; j ++){ /* Lived in state j */            if(j < nlstate)
         l=(nlstate+ndeath)*(cpt-1) +j;              fprintf(ficgp,"$%d +",k+l);
         if(j < nlstate)            else
           fprintf(ficgp,"$%d +",k+l);              fprintf(ficgp,"$%d) t\"l(%d,.)\" w l",k+l,cpt);
         else          }
           fprintf(ficgp,"$%d) t\"l(%d,.)\" w l",k+l,cpt);          fprintf(ficgp,"\nset out\n");
       }        } /* end cpt state*/ 
       fprintf(ficgp,"\nset out\n");      } /* end covariate */  
     } /* end cpt state*/     } /* end nres */
   } /* end covariate */    
       
 /* 6eme */  /* 6eme */
   /* CV preval stable (period) for each covariate */    /* CV preval stable (period) for each covariate */
   for (k1=1; k1<= m ; k1 ++) { /* For each covariate combination (1 to m=2**k), if any covariate is present */    for (k1=1; k1<= m ; k1 ++) /* For each covariate combination if any */
     for(nres=1; nres <= nresult; nres++){ /* For each resultline */
       if(TKresult[nres]!= k1)
         continue;
     for (cpt=1; cpt<=nlstate ; cpt ++) { /* For each life state */      for (cpt=1; cpt<=nlstate ; cpt ++) { /* For each life state */
               
       fprintf(ficgp,"\n#\n#\n#CV preval stable (period): 'pij' files, covariatecombination#=%d state=%d",k1, cpt);        fprintf(ficgp,"\n#\n#\n#CV preval stable (period): 'pij' files, covariatecombination#=%d state=%d",k1, cpt);
Line 6413  plot [%.f:%.f]  ", ageminpar, agemaxpar) Line 6593  plot [%.f:%.f]  ", ageminpar, agemaxpar)
         vlv= nbcode[Tvaraff[k]][lv];          vlv= nbcode[Tvaraff[k]][lv];
         fprintf(ficgp," V%d=%d ",Tvaraff[k],vlv);          fprintf(ficgp," V%d=%d ",Tvaraff[k],vlv);
       }        }
         for (k4=1; k4<= nsq; k4++){ /* For each selected (single) quantitative value */
           fprintf(ficgp," V%d=%f ",Tvqresult[nres][k4],Tqresult[nres][k4]);
         } 
       fprintf(ficgp,"\n#\n");        fprintf(ficgp,"\n#\n");
       if(invalidvarcomb[k1]){        if(invalidvarcomb[k1]){
         fprintf(ficgp,"#Combination (%d) ignored because no cases \n",k1);           fprintf(ficgp,"#Combination (%d) ignored because no cases \n",k1); 
Line 6421  plot [%.f:%.f]  ", ageminpar, agemaxpar) Line 6604  plot [%.f:%.f]  ", ageminpar, agemaxpar)
               
       fprintf(ficgp,"\nset out \"%s_%d-%d.svg\" \n",subdirf2(optionfilefiname,"P_"),cpt,k1);        fprintf(ficgp,"\nset out \"%s_%d-%d.svg\" \n",subdirf2(optionfilefiname,"P_"),cpt,k1);
       fprintf(ficgp,"set xlabel \"Age\" \nset ylabel \"Probability\" \n\        fprintf(ficgp,"set xlabel \"Age\" \nset ylabel \"Probability\" \n\
 set ter svg size 640, 480\n                                             \  set ter svg size 640, 480\nunset log y\nplot [%.f:%.f]  ", ageminpar, agemaxpar);
 unset log y\n                                                           \  
 plot [%.f:%.f]  ", ageminpar, agemaxpar);  
       k=3; /* Offset */        k=3; /* Offset */
       for (i=1; i<= nlstate ; i ++){        for (i=1; i<= nlstate ; i ++){
         if(i==1)          if(i==1)
Line 6444  plot [%.f:%.f]  ", ageminpar, agemaxpar) Line 6625  plot [%.f:%.f]  ", ageminpar, agemaxpar)
 /* 7eme */  /* 7eme */
   if(backcast == 1){    if(backcast == 1){
     /* CV back preval stable (period) for each covariate */      /* CV back preval stable (period) for each covariate */
     for (k1=1; k1<= m ; k1 ++) { /* For each covariate combination (1 to m=2**k), if any covariate is present */      for (k1=1; k1<= m ; k1 ++) /* For each covariate combination if any */
       for(nres=1; nres <= nresult; nres++){ /* For each resultline */
         if(TKresult[nres]!= k1)
           continue;
       for (cpt=1; cpt<=nlstate ; cpt ++) { /* For each life state */        for (cpt=1; cpt<=nlstate ; cpt ++) { /* For each life state */
         fprintf(ficgp,"\n#\n#\n#CV Back preval stable (period): 'pij' files, covariatecombination#=%d state=%d",k1, cpt);          fprintf(ficgp,"\n#\n#\n#CV Back preval stable (period): 'pij' files, covariatecombination#=%d state=%d",k1, cpt);
         for (k=1; k<=cptcoveff; k++){    /* For each covariate and each value */          for (k=1; k<=cptcoveff; k++){    /* For each covariate and each value */
Line 6455  plot [%.f:%.f]  ", ageminpar, agemaxpar) Line 6639  plot [%.f:%.f]  ", ageminpar, agemaxpar)
           vlv= nbcode[Tvaraff[k]][lv];            vlv= nbcode[Tvaraff[k]][lv];
           fprintf(ficgp," V%d=%d ",Tvaraff[k],vlv);            fprintf(ficgp," V%d=%d ",Tvaraff[k],vlv);
         }          }
           for (k4=1; k4<= nsq; k4++){ /* For each selected (single) quantitative value */
             fprintf(ficgp," V%d=%f ",Tvqresult[nres][k4],Tqresult[nres][k4]);
           }       
         fprintf(ficgp,"\n#\n");          fprintf(ficgp,"\n#\n");
         if(invalidvarcomb[k1]){          if(invalidvarcomb[k1]){
           fprintf(ficgp,"#Combination (%d) ignored because no cases \n",k1);             fprintf(ficgp,"#Combination (%d) ignored because no cases \n",k1); 
Line 6463  plot [%.f:%.f]  ", ageminpar, agemaxpar) Line 6650  plot [%.f:%.f]  ", ageminpar, agemaxpar)
                   
         fprintf(ficgp,"\nset out \"%s_%d-%d.svg\" \n",subdirf2(optionfilefiname,"PB_"),cpt,k1);          fprintf(ficgp,"\nset out \"%s_%d-%d.svg\" \n",subdirf2(optionfilefiname,"PB_"),cpt,k1);
         fprintf(ficgp,"set xlabel \"Age\" \nset ylabel \"Probability\" \n\          fprintf(ficgp,"set xlabel \"Age\" \nset ylabel \"Probability\" \n\
 set ter svg size 640, 480\n                                             \  set ter svg size 640, 480\nunset log y\nplot [%.f:%.f]  ", ageminpar, agemaxpar);
 unset log y\n                                                           \  
 plot [%.f:%.f]  ", ageminpar, agemaxpar);  
         k=3; /* Offset */          k=3; /* Offset */
         for (i=1; i<= nlstate ; i ++){          for (i=1; i<= nlstate ; i ++){
           if(i==1)            if(i==1)
Line 6491  plot [%.f:%.f]  ", ageminpar, agemaxpar) Line 6676  plot [%.f:%.f]  ", ageminpar, agemaxpar)
   if(prevfcast==1){    if(prevfcast==1){
     /* Projection from cross-sectional to stable (period) for each covariate */      /* Projection from cross-sectional to stable (period) for each covariate */
           
     for (k1=1; k1<= m ; k1 ++) { /* For each covariate combination (1 to m=2**k), if any covariate is present */      for (k1=1; k1<= m ; k1 ++) /* For each covariate combination if any */
       for(nres=1; nres <= nresult; nres++){ /* For each resultline */
         if(TKresult[nres]!= k1)
           continue;
       for (cpt=1; cpt<=nlstate ; cpt ++) { /* For each life state */        for (cpt=1; cpt<=nlstate ; cpt ++) { /* For each life state */
         fprintf(ficgp,"\n#\n#\n#Projection of prevalence to stable (period): 'PROJ_' files, covariatecombination#=%d state=%d",k1, cpt);          fprintf(ficgp,"\n#\n#\n#Projection of prevalence to stable (period): 'PROJ_' files, covariatecombination#=%d state=%d",k1, cpt);
         for (k=1; k<=cptcoveff; k++){    /* For each correspondig covariate value  */          for (k=1; k<=cptcoveff; k++){    /* For each correspondig covariate value  */
Line 6502  plot [%.f:%.f]  ", ageminpar, agemaxpar) Line 6690  plot [%.f:%.f]  ", ageminpar, agemaxpar)
           vlv= nbcode[Tvaraff[k]][lv];            vlv= nbcode[Tvaraff[k]][lv];
           fprintf(ficgp," V%d=%d ",Tvaraff[k],vlv);            fprintf(ficgp," V%d=%d ",Tvaraff[k],vlv);
         }          }
           for (k4=1; k4<= nsq; k4++){ /* For each selected (single) quantitative value */
             fprintf(ficgp," V%d=%f ",Tvqresult[nres][k4],Tqresult[nres][k4]);
           }       
         fprintf(ficgp,"\n#\n");          fprintf(ficgp,"\n#\n");
         if(invalidvarcomb[k1]){          if(invalidvarcomb[k1]){
           fprintf(ficgp,"#Combination (%d) ignored because no cases \n",k1);             fprintf(ficgp,"#Combination (%d) ignored because no cases \n",k1); 
Line 6511  plot [%.f:%.f]  ", ageminpar, agemaxpar) Line 6702  plot [%.f:%.f]  ", ageminpar, agemaxpar)
         fprintf(ficgp,"# hpijx=probability over h years, hp.jx is weighted by observed prev\n ");          fprintf(ficgp,"# hpijx=probability over h years, hp.jx is weighted by observed prev\n ");
         fprintf(ficgp,"\nset out \"%s_%d-%d.svg\" \n",subdirf2(optionfilefiname,"PROJ_"),cpt,k1);          fprintf(ficgp,"\nset out \"%s_%d-%d.svg\" \n",subdirf2(optionfilefiname,"PROJ_"),cpt,k1);
         fprintf(ficgp,"set xlabel \"Age\" \nset ylabel \"Prevalence\" \n\          fprintf(ficgp,"set xlabel \"Age\" \nset ylabel \"Prevalence\" \n\
 set ter svg size 640, 480\n                                             \  set ter svg size 640, 480\nunset log y\nplot [%.f:%.f]  ", ageminpar, agemaxpar);
 unset log y\n                                                           \  
 plot [%.f:%.f]  ", ageminpar, agemaxpar);  
         for (i=1; i<= nlstate+1 ; i ++){  /* nlstate +1 p11 p21 p.1 */          for (i=1; i<= nlstate+1 ; i ++){  /* nlstate +1 p11 p21 p.1 */
           /*#  V1  = 1  V2 =  0 yearproj age p11 p21 p.1 p12 p22 p.2 p13 p23 p.3*/            /*#  V1  = 1  V2 =  0 yearproj age p11 p21 p.1 p12 p22 p.2 p13 p23 p.3*/
           /*#   1    2   3    4    5      6  7   8   9   10   11 12  13   14  15 */               /*#   1    2   3    4    5      6  7   8   9   10   11 12  13   14  15 */   
Line 6580  plot [%.f:%.f]  ", ageminpar, agemaxpar) Line 6769  plot [%.f:%.f]  ", ageminpar, agemaxpar)
   } /* End if prevfcast */    } /* End if prevfcast */
       
       
   /* proba elementaires */    /* 9eme writing MLE parameters */
   fprintf(ficgp,"\n##############\n#MLE estimated parameters\n#############\n");    fprintf(ficgp,"\n##############\n#9eme MLE estimated parameters\n#############\n");
   for(i=1,jk=1; i <=nlstate; i++){    for(i=1,jk=1; i <=nlstate; i++){
     fprintf(ficgp,"# initial state %d\n",i);      fprintf(ficgp,"# initial state %d\n",i);
     for(k=1; k <=(nlstate+ndeath); k++){      for(k=1; k <=(nlstate+ndeath); k++){
Line 6598  plot [%.f:%.f]  ", ageminpar, agemaxpar) Line 6787  plot [%.f:%.f]  ", ageminpar, agemaxpar)
   fprintf(ficgp,"##############\n#\n");    fprintf(ficgp,"##############\n#\n");
       
   /*goto avoid;*/    /*goto avoid;*/
   fprintf(ficgp,"\n##############\n#Graphics of probabilities or incidences\n#############\n");    /* 10eme Graphics of probabilities or incidences using written MLE parameters */
     fprintf(ficgp,"\n##############\n#10eme Graphics of probabilities or incidences\n#############\n");
   fprintf(ficgp,"# logi(p12/p11)=a12+b12*age+c12age*age+d12*V1+e12*V1*age\n");    fprintf(ficgp,"# logi(p12/p11)=a12+b12*age+c12age*age+d12*V1+e12*V1*age\n");
   fprintf(ficgp,"# logi(p12/p11)=p1 +p2*age +p3*age*age+ p4*V1+ p5*V1*age\n");    fprintf(ficgp,"# logi(p12/p11)=p1 +p2*age +p3*age*age+ p4*V1+ p5*V1*age\n");
   fprintf(ficgp,"# logi(p13/p11)=a13+b13*age+c13age*age+d13*V1+e13*V1*age\n");    fprintf(ficgp,"# logi(p13/p11)=a13+b13*age+c13age*age+d13*V1+e13*V1*age\n");
Line 6613  plot [%.f:%.f]  ", ageminpar, agemaxpar) Line 6803  plot [%.f:%.f]  ", ageminpar, agemaxpar)
   fprintf(ficgp,"#       +exp(a14+b14*age+c14age*age+d14*V1+e14*V1*age)+...)\n");    fprintf(ficgp,"#       +exp(a14+b14*age+c14age*age+d14*V1+e14*V1*age)+...)\n");
   fprintf(ficgp,"#\n");    fprintf(ficgp,"#\n");
   for(ng=1; ng<=3;ng++){ /* Number of graphics: first is logit, 2nd is probabilities, third is incidences per year*/    for(ng=1; ng<=3;ng++){ /* Number of graphics: first is logit, 2nd is probabilities, third is incidences per year*/
     fprintf(ficgp,"# ng=%d\n",ng);      fprintf(ficgp,"#Number of graphics: first is logit, 2nd is probabilities, third is incidences per year\n");
     fprintf(ficgp,"#   jk=1 to 2^%d=%d\n",cptcoveff,m);      fprintf(ficgp,"#model=%s \n",model);
     for(jk=1; jk <=m; jk++) {      fprintf(ficgp,"# Type of graphic ng=%d\n",ng);
       fprintf(ficgp,"#    jk=%d\n",jk);      fprintf(ficgp,"#   jk=1 to 2^%d=%d\n",cptcoveff,m);/* to be checked */
       for(jk=1; jk <=m; jk++)  /* For each combination of covariate */
       for(nres=1; nres <= nresult; nres++){ /* For each resultline */
         if(TKresult[nres]!= jk)
           continue;
         fprintf(ficgp,"# Combination of dummy  jk=%d and ",jk);
         for (k4=1; k4<= nsq; k4++){ /* For each selected (single) quantitative value */
           fprintf(ficgp," V%d=%f ",Tvqresult[nres][k4],Tqresult[nres][k4]);
         } 
         fprintf(ficgp,"\n#\n");
       fprintf(ficgp,"\nset out \"%s_%d-%d.svg\" ",subdirf2(optionfilefiname,"PE_"),jk,ng);        fprintf(ficgp,"\nset out \"%s_%d-%d.svg\" ",subdirf2(optionfilefiname,"PE_"),jk,ng);
       fprintf(ficgp,"\nset ter svg size 640, 480 ");        fprintf(ficgp,"\nset ter svg size 640, 480 ");
       if (ng==1){        if (ng==1){
Line 6657  plot [%.f:%.f]  ", ageminpar, agemaxpar) Line 6856  plot [%.f:%.f]  ", ageminpar, agemaxpar)
               break;                break;
             }              }
             ij=1;/* To be checked else nbcode[0][0] wrong */              ij=1;/* To be checked else nbcode[0][0] wrong */
             for(j=3; j <=ncovmodel-nagesqr; j++) {              ijp=1; /* product no age */
               /* for(j=3; j <=ncovmodel-nagesqr; j++) { */
               for(j=1; j <=cptcovt; j++) { /* For each covariate of the simplified model */
               /* printf("Tage[%d]=%d, j=%d\n", ij, Tage[ij], j); */                /* printf("Tage[%d]=%d, j=%d\n", ij, Tage[ij], j); */
               if(ij <=cptcovage) { /* Bug valgrind */                if(j==Tage[ij]) { /* Product by age */
                 if((j-2)==Tage[ij]) { /* Bug valgrind */                  if(ij <=cptcovage) { /* V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1, 2 V5 and V1 */
                   fprintf(ficgp,"+p%d*%d*x",i+j+nagesqr-1,nbcode[Tvar[j-2]][codtabm(jk,j-2)]);                    if(DummyV[j]==0){
                   /* fprintf(ficgp,"+p%d*%d*x",i+j+nagesqr-1,nbcode[Tvar[j-2]][codtabm(jk,Tvar[j-2])]); */                      fprintf(ficgp,"+p%d*%d*x",i+j+2+nagesqr-1,Tinvresult[nres][Tvar[j]]);;
                     }else{ /* quantitative */
                       fprintf(ficgp,"+p%d*%f*x",i+j+2+nagesqr-1,Tqinvresult[nres][Tvar[j]]); /* Tqinvresult in decoderesult */
                       /* fprintf(ficgp,"+p%d*%d*x",i+j+nagesqr-1,nbcode[Tvar[j-2]][codtabm(jk,Tvar[j-2])]); */
                     }
                   ij++;                    ij++;
                 }                  }
               }                }else if(j==Tprod[ijp]) { /* */ 
               else                  /* printf("Tprod[%d]=%d, j=%d\n", ij, Tprod[ijp], j); */
                 fprintf(ficgp,"+p%d*%d",i+j+nagesqr-1,nbcode[Tvar[j-2]][codtabm(jk,j-2)]); /* Valgrind bug nbcode */                  if(ijp <=cptcovprod) { /* Product */
             }                    if(DummyV[Tvard[ijp][1]]==0){/* Vn is dummy */
                       if(DummyV[Tvard[ijp][2]]==0){/* Vn and Vm are dummy */
                         /* fprintf(ficgp,"+p%d*%d*%d",i+j+2+nagesqr-1,nbcode[Tvard[ijp][1]][codtabm(jk,j)],nbcode[Tvard[ijp][2]][codtabm(jk,j)]); */
                         fprintf(ficgp,"+p%d*%d*%d",i+j+2+nagesqr-1,Tinvresult[nres][Tvard[ijp][1]],Tinvresult[nres][Tvard[ijp][2]]);
                       }else{ /* Vn is dummy and Vm is quanti */
                         /* fprintf(ficgp,"+p%d*%d*%f",i+j+2+nagesqr-1,nbcode[Tvard[ijp][1]][codtabm(jk,j)],Tqinvresult[nres][Tvard[ijp][2]]); */
                         fprintf(ficgp,"+p%d*%d*%f",i+j+2+nagesqr-1,Tinvresult[nres][Tvard[ijp][1]],Tqinvresult[nres][Tvard[ijp][2]]);
                       }
                     }else{ /* Vn*Vm Vn is quanti */
                       if(DummyV[Tvard[ijp][2]]==0){
                         fprintf(ficgp,"+p%d*%d*%f",i+j+2+nagesqr-1,Tinvresult[nres][Tvard[ijp][2]],Tqinvresult[nres][Tvard[ijp][1]]);
                       }else{ /* Both quanti */
                         fprintf(ficgp,"+p%d*%f*%f",i+j+2+nagesqr-1,Tqinvresult[nres][Tvard[ijp][1]],Tqinvresult[nres][Tvard[ijp][2]]);
                       }
                     }
                     ijp++;
                   }
                 } else{  /* simple covariate */
                   /* fprintf(ficgp,"+p%d*%d",i+j+2+nagesqr-1,nbcode[Tvar[j]][codtabm(jk,j)]); /\* Valgrind bug nbcode *\/ */
                   if(Dummy[j]==0){
                     fprintf(ficgp,"+p%d*%d",i+j+2+nagesqr-1,Tinvresult[nres][Tvar[j]]); /*  */
                   }else{ /* quantitative */
                     fprintf(ficgp,"+p%d*%f",i+j+2+nagesqr-1,Tqinvresult[nres][Tvar[j]]); /* */
                     /* fprintf(ficgp,"+p%d*%d*x",i+j+nagesqr-1,nbcode[Tvar[j-2]][codtabm(jk,Tvar[j-2])]); */
                   }
                 } /* end simple */
               } /* end j */
           }else{            }else{
             i=i-ncovmodel;              i=i-ncovmodel;
             if(ng !=1 ) /* For logit formula of log p11 is more difficult to get */              if(ng !=1 ) /* For logit formula of log p11 is more difficult to get */
Line 6686  plot [%.f:%.f]  ", ageminpar, agemaxpar) Line 6917  plot [%.f:%.f]  ", ageminpar, agemaxpar)
                                 
               ij=1;                ij=1;
               for(j=3; j <=ncovmodel-nagesqr; j++){                for(j=3; j <=ncovmodel-nagesqr; j++){
                 if(ij <=cptcovage) { /* Bug valgrind */                  if((j-2)==Tage[ij]) { /* Bug valgrind */
                   if((j-2)==Tage[ij]) { /* Bug valgrind */                    if(ij <=cptcovage) { /* Bug valgrind */
                     fprintf(ficgp,"+p%d*%d*x",k3+(k1-1)*ncovmodel+1+j-2+nagesqr,nbcode[Tvar[j-2]][codtabm(jk,j-2)]);                      fprintf(ficgp,"+p%d*%d*x",k3+(k1-1)*ncovmodel+1+j-2+nagesqr,nbcode[Tvar[j-2]][codtabm(jk,j-2)]);
                     /* fprintf(ficgp,"+p%d*%d*x",k3+(k1-1)*ncovmodel+1+j-2+nagesqr,nbcode[Tvar[j-2]][codtabm(jk,Tvar[j-2])]); */                      /* fprintf(ficgp,"+p%d*%d*x",k3+(k1-1)*ncovmodel+1+j-2+nagesqr,nbcode[Tvar[j-2]][codtabm(jk,Tvar[j-2])]); */
                     ij++;                      ij++;
Line 6839  plot [%.f:%.f]  ", ageminpar, agemaxpar) Line 7070  plot [%.f:%.f]  ", ageminpar, agemaxpar)
      } /* end bad */       } /* end bad */
                                   
      for (age=bage; age<=fage; age++){       for (age=bage; age<=fage; age++){
        printf("%d %d ", cptcod, (int)age);         /* printf("%d %d ", cptcod, (int)age); */
        sumnewp[cptcod]=0.;         sumnewp[cptcod]=0.;
        sumnewm[cptcod]=0.;         sumnewm[cptcod]=0.;
        for (i=1; i<=nlstate;i++){         for (i=1; i<=nlstate;i++){
Line 6878  plot [%.f:%.f]  ", ageminpar, agemaxpar) Line 7109  plot [%.f:%.f]  ", ageminpar, agemaxpar)
     
   
 /************** Forecasting ******************/  /************** Forecasting ******************/
 void prevforecast(char fileres[], double anproj1, double mproj1, double jproj1, double ageminpar, double agemax, double dateprev1, double dateprev2, int mobilav, double bage, double fage, int firstpass, int lastpass, double anproj2, double p[], int cptcoveff){   void prevforecast(char fileres[], double anproj1, double mproj1, double jproj1, double ageminpar, double agemax, double dateprev1, double dateprev2, int mobilav, double bage, double fage, int firstpass, int lastpass, double anproj2, double p[], int cptcoveff){
   /* proj1, year, month, day of starting projection     /* proj1, year, month, day of starting projection 
      agemin, agemax range of age       agemin, agemax range of age
      dateprev1 dateprev2 range of dates during which prevalence is computed       dateprev1 dateprev2 range of dates during which prevalence is computed
      anproj2 year of en of projection (same day and month as proj1).       anproj2 year of en of projection (same day and month as proj1).
   */    */
   int yearp, stepsize, hstepm, nhstepm, j, k, cptcod, i, h, i1;     int yearp, stepsize, hstepm, nhstepm, j, k, cptcod, i, h, i1, k4, nres=0;
   double agec; /* generic age */    double agec; /* generic age */
   double agelim, ppij, yp,yp1,yp2,jprojmean,mprojmean,anprojmean;    double agelim, ppij, yp,yp1,yp2,jprojmean,mprojmean,anprojmean;
   double *popeffectif,*popcount;    double *popeffectif,*popcount;
Line 6906  void prevforecast(char fileres[], double Line 7137  void prevforecast(char fileres[], double
     printf("Problem with forecast resultfile: %s\n", fileresf);      printf("Problem with forecast resultfile: %s\n", fileresf);
     fprintf(ficlog,"Problem with forecast resultfile: %s\n", fileresf);      fprintf(ficlog,"Problem with forecast resultfile: %s\n", fileresf);
   }    }
   printf("Computing forecasting: result on file '%s', please wait... \n", fileresf);    printf("\nComputing forecasting: result on file '%s', please wait... \n", fileresf);
   fprintf(ficlog,"Computing forecasting: result on file '%s', please wait... \n", fileresf);    fprintf(ficlog,"\nComputing forecasting: result on file '%s', please wait... \n", fileresf);
   
   if (cptcoveff==0) ncodemax[cptcoveff]=1;    if (cptcoveff==0) ncodemax[cptcoveff]=1;
   
Line 6938  void prevforecast(char fileres[], double Line 7169  void prevforecast(char fileres[], double
   fprintf(ficresf,"#****** Routine prevforecast **\n");    fprintf(ficresf,"#****** Routine prevforecast **\n");
       
 /*            if (h==(int)(YEARM*yearp)){ */  /*            if (h==(int)(YEARM*yearp)){ */
   for(k=1;k<=i1;k++){    for(nres=1; nres <= nresult; nres++) /* For each resultline */
     for(k=1; k<=i1;k++){
       if(TKresult[nres]!= k)
         continue;
     if(invalidvarcomb[k]){      if(invalidvarcomb[k]){
       printf("\nCombination (%d) projection ignored because no cases \n",k);         printf("\nCombination (%d) projection ignored because no cases \n",k); 
       continue;        continue;
Line 6947  void prevforecast(char fileres[], double Line 7181  void prevforecast(char fileres[], double
     for(j=1;j<=cptcoveff;j++) {      for(j=1;j<=cptcoveff;j++) {
       fprintf(ficresf," V%d (=) %d",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]);        fprintf(ficresf," V%d (=) %d",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]);
     }      }
       for (k4=1; k4<= nsq; k4++){ /* For each selected (single) quantitative value */
         fprintf(ficresf," V%d=%f ",Tvqresult[nres][k4],Tqresult[nres][k4]);
       }
     fprintf(ficresf," yearproj age");      fprintf(ficresf," yearproj age");
     for(j=1; j<=nlstate+ndeath;j++){       for(j=1; j<=nlstate+ndeath;j++){ 
       for(i=1; i<=nlstate;i++)                for(i=1; i<=nlstate;i++)        
Line 6961  void prevforecast(char fileres[], double Line 7198  void prevforecast(char fileres[], double
         nhstepm = nhstepm/hstepm;           nhstepm = nhstepm/hstepm; 
         p3mat=ma3x(1,nlstate+ndeath,1, nlstate+ndeath, 0,nhstepm);          p3mat=ma3x(1,nlstate+ndeath,1, nlstate+ndeath, 0,nhstepm);
         oldm=oldms;savm=savms;          oldm=oldms;savm=savms;
         hpxij(p3mat,nhstepm,agec,hstepm,p,nlstate,stepm,oldm,savm, k);          hpxij(p3mat,nhstepm,agec,hstepm,p,nlstate,stepm,oldm,savm, k,nres);
                   
         for (h=0; h<=nhstepm; h++){          for (h=0; h<=nhstepm; h++){
           if (h*hstepm/YEARM*stepm ==yearp) {            if (h*hstepm/YEARM*stepm ==yearp) {
Line 7595  int readdata(char datafile[], int firsto Line 7832  int readdata(char datafile[], int firsto
         if(strb[0]=='.') { /* Missing value */          if(strb[0]=='.') { /* Missing value */
           lval=-1;            lval=-1;
           cotqvar[j][iv][i]=-1; /* 0.0/0.0 */            cotqvar[j][iv][i]=-1; /* 0.0/0.0 */
             cotvar[j][ntv+iv][i]=-1; /* For performance reasons */
           if(isalpha(strb[1])) { /* .m or .d Really Missing value */            if(isalpha(strb[1])) { /* .m or .d Really Missing value */
             printf("Error reading data around '%s' at line number %d for individual %d, '%s'\nShould be the %d th quantitative value out of %d measured at wave %d. If missing, you should remove this individual or impute a value.  Exiting.\n", strb, linei,i,line,iv, nqtv, j);              printf("Error reading data around '%s' at line number %d for individual %d, '%s'\nShould be the %d th quantitative value out of %d measured at wave %d. If missing, you should remove this individual or impute a value.  Exiting.\n", strb, linei,i,line,iv, nqtv, j);
             fprintf(ficlog,"Error reading data around '%s' at line number %d for individual %d, '%s'\nShould be the %d th quantitative value out of %d measured at wave %d. If missing, you should remove this individual or impute a value.  Exiting.\n", strb, linei,i,line,iv, nqtv, j);fflush(ficlog);              fprintf(ficlog,"Error reading data around '%s' at line number %d for individual %d, '%s'\nShould be the %d th quantitative value out of %d measured at wave %d. If missing, you should remove this individual or impute a value.  Exiting.\n", strb, linei,i,line,iv, nqtv, j);fflush(ficlog);
Line 7614  int readdata(char datafile[], int firsto Line 7852  int readdata(char datafile[], int firsto
             return 1;              return 1;
           }            }
           cotqvar[j][iv][i]=dval;             cotqvar[j][iv][i]=dval; 
             cotvar[j][ntv+iv][i]=dval; 
         }          }
         strcpy(line,stra);          strcpy(line,stra);
       }/* end loop ntqv */        }/* end loop ntqv */
Line 7827  int readdata(char datafile[], int firsto Line 8066  int readdata(char datafile[], int firsto
   return (1);    return (1);
 }  }
   
 void removespace(char **stri){/*, char stro[]) {*/  void removefirstspace(char **stri){/*, char stro[]) {*/
   char *p1 = *stri, *p2 = *stri;    char *p1 = *stri, *p2 = *stri;
   do    while (*p2 == ' ')
     while (*p2 == ' ')      p2++; 
       p2++;    /* while ((*p1++ = *p2++) !=0) */
   while (*p1++ == *p2++);    /*   ; */
   *stri=p1;     /* do */
     /*   while (*p2 == ' ') */
     /*     p2++; */
     /* while (*p1++ == *p2++); */
     *stri=p2; 
 }  }
   
 int decoderesult ( char resultline[])  int decoderesult ( char resultline[], int nres)
 /**< This routine decode one result line and returns the combination # of dummy covariates only **/  /**< This routine decode one result line and returns the combination # of dummy covariates only **/
 {  {
   int j=0, k=0;    int j=0, k=0, k1=0, k2=0, k3=0, k4=0, match=0, k2q=0, k3q=0, k4q=0;
   char resultsav[MAXLINE];    char resultsav[MAXLINE];
     int resultmodel[MAXLINE];
     int modelresult[MAXLINE];
   char stra[80], strb[80], strc[80], strd[80],stre[80];    char stra[80], strb[80], strc[80], strd[80],stre[80];
   
   removespace(&resultline);    removefirstspace(&resultline);
   printf("decoderesult=%s\n",resultline);    printf("decoderesult:%s\n",resultline);
   
   if (strstr(resultline,"v") !=0){    if (strstr(resultline,"v") !=0){
     printf("Error. 'v' must be in upper case 'V' result: %s ",resultline);      printf("Error. 'v' must be in upper case 'V' result: %s ",resultline);
Line 7855  int decoderesult ( char resultline[]) Line 8100  int decoderesult ( char resultline[])
   if (strlen(resultsav) >1){    if (strlen(resultsav) >1){
     j=nbocc(resultsav,'='); /**< j=Number of covariate values'=' */      j=nbocc(resultsav,'='); /**< j=Number of covariate values'=' */
   }    }
     if( j != cptcovs ){ /* Be careful if a variable is in a product but not single */
   for(k=1; k<=j;k++){ /* Loop on total covariates of the model */      printf("ERROR: the number of variable in the resultline, %d, differs from the number of variable used in the model line, %d.\n",j, cptcovs);
     cutl(stra,strb,resultsav,' '); /* keeps in strb after the first ' '       fprintf(ficlog,"ERROR: the number of variable in the resultline, %d, differs from the number of variable used in the model line, %d.\n",j, cptcovs);
                                      resultsav= V4=1 V5=25.1 V3=0 strb=V3=0 stra= V4=1 V5=25.1 */    }
     cutl(strc,strd,strb,'=');  /* strb:V4=1 strc=1 strd=V4 */    for(k=1; k<=j;k++){ /* Loop on any covariate of the result line */
       if(nbocc(resultsav,'=') >1){
          cutl(stra,strb,resultsav,' '); /* keeps in strb after the first ' ' 
                                         resultsav= V4=1 V5=25.1 V3=0 strb=V3=0 stra= V4=1 V5=25.1 */
          cutl(strc,strd,strb,'=');  /* strb:V4=1 strc=1 strd=V4 */
       }else
         cutl(strc,strd,resultsav,'=');
     Tvalsel[k]=atof(strc); /* 1 */      Tvalsel[k]=atof(strc); /* 1 */
       
     cutl(strc,stre,strd,'V'); /* strd='V4' strc=4 stre='V' */;      cutl(strc,stre,strd,'V'); /* strd='V4' strc=4 stre='V' */;
     Tvarsel[k]=atoi(strc);      Tvarsel[k]=atoi(strc);
     /* Typevarsel[k]=1;  /\* 1 for age product *\/ */      /* Typevarsel[k]=1;  /\* 1 for age product *\/ */
Line 7869  int decoderesult ( char resultline[]) Line 8120  int decoderesult ( char resultline[])
     if (nbocc(stra,'=') >0)      if (nbocc(stra,'=') >0)
       strcpy(resultsav,stra); /* and analyzes it */        strcpy(resultsav,stra); /* and analyzes it */
   }    }
     /* Checking for missing or useless values in comparison of current model needs */
     for(k1=1; k1<= cptcovt ;k1++){ /* model line V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1 */
       if(Typevar[k1]==0){ /* Single covariate in model */
         match=0;
         for(k2=1; k2 <=j;k2++){/* result line V4=1 V5=24.1 V3=1  V2=8 V1=0 */
           if(Tvar[k1]==Tvarsel[k2]) {/* Tvar[1]=5 == Tvarsel[2]=5   */
             modelresult[k2]=k1;/* modelresult[2]=1 modelresult[1]=2  modelresult[3]=3  modelresult[6]=4 modelresult[9]=5 */
             match=1;
             break;
           }
         }
         if(match == 0){
           printf("Error in result line: %d value missing; result: %s, model=%s\n",k1, resultline, model);
         }
       }
     }
     /* Checking for missing or useless values in comparison of current model needs */
     for(k2=1; k2 <=j;k2++){ /* result line V4=1 V5=24.1 V3=1  V2=8 V1=0 */
       match=0;
       for(k1=1; k1<= cptcovt ;k1++){ /* model line V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1 */
         if(Typevar[k1]==0){ /* Single */
           if(Tvar[k1]==Tvarsel[k2]) { /* Tvar[2]=4 == Tvarsel[1]=4   */
             resultmodel[k1]=k2;  /* resultmodel[2]=1 resultmodel[1]=2  resultmodel[3]=3  resultmodel[6]=4 resultmodel[9]=5 */
             ++match;
           }
         }
       }
       if(match == 0){
         printf("Error in result line: %d value missing; result: %s, model=%s\n",k1, resultline, model);
       }else if(match > 1){
         printf("Error in result line: %d doubled; result: %s, model=%s\n",k2, resultline, model);
       }
     }
         
     /* We need to deduce which combination number is chosen and save quantitative values */
     /* model line V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1 */
     /* result line V4=1 V5=25.1 V3=0  V2=8 V1=1 */
     /* should give a combination of dummy V4=1, V3=0, V1=1 => V4*2**(0) + V3*2**(1) + V1*2**(2) = 5 + (1offset) = 6*/
     /* result line V4=1 V5=24.1 V3=1  V2=8 V1=0 */
     /* should give a combination of dummy V4=1, V3=1, V1=0 => V4*2**(0) + V3*2**(1) + V1*2**(2) = 3 + (1offset) = 4*/
     /*    1 0 0 0 */
     /*    2 1 0 0 */
     /*    3 0 1 0 */ 
     /*    4 1 1 0 */ /* V4=1, V3=1, V1=0 */
     /*    5 0 0 1 */
     /*    6 1 0 1 */ /* V4=1, V3=0, V1=1 */
     /*    7 0 1 1 */
     /*    8 1 1 1 */
     /* V(Tvresult)=Tresult V4=1 V3=0 V1=1 Tresult[nres=1][2]=0 */
     /* V(Tvqresult)=Tqresult V5=25.1 V2=8 Tqresult[nres=1][1]=25.1 */
     /* V5*age V5 known which value for nres?  */
     /* Tqinvresult[2]=8 Tqinvresult[1]=25.1  */
     for(k1=1, k=0, k4=0, k4q=0; k1 <=cptcovt;k1++){ /* model line */
       if( Dummy[k1]==0 && Typevar[k1]==0 ){ /* Single dummy */
         k3= resultmodel[k1]; /* resultmodel[2(V4)] = 1=k3 */
         k2=(int)Tvarsel[k3]; /*  Tvarsel[resultmodel[2]]= Tvarsel[1] = 4=k2 */
         k+=Tvalsel[k3]*pow(2,k4);  /*  Tvalsel[1]=1  */
         Tresult[nres][k4+1]=Tvalsel[k3];/* Tresult[nres][1]=1(V4=1)  Tresult[nres][2]=0(V3=0) */
         Tvresult[nres][k4+1]=(int)Tvarsel[k3];/* Tvresult[nres][1]=4 Tvresult[nres][3]=1 */
         Tinvresult[nres][(int)Tvarsel[k3]]=Tvalsel[k3]; /* Tinvresult[nres][4]=1 */
         printf("Decoderesult Dummy k=%d, V(k2=V%d)= Tvalsel[%d]=%d, 2**(%d)\n",k, k2, k3, (int)Tvalsel[k3], k4);
         k4++;;
       }  else if( Dummy[k1]==1 && Typevar[k1]==0 ){ /* Single quantitative */
         k3q= resultmodel[k1]; /* resultmodel[2] = 1=k3 */
         k2q=(int)Tvarsel[k3q]; /*  Tvarsel[resultmodel[2]]= Tvarsel[1] = 4=k2 */
         Tqresult[nres][k4q+1]=Tvalsel[k3q]; /* Tqresult[nres][1]=25.1 */
         Tvqresult[nres][k4q+1]=(int)Tvarsel[k3q]; /* Tvqresult[nres][1]=5 */
         Tqinvresult[nres][(int)Tvarsel[k3q]]=Tvalsel[k3q]; /* Tqinvresult[nres][5]=25.1 */
         printf("Decoderesult Quantitative nres=%d, V(k2q=V%d)= Tvalsel[%d]=%d, Tvarsel[%d]=%f\n",nres, k2q, k3q, Tvarsel[k3q], k3q, Tvalsel[k3q]);
         k4q++;;
       }
     }
     
     TKresult[nres]=++k; /* Combination for the nresult and the model */
   return (0);    return (0);
 }  }
 int selected( int kvar){ /* Selected combination of covariates */  
   if(Tvarsel[kvar])  
     return (0);  
   else  
     return(1);  
 }  
 int decodemodel( char model[], int lastobs)  int decodemodel( char model[], int lastobs)
  /**< This routine decodes the model and returns:   /**< This routine decodes the model and returns:
         * Model  V1+V2+V3+V8+V7*V8+V5*V6+V8*age+V3*age+age*age          * Model  V1+V2+V3+V8+V7*V8+V5*V6+V8*age+V3*age+age*age
Line 7893  int decodemodel( char model[], int lasto Line 8213  int decodemodel( char model[], int lasto
         * - Tvard[k]  p Tvard[1][1]@4 {7, 8, 5, 6} for V7*V8 and V5*V6 .          * - Tvard[k]  p Tvard[1][1]@4 {7, 8, 5, 6} for V7*V8 and V5*V6 .
         */          */
 {  {
   int i, j, k, ks;    int i, j, k, ks, v;
   int  j1, k1, k2, k3, k4;    int  j1, k1, k2, k3, k4;
   char modelsav[80];    char modelsav[80];
   char stra[80], strb[80], strc[80], strd[80],stre[80];    char stra[80], strb[80], strc[80], strd[80],stre[80];
Line 7916  int decodemodel( char model[], int lasto Line 8236  int decodemodel( char model[], int lasto
     if ((strpt=strstr(model,"age*age")) !=0){      if ((strpt=strstr(model,"age*age")) !=0){
       printf(" strpt=%s, model=%s\n",strpt, model);        printf(" strpt=%s, model=%s\n",strpt, model);
       if(strpt != model){        if(strpt != model){
                                 printf("Error in model: 'model=%s'; 'age*age' should in first place before other covariates\n \          printf("Error in model: 'model=%s'; 'age*age' should in first place before other covariates\n \
  'model=1+age+age*age+V1.' or 'model=1+age+age*age+V1+V1*age.', please swap as well as \n \   'model=1+age+age*age+V1.' or 'model=1+age+age*age+V1+V1*age.', please swap as well as \n \
  corresponding column of parameters.\n",model);   corresponding column of parameters.\n",model);
                                 fprintf(ficlog,"Error in model: 'model=%s'; 'age*age' should in first place before other covariates\n \          fprintf(ficlog,"Error in model: 'model=%s'; 'age*age' should in first place before other covariates\n \
  'model=1+age+age*age+V1.' or 'model=1+age+age*age+V1+V1*age.', please swap as well as \n \   'model=1+age+age*age+V1.' or 'model=1+age+age*age+V1+V1*age.', please swap as well as \n \
  corresponding column of parameters.\n",model); fflush(ficlog);   corresponding column of parameters.\n",model); fflush(ficlog);
                                 return 1;          return 1;
       }        }
       nagesqr=1;        nagesqr=1;
       if (strstr(model,"+age*age") !=0)        if (strstr(model,"+age*age") !=0)
                                 substrchaine(modelsav, model, "+age*age");          substrchaine(modelsav, model, "+age*age");
       else if (strstr(model,"age*age+") !=0)        else if (strstr(model,"age*age+") !=0)
                                 substrchaine(modelsav, model, "age*age+");          substrchaine(modelsav, model, "age*age+");
       else         else 
                                 substrchaine(modelsav, model, "age*age");          substrchaine(modelsav, model, "age*age");
     }else      }else
       nagesqr=0;        nagesqr=0;
     if (strlen(modelsav) >1){      if (strlen(modelsav) >1){
Line 8029  int decodemodel( char model[], int lasto Line 8349  int decodemodel( char model[], int lasto
             cptcovprodnoage++;k1++;              cptcovprodnoage++;k1++;
             cutl(stre,strb,strc,'V'); /* strc= Vn, stre is n; strb=V3*V2 stre=3 strc=*/              cutl(stre,strb,strc,'V'); /* strc= Vn, stre is n; strb=V3*V2 stre=3 strc=*/
             Tvar[k]=ncovcol+nqv+ntv+nqtv+k1; /* For model-covariate k tells which data-covariate to use but              Tvar[k]=ncovcol+nqv+ntv+nqtv+k1; /* For model-covariate k tells which data-covariate to use but
                                    because this model-covariate is a construction we invent a new column                                                  because this model-covariate is a construction we invent a new column
                                    which is after existing variables ncovcol+nqv+ntv+nqtv + k1                                                  which is after existing variables ncovcol+nqv+ntv+nqtv + k1
                                    If already ncovcol=4 and model=V2+V1+V1*V4+age*V3+V3*V2                                                  If already ncovcol=4 and model=V2+V1+V1*V4+age*V3+V3*V2
                                    Tvar[3=V1*V4]=4+1 Tvar[5=V3*V2]=4 + 2= 6, etc */                                                  Tvar[3=V1*V4]=4+1 Tvar[5=V3*V2]=4 + 2= 6, etc */
             Typevar[k]=2;  /* 2 for double fixed dummy covariates */              Typevar[k]=2;  /* 2 for double fixed dummy covariates */
             cutl(strc,strb,strd,'V'); /* strd was Vm, strc is m */              cutl(strc,strb,strd,'V'); /* strd was Vm, strc is m */
             Tprod[k1]=k;  /* Tprod[1]=3(=V1*V4) for V2+V1+V1*V4+age*V3+V3*V2  */              Tprod[k1]=k;  /* Tprod[1]=3(=V1*V4) for V2+V1+V1*V4+age*V3+V3*V2  */
Line 8100  Typevar: 0 for simple covariate (dummy, Line 8420  Typevar: 0 for simple covariate (dummy,
 Fixed[k] 0=fixed (product or simple), 1 varying, 2 fixed with age product, 3 varying with age product \n\  Fixed[k] 0=fixed (product or simple), 1 varying, 2 fixed with age product, 3 varying with age product \n\
 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);  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, ncoveff=0, nqfveff=0, ntveff=0, nqtveff=0;k<=cptcovt; k++){ /* or cptocvt */    for(v=1; v <=ncovcol;v++){
     if (Tvar[k] <=ncovcol && (Typevar[k]==0 || Typevar[k]==2)){ /* Simple or product fixed dummy (<=ncovcol) covariates */      DummyV[v]=0;
       FixedV[v]=0;
     }
     for(v=ncovcol+1; v <=ncovcol+nqv;v++){
       DummyV[v]=1;
       FixedV[v]=0;
     }
     for(v=ncovcol+nqv+1; v <=ncovcol+nqv+ntv;v++){
       DummyV[v]=0;
       FixedV[v]=1;
     }
     for(v=ncovcol+nqv+ntv+1; v <=ncovcol+nqv+ntv+nqtv;v++){
       DummyV[v]=1;
       FixedV[v]=1;
     }
     for(v=1; v <=ncovcol+nqv+ntv+nqtv;v++){
       printf("Decodemodel: V%d, Dummy(V%d)=%d, FixedV(V%d)=%d\n",v,v,DummyV[v],v,FixedV[v]);
       fprintf(ficlog,"Decodemodel: V%d, Dummy(V%d)=%d, FixedV(V%d)=%d\n",v,v,DummyV[v],v,FixedV[v]);
     }
     for(k=1, ncovf=0, nsd=0, nsq=0, ncovv=0, ncova=0, ncoveff=0, nqfveff=0, ntveff=0, nqtveff=0;k<=cptcovt; k++){ /* or cptocvt */
       if (Tvar[k] <=ncovcol && Typevar[k]==0 ){ /* Simple fixed dummy (<=ncovcol) covariates */
         Fixed[k]= 0;
         Dummy[k]= 0;
         ncoveff++;
         ncovf++;
         nsd++;
         modell[k].maintype= FTYPE;
         TvarsD[nsd]=Tvar[k];
         TvarsDind[nsd]=k;
         TvarF[ncovf]=Tvar[k];
         TvarFind[ncovf]=k;
         TvarFD[ncoveff]=Tvar[k]; /* TvarFD[1]=V1 in V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1 */
         TvarFDind[ncoveff]=k; /* TvarFDind[1]=9 in V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1 */
       }else if( Tvar[k] <=ncovcol &&  Typevar[k]==2){ /* Product of fixed dummy (<=ncovcol) covariates */
       Fixed[k]= 0;        Fixed[k]= 0;
       Dummy[k]= 0;        Dummy[k]= 0;
       ncoveff++;        ncoveff++;
                         modell[k].maintype= FTYPE;        ncovf++;
         modell[k].maintype= FTYPE;
         TvarF[ncovf]=Tvar[k];
         TvarFind[ncovf]=k;
       TvarFD[ncoveff]=Tvar[k]; /* TvarFD[1]=V1 in V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1 */        TvarFD[ncoveff]=Tvar[k]; /* TvarFD[1]=V1 in V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1 */
       TvarFDind[ncoveff]=k; /* TvarFDind[1]=9 in V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1 */        TvarFDind[ncoveff]=k; /* TvarFDind[1]=9 in V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1 */
     }else if( Tvar[k] <=ncovcol+nqv && Typevar[k]==0){ /* Remind that product Vn*Vm are added in k*/ /* Only simple fixed quantitative variable */      }else if( Tvar[k] <=ncovcol+nqv && Typevar[k]==0){ /* Remind that product Vn*Vm are added in k*/ /* Only simple fixed quantitative variable */
       Fixed[k]= 0;        Fixed[k]= 0;
       Dummy[k]= 1;        Dummy[k]= 1;
       nqfveff++;        nqfveff++;
                         modell[k].maintype= FTYPE;        modell[k].maintype= FTYPE;
                         modell[k].subtype= FQ;        modell[k].subtype= FQ;
         nsq++;
         TvarsQ[nsq]=Tvar[k];
         TvarsQind[nsq]=k;
         ncovf++;
         TvarF[ncovf]=Tvar[k];
         TvarFind[ncovf]=k;
       TvarFQ[nqfveff]=Tvar[k]-ncovcol; /* TvarFQ[1]=V2-1=1st in V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1 */ /* Only simple fixed quantitative variable */        TvarFQ[nqfveff]=Tvar[k]-ncovcol; /* TvarFQ[1]=V2-1=1st in V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1 */ /* Only simple fixed quantitative variable */
       TvarFQind[nqfveff]=k; /* TvarFQind[1]=6 in V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1 */ /* Only simple fixed quantitative variable */        TvarFQind[nqfveff]=k; /* TvarFQind[1]=6 in V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1 */ /* Only simple fixed quantitative variable */
     }else if( Tvar[k] <=ncovcol+nqv+ntv && Typevar[k]==0){      }else if( Tvar[k] <=ncovcol+nqv+ntv && Typevar[k]==0){/* Only simple time varying variables */
       Fixed[k]= 1;        Fixed[k]= 1;
       Dummy[k]= 0;        Dummy[k]= 0;
       ntveff++; /* Only simple time varying dummy variable */        ntveff++; /* Only simple time varying dummy variable */
                         modell[k].maintype= VTYPE;        modell[k].maintype= VTYPE;
                         modell[k].subtype= VD;        modell[k].subtype= VD;
         nsd++;
         TvarsD[nsd]=Tvar[k];
         TvarsDind[nsd]=k;
         ncovv++; /* Only simple time varying variables */
         TvarV[ncovv]=Tvar[k];
         TvarVind[ncovv]=k;
       TvarVD[ntveff]=Tvar[k]; /* TvarVD[1]=V4  TvarVD[2]=V3 in V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1 */ /* Only simple time varying dummy variable */        TvarVD[ntveff]=Tvar[k]; /* TvarVD[1]=V4  TvarVD[2]=V3 in V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1 */ /* Only simple time varying dummy variable */
       TvarVDind[ntveff]=k; /* TvarVDind[1]=2 TvarVDind[2]=3 in V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1 */ /* Only simple time varying dummy variable */        TvarVDind[ntveff]=k; /* TvarVDind[1]=2 TvarVDind[2]=3 in V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1 */ /* Only simple time varying dummy variable */
       printf("Quasi Tmodelind[%d]=%d,Tvar[Tmodelind[%d]]=V%d, ncovcol=%d, nqv=%d,Tvar[k]- ncovcol-nqv=%d\n",ntveff,k,ntveff,Tvar[k], ncovcol, nqv,Tvar[k]- ncovcol-nqv);        printf("Quasi Tmodelind[%d]=%d,Tvar[Tmodelind[%d]]=V%d, ncovcol=%d, nqv=%d,Tvar[k]- ncovcol-nqv=%d\n",ntveff,k,ntveff,Tvar[k], ncovcol, nqv,Tvar[k]- ncovcol-nqv);
       printf("Quasi TmodelInvind[%d]=%d\n",k,Tvar[k]- ncovcol-nqv);        printf("Quasi TmodelInvind[%d]=%d\n",k,Tvar[k]- ncovcol-nqv);
     }else if( Tvar[k] <=ncovcol+nqv+ntv+nqtv  && Typevar[k]==0){ /* Only simple time varying quantitative variable V5*/      }else if( Tvar[k] <=ncovcol+nqv+ntv+nqtv  && Typevar[k]==0){ /* Only simple time varying quantitative variable V5*/
                         Fixed[k]= 1;        Fixed[k]= 1;
                         Dummy[k]= 1;        Dummy[k]= 1;
                         nqtveff++;        nqtveff++;
                         modell[k].maintype= VTYPE;        modell[k].maintype= VTYPE;
                         modell[k].subtype= VQ;        modell[k].subtype= VQ;
         ncovv++; /* Only simple time varying variables */
         nsq++;
         TvarsQ[nsq]=Tvar[k];
         TvarsQind[nsq]=k;
         TvarV[ncovv]=Tvar[k];
         TvarVind[ncovv]=k;
       TvarVQ[nqtveff]=Tvar[k]; /* TvarVQ[1]=V5 in V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1 */ /* Only simple time varying quantitative variable */        TvarVQ[nqtveff]=Tvar[k]; /* TvarVQ[1]=V5 in V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1 */ /* Only simple time varying quantitative variable */
       TvarVQind[nqtveff]=k; /* TvarVQind[1]=1 in V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1 */ /* Only simple time varying quantitative variable */        TvarVQind[nqtveff]=k; /* TvarVQind[1]=1 in V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1 */ /* Only simple time varying quantitative variable */
                         TmodelInvQind[nqtveff]=Tvar[k]- ncovcol-nqv-ntv;/* Only simple time varying quantitative variable */        TmodelInvQind[nqtveff]=Tvar[k]- ncovcol-nqv-ntv;/* Only simple time varying quantitative variable */
                         /* Tmodeliqind[k]=nqtveff;/\* Only simple time varying quantitative variable *\/ */        /* Tmodeliqind[k]=nqtveff;/\* Only simple time varying quantitative variable *\/ */
                         printf("Quasi TmodelQind[%d]=%d,Tvar[TmodelQind[%d]]=V%d, ncovcol=%d, nqv=%d, ntv=%d,Tvar[k]- ncovcol-nqv-ntv=%d\n",nqtveff,k,nqtveff,Tvar[k], ncovcol, nqv, ntv, Tvar[k]- ncovcol-nqv-ntv);        printf("Quasi TmodelQind[%d]=%d,Tvar[TmodelQind[%d]]=V%d, ncovcol=%d, nqv=%d, ntv=%d,Tvar[k]- ncovcol-nqv-ntv=%d\n",nqtveff,k,nqtveff,Tvar[k], ncovcol, nqv, ntv, Tvar[k]- ncovcol-nqv-ntv);
       printf("Quasi TmodelInvQind[%d]=%d\n",k,Tvar[k]- ncovcol-nqv-ntv);        printf("Quasi TmodelInvQind[%d]=%d\n",k,Tvar[k]- ncovcol-nqv-ntv);
     }else if (Typevar[k] == 1) {  /* product with age */      }else if (Typevar[k] == 1) {  /* product with age */
         ncova++;
         TvarA[ncova]=Tvar[k];
         TvarAind[ncova]=k;
       if (Tvar[k] <=ncovcol ){ /* Product age with fixed dummy covariatee */        if (Tvar[k] <=ncovcol ){ /* Product age with fixed dummy covariatee */
                                 Fixed[k]= 2;          Fixed[k]= 2;
                                 Dummy[k]= 2;          Dummy[k]= 2;
                                 modell[k].maintype= ATYPE;          modell[k].maintype= ATYPE;
                                 modell[k].subtype= APFD;          modell[k].subtype= APFD;
                                 /* ncoveff++; */          /* ncoveff++; */
       }else if( Tvar[k] <=ncovcol+nqv) { /* Remind that product Vn*Vm are added in k*/        }else if( Tvar[k] <=ncovcol+nqv) { /* Remind that product Vn*Vm are added in k*/
                                 Fixed[k]= 2;          Fixed[k]= 2;
                                 Dummy[k]= 3;          Dummy[k]= 3;
                                 modell[k].maintype= ATYPE;          modell[k].maintype= ATYPE;
                                 modell[k].subtype= APFQ;                /*      Product age * fixed quantitative */          modell[k].subtype= APFQ;                /*      Product age * fixed quantitative */
                                 /* nqfveff++;  /\* Only simple fixed quantitative variable *\/ */          /* nqfveff++;  /\* Only simple fixed quantitative variable *\/ */
       }else if( Tvar[k] <=ncovcol+nqv+ntv ){        }else if( Tvar[k] <=ncovcol+nqv+ntv ){
                                 Fixed[k]= 3;          Fixed[k]= 3;
                                 Dummy[k]= 2;          Dummy[k]= 2;
                                 modell[k].maintype= ATYPE;          modell[k].maintype= ATYPE;
                                 modell[k].subtype= APVD;                /*      Product age * varying dummy */          modell[k].subtype= APVD;                /*      Product age * varying dummy */
                                 /* ntveff++; /\* Only simple time varying dummy variable *\/ */          /* ntveff++; /\* Only simple time varying dummy variable *\/ */
       }else if( Tvar[k] <=ncovcol+nqv+ntv+nqtv){        }else if( Tvar[k] <=ncovcol+nqv+ntv+nqtv){
                                 Fixed[k]= 3;          Fixed[k]= 3;
                                 Dummy[k]= 3;          Dummy[k]= 3;
                                 modell[k].maintype= ATYPE;          modell[k].maintype= ATYPE;
                                 modell[k].subtype= APVQ;                /*      Product age * varying quantitative */          modell[k].subtype= APVQ;                /*      Product age * varying quantitative */
                                 /* nqtveff++;/\* Only simple time varying quantitative variable *\/ */          /* nqtveff++;/\* Only simple time varying quantitative variable *\/ */
       }        }
     }else if (Typevar[k] == 2) {  /* product without age */      }else if (Typevar[k] == 2) {  /* product without age */
       k1=Tposprod[k];        k1=Tposprod[k];
       if(Tvard[k1][1] <=ncovcol){        if(Tvard[k1][1] <=ncovcol){
                                 if(Tvard[k1][2] <=ncovcol){          if(Tvard[k1][2] <=ncovcol){
                                         Fixed[k]= 1;            Fixed[k]= 1;
                                         Dummy[k]= 0;            Dummy[k]= 0;
                                         modell[k].maintype= FTYPE;            modell[k].maintype= FTYPE;
                                         modell[k].subtype= FPDD;                /*      Product fixed dummy * fixed dummy */            modell[k].subtype= FPDD;              /*      Product fixed dummy * fixed dummy */
                                 }else if(Tvard[k1][2] <=ncovcol+nqv){            ncovf++; /* Fixed variables without age */
                                         Fixed[k]= 0;  /* or 2 ?*/            TvarF[ncovf]=Tvar[k];
                                         Dummy[k]= 1;            TvarFind[ncovf]=k;
                                         modell[k].maintype= FTYPE;          }else if(Tvard[k1][2] <=ncovcol+nqv){
                                         modell[k].subtype= FPDQ;                /*      Product fixed dummy * fixed quantitative */            Fixed[k]= 0;  /* or 2 ?*/
                                 }else if(Tvard[k1][2] <=ncovcol+nqv+ntv){            Dummy[k]= 1;
                                         Fixed[k]= 1;            modell[k].maintype= FTYPE;
                                         Dummy[k]= 0;            modell[k].subtype= FPDQ;              /*      Product fixed dummy * fixed quantitative */
                                         modell[k].maintype= VTYPE;            ncovf++; /* Varying variables without age */
                                         modell[k].subtype= VPDD;                /*      Product fixed dummy * varying dummy */            TvarF[ncovf]=Tvar[k];
                                 }else if(Tvard[k1][2] <=ncovcol+nqv+ntv+nqtv){            TvarFind[ncovf]=k;
                                         Fixed[k]= 1;          }else if(Tvard[k1][2] <=ncovcol+nqv+ntv){
                                         Dummy[k]= 1;            Fixed[k]= 1;
                                         modell[k].maintype= VTYPE;            Dummy[k]= 0;
                                         modell[k].subtype= VPDQ;                /*      Product fixed dummy * varying quantitative */            modell[k].maintype= VTYPE;
                                 }             modell[k].subtype= VPDD;              /*      Product fixed dummy * varying dummy */
             ncovv++; /* Varying variables without age */
             TvarV[ncovv]=Tvar[k];
             TvarVind[ncovv]=k;
           }else if(Tvard[k1][2] <=ncovcol+nqv+ntv+nqtv){
             Fixed[k]= 1;
             Dummy[k]= 1;
             modell[k].maintype= VTYPE;
             modell[k].subtype= VPDQ;              /*      Product fixed dummy * varying quantitative */
             ncovv++; /* Varying variables without age */
             TvarV[ncovv]=Tvar[k];
             TvarVind[ncovv]=k;
           } 
       }else if(Tvard[k1][1] <=ncovcol+nqv){        }else if(Tvard[k1][1] <=ncovcol+nqv){
                                 if(Tvard[k1][2] <=ncovcol){          if(Tvard[k1][2] <=ncovcol){
                                         Fixed[k]= 0;  /* or 2 ?*/            Fixed[k]= 0;  /* or 2 ?*/
                                         Dummy[k]= 1;            Dummy[k]= 1;
                                         modell[k].maintype= FTYPE;            modell[k].maintype= FTYPE;
                                         modell[k].subtype= FPDQ;                /*      Product fixed quantitative * fixed dummy */            modell[k].subtype= FPDQ;              /*      Product fixed quantitative * fixed dummy */
                                 }else if(Tvard[k1][2] <=ncovcol+nqv+ntv){            ncovf++; /* Fixed variables without age */
                                         Fixed[k]= 1;            TvarF[ncovf]=Tvar[k];
                                         Dummy[k]= 1;            TvarFind[ncovf]=k;
                                         modell[k].maintype= VTYPE;          }else if(Tvard[k1][2] <=ncovcol+nqv+ntv){
                                         modell[k].subtype= VPDQ;                /*      Product fixed quantitative * varying dummy */            Fixed[k]= 1;
                                 }else if(Tvard[k1][2] <=ncovcol+nqv+ntv+nqtv){            Dummy[k]= 1;
                                         Fixed[k]= 1;            modell[k].maintype= VTYPE;
                                         Dummy[k]= 1;            modell[k].subtype= VPDQ;              /*      Product fixed quantitative * varying dummy */
                                         modell[k].maintype= VTYPE;            ncovv++; /* Varying variables without age */
                                         modell[k].subtype= VPQQ;                /*      Product fixed quantitative * varying quantitative */            TvarV[ncovv]=Tvar[k];
                                 }             TvarVind[ncovv]=k;
           }else if(Tvard[k1][2] <=ncovcol+nqv+ntv+nqtv){
             Fixed[k]= 1;
             Dummy[k]= 1;
             modell[k].maintype= VTYPE;
             modell[k].subtype= VPQQ;              /*      Product fixed quantitative * varying quantitative */
             ncovv++; /* Varying variables without age */
             TvarV[ncovv]=Tvar[k];
             TvarVind[ncovv]=k;
             ncovv++; /* Varying variables without age */
             TvarV[ncovv]=Tvar[k];
             TvarVind[ncovv]=k;
           } 
       }else if(Tvard[k1][1] <=ncovcol+nqv+ntv){        }else if(Tvard[k1][1] <=ncovcol+nqv+ntv){
                                 if(Tvard[k1][2] <=ncovcol){          if(Tvard[k1][2] <=ncovcol){
                                         Fixed[k]= 1;            Fixed[k]= 1;
                                         Dummy[k]= 1;            Dummy[k]= 1;
                                         modell[k].maintype= VTYPE;            modell[k].maintype= VTYPE;
                                         modell[k].subtype= VPDD;                /*      Product time varying dummy * fixed dummy */            modell[k].subtype= VPDD;              /*      Product time varying dummy * fixed dummy */
                                 }else if(Tvard[k1][2] <=ncovcol+nqv){            ncovv++; /* Varying variables without age */
                                         Fixed[k]= 1;            TvarV[ncovv]=Tvar[k];
                                         Dummy[k]= 1;            TvarVind[ncovv]=k;
                                         modell[k].maintype= VTYPE;          }else if(Tvard[k1][2] <=ncovcol+nqv){
                                         modell[k].subtype= VPDQ;                /*      Product time varying dummy * fixed quantitative */            Fixed[k]= 1;
                                 }else if(Tvard[k1][2] <=ncovcol+nqv+ntv){            Dummy[k]= 1;
                                         Fixed[k]= 1;            modell[k].maintype= VTYPE;
                                         Dummy[k]= 0;            modell[k].subtype= VPDQ;              /*      Product time varying dummy * fixed quantitative */
                                         modell[k].maintype= VTYPE;            ncovv++; /* Varying variables without age */
                                         modell[k].subtype= VPDD;                /*      Product time varying dummy * time varying dummy */            TvarV[ncovv]=Tvar[k];
                                 }else if(Tvard[k1][2] <=ncovcol+nqv+ntv+nqtv){            TvarVind[ncovv]=k;
                                         Fixed[k]= 1;          }else if(Tvard[k1][2] <=ncovcol+nqv+ntv){
                                         Dummy[k]= 1;            Fixed[k]= 1;
                                         modell[k].maintype= VTYPE;            Dummy[k]= 0;
                                         modell[k].subtype= VPDQ;                /*      Product time varying dummy * time varying quantitative */            modell[k].maintype= VTYPE;
                                 }             modell[k].subtype= VPDD;              /*      Product time varying dummy * time varying dummy */
             ncovv++; /* Varying variables without age */
             TvarV[ncovv]=Tvar[k];
             TvarVind[ncovv]=k;
           }else if(Tvard[k1][2] <=ncovcol+nqv+ntv+nqtv){
             Fixed[k]= 1;
             Dummy[k]= 1;
             modell[k].maintype= VTYPE;
             modell[k].subtype= VPDQ;              /*      Product time varying dummy * time varying quantitative */
             ncovv++; /* Varying variables without age */
             TvarV[ncovv]=Tvar[k];
             TvarVind[ncovv]=k;
           } 
       }else if(Tvard[k1][1] <=ncovcol+nqv+ntv+nqtv){        }else if(Tvard[k1][1] <=ncovcol+nqv+ntv+nqtv){
                                 if(Tvard[k1][2] <=ncovcol){          if(Tvard[k1][2] <=ncovcol){
                                         Fixed[k]= 1;            Fixed[k]= 1;
                                         Dummy[k]= 1;            Dummy[k]= 1;
                                         modell[k].maintype= VTYPE;            modell[k].maintype= VTYPE;
                                         modell[k].subtype= VPDQ;                /*      Product time varying quantitative * fixed dummy */            modell[k].subtype= VPDQ;              /*      Product time varying quantitative * fixed dummy */
                                 }else if(Tvard[k1][2] <=ncovcol+nqv){            ncovv++; /* Varying variables without age */
                                         Fixed[k]= 1;            TvarV[ncovv]=Tvar[k];
                                         Dummy[k]= 1;            TvarVind[ncovv]=k;
                                         modell[k].maintype= VTYPE;          }else if(Tvard[k1][2] <=ncovcol+nqv){
                                         modell[k].subtype= VPQQ;                /*      Product time varying quantitative * fixed quantitative */            Fixed[k]= 1;
                                 }else if(Tvard[k1][2] <=ncovcol+nqv+ntv){            Dummy[k]= 1;
                                         Fixed[k]= 1;            modell[k].maintype= VTYPE;
                                         Dummy[k]= 1;            modell[k].subtype= VPQQ;              /*      Product time varying quantitative * fixed quantitative */
                                         modell[k].maintype= VTYPE;            ncovv++; /* Varying variables without age */
                                         modell[k].subtype= VPDQ;                /*      Product time varying quantitative * time varying dummy */            TvarV[ncovv]=Tvar[k];
                                 }else if(Tvard[k1][2] <=ncovcol+nqv+ntv+nqtv){            TvarVind[ncovv]=k;
                                         Fixed[k]= 1;          }else if(Tvard[k1][2] <=ncovcol+nqv+ntv){
                                         Dummy[k]= 1;            Fixed[k]= 1;
                                         modell[k].maintype= VTYPE;            Dummy[k]= 1;
                                         modell[k].subtype= VPQQ;                /*      Product time varying quantitative * time varying quantitative */            modell[k].maintype= VTYPE;
                                 }             modell[k].subtype= VPDQ;              /*      Product time varying quantitative * time varying dummy */
             ncovv++; /* Varying variables without age */
             TvarV[ncovv]=Tvar[k];
             TvarVind[ncovv]=k;
           }else if(Tvard[k1][2] <=ncovcol+nqv+ntv+nqtv){
             Fixed[k]= 1;
             Dummy[k]= 1;
             modell[k].maintype= VTYPE;
             modell[k].subtype= VPQQ;              /*      Product time varying quantitative * time varying quantitative */
             ncovv++; /* Varying variables without age */
             TvarV[ncovv]=Tvar[k];
             TvarVind[ncovv]=k;
           } 
       }else{        }else{
                                 printf("Error unknown type of covariate: Tvard[%d][1]=%d,Tvard[%d][2]=%d\n",k1,Tvard[k1][1],k1,Tvard[k1][2]);          printf("Error unknown type of covariate: Tvard[%d][1]=%d,Tvard[%d][2]=%d\n",k1,Tvard[k1][1],k1,Tvard[k1][2]);
                                 fprintf(ficlog,"Error unknown type of covariate: Tvard[%d][1]=%d,Tvard[%d][2]=%d\n",k1,Tvard[k1][1],k1,Tvard[k1][2]);          fprintf(ficlog,"Error unknown type of covariate: Tvard[%d][1]=%d,Tvard[%d][2]=%d\n",k1,Tvard[k1][1],k1,Tvard[k1][2]);
       } /* end k1 */        } /* end k1 */
     }else{      }else{
       printf("Error, current version can't treat for performance reasons, Tvar[%d]=%d, Typevar[%d]=%d\n", k, Tvar[k], k, Typevar[k]);        printf("Error, current version can't treat for performance reasons, Tvar[%d]=%d, Typevar[%d]=%d\n", k, Tvar[k], k, Typevar[k]);
Line 8265  Dummy[k] 0=dummy (0 1), 1 quantitative ( Line 8690  Dummy[k] 0=dummy (0 1), 1 quantitative (
   for(k1=1; k1<= cptcovt;k1++){    for(k1=1; k1<= cptcovt;k1++){
     for(k2=1; k2 <k1;k2++){      for(k2=1; k2 <k1;k2++){
       if((Typevar[k1]==Typevar[k2]) && (Fixed[Tvar[k1]]==Fixed[Tvar[k2]]) && (Dummy[Tvar[k1]]==Dummy[Tvar[k2]] )){        if((Typevar[k1]==Typevar[k2]) && (Fixed[Tvar[k1]]==Fixed[Tvar[k2]]) && (Dummy[Tvar[k1]]==Dummy[Tvar[k2]] )){
                                 if((Typevar[k1] == 0 || Typevar[k1] == 1)){ /* Simple or age product */          if((Typevar[k1] == 0 || Typevar[k1] == 1)){ /* Simple or age product */
                                         if(Tvar[k1]==Tvar[k2]){            if(Tvar[k1]==Tvar[k2]){
                                                 printf("Error duplication in the model=%s at positions (+) %d and %d, Tvar[%d]=V%d, Tvar[%d]=V%d, Typevar=%d, Fixed=%d, Dummy=%d\n", model, k1,k2, k1, Tvar[k1], k2, Tvar[k2],Typevar[k1],Fixed[Tvar[k1]],Dummy[Tvar[k1]]);              printf("Error duplication in the model=%s at positions (+) %d and %d, Tvar[%d]=V%d, Tvar[%d]=V%d, Typevar=%d, Fixed=%d, Dummy=%d\n", model, k1,k2, k1, Tvar[k1], k2, Tvar[k2],Typevar[k1],Fixed[Tvar[k1]],Dummy[Tvar[k1]]);
                                                 fprintf(ficlog,"Error duplication in the model=%s at positions (+) %d and %d, Tvar[%d]=V%d, Tvar[%d]=V%d, Typevar=%d, Fixed=%d, Dummy=%d\n", model, k1,k2, k1, Tvar[k1], k2, Tvar[k2],Typevar[k1],Fixed[Tvar[k1]],Dummy[Tvar[k1]]); fflush(ficlog);              fprintf(ficlog,"Error duplication in the model=%s at positions (+) %d and %d, Tvar[%d]=V%d, Tvar[%d]=V%d, Typevar=%d, Fixed=%d, Dummy=%d\n", model, k1,k2, k1, Tvar[k1], k2, Tvar[k2],Typevar[k1],Fixed[Tvar[k1]],Dummy[Tvar[k1]]); fflush(ficlog);
                                                 return(1);              return(1);
                                         }            }
                                 }else if (Typevar[k1] ==2){          }else if (Typevar[k1] ==2){
                                         k3=Tposprod[k1];            k3=Tposprod[k1];
                                         k4=Tposprod[k2];            k4=Tposprod[k2];
                                         if( ((Tvard[k3][1]== Tvard[k4][1])&&(Tvard[k3][2]== Tvard[k4][2])) || ((Tvard[k3][1]== Tvard[k4][2])&&(Tvard[k3][2]== Tvard[k4][1])) ){            if( ((Tvard[k3][1]== Tvard[k4][1])&&(Tvard[k3][2]== Tvard[k4][2])) || ((Tvard[k3][1]== Tvard[k4][2])&&(Tvard[k3][2]== Tvard[k4][1])) ){
                                                 printf("Error duplication in the model=%s at positions (+) %d and %d, V%d*V%d, Typevar=%d, Fixed=%d, Dummy=%d\n",model, k1,k2, Tvard[k3][1], Tvard[k3][2],Typevar[k1],Fixed[Tvar[k1]],Dummy[Tvar[k1]]);              printf("Error duplication in the model=%s at positions (+) %d and %d, V%d*V%d, Typevar=%d, Fixed=%d, Dummy=%d\n",model, k1,k2, Tvard[k3][1], Tvard[k3][2],Typevar[k1],Fixed[Tvar[k1]],Dummy[Tvar[k1]]);
                                                 fprintf(ficlog,"Error duplication in the model=%s at positions (+) %d and %d, V%d*V%d, Typevar=%d, Fixed=%d, Dummy=%d\n",model, k1,k2, Tvard[k3][1], Tvard[k3][2],Typevar[k1],Fixed[Tvar[k1]],Dummy[Tvar[k1]]); fflush(ficlog);              fprintf(ficlog,"Error duplication in the model=%s at positions (+) %d and %d, V%d*V%d, Typevar=%d, Fixed=%d, Dummy=%d\n",model, k1,k2, Tvard[k3][1], Tvard[k3][2],Typevar[k1],Fixed[Tvar[k1]],Dummy[Tvar[k1]]); fflush(ficlog);
                                                 return(1);              return(1);
                                         }            }
                                 }          }
       }        }
     }      }
   }    }
   printf("ncoveff=%d, nqfveff=%d, ntveff=%d, nqtveff=%d, cptcovn=%d\n",ncoveff,nqfveff,ntveff,nqtveff,cptcovn);    printf("ncoveff=%d, nqfveff=%d, ntveff=%d, nqtveff=%d, cptcovn=%d\n",ncoveff,nqfveff,ntveff,nqtveff,cptcovn);
   fprintf(ficlog,"ncoveff=%d, nqfveff=%d, ntveff=%d, nqtveff=%d, cptcovn=%d\n",ncoveff,nqfveff,ntveff,nqtveff,cptcovn);    fprintf(ficlog,"ncoveff=%d, nqfveff=%d, ntveff=%d, nqtveff=%d, cptcovn=%d\n",ncoveff,nqfveff,ntveff,nqtveff,cptcovn);
     printf("ncovf=%d, ncovv=%d, ncova=%d, nsd=%d, nsq=%d\n",ncovf,ncovv,ncova,nsd,nsq);
     fprintf(ficlog,"ncovf=%d, ncovv=%d, ncova=%d, nsd=%d, nsq=%d\n",ncovf,ncovv,ncova,nsd, nsq);
   return (0); /* with covar[new additional covariate if product] and Tage if age */     return (0); /* with covar[new additional covariate if product] and Tage if age */ 
   /*endread:*/    /*endread:*/
   printf("Exiting decodemodel: ");    printf("Exiting decodemodel: ");
Line 8599  void syscompilerinfo(int logged) Line 9026  void syscompilerinfo(int logged)
   
 int prevalence_limit(double *p, double **prlim, double ageminpar, double agemaxpar, double ftolpl, int *ncvyearp){  int prevalence_limit(double *p, double **prlim, double ageminpar, double agemaxpar, double ftolpl, int *ncvyearp){
   /*--------------- Prevalence limit  (period or stable prevalence) --------------*/    /*--------------- Prevalence limit  (period or stable prevalence) --------------*/
   int i, j, k, i1 ;    int i, j, k, i1, k4=0, nres=0 ;
   /* double ftolpl = 1.e-10; */    /* double ftolpl = 1.e-10; */
   double age, agebase, agelim;    double age, agebase, agelim;
   double tot;    double tot;
Line 8624  int prevalence_limit(double *p, double * Line 9051  int prevalence_limit(double *p, double *
   agelim=agemaxpar;    agelim=agemaxpar;
   
   /* i1=pow(2,ncoveff); */    /* i1=pow(2,ncoveff); */
   i1=pow(2,cptcoveff); /* Number of dummy covariates */    i1=pow(2,cptcoveff); /* Number of combination of dummy covariates */
   if (cptcovn < 1){i1=1;}    if (cptcovn < 1){i1=1;}
   
   for(k=1; k<=i1;k++){    for(k=1; k<=i1;k++){ /* For each combination k of dummy covariates in the model */
   /* for(cptcov=1,k=0;cptcov<=i1;cptcov++){ */      for(nres=1; nres <= nresult; nres++){ /* For each resultline */
     /* for(cptcov=1,k=0;cptcov<=1;cptcov++){ */        if(TKresult[nres]!= k)
     //for(cptcod=1;cptcod<=ncodemax[cptcov];cptcod++){          continue;
     /* k=k+1; */  
     /* to clean */  
     //printf("cptcov=%d cptcod=%d codtab=%d\n",cptcov, cptcod,codtabm(cptcod,cptcov));  
     fprintf(ficrespl,"#******");  
     printf("#******");  
     fprintf(ficlog,"#******");  
     for(j=1;j<=cptcoveff ;j++) {/* all covariates */  
       fprintf(ficrespl," V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]); /* Here problem for varying dummy*/  
       printf(" V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]);  
       fprintf(ficlog," V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]);  
     }  
     fprintf(ficrespl,"******\n");  
     printf("******\n");  
     fprintf(ficlog,"******\n");  
     if(invalidvarcomb[k]){  
       printf("\nCombination (%d) ignored because no case \n",k);   
       fprintf(ficrespl,"#Combination (%d) ignored because no case \n",k);   
       fprintf(ficlog,"\nCombination (%d) ignored because no case \n",k);   
                                                 continue;  
     }  
   
     fprintf(ficrespl,"#Age ");        /* for(cptcov=1,k=0;cptcov<=i1;cptcov++){ */
     for(j=1;j<=cptcoveff;j++) {        /* for(cptcov=1,k=0;cptcov<=1;cptcov++){ */
       fprintf(ficrespl,"V%d %d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]);        //for(cptcod=1;cptcod<=ncodemax[cptcov];cptcod++){
     }        /* k=k+1; */
     for(i=1; i<=nlstate;i++) fprintf(ficrespl,"  %d-%d   ",i,i);        /* to clean */
     fprintf(ficrespl,"Total Years_to_converge\n");        //printf("cptcov=%d cptcod=%d codtab=%d\n",cptcov, cptcod,codtabm(cptcod,cptcov));
         fprintf(ficrespl,"#******");
         printf("#******");
         fprintf(ficlog,"#******");
         for(j=1;j<=cptcoveff ;j++) {/* all covariates */
           fprintf(ficrespl," V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]); /* Here problem for varying dummy*/
           printf(" V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]);
           fprintf(ficlog," V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]);
         }
         for (k4=1; k4<= nsq; k4++){ /* For each selected (single) quantitative value */
           printf(" V%d=%f ",Tvqresult[nres][k4],Tqresult[nres][k4]);
           fprintf(ficrespl," V%d=%f ",Tvqresult[nres][k4],Tqresult[nres][k4]);
           fprintf(ficlog," V%d=%f ",Tvqresult[nres][k4],Tqresult[nres][k4]);
         }
         fprintf(ficrespl,"******\n");
         printf("******\n");
         fprintf(ficlog,"******\n");
         if(invalidvarcomb[k]){
           printf("\nCombination (%d) ignored because no case \n",k); 
           fprintf(ficrespl,"#Combination (%d) ignored because no case \n",k); 
           fprintf(ficlog,"\nCombination (%d) ignored because no case \n",k); 
           continue;
         }
   
         fprintf(ficrespl,"#Age ");
         for(j=1;j<=cptcoveff;j++) {
           fprintf(ficrespl,"V%d %d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]);
         }
         for(i=1; i<=nlstate;i++) fprintf(ficrespl,"  %d-%d   ",i,i);
         fprintf(ficrespl,"Total Years_to_converge\n");
           
     for (age=agebase; age<=agelim; age++){        for (age=agebase; age<=agelim; age++){
       /* for (age=agebase; age<=agebase; age++){ */          /* for (age=agebase; age<=agebase; age++){ */
       prevalim(prlim, nlstate, p, age, oldm, savm, ftolpl, ncvyearp, k);          prevalim(prlim, nlstate, p, age, oldm, savm, ftolpl, ncvyearp, k, nres);
       fprintf(ficrespl,"%.0f ",age );          fprintf(ficrespl,"%.0f ",age );
       for(j=1;j<=cptcoveff;j++)          for(j=1;j<=cptcoveff;j++)
         fprintf(ficrespl,"%d %d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]);            fprintf(ficrespl,"%d %d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]);
       tot=0.;          tot=0.;
       for(i=1; i<=nlstate;i++){          for(i=1; i<=nlstate;i++){
         tot +=  prlim[i][i];            tot +=  prlim[i][i];
         fprintf(ficrespl," %.5f", prlim[i][i]);            fprintf(ficrespl," %.5f", prlim[i][i]);
       }          }
       fprintf(ficrespl," %.3f %d\n", tot, *ncvyearp);          fprintf(ficrespl," %.3f %d\n", tot, *ncvyearp);
     } /* Age */        } /* Age */
     /* was end of cptcod */        /* was end of cptcod */
   } /* cptcov */      } /* cptcov */
     } /* nres */
   return 0;    return 0;
 }  }
   
Line 8683  int back_prevalence_limit(double *p, dou Line 9120  int back_prevalence_limit(double *p, dou
         /* Computes the back prevalence limit  for any combination      of covariate values           /* Computes the back prevalence limit  for any combination      of covariate values 
    * at any age between ageminpar and agemaxpar     * at any age between ageminpar and agemaxpar
          */           */
   int i, j, k, i1 ;    int i, j, k, i1, nres=0 ;
   /* double ftolpl = 1.e-10; */    /* double ftolpl = 1.e-10; */
   double age, agebase, agelim;    double age, agebase, agelim;
   double tot;    double tot;
Line 8714  int back_prevalence_limit(double *p, dou Line 9151  int back_prevalence_limit(double *p, dou
   i1=pow(2,cptcoveff);    i1=pow(2,cptcoveff);
   if (cptcovn < 1){i1=1;}    if (cptcovn < 1){i1=1;}
       
   for(k=1; k<=i1;k++){     for(nres=1; nres <= nresult; nres++){ /* For each resultline */
     //printf("cptcov=%d cptcod=%d codtab=%d\n",cptcov, cptcod,codtabm(cptcod,cptcov));      for(k=1; k<=i1;k++){ /* For any combination of dummy covariates, fixed and varying */
     fprintf(ficresplb,"#******");        if(TKresult[nres]!= k)
     printf("#******");          continue;
     fprintf(ficlog,"#******");        //printf("cptcov=%d cptcod=%d codtab=%d\n",cptcov, cptcod,codtabm(cptcod,cptcov));
     for(j=1;j<=cptcoveff ;j++) {/* all covariates */        fprintf(ficresplb,"#******");
       fprintf(ficresplb," V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]);        printf("#******");
       printf(" V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]);        fprintf(ficlog,"#******");
       fprintf(ficlog," V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]);        for(j=1;j<=cptcoveff ;j++) {/* all covariates */
     }          fprintf(ficresplb," V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]);
     fprintf(ficresplb,"******\n");          printf(" V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]);
     printf("******\n");          fprintf(ficlog," V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]);
     fprintf(ficlog,"******\n");        }
     if(invalidvarcomb[k]){        for (j=1; j<= nsq; j++){ /* For each selected (single) quantitative value */
       printf("\nCombination (%d) ignored because no cases \n",k);           printf(" V%d=%f ",Tvqresult[nres][j],Tqresult[nres][j]);
       fprintf(ficresplb,"#Combination (%d) ignored because no cases \n",k);           fprintf(ficresplb," V%d=%f ",Tvqresult[nres][j],Tqresult[nres][j]);
       fprintf(ficlog,"\nCombination (%d) ignored because no cases \n",k);           fprintf(ficlog," V%d=%f ",Tvqresult[nres][j],Tqresult[nres][j]);
       continue;        }
     }        fprintf(ficresplb,"******\n");
         printf("******\n");
         fprintf(ficlog,"******\n");
         if(invalidvarcomb[k]){
           printf("\nCombination (%d) ignored because no cases \n",k); 
           fprintf(ficresplb,"#Combination (%d) ignored because no cases \n",k); 
           fprintf(ficlog,"\nCombination (%d) ignored because no cases \n",k); 
           continue;
         }
           
     fprintf(ficresplb,"#Age ");        fprintf(ficresplb,"#Age ");
     for(j=1;j<=cptcoveff;j++) {        for(j=1;j<=cptcoveff;j++) {
       fprintf(ficresplb,"V%d %d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]);          fprintf(ficresplb,"V%d %d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]);
     }        }
     for(i=1; i<=nlstate;i++) fprintf(ficresplb,"  %d-%d   ",i,i);        for(i=1; i<=nlstate;i++) fprintf(ficresplb,"  %d-%d   ",i,i);
     fprintf(ficresplb,"Total Years_to_converge\n");        fprintf(ficresplb,"Total Years_to_converge\n");
           
           
     for (age=agebase; age<=agelim; age++){        for (age=agebase; age<=agelim; age++){
       /* for (age=agebase; age<=agebase; age++){ */          /* for (age=agebase; age<=agebase; age++){ */
       if(mobilavproj > 0){          if(mobilavproj > 0){
         /* bprevalim(bprlim, mobaverage, nlstate, p, age, ageminpar, agemaxpar, oldm, savm, doldm, dsavm, ftolpl, ncvyearp, k); */            /* bprevalim(bprlim, mobaverage, nlstate, p, age, ageminpar, agemaxpar, oldm, savm, doldm, dsavm, ftolpl, ncvyearp, k); */
         /* bprevalim(bprlim, mobaverage, nlstate, p, age, oldm, savm, dnewm, doldm, dsavm, ftolpl, ncvyearp, k); */            /* bprevalim(bprlim, mobaverage, nlstate, p, age, oldm, savm, dnewm, doldm, dsavm, ftolpl, ncvyearp, k); */
         bprevalim(bprlim, mobaverage, nlstate, p, age, ftolpl, ncvyearp, k);            bprevalim(bprlim, mobaverage, nlstate, p, age, ftolpl, ncvyearp, k);
       }else if (mobilavproj == 0){          }else if (mobilavproj == 0){
         printf("There is no chance to get back prevalence limit if data aren't non zero and summing to 1, please try a non null mobil_average(=%d) parameter or mobil_average=-1 if you want to try at your own risk.\n",mobilavproj);            printf("There is no chance to get back prevalence limit if data aren't non zero and summing to 1, please try a non null mobil_average(=%d) parameter or mobil_average=-1 if you want to try at your own risk.\n",mobilavproj);
         fprintf(ficlog,"There is no chance to get back prevalence limit if data aren't non zero and summing to 1, please try a non null mobil_average(=%d) parameter or mobil_average=-1 if you want to try at your own risk.\n",mobilavproj);            fprintf(ficlog,"There is no chance to get back prevalence limit if data aren't non zero and summing to 1, please try a non null mobil_average(=%d) parameter or mobil_average=-1 if you want to try at your own risk.\n",mobilavproj);
         exit(1);            exit(1);
       }else{          }else{
         /* bprevalim(bprlim, probs, nlstate, p, age, oldm, savm, dnewm, doldm, dsavm, ftolpl, ncvyearp, k); */            /* bprevalim(bprlim, probs, nlstate, p, age, oldm, savm, dnewm, doldm, dsavm, ftolpl, ncvyearp, k); */
         bprevalim(bprlim, probs, nlstate, p, age, ftolpl, ncvyearp, k);            bprevalim(bprlim, probs, nlstate, p, age, ftolpl, ncvyearp, k);
       }          }
       fprintf(ficresplb,"%.0f ",age );          fprintf(ficresplb,"%.0f ",age );
       for(j=1;j<=cptcoveff;j++)          for(j=1;j<=cptcoveff;j++)
         fprintf(ficresplb,"%d %d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]);            fprintf(ficresplb,"%d %d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]);
       tot=0.;          tot=0.;
       for(i=1; i<=nlstate;i++){          for(i=1; i<=nlstate;i++){
         tot +=  bprlim[i][i];            tot +=  bprlim[i][i];
         fprintf(ficresplb," %.5f", bprlim[i][i]);            fprintf(ficresplb," %.5f", bprlim[i][i]);
       }          }
       fprintf(ficresplb," %.3f %d\n", tot, *ncvyearp);          fprintf(ficresplb," %.3f %d\n", tot, *ncvyearp);
     } /* Age */        } /* Age */
     /* was end of cptcod */        /* was end of cptcod */
   } /* cptcov */      } /* end of any combination */
       } /* end of nres */  
   /* hBijx(p, bage, fage); */    /* hBijx(p, bage, fage); */
   /* fclose(ficrespijb); */    /* fclose(ficrespijb); */
       
Line 8782  int hPijx(double *p, int bage, int fage) Line 9227  int hPijx(double *p, int bage, int fage)
   int agelim;    int agelim;
   int hstepm;    int hstepm;
   int nhstepm;    int nhstepm;
   int h, i, i1, j, k;    int h, i, i1, j, k, k4, nres=0;
   
   double agedeb;    double agedeb;
   double ***p3mat;    double ***p3mat;
Line 8809  int hPijx(double *p, int bage, int fage) Line 9254  int hPijx(double *p, int bage, int fage)
                 /* for(cptcov=1,k=0;cptcov<=i1;cptcov++){ */                  /* for(cptcov=1,k=0;cptcov<=i1;cptcov++){ */
                 /*    /\*for(cptcod=1;cptcod<=ncodemax[cptcov];cptcod++){*\/ */                  /*    /\*for(cptcod=1;cptcod<=ncodemax[cptcov];cptcod++){*\/ */
                 /*      k=k+1;  */                  /*      k=k+1;  */
     for (k=1; k <= (int) pow(2,cptcoveff); k++){      for(nres=1; nres <= nresult; nres++) /* For each resultline */
       for(k=1; k<=i1;k++){
         if(TKresult[nres]!= k)
           continue;
       fprintf(ficrespij,"\n#****** ");        fprintf(ficrespij,"\n#****** ");
       for(j=1;j<=cptcoveff;j++)         for(j=1;j<=cptcoveff;j++) 
         fprintf(ficrespij,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]);          fprintf(ficrespij,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]);
         for (k4=1; k4<= nsq; k4++){ /* For each selected (single) quantitative value */
           printf(" V%d=%f ",Tvqresult[nres][k4],Tqresult[nres][k4]);
           fprintf(ficrespij," V%d=%f ",Tvqresult[nres][k4],Tqresult[nres][k4]);
         }
       fprintf(ficrespij,"******\n");        fprintf(ficrespij,"******\n");
               
       for (agedeb=fage; agedeb>=bage; agedeb--){ /* If stepm=6 months */        for (agedeb=fage; agedeb>=bage; agedeb--){ /* If stepm=6 months */
Line 8823  int hPijx(double *p, int bage, int fage) Line 9275  int hPijx(double *p, int bage, int fage)
                   
         p3mat=ma3x(1,nlstate+ndeath,1, nlstate+ndeath, 0,nhstepm);          p3mat=ma3x(1,nlstate+ndeath,1, nlstate+ndeath, 0,nhstepm);
         oldm=oldms;savm=savms;          oldm=oldms;savm=savms;
         hpxij(p3mat,nhstepm,agedeb,hstepm,p,nlstate,stepm,oldm,savm, k);            hpxij(p3mat,nhstepm,agedeb,hstepm,p,nlstate,stepm,oldm,savm, k, nres);  
         fprintf(ficrespij,"# Cov Agex agex+h hpijx with i,j=");          fprintf(ficrespij,"# Cov Agex agex+h hpijx with i,j=");
         for(i=1; i<=nlstate;i++)          for(i=1; i<=nlstate;i++)
           for(j=1; j<=nlstate+ndeath;j++)            for(j=1; j<=nlstate+ndeath;j++)
Line 8853  int hPijx(double *p, int bage, int fage) Line 9305  int hPijx(double *p, int bage, int fage)
         int ageminl;          int ageminl;
   int hstepm;    int hstepm;
   int nhstepm;    int nhstepm;
   int h, i, i1, j, k;    int h, i, i1, j, k, nres;
                   
   double agedeb;    double agedeb;
   double ***p3mat;    double ***p3mat;
Line 8881  int hPijx(double *p, int bage, int fage) Line 9333  int hPijx(double *p, int bage, int fage)
   /* for(cptcov=1,k=0;cptcov<=i1;cptcov++){ */    /* for(cptcov=1,k=0;cptcov<=i1;cptcov++){ */
   /*    /\*for(cptcod=1;cptcod<=ncodemax[cptcov];cptcod++){*\/ */    /*    /\*for(cptcod=1;cptcod<=ncodemax[cptcov];cptcod++){*\/ */
   /*    k=k+1;  */    /*    k=k+1;  */
   for (k=1; k <= (int) pow(2,cptcoveff); k++){    for(nres=1; nres <= nresult; nres++){ /* For each resultline */
     fprintf(ficrespijb,"\n#****** ");      for(k=1; k<=i1;k++){ /* For any combination of dummy covariates, fixed and varying */
     for(j=1;j<=cptcoveff;j++)        if(TKresult[nres]!= k)
       fprintf(ficrespijb,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]);          continue;
     fprintf(ficrespijb,"******\n");        fprintf(ficrespijb,"\n#****** ");
     if(invalidvarcomb[k]){        for(j=1;j<=cptcoveff;j++)
       fprintf(ficrespijb,"\n#Combination (%d) ignored because no cases \n",k);           fprintf(ficrespijb,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]);
       continue;        for (j=1; j<= nsq; j++){ /* For each selected (single) quantitative value */
     }          fprintf(ficrespijb," V%d=%f ",Tvqresult[nres][j],Tqresult[nres][j]);
             }
     /* for (agedeb=fage; agedeb>=bage; agedeb--){ /\* If stepm=6 months *\/ */        fprintf(ficrespijb,"******\n");
     for (agedeb=bage; agedeb<=fage; agedeb++){ /* If stepm=6 months and estepm=24 (2 years) */        if(invalidvarcomb[k]){
       /* nhstepm=(int) rint((agelim-agedeb)*YEARM/stepm); /\* Typically 20 years = 20*12/6=40 *\/ */          fprintf(ficrespijb,"\n#Combination (%d) ignored because no cases \n",k); 
       nhstepm=(int) rint((agedeb-ageminl)*YEARM/stepm); /* Typically 20 years = 20*12/6=40 */          continue;
       nhstepm = nhstepm/hstepm; /* Typically 40/4=10, because estepm=24 stepm=6 => hstepm=24/6=4 */        }
               
       /*          nhstepm=nhstepm*YEARM; aff par mois*/        /* for (agedeb=fage; agedeb>=bage; agedeb--){ /\* If stepm=6 months *\/ */
               for (agedeb=bage; agedeb<=fage; agedeb++){ /* If stepm=6 months and estepm=24 (2 years) */
       p3mat=ma3x(1,nlstate+ndeath,1, nlstate+ndeath, 0,nhstepm);          /* nhstepm=(int) rint((agelim-agedeb)*YEARM/stepm); /\* Typically 20 years = 20*12/6=40 *\/ */
       /* oldm=oldms;savm=savms; */          nhstepm=(int) rint((agedeb-ageminl)*YEARM/stepm); /* Typically 20 years = 20*12/6=40 */
       /* hbxij(p3mat,nhstepm,agedeb,hstepm,p,nlstate,stepm,oldm,savm, k);   */          nhstepm = nhstepm/hstepm; /* Typically 40/4=10, because estepm=24 stepm=6 => hstepm=24/6=4 */
       hbxij(p3mat,nhstepm,agedeb,hstepm,p,prevacurrent,nlstate,stepm, k);          
       /* hbxij(p3mat,nhstepm,agedeb,hstepm,p,prevacurrent,nlstate,stepm,oldm,savm, dnewm, doldm, dsavm, k); */          /*        nhstepm=nhstepm*YEARM; aff par mois*/
       fprintf(ficrespijb,"# Cov Agex agex-h hpijx with i,j=");          
       for(i=1; i<=nlstate;i++)          p3mat=ma3x(1,nlstate+ndeath,1, nlstate+ndeath, 0,nhstepm);
         for(j=1; j<=nlstate+ndeath;j++)          /* oldm=oldms;savm=savms; */
           fprintf(ficrespijb," %1d-%1d",i,j);          /* hbxij(p3mat,nhstepm,agedeb,hstepm,p,nlstate,stepm,oldm,savm, k);   */
       fprintf(ficrespijb,"\n");          hbxij(p3mat,nhstepm,agedeb,hstepm,p,prevacurrent,nlstate,stepm, k);
       for (h=0; h<=nhstepm; h++){          /* hbxij(p3mat,nhstepm,agedeb,hstepm,p,prevacurrent,nlstate,stepm,oldm,savm, dnewm, doldm, dsavm, k); */
         /*agedebphstep = agedeb + h*hstepm/YEARM*stepm;*/          fprintf(ficrespijb,"# Cov Agex agex-h hpijx with i,j=");
         fprintf(ficrespijb,"%d %3.f %3.f",k, agedeb, agedeb - h*hstepm/YEARM*stepm );  
         /* fprintf(ficrespijb,"%d %3.f %3.f",k, agedeb, agedeb + h*hstepm/YEARM*stepm ); */  
         for(i=1; i<=nlstate;i++)          for(i=1; i<=nlstate;i++)
           for(j=1; j<=nlstate+ndeath;j++)            for(j=1; j<=nlstate+ndeath;j++)
             fprintf(ficrespijb," %.5f", p3mat[i][j][h]);              fprintf(ficrespijb," %1d-%1d",i,j);
         fprintf(ficrespijb,"\n");          fprintf(ficrespijb,"\n");
       }          for (h=0; h<=nhstepm; h++){
       free_ma3x(p3mat,1,nlstate+ndeath,1, nlstate+ndeath, 0,nhstepm);            /*agedebphstep = agedeb + h*hstepm/YEARM*stepm;*/
       fprintf(ficrespijb,"\n");            fprintf(ficrespijb,"%d %3.f %3.f",k, agedeb, agedeb - h*hstepm/YEARM*stepm );
     }            /* fprintf(ficrespijb,"%d %3.f %3.f",k, agedeb, agedeb + h*hstepm/YEARM*stepm ); */
     /*}*/            for(i=1; i<=nlstate;i++)
   }              for(j=1; j<=nlstate+ndeath;j++)
                 fprintf(ficrespijb," %.5f", p3mat[i][j][h]);
             fprintf(ficrespijb,"\n");
           }
           free_ma3x(p3mat,1,nlstate+ndeath,1, nlstate+ndeath, 0,nhstepm);
           fprintf(ficrespijb,"\n");
         } /* end age deb */
       } /* end combination */
     } /* end nres */
   return 0;    return 0;
  } /*  hBijx */   } /*  hBijx */
   
Line 8949  int main(int argc, char *argv[]) Line 9407  int main(int argc, char *argv[])
   int itimes;    int itimes;
   int NDIM=2;    int NDIM=2;
   int vpopbased=0;    int vpopbased=0;
     int nres=0;
   
   char ca[32], cb[32];    char ca[32], cb[32];
   /*  FILE *fichtm; *//* Html File */    /*  FILE *fichtm; *//* Html File */
Line 8967  int main(int argc, char *argv[]) Line 9426  int main(int argc, char *argv[])
   char line[MAXLINE];    char line[MAXLINE];
   char path[MAXLINE],pathc[MAXLINE],pathcd[MAXLINE],pathtot[MAXLINE];    char path[MAXLINE],pathc[MAXLINE],pathcd[MAXLINE],pathtot[MAXLINE];
   
   char model[MAXLINE], modeltemp[MAXLINE];    char  modeltemp[MAXLINE];
   char resultline[MAXLINE];    char resultline[MAXLINE];
       
   char pathr[MAXLINE], pathimach[MAXLINE];     char pathr[MAXLINE], pathimach[MAXLINE]; 
Line 9281  int main(int argc, char *argv[]) Line 9740  int main(int argc, char *argv[])
         
   covar=matrix(0,NCOVMAX,1,n);  /**< used in readdata */    covar=matrix(0,NCOVMAX,1,n);  /**< used in readdata */
   coqvar=matrix(1,nqv,1,n);  /**< Fixed quantitative covariate */    coqvar=matrix(1,nqv,1,n);  /**< Fixed quantitative covariate */
   cotvar=ma3x(1,maxwav,1,ntv,1,n);  /**< Time varying covariate */    cotvar=ma3x(1,maxwav,1,ntv+nqtv,1,n);  /**< Time varying covariate (dummy and quantitative)*/
   cotqvar=ma3x(1,maxwav,1,nqtv,1,n);  /**< Time varying quantitative covariate */    cotqvar=ma3x(1,maxwav,1,nqtv,1,n);  /**< Time varying quantitative covariate */
   cptcovn=0; /*Number of covariates, i.e. number of '+' in model statement plus one, indepently of n in Vn*/    cptcovn=0; /*Number of covariates, i.e. number of '+' in model statement plus one, indepently of n in Vn*/
   /* v1+v2+v3+v2*v4+v5*age makes cptcovn = 5    /* v1+v2+v3+v2*v4+v5*age makes cptcovn = 5
Line 9334  int main(int argc, char *argv[]) Line 9793  int main(int argc, char *argv[])
           
     param= ma3x(1,nlstate,1,nlstate+ndeath-1,1,ncovmodel);      param= ma3x(1,nlstate,1,nlstate+ndeath-1,1,ncovmodel);
     for(i=1; i <=nlstate; i++){      for(i=1; i <=nlstate; i++){
                         j=0;        j=0;
       for(jj=1; jj <=nlstate+ndeath; jj++){        for(jj=1; jj <=nlstate+ndeath; jj++){
                                 if(jj==i) continue;          if(jj==i) continue;
                                 j++;          j++;
                                 fscanf(ficpar,"%1d%1d",&i1,&j1);          fscanf(ficpar,"%1d%1d",&i1,&j1);
                                 if ((i1 != i) || (j1 != jj)){          if ((i1 != i) || (j1 != jj)){
                                         printf("Error in line parameters number %d, %1d%1d instead of %1d%1d \n \            printf("Error in line parameters number %d, %1d%1d instead of %1d%1d \n \
 It might be a problem of design; if ncovcol and the model are correct\n \  It might be a problem of design; if ncovcol and the model are correct\n \
 run imach with mle=-1 to get a correct template of the parameter file.\n",numlinepar, i,j, i1, j1);  run imach with mle=-1 to get a correct template of the parameter file.\n",numlinepar, i,j, i1, j1);
                                         exit(1);            exit(1);
                                 }          }
                                 fprintf(ficparo,"%1d%1d",i1,j1);          fprintf(ficparo,"%1d%1d",i1,j1);
                                 if(mle==1)          if(mle==1)
                                         printf("%1d%1d",i,jj);            printf("%1d%1d",i,jj);
                                 fprintf(ficlog,"%1d%1d",i,jj);          fprintf(ficlog,"%1d%1d",i,jj);
                                 for(k=1; k<=ncovmodel;k++){          for(k=1; k<=ncovmodel;k++){
                                         fscanf(ficpar," %lf",&param[i][j][k]);            fscanf(ficpar," %lf",&param[i][j][k]);
                                         if(mle==1){            if(mle==1){
                                                 printf(" %lf",param[i][j][k]);              printf(" %lf",param[i][j][k]);
                                                 fprintf(ficlog," %lf",param[i][j][k]);              fprintf(ficlog," %lf",param[i][j][k]);
                                         }            }
                                         else            else
                                                 fprintf(ficlog," %lf",param[i][j][k]);              fprintf(ficlog," %lf",param[i][j][k]);
                                         fprintf(ficparo," %lf",param[i][j][k]);            fprintf(ficparo," %lf",param[i][j][k]);
                                 }          }
                                 fscanf(ficpar,"\n");          fscanf(ficpar,"\n");
                                 numlinepar++;          numlinepar++;
                                 if(mle==1)          if(mle==1)
                                         printf("\n");            printf("\n");
                                 fprintf(ficlog,"\n");          fprintf(ficlog,"\n");
                                 fprintf(ficparo,"\n");          fprintf(ficparo,"\n");
       }        }
     }        }  
     fflush(ficlog);      fflush(ficlog);
       
     /* Reads scales values */      /* Reads scales values */
     p=param[1][1];      p=param[1][1];
           
Line 9385  run imach with mle=-1 to get a correct t Line 9844  run imach with mle=-1 to get a correct t
   
     for(i=1; i <=nlstate; i++){      for(i=1; i <=nlstate; i++){
       for(j=1; j <=nlstate+ndeath-1; j++){        for(j=1; j <=nlstate+ndeath-1; j++){
                                 fscanf(ficpar,"%1d%1d",&i1,&j1);          fscanf(ficpar,"%1d%1d",&i1,&j1);
                                 if ( (i1-i) * (j1-j) != 0){          if ( (i1-i) * (j1-j) != 0){
                                         printf("Error in line parameters number %d, %1d%1d instead of %1d%1d \n",numlinepar, i,j, i1, j1);            printf("Error in line parameters number %d, %1d%1d instead of %1d%1d \n",numlinepar, i,j, i1, j1);
                                         exit(1);            exit(1);
                                 }          }
                                 printf("%1d%1d",i,j);          printf("%1d%1d",i,j);
                                 fprintf(ficparo,"%1d%1d",i1,j1);          fprintf(ficparo,"%1d%1d",i1,j1);
                                 fprintf(ficlog,"%1d%1d",i1,j1);          fprintf(ficlog,"%1d%1d",i1,j1);
                                 for(k=1; k<=ncovmodel;k++){          for(k=1; k<=ncovmodel;k++){
                                         fscanf(ficpar,"%le",&delti3[i][j][k]);            fscanf(ficpar,"%le",&delti3[i][j][k]);
                                         printf(" %le",delti3[i][j][k]);            printf(" %le",delti3[i][j][k]);
                                         fprintf(ficparo," %le",delti3[i][j][k]);            fprintf(ficparo," %le",delti3[i][j][k]);
                                         fprintf(ficlog," %le",delti3[i][j][k]);            fprintf(ficlog," %le",delti3[i][j][k]);
                                 }          }
                                 fscanf(ficpar,"\n");          fscanf(ficpar,"\n");
                                 numlinepar++;          numlinepar++;
                                 printf("\n");          printf("\n");
                                 fprintf(ficparo,"\n");          fprintf(ficparo,"\n");
                                 fprintf(ficlog,"\n");          fprintf(ficlog,"\n");
       }        }
     }      }
     fflush(ficlog);      fflush(ficlog);
                       
     /* Reads covariance matrix */      /* Reads covariance matrix */
     delti=delti3[1][1];      delti=delti3[1][1];
                                   
Line 9497  Please run with mle=-1 to get a correct Line 9956  Please run with mle=-1 to get a correct
   agedc=vector(1,n);    agedc=vector(1,n);
   cod=ivector(1,n);    cod=ivector(1,n);
   for(i=1;i<=n;i++){    for(i=1;i<=n;i++){
                 num[i]=0;      num[i]=0;
                 moisnais[i]=0;      moisnais[i]=0;
                 annais[i]=0;      annais[i]=0;
                 moisdc[i]=0;      moisdc[i]=0;
                 andc[i]=0;      andc[i]=0;
                 agedc[i]=0;      agedc[i]=0;
                 cod[i]=0;      cod[i]=0;
                 weight[i]=1.0; /* Equal weights, 1 by default */      weight[i]=1.0; /* Equal weights, 1 by default */
         }    }
   mint=matrix(1,maxwav,1,n);    mint=matrix(1,maxwav,1,n);
   anint=matrix(1,maxwav,1,n);    anint=matrix(1,maxwav,1,n);
   s=imatrix(1,maxwav+1,1,n); /* s[i][j] health state for wave i and individual j */     s=imatrix(1,maxwav+1,1,n); /* s[i][j] health state for wave i and individual j */ 
Line 9518  Please run with mle=-1 to get a correct Line 9977  Please run with mle=-1 to get a correct
     goto end;      goto end;
   
   /* Calculation of the number of parameters from char model */    /* Calculation of the number of parameters from char model */
     /*    modelsav=V2+V1+V4+age*V3 strb=age*V3 stra=V2+V1+V4     /*    modelsav=V2+V1+V4+age*V3 strb=age*V3 stra=V2+V1+V4 
         k=4 (age*V3) Tvar[k=4]= 3 (from V3) Tag[cptcovage=1]=4          k=4 (age*V3) Tvar[k=4]= 3 (from V3) Tag[cptcovage=1]=4
         k=3 V4 Tvar[k=3]= 4 (from V4)          k=3 V4 Tvar[k=3]= 4 (from V4)
         k=2 V1 Tvar[k=2]= 1 (from V1)          k=2 V1 Tvar[k=2]= 1 (from V1)
         k=1 Tvar[1]=2 (from V2)          k=1 Tvar[1]=2 (from V2)
     */    */
     
         Tvar=ivector(1,NCOVMAX); /* Was 15 changed to NCOVMAX. */    Tvar=ivector(1,NCOVMAX); /* Was 15 changed to NCOVMAX. */
     TvarsDind=ivector(1,NCOVMAX); /*  */
     TvarsD=ivector(1,NCOVMAX); /*  */
     TvarsQind=ivector(1,NCOVMAX); /*  */
     TvarsQ=ivector(1,NCOVMAX); /*  */
     TvarF=ivector(1,NCOVMAX); /*  */
     TvarFind=ivector(1,NCOVMAX); /*  */
     TvarV=ivector(1,NCOVMAX); /*  */
     TvarVind=ivector(1,NCOVMAX); /*  */
     TvarA=ivector(1,NCOVMAX); /*  */
     TvarAind=ivector(1,NCOVMAX); /*  */
   TvarFD=ivector(1,NCOVMAX); /*  */    TvarFD=ivector(1,NCOVMAX); /*  */
   TvarFDind=ivector(1,NCOVMAX); /*  */    TvarFDind=ivector(1,NCOVMAX); /*  */
   TvarFQ=ivector(1,NCOVMAX); /*  */    TvarFQ=ivector(1,NCOVMAX); /*  */
Line 9536  Please run with mle=-1 to get a correct Line 10005  Please run with mle=-1 to get a correct
   TvarVQind=ivector(1,NCOVMAX); /*  */    TvarVQind=ivector(1,NCOVMAX); /*  */
   
   Tvalsel=vector(1,NCOVMAX); /*  */    Tvalsel=vector(1,NCOVMAX); /*  */
     Tvarsel=ivector(1,NCOVMAX); /*  */
   Typevar=ivector(-1,NCOVMAX); /* -1 to 2 */    Typevar=ivector(-1,NCOVMAX); /* -1 to 2 */
   Fixed=ivector(-1,NCOVMAX); /* -1 to 3 */    Fixed=ivector(-1,NCOVMAX); /* -1 to 3 */
   Dummy=ivector(-1,NCOVMAX); /* -1 to 3 */    Dummy=ivector(-1,NCOVMAX); /* -1 to 3 */
     DummyV=ivector(1,NCOVMAX); /* 1 to 3 */
     FixedV=ivector(1,NCOVMAX); /* 1 to 3 */
   /*  V2+V1+V4+age*V3 is a model with 4 covariates (3 plus signs).     /*  V2+V1+V4+age*V3 is a model with 4 covariates (3 plus signs). 
       For each model-covariate stores the data-covariate id. Tvar[1]=2, Tvar[2]=1, Tvar[3]=4,         For each model-covariate stores the data-covariate id. Tvar[1]=2, Tvar[2]=1, Tvar[3]=4, 
       Tvar[4=age*V3] is 3 and 'age' is recorded in Tage.        Tvar[4=age*V3] is 3 and 'age' is recorded in Tage.
Line 10315  Please run with mle=-1 to get a correct Line 10787  Please run with mle=-1 to get a correct
       ungetc(c,ficpar);        ungetc(c,ficpar);
       fgets(line, MAXLINE, ficpar);        fgets(line, MAXLINE, ficpar);
       fputs(line,stdout);        fputs(line,stdout);
         fputs(line,ficres);
       fputs(line,ficparo);        fputs(line,ficparo);
     }      }
     ungetc(c,ficpar);      ungetc(c,ficpar);
Line 10331  Please run with mle=-1 to get a correct Line 10804  Please run with mle=-1 to get a correct
       fgets(line, MAXLINE, ficpar);        fgets(line, MAXLINE, ficpar);
       fputs(line,stdout);        fputs(line,stdout);
       fputs(line,ficparo);        fputs(line,ficparo);
         fputs(line,ficres);
     }      }
     ungetc(c,ficpar);      ungetc(c,ficpar);
           
Line 10341  Please run with mle=-1 to get a correct Line 10815  Please run with mle=-1 to get a correct
     /* day and month of proj2 are not used but only year anproj2.*/      /* day and month of proj2 are not used but only year anproj2.*/
           
     /* Results */      /* Results */
       nresult=0;
     while(fgets(line, MAXLINE, ficpar)) {      while(fgets(line, MAXLINE, ficpar)) {
       /* If line starts with a # it is a comment */        /* If line starts with a # it is a comment */
       if (line[0] == '#') {        if (line[0] == '#') {
Line 10348  Please run with mle=-1 to get a correct Line 10823  Please run with mle=-1 to get a correct
         fputs(line,stdout);          fputs(line,stdout);
         fputs(line,ficparo);          fputs(line,ficparo);
         fputs(line,ficlog);          fputs(line,ficlog);
           fputs(line,ficres);
         continue;          continue;
       }else        }else
         break;          break;
Line 10358  Please run with mle=-1 to get a correct Line 10834  Please run with mle=-1 to get a correct
       else if (num_filled != 1){        else if (num_filled != 1){
         printf("ERROR %d: result line should be at minimum 'result=' %s\n",num_filled, line);          printf("ERROR %d: result line should be at minimum 'result=' %s\n",num_filled, line);
       }        }
       printf("Result %d: result line should be at minimum 'line=' %s, result=%s\n",num_filled, line, resultline);        nresult++; /* Sum of resultlines */
       decoderesult(resultline);        printf("Result %d: result=%s\n",nresult, resultline);
         if(nresult > MAXRESULTLINES){
           printf("ERROR: Current version of IMaCh limits the number of resultlines to %d, you used %d\n",MAXRESULTLINES,nresult);
           fprintf(ficlog,"ERROR: Current version of IMaCh limits the number of resultlines to %d, you used %d\n",MAXRESULTLINES,nresult);
           goto end;
         }
         decoderesult(resultline, nresult); /* Fills TKresult[nresult] combination and Tresult[nresult][k4+1] combination values */
         fprintf(ficparo,"result: %s\n",resultline);
         fprintf(ficres,"result: %s\n",resultline);
         fprintf(ficlog,"result: %s\n",resultline);
       while(fgets(line, MAXLINE, ficpar)) {        while(fgets(line, MAXLINE, ficpar)) {
         /* If line starts with a # it is a comment */          /* If line starts with a # it is a comment */
         if (line[0] == '#') {          if (line[0] == '#') {
           numlinepar++;            numlinepar++;
           fputs(line,stdout);            fputs(line,stdout);
           fputs(line,ficparo);            fputs(line,ficparo);
             fputs(line,ficres);
           fputs(line,ficlog);            fputs(line,ficlog);
           continue;            continue;
         }else          }else
Line 10446  Please run with mle=-1 to get a correct Line 10932  Please run with mle=-1 to get a correct
             mobaverages[i][j][k]=0.;              mobaverages[i][j][k]=0.;
       mobaverage=mobaverages;        mobaverage=mobaverages;
       if (mobilav!=0) {        if (mobilav!=0) {
           printf("Movingaveraging observed prevalence\n");
         if (movingaverage(probs, ageminpar, agemaxpar, mobaverage, mobilav)!=0){          if (movingaverage(probs, ageminpar, agemaxpar, mobaverage, mobilav)!=0){
           fprintf(ficlog," Error in movingaverage mobilav=%d\n",mobilav);            fprintf(ficlog," Error in movingaverage mobilav=%d\n",mobilav);
           printf(" Error in movingaverage mobilav=%d\n",mobilav);            printf(" Error in movingaverage mobilav=%d\n",mobilav);
Line 10454  Please run with mle=-1 to get a correct Line 10941  Please run with mle=-1 to get a correct
       /* /\* Prevalence for each covariates in probs[age][status][cov] *\/ */        /* /\* Prevalence for each covariates in probs[age][status][cov] *\/ */
       /* prevalence(probs, ageminpar, agemaxpar, s, agev, nlstate, imx, Tvar, nbcode, ncodemax, mint, anint, dateprev1, dateprev2, firstpass, lastpass); */        /* prevalence(probs, ageminpar, agemaxpar, s, agev, nlstate, imx, Tvar, nbcode, ncodemax, mint, anint, dateprev1, dateprev2, firstpass, lastpass); */
       else if (mobilavproj !=0) {        else if (mobilavproj !=0) {
           printf("Movingaveraging projected observed prevalence\n");
         if (movingaverage(probs, ageminpar, agemaxpar, mobaverage, mobilavproj)!=0){          if (movingaverage(probs, ageminpar, agemaxpar, mobaverage, mobilavproj)!=0){
           fprintf(ficlog," Error in movingaverage mobilavproj=%d\n",mobilavproj);            fprintf(ficlog," Error in movingaverage mobilavproj=%d\n",mobilavproj);
           printf(" Error in movingaverage mobilavproj=%d\n",mobilavproj);            printf(" Error in movingaverage mobilavproj=%d\n",mobilavproj);
Line 10508  Please run with mle=-1 to get a correct Line 10996  Please run with mle=-1 to get a correct
     }      }
     printf("Computing Health Expectancies: result on file '%s' ...", filerese);fflush(stdout);      printf("Computing Health Expectancies: result on file '%s' ...", filerese);fflush(stdout);
     fprintf(ficlog,"Computing Health Expectancies: result on file '%s' ...", filerese);fflush(ficlog);      fprintf(ficlog,"Computing Health Expectancies: result on file '%s' ...", filerese);fflush(ficlog);
   
       pstamp(ficreseij);
                                   
     for (k=1; k <= (int) pow(2,cptcoveff); k++){ /* For any combination of dummy covariates, fixed and varying */      i1=pow(2,cptcoveff); /* Number of combination of dummy covariates */
       if (cptcovn < 1){i1=1;}
       
       for(nres=1; nres <= nresult; nres++) /* For each resultline */
       for(k=1; k<=i1;k++){ /* For any combination of dummy covariates, fixed and varying */
         if(TKresult[nres]!= k)
           continue;
       fprintf(ficreseij,"\n#****** ");        fprintf(ficreseij,"\n#****** ");
         printf("\n#****** ");
       for(j=1;j<=cptcoveff;j++) {        for(j=1;j<=cptcoveff;j++) {
         fprintf(ficreseij,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]);          fprintf(ficreseij,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]);
           printf("V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]);
         }
         for (j=1; j<= nsq; j++){ /* For each selected (single) quantitative value */
           printf(" V%d=%f ",Tvqresult[nres][j],Tqresult[nres][j]);
           fprintf(ficreseij," V%d=%f ",Tvqresult[nres][j],Tqresult[nres][j]);
       }        }
       fprintf(ficreseij,"******\n");        fprintf(ficreseij,"******\n");
         printf("******\n");
               
       eij=ma3x(1,nlstate,1,nlstate,(int) bage, (int) fage);        eij=ma3x(1,nlstate,1,nlstate,(int) bage, (int) fage);
       oldm=oldms;savm=savms;        oldm=oldms;savm=savms;
       evsij(eij, p, nlstate, stepm, (int) bage, (int)fage, oldm, savm, k, estepm, strstart);          evsij(eij, p, nlstate, stepm, (int) bage, (int)fage, oldm, savm, k, estepm, strstart, nres);  
               
       free_ma3x(eij,1,nlstate,1,nlstate,(int) bage, (int)fage);        free_ma3x(eij,1,nlstate,1,nlstate,(int) bage, (int)fage);
     }      }
Line 10569  Please run with mle=-1 to get a correct Line 11072  Please run with mle=-1 to get a correct
     /*for(cptcov=1,k=0;cptcov<=i1;cptcov++){      /*for(cptcov=1,k=0;cptcov<=i1;cptcov++){
       for(cptcod=1;cptcod<=ncodemax[cptcov];cptcod++){*/        for(cptcod=1;cptcod<=ncodemax[cptcov];cptcod++){*/
                       
     for (k=1; k <= (int) pow(2,cptcoveff); k++){      i1=pow(2,cptcoveff); /* Number of combination of dummy covariates */
       printf("\n#****** ");      if (cptcovn < 1){i1=1;}
       fprintf(ficrest,"\n#****** ");      
       fprintf(ficlog,"\n#****** ");      for(nres=1; nres <= nresult; nres++) /* For each resultline */
       for(k=1; k<=i1;k++){ /* For any combination of dummy covariates, fixed and varying */
         if(TKresult[nres]!= k)
           continue;
         printf("\n#****** Selected:");
         fprintf(ficrest,"\n#****** Selected:");
         fprintf(ficlog,"\n#****** Selected:");
       for(j=1;j<=cptcoveff;j++){         for(j=1;j<=cptcoveff;j++){ 
         printf("V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]);          printf("V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]);
         fprintf(ficrest,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]);          fprintf(ficrest,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]);
         fprintf(ficlog,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]);          fprintf(ficlog,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]);
       }        }
         for (j=1; j<= nsq; j++){ /* For each selected (single) quantitative value */
           printf(" V%d=%f ",Tvqresult[nres][j],Tqresult[nres][j]);
           fprintf(ficrest," V%d=%f ",Tvqresult[nres][j],Tqresult[nres][j]);
           fprintf(ficlog," V%d=%f ",Tvqresult[nres][j],Tqresult[nres][j]);
         } 
       fprintf(ficrest,"******\n");        fprintf(ficrest,"******\n");
       fprintf(ficlog,"******\n");        fprintf(ficlog,"******\n");
       printf("******\n");        printf("******\n");
Line 10588  Please run with mle=-1 to get a correct Line 11102  Please run with mle=-1 to get a correct
         fprintf(ficresstdeij,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]);          fprintf(ficresstdeij,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]);
         fprintf(ficrescveij,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]);          fprintf(ficrescveij,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]);
       }        }
         for (j=1; j<= nsq; j++){ /* For each selected (single) quantitative value */
           fprintf(ficresstdeij," V%d=%f ",Tvqresult[nres][j],Tqresult[nres][j]);
           fprintf(ficrescveij," V%d=%f ",Tvqresult[nres][j],Tqresult[nres][j]);
         } 
       fprintf(ficresstdeij,"******\n");        fprintf(ficresstdeij,"******\n");
       fprintf(ficrescveij,"******\n");        fprintf(ficrescveij,"******\n");
               
       fprintf(ficresvij,"\n#****** ");        fprintf(ficresvij,"\n#****** ");
         /* pstamp(ficresvij); */
       for(j=1;j<=cptcoveff;j++)         for(j=1;j<=cptcoveff;j++) 
         fprintf(ficresvij,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]);          fprintf(ficresvij,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]);
         for (j=1; j<= nsq; j++){ /* For each selected (single) quantitative value */
           fprintf(ficresvij," V%d=%f ",Tvqresult[nres][j],Tqresult[nres][j]);
         } 
       fprintf(ficresvij,"******\n");        fprintf(ficresvij,"******\n");
               
       eij=ma3x(1,nlstate,1,nlstate,(int) bage, (int) fage);        eij=ma3x(1,nlstate,1,nlstate,(int) bage, (int) fage);
       oldm=oldms;savm=savms;        oldm=oldms;savm=savms;
       printf(" cvevsij combination#=%d, ",k);        printf(" cvevsij ");
       fprintf(ficlog, " cvevsij combination#=%d, ",k);        fprintf(ficlog, " cvevsij ");
       cvevsij(eij, p, nlstate, stepm, (int) bage, (int)fage, oldm, savm, k, estepm, delti, matcov, strstart);        cvevsij(eij, p, nlstate, stepm, (int) bage, (int)fage, oldm, savm, k, estepm, delti, matcov, strstart, nres);
       printf(" end cvevsij \n ");        printf(" end cvevsij \n ");
       fprintf(ficlog, " end cvevsij \n ");        fprintf(ficlog, " end cvevsij \n ");
               
Line 10617  Please run with mle=-1 to get a correct Line 11139  Please run with mle=-1 to get a correct
         cptcod= 0; /* To be deleted */          cptcod= 0; /* To be deleted */
         printf("varevsij vpopbased=%d \n",vpopbased);          printf("varevsij vpopbased=%d \n",vpopbased);
         fprintf(ficlog, "varevsij vpopbased=%d \n",vpopbased);          fprintf(ficlog, "varevsij vpopbased=%d \n",vpopbased);
         varevsij(optionfilefiname, vareij, matcov, p, delti, nlstate, stepm, (int) bage, (int) fage, oldm, savm, prlim, ftolpl, &ncvyear, k, estepm, cptcov,cptcod,vpopbased,mobilav, strstart); /* cptcod not initialized Intel */          varevsij(optionfilefiname, vareij, matcov, p, delti, nlstate, stepm, (int) bage, (int) fage, oldm, savm, prlim, ftolpl, &ncvyear, k, estepm, cptcov,cptcod,vpopbased,mobilav, strstart, nres); /* cptcod not initialized Intel */
         fprintf(ficrest,"# Total life expectancy with std error and decomposition into time to be expected in each health state\n#  (weighted average of eij where weights are ");          fprintf(ficrest,"# Total life expectancy with std error and decomposition into time to be expected in each health state\n#  (weighted average of eij where weights are ");
         if(vpopbased==1)          if(vpopbased==1)
           fprintf(ficrest,"the age specific prevalence observed (cross-sectionally) in the population i.e cross-sectionally\n in each health state (popbased=1) (mobilav=%d)\n",mobilav);            fprintf(ficrest,"the age specific prevalence observed (cross-sectionally) in the population i.e cross-sectionally\n in each health state (popbased=1) (mobilav=%d)\n",mobilav);
Line 10631  Please run with mle=-1 to get a correct Line 11153  Please run with mle=-1 to get a correct
         printf("Computing age specific period (stable) prevalences in each health state \n");          printf("Computing age specific period (stable) prevalences in each health state \n");
         fprintf(ficlog,"Computing age specific period (stable) prevalences in each health state \n");          fprintf(ficlog,"Computing age specific period (stable) prevalences in each health state \n");
         for(age=bage; age <=fage ;age++){          for(age=bage; age <=fage ;age++){
           prevalim(prlim, nlstate, p, age, oldm, savm, ftolpl, &ncvyear, k); /*ZZ Is it the correct prevalim */            prevalim(prlim, nlstate, p, age, oldm, savm, ftolpl, &ncvyear, k, nres); /*ZZ Is it the correct prevalim */
           if (vpopbased==1) {            if (vpopbased==1) {
             if(mobilav ==0){              if(mobilav ==0){
               for(i=1; i<=nlstate;i++)                for(i=1; i<=nlstate;i++)
Line 10668  Please run with mle=-1 to get a correct Line 11190  Please run with mle=-1 to get a correct
       free_ma3x(eij,1,nlstate,1,nlstate,(int) bage, (int)fage);        free_ma3x(eij,1,nlstate,1,nlstate,(int) bage, (int)fage);
       free_ma3x(vareij,1,nlstate,1,nlstate,(int) bage, (int)fage);        free_ma3x(vareij,1,nlstate,1,nlstate,(int) bage, (int)fage);
       free_vector(epj,1,nlstate+1);        free_vector(epj,1,nlstate+1);
       printf("done \n");fflush(stdout);        printf("done selection\n");fflush(stdout);
       fprintf(ficlog,"done\n");fflush(ficlog);        fprintf(ficlog,"done selection\n");fflush(ficlog);
               
       /*}*/        /*}*/
     } /* End k */      } /* End k selection */
   
     printf("done State-specific expectancies\n");fflush(stdout);      printf("done State-specific expectancies\n");fflush(stdout);
     fprintf(ficlog,"done State-specific expectancies\n");fflush(ficlog);      fprintf(ficlog,"done State-specific expectancies\n");fflush(ficlog);
Line 10691  Please run with mle=-1 to get a correct Line 11213  Please run with mle=-1 to get a correct
     /*for(cptcov=1,k=0;cptcov<=i1;cptcov++){      /*for(cptcov=1,k=0;cptcov<=i1;cptcov++){
       for(cptcod=1;cptcod<=ncodemax[cptcov];cptcod++){*/        for(cptcod=1;cptcod<=ncodemax[cptcov];cptcod++){*/
           
     for (k=1; k <= (int) pow(2,cptcoveff); k++){      i1=pow(2,cptcoveff);
       if (cptcovn < 1){i1=1;}
   
       for(nres=1; nres <= nresult; nres++) /* For each resultline */
       for(k=1; k<=i1;k++){
         if(TKresult[nres]!= k)
           continue;
       fprintf(ficresvpl,"\n#****** ");        fprintf(ficresvpl,"\n#****** ");
       printf("\n#****** ");        printf("\n#****** ");
       fprintf(ficlog,"\n#****** ");        fprintf(ficlog,"\n#****** ");
Line 10700  Please run with mle=-1 to get a correct Line 11228  Please run with mle=-1 to get a correct
         fprintf(ficlog,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]);          fprintf(ficlog,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]);
         printf("V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]);          printf("V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]);
       }        }
         for (j=1; j<= nsq; j++){ /* For each selected (single) quantitative value */
           printf(" V%d=%f ",Tvqresult[nres][j],Tqresult[nres][j]);
           fprintf(ficresvpl," V%d=%f ",Tvqresult[nres][j],Tqresult[nres][j]);
           fprintf(ficlog," V%d=%f ",Tvqresult[nres][j],Tqresult[nres][j]);
         } 
       fprintf(ficresvpl,"******\n");        fprintf(ficresvpl,"******\n");
       printf("******\n");        printf("******\n");
       fprintf(ficlog,"******\n");        fprintf(ficlog,"******\n");
               
       varpl=matrix(1,nlstate,(int) bage, (int) fage);        varpl=matrix(1,nlstate,(int) bage, (int) fage);
       oldm=oldms;savm=savms;        oldm=oldms;savm=savms;
       varprevlim(fileres, varpl, matcov, p, delti, nlstate, stepm, (int) bage, (int) fage, oldm, savm, prlim, ftolpl, &ncvyear, k, strstart);        varprevlim(fileres, varpl, matcov, p, delti, nlstate, stepm, (int) bage, (int) fage, oldm, savm, prlim, ftolpl, &ncvyear, k, strstart, nres);
       free_matrix(varpl,1,nlstate,(int) bage, (int)fage);        free_matrix(varpl,1,nlstate,(int) bage, (int)fage);
       /*}*/        /*}*/
     }      }
Line 10741  Please run with mle=-1 to get a correct Line 11274  Please run with mle=-1 to get a correct
   free_matrix(newms, 1,nlstate+ndeath,1,nlstate+ndeath);    free_matrix(newms, 1,nlstate+ndeath,1,nlstate+ndeath);
   free_matrix(savms, 1,nlstate+ndeath,1,nlstate+ndeath);    free_matrix(savms, 1,nlstate+ndeath,1,nlstate+ndeath);
   free_ma3x(cotqvar,1,maxwav,1,nqtv,1,n);    free_ma3x(cotqvar,1,maxwav,1,nqtv,1,n);
   free_ma3x(cotvar,1,maxwav,1,ntv,1,n);    free_ma3x(cotvar,1,maxwav,1,ntv+nqtv,1,n);
   free_matrix(coqvar,1,maxwav,1,n);    free_matrix(coqvar,1,maxwav,1,n);
   free_matrix(covar,0,NCOVMAX,1,n);    free_matrix(covar,0,NCOVMAX,1,n);
   free_matrix(matcov,1,npar,1,npar);    free_matrix(matcov,1,npar,1,npar);
Line 10755  Please run with mle=-1 to get a correct Line 11288  Please run with mle=-1 to get a correct
   free_ivector(ncodemaxwundef,1,NCOVMAX);    free_ivector(ncodemaxwundef,1,NCOVMAX);
   free_ivector(Dummy,-1,NCOVMAX);    free_ivector(Dummy,-1,NCOVMAX);
   free_ivector(Fixed,-1,NCOVMAX);    free_ivector(Fixed,-1,NCOVMAX);
     free_ivector(DummyV,1,NCOVMAX);
     free_ivector(FixedV,1,NCOVMAX);
   free_ivector(Typevar,-1,NCOVMAX);    free_ivector(Typevar,-1,NCOVMAX);
   free_ivector(Tvar,1,NCOVMAX);    free_ivector(Tvar,1,NCOVMAX);
     free_ivector(TvarsQ,1,NCOVMAX);
     free_ivector(TvarsQind,1,NCOVMAX);
     free_ivector(TvarsD,1,NCOVMAX);
     free_ivector(TvarsDind,1,NCOVMAX);
   free_ivector(TvarFD,1,NCOVMAX);    free_ivector(TvarFD,1,NCOVMAX);
   free_ivector(TvarFDind,1,NCOVMAX);    free_ivector(TvarFDind,1,NCOVMAX);
     free_ivector(TvarF,1,NCOVMAX);
     free_ivector(TvarFind,1,NCOVMAX);
     free_ivector(TvarV,1,NCOVMAX);
     free_ivector(TvarVind,1,NCOVMAX);
     free_ivector(TvarA,1,NCOVMAX);
     free_ivector(TvarAind,1,NCOVMAX);
   free_ivector(TvarFQ,1,NCOVMAX);    free_ivector(TvarFQ,1,NCOVMAX);
   free_ivector(TvarFQind,1,NCOVMAX);    free_ivector(TvarFQind,1,NCOVMAX);
   free_ivector(TvarVD,1,NCOVMAX);    free_ivector(TvarVD,1,NCOVMAX);

Removed from v.1.231  
changed lines
  Added in v.1.238


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>