Diff for /imach/src/imach.c between versions 1.219 and 1.220

version 1.219, 2016/02/15 00:48:12 version 1.220, 2016/02/15 23:22:02
Line 1 Line 1
 /* $Id$  /* $Id$
   $State$    $State$
   $Log$    $Log$
     Revision 1.220  2016/02/15 23:22:02  brouard
     Summary: 0.99r2
   
   Revision 1.219  2016/02/15 00:48:12  brouard    Revision 1.219  2016/02/15 00:48:12  brouard
   *** empty log message ***    *** empty log message ***
   
Line 736  Back prevalence and projections: Line 739  Back prevalence and projections:
 /* #define DEBUGLINMIN */  /* #define DEBUGLINMIN */
 /* #define DEBUGHESS */  /* #define DEBUGHESS */
 #define DEBUGHESSIJ  #define DEBUGHESSIJ
 /* #define LINMINORIGINAL  /\* Don't use loop on scale in linmin (accepting nan)*\/ */  #define LINMINORIGINAL  /* Don't use loop on scale in linmin (accepting nan)*/
 #define POWELL /* Instead of NLOPT */  #define POWELL /* Instead of NLOPT */
 #define POWELLF1F3 /* Skip test */  #define POWELLF1F3 /* Skip test */
 /* #define POWELLORIGINAL /\* Don't use Directest to decide new direction but original Powell test *\/ */  /* #define POWELLORIGINAL /\* Don't use Directest to decide new direction but original Powell test *\/ */
Line 994  int **nbcode, *Tvar; /**< model=V2 => Tv Line 997  int **nbcode, *Tvar; /**< model=V2 => Tv
 int *Tage;  int *Tage;
 int *Ndum; /** Freq of modality (tricode */  int *Ndum; /** Freq of modality (tricode */
 /* int **codtab;*/ /**< codtab=imatrix(1,100,1,10); */  /* int **codtab;*/ /**< codtab=imatrix(1,100,1,10); */
 int **Tvard, *Tprod, cptcovprod, *Tvaraff;  int **Tvard, *Tprod, cptcovprod, *Tvaraff, *invalidvarcomb;
 double *lsurv, *lpop, *tpop;  double *lsurv, *lpop, *tpop;
   
 double ftol=FTOL; /**< Tolerance for computing Max Likelihood */  double ftol=FTOL; /**< Tolerance for computing Max Likelihood */
Line 2289  Earliest age to start was %d-%d=%d, ncvl Line 2292  Earliest age to start was %d-%d=%d, ncvl
     *ncvyear= -( (int)age- (int)agefin);      *ncvyear= -( (int)age- (int)agefin);
     /* printf("Back maxmax=%lf ncvloop=%d, age=%d, agefin=%d ncvyear=%d \n", maxmax, ncvloop, (int)age, (int)agefin, *ncvyear);*/      /* printf("Back maxmax=%lf ncvloop=%d, age=%d, agefin=%d ncvyear=%d \n", maxmax, ncvloop, (int)age, (int)agefin, *ncvyear);*/
     if(maxmax < ftolpl){      if(maxmax < ftolpl){
       printf("OK Back maxmax=%lf ncvloop=%d, age=%d, agefin=%d ncvyear=%d \n", maxmax, ncvloop, (int)age, (int)agefin, *ncvyear);        /* printf("OK Back maxmax=%lf ncvloop=%d, age=%d, agefin=%d ncvyear=%d \n", maxmax, ncvloop, (int)age, (int)agefin, *ncvyear); */
       free_vector(min,1,nlstate);        free_vector(min,1,nlstate);
       free_vector(max,1,nlstate);        free_vector(max,1,nlstate);
       free_vector(meandiff,1,nlstate);        free_vector(meandiff,1,nlstate);
Line 3671  void pstamp(FILE *fichier) Line 3674  void pstamp(FILE *fichier)
 }  }
   
 /************ Frequencies ********************/  /************ Frequencies ********************/
 void  freqsummary(char fileres[], int iagemin, int iagemax, int **s, double **agev, int nlstate, int imx, \   void  freqsummary(char fileres[], int iagemin, int iagemax, int **s, double **agev, int nlstate, int imx, \
                   int *Tvaraff, int **nbcode, int *ncodemax,double **mint,double **anint, char strstart[],\                                                                           int *Tvaraff, int *invalidvarcomb, int **nbcode, int *ncodemax,double **mint,double **anint, char strstart[],  \
                   int firstpass,  int lastpass, int stepm, int weightopt, char model[])                                                                           int firstpass,  int lastpass, int stepm, int weightopt, char model[])
 {  /* Some frequencies */   {  /* Some frequencies */
       
   int i, m, jk, j1, bool, z1,j;           int i, m, jk, j1, bool, z1,j;
   int mi; /* Effective wave */           int iind=0, iage=0;
   int first;           int mi; /* Effective wave */
   double ***freq; /* Frequencies */           int first;
   double *pp, **prop;           double ***freq; /* Frequencies */
   double pos,posprop, k2, dateintsum=0,k2cpt=0;           double *pp, **prop, *posprop, *pospropt;
   char fileresp[FILENAMELENGTH], fileresphtm[FILENAMELENGTH], fileresphtmfr[FILENAMELENGTH];           double pos=0., posproptt=0., pospropta=0., k2, dateintsum=0,k2cpt=0;
   double agebegin, ageend;           char fileresp[FILENAMELENGTH], fileresphtm[FILENAMELENGTH], fileresphtmfr[FILENAMELENGTH];
                double agebegin, ageend;
   pp=vector(1,nlstate);      
   prop=matrix(1,nlstate,iagemin-AGEMARGE,iagemax+3+AGEMARGE);            pp=vector(1,nlstate);
   /* prop=matrix(1,nlstate,iagemin,iagemax+3); */           prop=matrix(1,nlstate,iagemin-AGEMARGE,iagemax+3+AGEMARGE); 
   strcpy(fileresp,"P_");           posprop=vector(1,nlstate); /* Counting the number of transition starting from a live state per age */ 
   strcat(fileresp,fileresu);           pospropt=vector(1,nlstate); /* Counting the number of transition starting from a live state */ 
   /*strcat(fileresphtm,fileresu);*/           /* prop=matrix(1,nlstate,iagemin,iagemax+3); */
   if((ficresp=fopen(fileresp,"w"))==NULL) {           strcpy(fileresp,"P_");
     printf("Problem with prevalence resultfile: %s\n", fileresp);           strcat(fileresp,fileresu);
     fprintf(ficlog,"Problem with prevalence resultfile: %s\n", fileresp);           /*strcat(fileresphtm,fileresu);*/
     exit(0);           if((ficresp=fopen(fileresp,"w"))==NULL) {
   }                   printf("Problem with prevalence resultfile: %s\n", fileresp);
                    fprintf(ficlog,"Problem with prevalence resultfile: %s\n", fileresp);
                    exit(0);
            }
   
   strcpy(fileresphtm,subdirfext(optionfilefiname,"PHTM_",".htm"));           strcpy(fileresphtm,subdirfext(optionfilefiname,"PHTM_",".htm"));
   if((ficresphtm=fopen(fileresphtm,"w"))==NULL) {           if((ficresphtm=fopen(fileresphtm,"w"))==NULL) {
     printf("Problem with prevalence HTM resultfile '%s' with errno='%s'\n",fileresphtm,strerror(errno));                   printf("Problem with prevalence HTM resultfile '%s' with errno='%s'\n",fileresphtm,strerror(errno));
     fprintf(ficlog,"Problem with prevalence HTM resultfile '%s' with errno='%s'\n",fileresphtm,strerror(errno));                   fprintf(ficlog,"Problem with prevalence HTM resultfile '%s' with errno='%s'\n",fileresphtm,strerror(errno));
     fflush(ficlog);                   fflush(ficlog);
     exit(70);                    exit(70); 
   }           }
   else{           else{
     fprintf(ficresphtm,"<html><head>\n<title>IMaCh PHTM_ %s</title></head>\n <body><font size=\"2\">%s <br> %s</font> \                   fprintf(ficresphtm,"<html><head>\n<title>IMaCh PHTM_ %s</title></head>\n <body><font size=\"2\">%s <br> %s</font> \
 <hr size=\"2\" color=\"#EC5E5E\"> \n\  <hr size=\"2\" color=\"#EC5E5E\"> \n\
 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</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) {
     printf("Problem with frequency table HTM resultfile '%s' with errno='%s'\n",fileresphtmfr,strerror(errno));                   printf("Problem with frequency table HTM resultfile '%s' with errno='%s'\n",fileresphtmfr,strerror(errno));
     fprintf(ficlog,"Problem with frequency table HTM resultfile '%s' with errno='%s'\n",fileresphtmfr,strerror(errno));                   fprintf(ficlog,"Problem with frequency table HTM resultfile '%s' with errno='%s'\n",fileresphtmfr,strerror(errno));
     fflush(ficlog);                   fflush(ficlog);
     exit(70);                    exit(70); 
   }           }
   else{           else{
     fprintf(ficresphtmfr,"<html><head>\n<title>IMaCh PHTM_Frequency table %s</title></head>\n <body><font size=\"2\">%s <br> %s</font> \                   fprintf(ficresphtmfr,"<html><head>\n<title>IMaCh PHTM_Frequency table %s</title></head>\n <body><font size=\"2\">%s <br> %s</font> \
 <hr size=\"2\" color=\"#EC5E5E\"> \n\  <hr size=\"2\" color=\"#EC5E5E\"> \n\
 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",\
           fileresphtmfr,version,fullversion,title,datafile,firstpass,lastpass,stepm, weightopt, model);                                                   fileresphtmfr,version,fullversion,title,datafile,firstpass,lastpass,stepm, weightopt, model);
   }           }
   fprintf(ficresphtmfr,"Current page is file <a href=\"%s\">%s</a><br>\n\n<h4>Frequencies of all effective transitions by age at begin of transition </h4>Unknown status is -1<br/>\n",fileresphtmfr, fileresphtmfr);           fprintf(ficresphtmfr,"Current page is file <a href=\"%s\">%s</a><br>\n\n<h4>Frequencies of all effective transitions by age at begin of transition </h4>Unknown status is -1<br/>\n",fileresphtmfr, fileresphtmfr);
   
   freq= ma3x(-5,nlstate+ndeath,-5,nlstate+ndeath,iagemin-AGEMARGE,iagemax+3+AGEMARGE);           freq= ma3x(-5,nlstate+ndeath,-5,nlstate+ndeath,iagemin-AGEMARGE,iagemax+3+AGEMARGE);
   j1=0;           j1=0;
       
   j=cptcoveff;           j=cptcoveff;
   if (cptcovn<1) {j=1;ncodemax[1]=1;}           if (cptcovn<1) {j=1;ncodemax[1]=1;}
   
   first=1;           first=1;
   
            /* Detects if a combination j1 is empty: for a multinomial variable like 3 education levels:
                           reference=low_education V1=0,V2=0
                           med_educ                V1=1 V2=0, 
                           high_educ               V1=0 V2=1
                           Then V1=1 and V2=1 is a noisy combination that we want to exclude for the list 2**cptcoveff 
            */
   
   for (j1 = 1; j1 <= (int) pow(2,cptcoveff); j1++){ /* Loop on covariates combination */           for (j1 = 1; j1 <= (int) pow(2,cptcoveff); j1++){ /* Loop on covariates combination */
       /*printf("cptcoveff=%d Tvaraff=%d", cptcoveff,Tvaraff[1]);                   posproptt=0.;
         scanf("%d", i);*/                   /*printf("cptcoveff=%d Tvaraff=%d", cptcoveff,Tvaraff[1]);
       for (i=-5; i<=nlstate+ndeath; i++)                             scanf("%d", i);*/
         for (jk=-5; jk<=nlstate+ndeath; jk++)                     for (i=-5; i<=nlstate+ndeath; i++)  
           for(m=iagemin; m <= iagemax+3; m++)                           for (jk=-5; jk<=nlstate+ndeath; jk++)  
             freq[i][jk][m]=0;                                   for(m=iagemin; m <= iagemax+3; m++)
                                                  freq[i][jk][m]=0;
       for (i=1; i<=nlstate; i++)          
         for(m=iagemin; m <= iagemax+3; m++)                   for (i=1; i<=nlstate; i++)  {
           prop[i][m]=0;                           for(m=iagemin; m <= iagemax+3; m++)
                                          prop[i][m]=0;
       dateintsum=0;                           posprop[i]=0;
       k2cpt=0;                           pospropt[i]=0;
       for (i=1; i<=imx; i++) { /* For each individual i */                   }
         bool=1;        
         if (cptcovn>0) { /* Filter is here: Must be looked at for model=V1+V2+V3+V4 */                   dateintsum=0;
           for (z1=1; z1<=cptcoveff; z1++)                          k2cpt=0;
             if (covar[Tvaraff[z1]][i]!= nbcode[Tvaraff[z1]][codtabm(j1,z1)]){  
                 /* Tests if the value of each of the covariates of i is equal to filter j1 */                   for (iind=1; iind<=imx; iind++) { /* For each individual iind */
               bool=0;                           bool=1;
               /* 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",                            if (cptcovn>0) { /* Filter is here: Must be looked at for model=V1+V2+V3+V4 */
                                    for (z1=1; z1<=cptcoveff; z1++) {      
                                            if (covar[Tvaraff[z1]][iind]!= nbcode[Tvaraff[z1]][codtabm(j1,z1)]){
                                                    /* Tests if the value of each of the covariates of i is equal to filter j1 */
                                                    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", 
                 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*/
             }                                            } 
         } /* cptcovn > 0 */                                   } /* end z1 */
                            } /* cptcovn > 0 */
         if (bool==1){  
           /* for(m=firstpass; m<=lastpass; m++){ */                           if (bool==1){
           for(mi=1; mi<wav[i];mi++){                                   /* for(m=firstpass; m<=lastpass; m++){ */
             m=mw[mi][i];                                   for(mi=1; mi<wav[iind];mi++){
             /* dh[m][i] or dh[mw[mi][i]][i] is the delay between two effective (mi) waves m=mw[mi][i]                                           m=mw[mi][iind];
                and mw[mi+1][i]. dh depends on stepm. */                                           /* dh[m][iind] or dh[mw[mi][iind]][iind] is the delay between two effective (mi) waves m=mw[mi][iind]
             agebegin=agev[m][i]; /* Age at beginning of wave before transition*/                                                          and mw[mi+1][iind]. dh depends on stepm. */
             ageend=agev[m][i]+(dh[m][i])*stepm/YEARM; /* Age at end of wave and transition */                                           agebegin=agev[m][iind]; /* Age at beginning of wave before transition*/
             if(m >=firstpass && m <=lastpass){                                           ageend=agev[m][iind]+(dh[m][iind])*stepm/YEARM; /* Age at end of wave and transition */
               k2=anint[m][i]+(mint[m][i]/12.);                                           if(m >=firstpass && m <=lastpass){
               /*if ((k2>=dateprev1) && (k2<=dateprev2)) {*/                                                   k2=anint[m][iind]+(mint[m][iind]/12.);
               if(agev[m][i]==0) agev[m][i]=iagemax+1;  /* All ages equal to 0 are in iagemax+1 */                                                   /*if ((k2>=dateprev1) && (k2<=dateprev2)) {*/
               if(agev[m][i]==1) agev[m][i]=iagemax+2;  /* All ages equal to 1 are in iagemax+2 */                                                   if(agev[m][iind]==0) agev[m][iind]=iagemax+1;  /* All ages equal to 0 are in iagemax+1 */
               if (s[m][i]>0 && s[m][i]<=nlstate)  /* If status at wave m is known and a live state */                                                   if(agev[m][iind]==1) agev[m][iind]=iagemax+2;  /* All ages equal to 1 are in iagemax+2 */
                 prop[s[m][i]][(int)agev[m][i]] += weight[i];  /* At age of beginning of transition, where status is known */                                                   if (s[m][iind]>0 && s[m][iind]<=nlstate)  /* If status at wave m is known and a live state */
               if (m<lastpass) {                                                           prop[s[m][iind]][(int)agev[m][iind]] += weight[iind];  /* At age of beginning of transition, where status is known */
                 /* if(s[m][i]==4 && s[m+1][i]==4) */                                                   if (m<lastpass) {
                 /*   printf(" num=%ld m=%d, i=%d s1=%d s2=%d agev at m=%d\n", num[i], m, i,s[m][i],s[m+1][i], (int)agev[m][i]); */                                                           /* if(s[m][iind]==4 && s[m+1][iind]==4) */
                 if(s[m][i]==-1)                                                           /*   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, i=%d s1=%d s2=%d agev at m=%d agebegin=%.2f ageend=%.2f, agemed=%d\n", num[i], m, i,s[m][i],s[m+1][i], (int)agev[m][i],agebegin, ageend, (int)((agebegin+ageend)/2.));                                                           if(s[m][iind]==-1)
                 freq[s[m][i]][s[m+1][i]][(int)agev[m][i]] += weight[i]; /* At age of beginning of transition, where status is known */                                                                   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][i]][s[m+1][i]][(int)((agebegin+ageend)/2.)] += weight[i]; */                                                           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][i]][s[m+1][i]][iagemax+3] += weight[i]; /* Total is in iagemax+3 *//* 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]][iagemax+3] += weight[iind]; /* Total is in iagemax+3 *//* At age of beginning of transition, where status is known */
             }                                                     }
             if ((agev[m][i]>1) && (agev[m][i]< (iagemax+3)) && (anint[m][i]!=9999) && (mint[m][i]!=99)) {                                           }  
               dateintsum=dateintsum+k2;                                           if ((agev[m][iind]>1) && (agev[m][iind]< (iagemax+3)) && (anint[m][iind]!=9999) && (mint[m][iind]!=99)) {
               k2cpt++;                                                   dateintsum=dateintsum+k2;
               /* printf("i=%ld dateintmean = %lf dateintsum=%lf k2cpt=%lf k2=%lf\n",i, dateintsum/k2cpt, dateintsum,k2cpt, k2); */                                                   k2cpt++;
             }                                                   /* printf("iind=%ld dateintmean = %lf dateintsum=%lf k2cpt=%lf k2=%lf\n",iind, dateintsum/k2cpt, dateintsum,k2cpt, k2); */
             /*}*/                                           }
           } /* end m */                                           /*}*/
         } /* end bool */                                   } /* end m */
       } /* end i = 1 to imx */                           } /* end bool */
                           } /* end iind = 1 to imx */
       /*      fprintf(ficresp, "#Count between %.lf/%.lf/%.lf and %.lf/%.lf/%.lf\n",jprev1, mprev1,anprev1,jprev2, mprev2,anprev2);*/         /* prop[s][age] is feeded for any initial and valid live state as well as
       pstamp(ficresp);                                          freq[s1][s2][age] at single age of beginning the transition, for a combination j1 */
       if  (cptcovn>0) {  
         fprintf(ficresp, "\n#********** Variable ");   
         fprintf(ficresphtm, "\n<br/><br/><h3>********** Variable ");                    /*      fprintf(ficresp, "#Count between %.lf/%.lf/%.lf and %.lf/%.lf/%.lf\n",jprev1, mprev1,anprev1,jprev2, mprev2,anprev2);*/
         fprintf(ficresphtmfr, "\n<br/><br/><h3>********** Variable ");                    pstamp(ficresp);
         for (z1=1; z1<=cptcoveff; z1++){                   if  (cptcovn>0) {
           fprintf(ficresp, "V%d=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtabm(j1,z1)]);                           fprintf(ficresp, "\n#********** Variable "); 
           fprintf(ficresphtm, "V%d=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtabm(j1,z1)]);                           fprintf(ficresphtm, "\n<br/><br/><h3>********** Variable "); 
           fprintf(ficresphtmfr, "V%d=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtabm(j1,z1)]);                           fprintf(ficresphtmfr, "\n<br/><br/><h3>********** Variable "); 
         }                           for (z1=1; z1<=cptcoveff; z1++){
           fprintf(ficresp, "**********\n#");                                   fprintf(ficresp, "V%d=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtabm(j1,z1)]);
         fprintf(ficresphtm, "**********</h3>\n");                                   fprintf(ficresphtm, "V%d=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtabm(j1,z1)]);
         fprintf(ficresphtmfr, "**********</h3>\n");                                   fprintf(ficresphtmfr, "V%d=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtabm(j1,z1)]);
         fprintf(ficlog, "\n#********** Variable ");                            }
         for (z1=1; z1<=cptcoveff; z1++) fprintf(ficlog, "V%d=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtabm(j1,z1)]);                           fprintf(ficresp, "**********\n#");
         fprintf(ficlog, "**********\n");                           fprintf(ficresphtm, "**********</h3>\n");
       }                           fprintf(ficresphtmfr, "**********</h3>\n");
       fprintf(ficresphtm,"<table style=\"text-align:center; border: 1px solid\">");                           fprintf(ficlog, "\n#********** Variable "); 
       for(i=1; i<=nlstate;i++) {                           for (z1=1; z1<=cptcoveff; z1++) fprintf(ficlog, "V%d=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtabm(j1,z1)]);
         fprintf(ficresp, " Age Prev(%d) N(%d) N",i,i);                           fprintf(ficlog, "**********\n");
         fprintf(ficresphtm, "<th>Age</th><th>Prev(%d)</th><th>N(%d)</th><th>N</th>",i,i);                   }
       }                   fprintf(ficresphtm,"<table style=\"text-align:center; border: 1px solid\">");
       fprintf(ficresp, "\n");                   for(i=1; i<=nlstate;i++) {
       fprintf(ficresphtm, "\n");                           fprintf(ficresp, " Age Prev(%d) N(%d) N",i,i);
                                  fprintf(ficresphtm, "<th>Age</th><th>Prev(%d)</th><th>N(%d)</th><th>N</th>",i,i);
       /* Header of frequency table by age */                   }
       fprintf(ficresphtmfr,"<table style=\"text-align:center; border: 1px solid\">");                   fprintf(ficresp, "\n");
       fprintf(ficresphtmfr,"<th>Age</th> ");                   fprintf(ficresphtm, "\n");
       for(jk=-1; jk <=nlstate+ndeath; jk++){  
         for(m=-1; m <=nlstate+ndeath; m++){  
           if(jk!=0 && m!=0)  
             fprintf(ficresphtmfr,"<th>%d%d</th> ",jk,m);  
         }  
       }  
       fprintf(ficresphtmfr, "\n");  
               
       /* For each age */                   /* Header of frequency table by age */
       for(i=iagemin; i <= iagemax+3; i++){                   fprintf(ficresphtmfr,"<table style=\"text-align:center; border: 1px solid\">");
         fprintf(ficresphtm,"<tr>");                   fprintf(ficresphtmfr,"<th>Age</th> ");
         if(i==iagemax+1){                   for(jk=-1; jk <=nlstate+ndeath; jk++){
           fprintf(ficlog,"1");                           for(m=-1; m <=nlstate+ndeath; m++){
           fprintf(ficresphtmfr,"<tr><th>0</th> ");                                   if(jk!=0 && m!=0)
         }else if(i==iagemax+2){                                           fprintf(ficresphtmfr,"<th>%d%d</th> ",jk,m);
           fprintf(ficlog,"0");                           }
           fprintf(ficresphtmfr,"<tr><th>Unknown</th> ");                   }
         }else if(i==iagemax+3){                   fprintf(ficresphtmfr, "\n");
           fprintf(ficlog,"Total");        
           fprintf(ficresphtmfr,"<tr><th>Total</th> ");                   /* For each age */
         }else{                   for(iage=iagemin; iage <= iagemax+3; iage++){
           if(first==1){                           fprintf(ficresphtm,"<tr>");
             first=0;                           if(iage==iagemax+1){
             printf("See log file for details...\n");                                   fprintf(ficlog,"1");
           }                                   fprintf(ficresphtmfr,"<tr><th>0</th> ");
           fprintf(ficresphtmfr,"<tr><th>%d</th> ",i);                           }else if(iage==iagemax+2){
           fprintf(ficlog,"Age %d", i);                                   fprintf(ficlog,"0");
         }                                   fprintf(ficresphtmfr,"<tr><th>Unknown</th> ");
         for(jk=1; jk <=nlstate ; jk++){                           }else if(iage==iagemax+3){
           for(m=-1, pp[jk]=0; m <=nlstate+ndeath ; m++)                                   fprintf(ficlog,"Total");
             pp[jk] += freq[jk][m][i];                                    fprintf(ficresphtmfr,"<tr><th>Total</th> ");
         }                           }else{
         for(jk=1; jk <=nlstate ; jk++){                                   if(first==1){
           for(m=-1, pos=0; m <=0 ; m++)                                           first=0;
             pos += freq[jk][m][i];                                           printf("See log file for details...\n");
           if(pp[jk]>=1.e-10){                                   }
             if(first==1){                                   fprintf(ficresphtmfr,"<tr><th>%d</th> ",iage);
               printf(" %d.=%.0f loss[%d]=%.1f%%",jk,pp[jk],jk,100*pos/pp[jk]);                                   fprintf(ficlog,"Age %d", iage);
             }                           }
             fprintf(ficlog," %d.=%.0f loss[%d]=%.1f%%",jk,pp[jk],jk,100*pos/pp[jk]);                           for(jk=1; jk <=nlstate ; jk++){
           }else{                                   for(m=-1, pp[jk]=0; m <=nlstate+ndeath ; m++)
             if(first==1)                                           pp[jk] += freq[jk][m][iage]; 
               printf(" %d.=%.0f loss[%d]=NaNQ%%",jk,pp[jk],jk);                           }
             fprintf(ficlog," %d.=%.0f loss[%d]=NaNQ%%",jk,pp[jk],jk);                           for(jk=1; jk <=nlstate ; jk++){
           }                                   for(m=-1, pos=0; m <=0 ; m++)
         }                                           pos += freq[jk][m][iage];
                                    if(pp[jk]>=1.e-10){
         for(jk=1; jk <=nlstate ; jk++){                                           if(first==1){
           for(m=0, pp[jk]=0; m <=nlstate+ndeath; m++)                                                   printf(" %d.=%.0f loss[%d]=%.1f%%",jk,pp[jk],jk,100*pos/pp[jk]);
             pp[jk] += freq[jk][m][i];                                           }
         }                                                  fprintf(ficlog," %d.=%.0f loss[%d]=%.1f%%",jk,pp[jk],jk,100*pos/pp[jk]);
         for(jk=1,pos=0,posprop=0; jk <=nlstate ; jk++){                                   }else{
           pos += pp[jk];                                           if(first==1)
           posprop += prop[jk][i];                                                   printf(" %d.=%.0f loss[%d]=NaNQ%%",jk,pp[jk],jk);
         }                                           fprintf(ficlog," %d.=%.0f loss[%d]=NaNQ%%",jk,pp[jk],jk);
         for(jk=1; jk <=nlstate ; jk++){                                   }
           if(pos>=1.e-5){                           }
             if(first==1)  
               printf(" %d.=%.0f prev[%d]=%.1f%%",jk,pp[jk],jk,100*pp[jk]/pos);                           for(jk=1; jk <=nlstate ; jk++){ 
             fprintf(ficlog," %d.=%.0f prev[%d]=%.1f%%",jk,pp[jk],jk,100*pp[jk]/pos);                                   /* posprop[jk]=0; */
           }else{                                   for(m=0, pp[jk]=0; m <=nlstate+ndeath; m++)/* Summing on all ages */
             if(first==1)                                           pp[jk] += freq[jk][m][iage];
               printf(" %d.=%.0f prev[%d]=NaNQ%%",jk,pp[jk],jk);                           }      /* pp[jk] is the total number of transitions starting from state jk and any ending status until this age */
             fprintf(ficlog," %d.=%.0f prev[%d]=NaNQ%%",jk,pp[jk],jk);  
           }                           for(jk=1,pos=0, pospropta=0.; jk <=nlstate ; jk++){
           if( i <= iagemax){                                   pos += pp[jk]; /* pos is the total number of transitions until this age */
             if(pos>=1.e-5){                                   posprop[jk] += prop[jk][iage]; /* prop is the number of transitions from a live state
               fprintf(ficresp," %d %.5f %.0f %.0f",i,prop[jk][i]/posprop, prop[jk][i],posprop);                                                                                                                                                                           from jk at age iage prop[s[m][iind]][(int)agev[m][iind]] += weight[iind] */
               fprintf(ficresphtm,"<th>%d</th><td>%.5f</td><td>%.0f</td><td>%.0f</td>",i,prop[jk][i]/posprop, prop[jk][i],posprop);                                   pospropta += prop[jk][iage]; /* prop is the number of transitions from a live state
               /*probs[i][jk][j1]= pp[jk]/pos;*/                                                                                                                                                                           from jk at age iage prop[s[m][iind]][(int)agev[m][iind]] += weight[iind] */
               /*printf("\ni=%d jk=%d j1=%d %.5f %.0f %.0f %f",i,jk,j1,pp[jk]/pos, pp[jk],pos,probs[i][jk][j1]);*/                           }
             }                           for(jk=1; jk <=nlstate ; jk++){
             else{                                   if(pos>=1.e-5){
               fprintf(ficresp," %d NaNq %.0f %.0f",i,prop[jk][i],posprop);                                           if(first==1)
               fprintf(ficresphtm,"<th>%d</th><td>NaNq</td><td>%.0f</td><td>%.0f</td>",i, prop[jk][i],posprop);                                                   printf(" %d.=%.0f prev[%d]=%.1f%%",jk,pp[jk],jk,100*pp[jk]/pos);
             }                                           fprintf(ficlog," %d.=%.0f prev[%d]=%.1f%%",jk,pp[jk],jk,100*pp[jk]/pos);
           }                                   }else{
         }                                           if(first==1)
                                                            printf(" %d.=%.0f prev[%d]=NaNQ%%",jk,pp[jk],jk);
         for(jk=-1; jk <=nlstate+ndeath; jk++){                                           fprintf(ficlog," %d.=%.0f prev[%d]=NaNQ%%",jk,pp[jk],jk);
           for(m=-1; m <=nlstate+ndeath; m++){                                   }
             if(freq[jk][m][i] !=0 ) { /* minimizing output */                                   if( iage <= iagemax){
               if(first==1){                                           if(pos>=1.e-5){
                 printf(" %d%d=%.0f",jk,m,freq[jk][m][i]);                                                   fprintf(ficresp," %d %.5f %.0f %.0f",iage,prop[jk][iage]/pospropta, prop[jk][iage],pospropta);
               }                                                   fprintf(ficresphtm,"<th>%d</th><td>%.5f</td><td>%.0f</td><td>%.0f</td>",iage,prop[jk][iage]/pospropta, prop[jk][iage],pospropta);
               fprintf(ficlog," %d%d=%.0f",jk,m,freq[jk][m][i]);                                                   /*probs[iage][jk][j1]= pp[jk]/pos;*/
             }                                                   /*printf("\niage=%d jk=%d j1=%d %.5f %.0f %.0f %f",iage,jk,j1,pp[jk]/pos, pp[jk],pos,probs[iage][jk][j1]);*/
             if(jk!=0 && m!=0)                                           }
               fprintf(ficresphtmfr,"<td>%.0f</td> ",freq[jk][m][i]);                                           else{
           }                                                   fprintf(ficresp," %d NaNq %.0f %.0f",iage,prop[jk][iage],pospropta);
         }                                                   fprintf(ficresphtm,"<th>%d</th><td>NaNq</td><td>%.0f</td><td>%.0f</td>",iage, prop[jk][iage],pospropta);
         fprintf(ficresphtmfr,"</tr>\n ");                                           }
         if(i <= iagemax){                                   }
           fprintf(ficresp,"\n");                                   pospropt[jk] +=posprop[jk];
           fprintf(ficresphtm,"</tr>\n");                           } /* end loop jk */
         }                           /* pospropt=0.; */
         if(first==1)                           for(jk=-1; jk <=nlstate+ndeath; jk++){
           printf("Others in log...\n");                                   for(m=-1; m <=nlstate+ndeath; m++){
         fprintf(ficlog,"\n");                                           if(freq[jk][m][iage] !=0 ) { /* minimizing output */
       } /* end loop i */                                                   if(first==1){
       fprintf(ficresphtm,"</table>\n");                                                           printf(" %d%d=%.0f",jk,m,freq[jk][m][iage]);
       fprintf(ficresphtmfr,"</table>\n");                                                   }
       /*}*/                                                   fprintf(ficlog," %d%d=%.0f",jk,m,freq[jk][m][iage]);
   } /* end j1 */                                           }
   dateintmean=dateintsum/k2cpt;                                            if(jk!=0 && m!=0)
                                                     fprintf(ficresphtmfr,"<td>%.0f</td> ",freq[jk][m][iage]);
   fclose(ficresp);                                   }
   fclose(ficresphtm);                           } /* end loop jk */
   fclose(ficresphtmfr);                           posproptt=0.; 
   free_ma3x(freq,-5,nlstate+ndeath,-5,nlstate+ndeath, iagemin-AGEMARGE, iagemax+3+AGEMARGE);                           for(jk=1; jk <=nlstate; jk++){
   free_vector(pp,1,nlstate);                                   posproptt += pospropt[jk];
   free_matrix(prop,1,nlstate,iagemin-AGEMARGE, iagemax+3+AGEMARGE);                           }
   /* End of Freq */                           fprintf(ficresphtmfr,"</tr>\n ");
 }                           if(iage <= iagemax){
                                    fprintf(ficresp,"\n");
                                    fprintf(ficresphtm,"</tr>\n");
                            }
                            if(first==1)
                                    printf("Others in log...\n");
                            fprintf(ficlog,"\n");
                    } /* end loop age iage */
                    fprintf(ficresphtm,"<tr><th>Tot</th>");
                    for(jk=1; jk <=nlstate ; jk++){
                            if(posproptt < 1.e-5){
                                    fprintf(ficresphtm,"<td>%.5f</td><td>%.0f</td><td>%.0f</td>",pospropt[jk]/posproptt,pospropt[jk],posproptt);   
                            }else{
                                    fprintf(ficresphtm,"<td>Nanq</td><td>%.0f</td><td>%.0f</td>",pospropt[jk]/posproptt,pospropt[jk],posproptt);   
                            }
                    }
                    fprintf(ficresphtm,"</tr>\n");
                    fprintf(ficresphtm,"</table>\n");
                    fprintf(ficresphtmfr,"</table>\n");
                    if(posproptt < 1.e-5){
                            fprintf(ficresphtm,"\n <p><b> This combination (%d) is not valid and no result will be produced</b></p>",j1);
                            fprintf(ficresphtmfr,"\n <p><b> This combination (%d) is not valid and no result will be produced</b></p>",j1);
                            fprintf(ficres,"\n  This combination (%d) is not valid and no result will be produced\n\n",j1);
                            invalidvarcomb[j1]=1;
                    }else{
                            fprintf(ficresphtm,"\n <p> This combination (%d) is valid and result will be produced.</p>",j1);
                            invalidvarcomb[j1]=0;
                    }
                    fprintf(ficresphtmfr,"</table>\n");
            } /* end selected combination of covariate j1 */
            dateintmean=dateintsum/k2cpt; 
                    
            fclose(ficresp);
            fclose(ficresphtm);
            fclose(ficresphtmfr);
            free_ma3x(freq,-5,nlstate+ndeath,-5,nlstate+ndeath, iagemin-AGEMARGE, iagemax+3+AGEMARGE);
            free_vector(pospropt,1,nlstate);
            free_vector(posprop,1,nlstate);
            free_matrix(prop,1,nlstate,iagemin-AGEMARGE, iagemax+3+AGEMARGE);
            free_vector(pp,1,nlstate);
            /* End of Freq */
    }
   
 /************ Prevalence ********************/  /************ Prevalence ********************/
 void prevalence(double ***probs, double agemin, double agemax, int **s, double **agev, int nlstate, int imx, int *Tvar, int **nbcode, int *ncodemax,double **mint,double **anint, double dateprev1,double dateprev2, int firstpass, int lastpass)  void prevalence(double ***probs, double agemin, double agemax, int **s, double **agev, int nlstate, int imx, int *Tvar, int **nbcode, int *ncodemax,double **mint,double **anint, double dateprev1,double dateprev2, int firstpass, int lastpass)
Line 4222  void  concatwav(int wav[], int **dh, int Line 4274  void  concatwav(int wav[], int **dh, int
  }   }
   
 /*********** Tricode ****************************/  /*********** Tricode ****************************/
 void tricode(int *Tvar, int **nbcode, int imx, int *Ndum)   void tricode(int *cptcov, int *Tvar, int **nbcode, int imx, int *Ndum)
 {  {
   /**< Uses cptcovn+2*cptcovprod as the number of covariates */    /**< Uses cptcovn+2*cptcovprod as the number of covariates */
   /*      Tvar[i]=atoi(stre);  find 'n' in Vn and stores in Tvar. If model=V2+V1 Tvar[1]=2 and Tvar[2]=1     /*      Tvar[i]=atoi(stre);  find 'n' in Vn and stores in Tvar. If model=V2+V1 Tvar[1]=2 and Tvar[2]=1 
    * Boring subroutine which should only output nbcode[Tvar[j]][k]     * Boring subroutine which should only output nbcode[Tvar[j]][k]
    * Tvar[5] in V2+V1+V3*age+V2*V4 is 2 (V2)     * Tvar[5] in V2+V1+V3*age+V2*V4 is 2 (V2)
    * nbcode[Tvar[j]][1]=      * nbcode[Tvar[5]][1]= nbcode[2][1]=0, nbcode[2][2]=1 (usually);
   */    */
   
   int ij=1, k=0, j=0, i=0, maxncov=NCOVMAX;    int ij=1, k=0, j=0, i=0, maxncov=NCOVMAX;
Line 4237  void tricode(int *Tvar, int **nbcode, in Line 4289  void tricode(int *Tvar, int **nbcode, in
   int modmincovj=0; /* Modality min of covariates j */    int modmincovj=0; /* Modality min of covariates j */
   
   
   cptcoveff=0;     /* cptcoveff=0;  */
           *cptcov=0;
     
   for (k=1; k <= maxncov; k++) ncodemax[k]=0; /* Horrible constant again replaced by NCOVMAX */    for (k=1; k <= maxncov; k++) ncodemax[k]=0; /* Horrible constant again replaced by NCOVMAX */
   
Line 4347  void tricode(int *Tvar, int **nbcode, in Line 4400  void tricode(int *Tvar, int **nbcode, in
                 }                  }
         }          }
         /* ij--; */          /* ij--; */
         cptcoveff=ij; /*Number of total covariates*/          /* cptcoveff=ij; /\*Number of total covariates*\/ */
           *cptcov=ij; /*Number of total covariates*/
                   
 }  }
   
Line 5199  To be simple, these graphs help to under Line 5253  To be simple, these graphs help to under
   tj = (int) pow(2,cptcoveff);    tj = (int) pow(2,cptcoveff);
   if (cptcovn<1) {tj=1;ncodemax[1]=1;}    if (cptcovn<1) {tj=1;ncodemax[1]=1;}
   j1=0;    j1=0;
   for(j1=1; j1<=tj;j1++){    for(j1=1; j1<=tj;j1++){  /* For each valid combination of covariates */
     /*for(i1=1; i1<=ncodemax[t];i1++){ */                  if  (cptcovn>0) {
     /*j1++;*/                          fprintf(ficresprob, "\n#********** Variable "); 
       if  (cptcovn>0) {                          for (z1=1; z1<=cptcoveff; z1++) fprintf(ficresprob, "V%d=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtabm(j1,z1)]);
         fprintf(ficresprob, "\n#********** Variable ");                           fprintf(ficresprob, "**********\n#\n");
         for (z1=1; z1<=cptcoveff; z1++) fprintf(ficresprob, "V%d=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtabm(j1,z1)]);                          fprintf(ficresprobcov, "\n#********** Variable "); 
         fprintf(ficresprob, "**********\n#\n");                          for (z1=1; z1<=cptcoveff; z1++) fprintf(ficresprobcov, "V%d=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtabm(j1,z1)]);
         fprintf(ficresprobcov, "\n#********** Variable ");                           fprintf(ficresprobcov, "**********\n#\n");
         for (z1=1; z1<=cptcoveff; z1++) fprintf(ficresprobcov, "V%d=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtabm(j1,z1)]);                          
         fprintf(ficresprobcov, "**********\n#\n");                          fprintf(ficgp, "\n#********** Variable "); 
                                   for (z1=1; z1<=cptcoveff; z1++) fprintf(ficgp, " V%d=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtabm(j1,z1)]);
         fprintf(ficgp, "\n#********** Variable ");                           fprintf(ficgp, "**********\n#\n");
         for (z1=1; z1<=cptcoveff; z1++) fprintf(ficgp, " V%d=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtabm(j1,z1)]);                          
         fprintf(ficgp, "**********\n#\n");                          
                                   fprintf(fichtmcov, "\n<hr  size=\"2\" color=\"#EC5E5E\">********** Variable "); 
                                   for (z1=1; z1<=cptcoveff; z1++) fprintf(fichtm, "V%d=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtabm(j1,z1)]);
         fprintf(fichtmcov, "\n<hr  size=\"2\" color=\"#EC5E5E\">********** Variable ");                           fprintf(fichtmcov, "**********\n<hr size=\"2\" color=\"#EC5E5E\">");
         for (z1=1; z1<=cptcoveff; z1++) fprintf(fichtm, "V%d=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtabm(j1,z1)]);                          
         fprintf(fichtmcov, "**********\n<hr size=\"2\" color=\"#EC5E5E\">");                          fprintf(ficresprobcor, "\n#********** Variable ");    
                                   for (z1=1; z1<=cptcoveff; z1++) fprintf(ficresprobcor, "V%d=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtabm(j1,z1)]);
         fprintf(ficresprobcor, "\n#********** Variable ");                              fprintf(ficresprobcor, "**********\n#");    
         for (z1=1; z1<=cptcoveff; z1++) fprintf(ficresprobcor, "V%d=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtabm(j1,z1)]);                          if(invalidvarcomb[j1]){
         fprintf(ficresprobcor, "**********\n#");                                fprintf(ficgp,"\n#Combination (%d) ignored because no cases \n",j1); 
       }                            fprintf(fichtmcov,"\n<h3>Combination (%d) ignored because no cases </h3>\n",j1); 
                                   continue;
       gradg=matrix(1,npar,1,(nlstate)*(nlstate+ndeath));                          }
       trgradg=matrix(1,(nlstate)*(nlstate+ndeath),1,npar);                  }
       gp=vector(1,(nlstate)*(nlstate+ndeath));                  gradg=matrix(1,npar,1,(nlstate)*(nlstate+ndeath));
       gm=vector(1,(nlstate)*(nlstate+ndeath));                  trgradg=matrix(1,(nlstate)*(nlstate+ndeath),1,npar);
       for (age=bage; age<=fage; age ++){                   gp=vector(1,(nlstate)*(nlstate+ndeath));
         cov[2]=age;                  gm=vector(1,(nlstate)*(nlstate+ndeath));
         if(nagesqr==1)                  for (age=bage; age<=fage; age ++){ 
           cov[3]= age*age;                          cov[2]=age;
         for (k=1; k<=cptcovn;k++) {                          if(nagesqr==1)
           cov[2+nagesqr+k]=nbcode[Tvar[k]][codtabm(j1,k)];                                  cov[3]= age*age;
           /*cov[2+nagesqr+k]=nbcode[Tvar[k]][codtabm(j1,Tvar[k])];*//* j1 1 2 3 4                          for (k=1; k<=cptcovn;k++) {
                                                          * 1  1 1 1 1                                  cov[2+nagesqr+k]=nbcode[Tvar[k]][codtabm(j1,k)];
                                                          * 2  2 1 1 1                                  /*cov[2+nagesqr+k]=nbcode[Tvar[k]][codtabm(j1,Tvar[k])];*//* j1 1 2 3 4
                                                          * 3  1 2 1 1                                                                                                                                                                                                                                                                           * 1  1 1 1 1
                                                          */                                                                                                                                                                                                                                                                           * 2  2 1 1 1
           /* nbcode[1][1]=0 nbcode[1][2]=1;*/                                                                                                                                                                                                                                                                           * 3  1 2 1 1
         }                                                                                                                                                                                                                                                                           */
         /* for (k=1; k<=cptcovage;k++) cov[2+Tage[k]]=cov[2+Tage[k]]*cov[2]; */                                  /* nbcode[1][1]=0 nbcode[1][2]=1;*/
         for (k=1; k<=cptcovage;k++) cov[2+Tage[k]]=nbcode[Tvar[Tage[k]]][codtabm(ij,k)]*cov[2];                          }
         for (k=1; k<=cptcovprod;k++)                          /* for (k=1; k<=cptcovage;k++) cov[2+Tage[k]]=cov[2+Tage[k]]*cov[2]; */
           cov[2+nagesqr+Tprod[k]]=nbcode[Tvard[k][1]][codtabm(ij,k)]*nbcode[Tvard[k][2]][codtabm(ij,k)];                          for (k=1; k<=cptcovage;k++) cov[2+Tage[k]]=nbcode[Tvar[Tage[k]]][codtabm(ij,k)]*cov[2];
                                   for (k=1; k<=cptcovprod;k++)
                                       cov[2+nagesqr+Tprod[k]]=nbcode[Tvard[k][1]][codtabm(ij,k)]*nbcode[Tvard[k][2]][codtabm(ij,k)];
         for(theta=1; theta <=npar; theta++){                          
           for(i=1; i<=npar; i++)                          
             xp[i] = x[i] + (i==theta ?delti[theta]:(double)0);                          for(theta=1; theta <=npar; theta++){
                                             for(i=1; i<=npar; i++)
           pmij(pmmij,cov,ncovmodel,xp,nlstate);                                          xp[i] = x[i] + (i==theta ?delti[theta]:(double)0);
                                             
           k=0;                                  pmij(pmmij,cov,ncovmodel,xp,nlstate);
           for(i=1; i<= (nlstate); i++){                                  
             for(j=1; j<=(nlstate+ndeath);j++){                                  k=0;
               k=k+1;                                  for(i=1; i<= (nlstate); i++){
               gp[k]=pmmij[i][j];                                          for(j=1; j<=(nlstate+ndeath);j++){
             }                                                  k=k+1;
           }                                                  gp[k]=pmmij[i][j];
                                                     }
           for(i=1; i<=npar; i++)                                  }
             xp[i] = x[i] - (i==theta ?delti[theta]:(double)0);                                  
                                       for(i=1; i<=npar; i++)
           pmij(pmmij,cov,ncovmodel,xp,nlstate);                                          xp[i] = x[i] - (i==theta ?delti[theta]:(double)0);
           k=0;                                  
           for(i=1; i<=(nlstate); i++){                                  pmij(pmmij,cov,ncovmodel,xp,nlstate);
             for(j=1; j<=(nlstate+ndeath);j++){                                  k=0;
               k=k+1;                                  for(i=1; i<=(nlstate); i++){
               gm[k]=pmmij[i][j];                                          for(j=1; j<=(nlstate+ndeath);j++){
             }                                                  k=k+1;
           }                                                  gm[k]=pmmij[i][j];
                                                }
           for(i=1; i<= (nlstate)*(nlstate+ndeath); i++)                                   }
             gradg[theta][i]=(gp[i]-gm[i])/(double)2./delti[theta];                                    
         }                                  for(i=1; i<= (nlstate)*(nlstate+ndeath); i++) 
                                           gradg[theta][i]=(gp[i]-gm[i])/(double)2./delti[theta];  
         for(j=1; j<=(nlstate)*(nlstate+ndeath);j++)                          }
           for(theta=1; theta <=npar; theta++)  
             trgradg[j][theta]=gradg[theta][j];  
           
         matprod2(dnewm,trgradg,1,(nlstate)*(nlstate+ndeath),1,npar,1,npar,matcov);   
         matprod2(doldm,dnewm,1,(nlstate)*(nlstate+ndeath),1,npar,1,(nlstate)*(nlstate+ndeath),gradg);  
   
         pmij(pmmij,cov,ncovmodel,x,nlstate);                          for(j=1; j<=(nlstate)*(nlstate+ndeath);j++)
                                           for(theta=1; theta <=npar; theta++)
         k=0;                                          trgradg[j][theta]=gradg[theta][j];
         for(i=1; i<=(nlstate); i++){                          
           for(j=1; j<=(nlstate+ndeath);j++){                          matprod2(dnewm,trgradg,1,(nlstate)*(nlstate+ndeath),1,npar,1,npar,matcov); 
             k=k+1;                          matprod2(doldm,dnewm,1,(nlstate)*(nlstate+ndeath),1,npar,1,(nlstate)*(nlstate+ndeath),gradg);
             mu[k][(int) age]=pmmij[i][j];                          
           }                          pmij(pmmij,cov,ncovmodel,x,nlstate);
         }                          
                           k=0;
                           for(i=1; i<=(nlstate); i++){
                                   for(j=1; j<=(nlstate+ndeath);j++){
                                           k=k+1;
                                           mu[k][(int) age]=pmmij[i][j];
                                   }
                           }
         for(i=1;i<=(nlstate)*(nlstate+ndeath);i++)          for(i=1;i<=(nlstate)*(nlstate+ndeath);i++)
           for(j=1;j<=(nlstate)*(nlstate+ndeath);j++)                                  for(j=1;j<=(nlstate)*(nlstate+ndeath);j++)
             varpij[i][j][(int)age] = doldm[i][j];                                          varpij[i][j][(int)age] = doldm[i][j];
                           
         /*printf("\n%d ",(int)age);                          /*printf("\n%d ",(int)age);
           for (i=1; i<=(nlstate)*(nlstate+ndeath);i++){                                  for (i=1; i<=(nlstate)*(nlstate+ndeath);i++){
           printf("%e [%e ;%e] ",gm[i],gm[i]-2*sqrt(doldm[i][i]),gm[i]+2*sqrt(doldm[i][i]));                                  printf("%e [%e ;%e] ",gm[i],gm[i]-2*sqrt(doldm[i][i]),gm[i]+2*sqrt(doldm[i][i]));
           fprintf(ficlog,"%e [%e ;%e] ",gm[i],gm[i]-2*sqrt(doldm[i][i]),gm[i]+2*sqrt(doldm[i][i]));                                  fprintf(ficlog,"%e [%e ;%e] ",gm[i],gm[i]-2*sqrt(doldm[i][i]),gm[i]+2*sqrt(doldm[i][i]));
           }*/                                  }*/
                           
         fprintf(ficresprob,"\n%d ",(int)age);                          fprintf(ficresprob,"\n%d ",(int)age);
         fprintf(ficresprobcov,"\n%d ",(int)age);                          fprintf(ficresprobcov,"\n%d ",(int)age);
         fprintf(ficresprobcor,"\n%d ",(int)age);                          fprintf(ficresprobcor,"\n%d ",(int)age);
                           
         for (i=1; i<=(nlstate)*(nlstate+ndeath);i++)                          for (i=1; i<=(nlstate)*(nlstate+ndeath);i++)
           fprintf(ficresprob,"%11.3e (%11.3e) ",mu[i][(int) age],sqrt(varpij[i][i][(int)age]));                                  fprintf(ficresprob,"%11.3e (%11.3e) ",mu[i][(int) age],sqrt(varpij[i][i][(int)age]));
         for (i=1; i<=(nlstate)*(nlstate+ndeath);i++){                          for (i=1; i<=(nlstate)*(nlstate+ndeath);i++){
           fprintf(ficresprobcov,"%11.3e ",mu[i][(int) age]);                                  fprintf(ficresprobcov,"%11.3e ",mu[i][(int) age]);
           fprintf(ficresprobcor,"%11.3e ",mu[i][(int) age]);                                  fprintf(ficresprobcor,"%11.3e ",mu[i][(int) age]);
         }                          }
         i=0;                          i=0;
         for (k=1; k<=(nlstate);k++){                          for (k=1; k<=(nlstate);k++){
           for (l=1; l<=(nlstate+ndeath);l++){                                   for (l=1; l<=(nlstate+ndeath);l++){ 
             i++;                                          i++;
             fprintf(ficresprobcov,"\n%d %d-%d",(int)age,k,l);                                          fprintf(ficresprobcov,"\n%d %d-%d",(int)age,k,l);
             fprintf(ficresprobcor,"\n%d %d-%d",(int)age,k,l);                                          fprintf(ficresprobcor,"\n%d %d-%d",(int)age,k,l);
             for (j=1; j<=i;j++){                                          for (j=1; j<=i;j++){
               /* printf(" k=%d l=%d i=%d j=%d\n",k,l,i,j);fflush(stdout); */                                                  /* printf(" k=%d l=%d i=%d j=%d\n",k,l,i,j);fflush(stdout); */
               fprintf(ficresprobcov," %11.3e",varpij[i][j][(int)age]);                                                  fprintf(ficresprobcov," %11.3e",varpij[i][j][(int)age]);
               fprintf(ficresprobcor," %11.3e",varpij[i][j][(int) age]/sqrt(varpij[i][i][(int) age])/sqrt(varpij[j][j][(int)age]));                                                  fprintf(ficresprobcor," %11.3e",varpij[i][j][(int) age]/sqrt(varpij[i][i][(int) age])/sqrt(varpij[j][j][(int)age]));
             }                                          }
           }                                  }
         }/* end of loop for state */                          }/* end of loop for state */
       } /* end of loop for age */                  } /* end of loop for age */
       free_vector(gp,1,(nlstate+ndeath)*(nlstate+ndeath));                  free_vector(gp,1,(nlstate+ndeath)*(nlstate+ndeath));
       free_vector(gm,1,(nlstate+ndeath)*(nlstate+ndeath));                  free_vector(gm,1,(nlstate+ndeath)*(nlstate+ndeath));
       free_matrix(trgradg,1,(nlstate+ndeath)*(nlstate+ndeath),1,npar);                  free_matrix(trgradg,1,(nlstate+ndeath)*(nlstate+ndeath),1,npar);
       free_matrix(gradg,1,(nlstate+ndeath)*(nlstate+ndeath),1,npar);                  free_matrix(gradg,1,(nlstate+ndeath)*(nlstate+ndeath),1,npar);
             
       /* Confidence intervalle of pij  */                  /* Confidence intervalle of pij  */
       /*                  /*
         fprintf(ficgp,"\nunset parametric;unset label");                          fprintf(ficgp,"\nunset parametric;unset label");
         fprintf(ficgp,"\nset log y;unset log x; set xlabel \"Age\";set ylabel \"probability (year-1)\"");                          fprintf(ficgp,"\nset log y;unset log x; set xlabel \"Age\";set ylabel \"probability (year-1)\"");
         fprintf(ficgp,"\nset ter png small\nset size 0.65,0.65");                          fprintf(ficgp,"\nset ter png small\nset size 0.65,0.65");
         fprintf(fichtm,"\n<br>Probability with  confidence intervals expressed in year<sup>-1</sup> :<a href=\"pijgr%s.png\">pijgr%s.png</A>, ",optionfilefiname,optionfilefiname);                          fprintf(fichtm,"\n<br>Probability with  confidence intervals expressed in year<sup>-1</sup> :<a href=\"pijgr%s.png\">pijgr%s.png</A>, ",optionfilefiname,optionfilefiname);
         fprintf(fichtm,"\n<br><img src=\"pijgr%s.png\"> ",optionfilefiname);                          fprintf(fichtm,"\n<br><img src=\"pijgr%s.png\"> ",optionfilefiname);
         fprintf(ficgp,"\nset out \"pijgr%s.png\"",optionfilefiname);                          fprintf(ficgp,"\nset out \"pijgr%s.png\"",optionfilefiname);
         fprintf(ficgp,"\nplot \"%s\" every :::%d::%d u 1:2 \"\%%lf",k1,k2,xfilevarprob);                          fprintf(ficgp,"\nplot \"%s\" every :::%d::%d u 1:2 \"\%%lf",k1,k2,xfilevarprob);
       */                  */
                   
       /* Drawing ellipsoids of confidence of two variables p(k1-l1,k2-l2)*/                  /* Drawing ellipsoids of confidence of two variables p(k1-l1,k2-l2)*/
       first1=1;first2=2;                  first1=1;first2=2;
       for (k2=1; k2<=(nlstate);k2++){                  for (k2=1; k2<=(nlstate);k2++){
         for (l2=1; l2<=(nlstate+ndeath);l2++){                           for (l2=1; l2<=(nlstate+ndeath);l2++){ 
           if(l2==k2) continue;                                  if(l2==k2) continue;
           j=(k2-1)*(nlstate+ndeath)+l2;                                  j=(k2-1)*(nlstate+ndeath)+l2;
           for (k1=1; k1<=(nlstate);k1++){                                  for (k1=1; k1<=(nlstate);k1++){
             for (l1=1; l1<=(nlstate+ndeath);l1++){                                           for (l1=1; l1<=(nlstate+ndeath);l1++){ 
               if(l1==k1) continue;                                                  if(l1==k1) continue;
               i=(k1-1)*(nlstate+ndeath)+l1;                                                  i=(k1-1)*(nlstate+ndeath)+l1;
               if(i<=j) continue;                                                  if(i<=j) continue;
               for (age=bage; age<=fage; age ++){                                                   for (age=bage; age<=fage; age ++){ 
                 if ((int)age %5==0){                                                          if ((int)age %5==0){
                   v1=varpij[i][i][(int)age]/stepm*YEARM/stepm*YEARM;                                                                  v1=varpij[i][i][(int)age]/stepm*YEARM/stepm*YEARM;
                   v2=varpij[j][j][(int)age]/stepm*YEARM/stepm*YEARM;                                                                  v2=varpij[j][j][(int)age]/stepm*YEARM/stepm*YEARM;
                   cv12=varpij[i][j][(int)age]/stepm*YEARM/stepm*YEARM;                                                                  cv12=varpij[i][j][(int)age]/stepm*YEARM/stepm*YEARM;
                   mu1=mu[i][(int) age]/stepm*YEARM ;                                                                  mu1=mu[i][(int) age]/stepm*YEARM ;
                   mu2=mu[j][(int) age]/stepm*YEARM;                                                                  mu2=mu[j][(int) age]/stepm*YEARM;
                   c12=cv12/sqrt(v1*v2);                                                                  c12=cv12/sqrt(v1*v2);
                   /* Computing eigen value of matrix of covariance */                                                                  /* Computing eigen value of matrix of covariance */
                   lc1=((v1+v2)+sqrt((v1+v2)*(v1+v2) - 4*(v1*v2-cv12*cv12)))/2.;                                                                  lc1=((v1+v2)+sqrt((v1+v2)*(v1+v2) - 4*(v1*v2-cv12*cv12)))/2.;
                   lc2=((v1+v2)-sqrt((v1+v2)*(v1+v2) - 4*(v1*v2-cv12*cv12)))/2.;                                                                  lc2=((v1+v2)-sqrt((v1+v2)*(v1+v2) - 4*(v1*v2-cv12*cv12)))/2.;
                   if ((lc2 <0) || (lc1 <0) ){                                                                  if ((lc2 <0) || (lc1 <0) ){
                     if(first2==1){                                                                          if(first2==1){
                       first1=0;                                                                                  first1=0;
                     printf("Strange: j1=%d One eigen value of 2x2 matrix of covariance is negative, lc1=%11.3e, lc2=%11.3e, v1=%11.3e, v2=%11.3e, cv12=%11.3e.\n It means that the matrix was not well estimated (varpij), for i=%2d, j=%2d, age=%4d .\n See files %s and %s. Probably WRONG RESULTS. See log file for details...\n", j1, lc1, lc2, v1, v2, cv12, i, j, (int)age,fileresprobcov, fileresprobcor);                                                                                  printf("Strange: j1=%d One eigen value of 2x2 matrix of covariance is negative, lc1=%11.3e, lc2=%11.3e, v1=%11.3e, v2=%11.3e, cv12=%11.3e.\n It means that the matrix was not well estimated (varpij), for i=%2d, j=%2d, age=%4d .\n See files %s and %s. Probably WRONG RESULTS. See log file for details...\n", j1, lc1, lc2, v1, v2, cv12, i, j, (int)age,fileresprobcov, fileresprobcor);
                     }                                                                          }
                     fprintf(ficlog,"Strange: j1=%d One eigen value of 2x2 matrix of covariance is negative, lc1=%11.3e, lc2=%11.3e, v1=%11.3e, v2=%11.3e, cv12=%11.3e.\n It means that the matrix was not well estimated (varpij), for i=%2d, j=%2d, age=%4d .\n See files %s and %s. Probably WRONG RESULTS.\n", j1, lc1, lc2, v1, v2, cv12, i, j, (int)age,fileresprobcov, fileresprobcor);fflush(ficlog);                                                                          fprintf(ficlog,"Strange: j1=%d One eigen value of 2x2 matrix of covariance is negative, lc1=%11.3e, lc2=%11.3e, v1=%11.3e, v2=%11.3e, cv12=%11.3e.\n It means that the matrix was not well estimated (varpij), for i=%2d, j=%2d, age=%4d .\n See files %s and %s. Probably WRONG RESULTS.\n", j1, lc1, lc2, v1, v2, cv12, i, j, (int)age,fileresprobcov, fileresprobcor);fflush(ficlog);
                     /* lc1=fabs(lc1); */ /* If we want to have them positive */                                                                          /* lc1=fabs(lc1); */ /* If we want to have them positive */
                     /* lc2=fabs(lc2); */                                                                          /* lc2=fabs(lc2); */
                   }                                                                  }
                                                                   
                   /* Eigen vectors */                                                                  /* Eigen vectors */
                   v11=(1./sqrt(1+(v1-lc1)*(v1-lc1)/cv12/cv12));                                                                  v11=(1./sqrt(1+(v1-lc1)*(v1-lc1)/cv12/cv12));
                   /*v21=sqrt(1.-v11*v11); *//* error */                                                                  /*v21=sqrt(1.-v11*v11); *//* error */
                   v21=(lc1-v1)/cv12*v11;                                                                  v21=(lc1-v1)/cv12*v11;
                   v12=-v21;                                                                  v12=-v21;
                   v22=v11;                                                                  v22=v11;
                   tnalp=v21/v11;                                                                  tnalp=v21/v11;
                   if(first1==1){                                                                  if(first1==1){
                     first1=0;                                                                          first1=0;
                     printf("%d %d%d-%d%d mu %.4e %.4e Var %.4e %.4e cor %.3f cov %.4e Eig %.3e %.3e 1stv %.3f %.3f tang %.3f\nOthers in log...\n",(int) age,k1,l1,k2,l2,mu1,mu2,v1,v2,c12,cv12,lc1,lc2,v11,v21,tnalp);                                                                          printf("%d %d%d-%d%d mu %.4e %.4e Var %.4e %.4e cor %.3f cov %.4e Eig %.3e %.3e 1stv %.3f %.3f tang %.3f\nOthers in log...\n",(int) age,k1,l1,k2,l2,mu1,mu2,v1,v2,c12,cv12,lc1,lc2,v11,v21,tnalp);
                   }                                                                  }
                   fprintf(ficlog,"%d %d%d-%d%d mu %.4e %.4e Var %.4e %.4e cor %.3f cov %.4e Eig %.3e %.3e 1stv %.3f %.3f tan %.3f\n",(int) age,k1,l1,k2,l2,mu1,mu2,v1,v2,c12,cv12,lc1,lc2,v11,v21,tnalp);                                                                  fprintf(ficlog,"%d %d%d-%d%d mu %.4e %.4e Var %.4e %.4e cor %.3f cov %.4e Eig %.3e %.3e 1stv %.3f %.3f tan %.3f\n",(int) age,k1,l1,k2,l2,mu1,mu2,v1,v2,c12,cv12,lc1,lc2,v11,v21,tnalp);
                   /*printf(fignu*/                                                                  /*printf(fignu*/
                   /* mu1+ v11*lc1*cost + v12*lc2*sin(t) */                                                                  /* mu1+ v11*lc1*cost + v12*lc2*sin(t) */
                   /* mu2+ v21*lc1*cost + v22*lc2*sin(t) */                                                                  /* mu2+ v21*lc1*cost + v22*lc2*sin(t) */
                   if(first==1){                                                                  if(first==1){
                     first=0;                                                                          first=0;
                     fprintf(ficgp,"\n# Ellipsoids of confidence\n#\n");                                                                          fprintf(ficgp,"\n# Ellipsoids of confidence\n#\n");
                     fprintf(ficgp,"\nset parametric;unset label");                                                                          fprintf(ficgp,"\nset parametric;unset label");
                     fprintf(ficgp,"\nset log y;set log x; set xlabel \"p%1d%1d (year-1)\";set ylabel \"p%1d%1d (year-1)\"",k1,l1,k2,l2);                                                                          fprintf(ficgp,"\nset log y;set log x; set xlabel \"p%1d%1d (year-1)\";set ylabel \"p%1d%1d (year-1)\"",k1,l1,k2,l2);
                     fprintf(ficgp,"\nset ter svg size 640, 480");                                                                          fprintf(ficgp,"\nset ter svg size 640, 480");
                     fprintf(fichtmcov,"\n<br>Ellipsoids of confidence cov(p%1d%1d,p%1d%1d) expressed in year<sup>-1</sup>\                                                                          fprintf(fichtmcov,"\n<br>Ellipsoids of confidence cov(p%1d%1d,p%1d%1d) expressed in year<sup>-1</sup>\
  :<a href=\"%s_%d%1d%1d-%1d%1d.svg\">\   :<a href=\"%s_%d%1d%1d-%1d%1d.svg\">                                                                                                                                           \
 %s_%d%1d%1d-%1d%1d.svg</A>, ",k1,l1,k2,l2,\  %s_%d%1d%1d-%1d%1d.svg</A>, ",k1,l1,k2,l2,\
                             subdirf2(optionfilefiname,"VARPIJGR_"), j1,k1,l1,k2,l2,\                                                                                                          subdirf2(optionfilefiname,"VARPIJGR_"), j1,k1,l1,k2,l2, \
                             subdirf2(optionfilefiname,"VARPIJGR_"), j1,k1,l1,k2,l2);                                                                                                          subdirf2(optionfilefiname,"VARPIJGR_"), j1,k1,l1,k2,l2);
                     fprintf(fichtmcov,"\n<br><img src=\"%s_%d%1d%1d-%1d%1d.svg\"> ",subdirf2(optionfilefiname,"VARPIJGR_"), j1,k1,l1,k2,l2);                                                                          fprintf(fichtmcov,"\n<br><img src=\"%s_%d%1d%1d-%1d%1d.svg\"> ",subdirf2(optionfilefiname,"VARPIJGR_"), j1,k1,l1,k2,l2);
                     fprintf(fichtmcov,"\n<br> Correlation at age %d (%.3f),",(int) age, c12);                                                                          fprintf(fichtmcov,"\n<br> Correlation at age %d (%.3f),",(int) age, c12);
                     fprintf(ficgp,"\nset out \"%s_%d%1d%1d-%1d%1d.svg\"",subdirf2(optionfilefiname,"VARPIJGR_"), j1,k1,l1,k2,l2);                                                                          fprintf(ficgp,"\nset out \"%s_%d%1d%1d-%1d%1d.svg\"",subdirf2(optionfilefiname,"VARPIJGR_"), j1,k1,l1,k2,l2);
                     fprintf(ficgp,"\nset label \"%d\" at %11.3e,%11.3e center",(int) age, mu1,mu2);                      fprintf(ficgp,"\nset label \"%d\" at %11.3e,%11.3e center",(int) age, mu1,mu2);
                     fprintf(ficgp,"\n# Age %d, p%1d%1d - p%1d%1d",(int) age, k1,l1,k2,l2);                      fprintf(ficgp,"\n# Age %d, p%1d%1d - p%1d%1d",(int) age, k1,l1,k2,l2);
                     fprintf(ficgp,"\nplot [-pi:pi] %11.3e+ %.3f*(%11.3e*%11.3e*cos(t)+%11.3e*%11.3e*sin(t)), %11.3e +%.3f*(%11.3e*%11.3e*cos(t)+%11.3e*%11.3e*sin(t)) not",\                      fprintf(ficgp,"\nplot [-pi:pi] %11.3e+ %.3f*(%11.3e*%11.3e*cos(t)+%11.3e*%11.3e*sin(t)), %11.3e +%.3f*(%11.3e*%11.3e*cos(t)+%11.3e*%11.3e*sin(t)) not",     \
                             mu1,std,v11,sqrt(lc1),v12,sqrt(lc2),\                                                                  mu1,std,v11,sqrt(lc1),v12,sqrt(lc2),                                                                            \
                             mu2,std,v21,sqrt(lc1),v22,sqrt(lc2));                                                                  mu2,std,v21,sqrt(lc1),v22,sqrt(lc2));
                   }else{                                                                  }else{
                     first=0;                                                                          first=0;
                     fprintf(fichtmcov," %d (%.3f),",(int) age, c12);                                                                          fprintf(fichtmcov," %d (%.3f),",(int) age, c12);
                     fprintf(ficgp,"\n# Age %d, p%1d%1d - p%1d%1d",(int) age, k1,l1,k2,l2);                                                                          fprintf(ficgp,"\n# Age %d, p%1d%1d - p%1d%1d",(int) age, k1,l1,k2,l2);
                     fprintf(ficgp,"\nset label \"%d\" at %11.3e,%11.3e center",(int) age, mu1,mu2);                                                                          fprintf(ficgp,"\nset label \"%d\" at %11.3e,%11.3e center",(int) age, mu1,mu2);
                     fprintf(ficgp,"\nreplot %11.3e+ %.3f*(%11.3e*%11.3e*cos(t)+%11.3e*%11.3e*sin(t)), %11.3e +%.3f*(%11.3e*%11.3e*cos(t)+%11.3e*%11.3e*sin(t)) not",\                                                                          fprintf(ficgp,"\nreplot %11.3e+ %.3f*(%11.3e*%11.3e*cos(t)+%11.3e*%11.3e*sin(t)), %11.3e +%.3f*(%11.3e*%11.3e*cos(t)+%11.3e*%11.3e*sin(t)) not", \
                             mu1,std,v11,sqrt(lc1),v12,sqrt(lc2),\                                                                                                          mu1,std,v11,sqrt(lc1),v12,sqrt(lc2),                                    \
                             mu2,std,v21,sqrt(lc1),v22,sqrt(lc2));                                                                                                          mu2,std,v21,sqrt(lc1),v22,sqrt(lc2));
                   }/* if first */                                                                  }/* if first */
                 } /* age mod 5 */                                                          } /* age mod 5 */
               } /* end loop age */                                                  } /* end loop age */
               fprintf(ficgp,"\nset out;\nset out \"%s_%d%1d%1d-%1d%1d.svg\";replot;set out;",subdirf2(optionfilefiname,"VARPIJGR_"), j1,k1,l1,k2,l2);                                                  fprintf(ficgp,"\nset out;\nset out \"%s_%d%1d%1d-%1d%1d.svg\";replot;set out;",subdirf2(optionfilefiname,"VARPIJGR_"), j1,k1,l1,k2,l2);
               first=1;                                                  first=1;
             } /*l12 */                                          } /*l12 */
           } /* k12 */                                  } /* k12 */
         } /*l1 */                          } /*l1 */
       }/* k1 */                  }/* k1 */
       /* } */ /* loop covariates */          }  /* loop on combination of covariates j1 */
   }  
   free_ma3x(varpij,1,nlstate,1,nlstate+ndeath,(int) bage, (int)fage);    free_ma3x(varpij,1,nlstate,1,nlstate+ndeath,(int) bage, (int)fage);
   free_matrix(mu,1,(nlstate+ndeath)*(nlstate+ndeath),(int) bage, (int)fage);    free_matrix(mu,1,(nlstate+ndeath)*(nlstate+ndeath),(int) bage, (int)fage);
   free_matrix(doldm,1,(nlstate)*(nlstate+ndeath),1,(nlstate)*(nlstate+ndeath));    free_matrix(doldm,1,(nlstate)*(nlstate+ndeath),1,(nlstate)*(nlstate+ndeath));
Line 5488  fprintf(fichtm," \n<ul><li><b>Graphs</b> Line 5543  fprintf(fichtm," \n<ul><li><b>Graphs</b>
   
  jj1=0;   jj1=0;
  for(k1=1; k1<=m;k1++){   for(k1=1; k1<=m;k1++){
   
    /* 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 ",Tvaraff[cpt],nbcode[Tvaraff[cpt]][codtabm(jj1,cpt)]);
          printf(" V%d=%d ",Tvaraff[cpt],nbcode[Tvaraff[cpt]][codtabm(jj1,cpt)]);fflush(stdout);                           printf(" V%d=%d ",Tvaraff[cpt],nbcode[Tvaraff[cpt]][codtabm(jj1,cpt)]);fflush(stdout);
        }                   }
        fprintf(fichtm," ************\n<hr size=\"2\" color=\"#EC5E5E\">");                   fprintf(fichtm," ************\n<hr size=\"2\" color=\"#EC5E5E\">");
      }                   if(invalidvarcomb[k1]){
      /* aij, bij */                           fprintf(fichtm,"\n<h3>Combination (%d) ignored because no cases </h3>\n",k1); 
      fprintf(fichtm,"<br>- Logit model (yours is: 1+age+%s), for example: logit(pij)=log(pij/pii)= aij+ bij age + V1 age + etc. as a function of age: <a href=\"%s_%d-1.svg\">%s_%d-1.svg</a><br> \                           printf("\nCombination (%d) ignored because no cases \n",k1); 
                            continue;
                    }
            }
            /* aij, bij */
            fprintf(fichtm,"<br>- Logit model (yours is: 1+age+%s), for example: logit(pij)=log(pij/pii)= aij+ bij age + V1 age + etc. as a function of age: <a href=\"%s_%d-1.svg\">%s_%d-1.svg</a><br> \
 <img src=\"%s_%d-1.svg\">",model,subdirf2(optionfilefiname,"PE_"),jj1,subdirf2(optionfilefiname,"PE_"),jj1,subdirf2(optionfilefiname,"PE_"),jj1);  <img src=\"%s_%d-1.svg\">",model,subdirf2(optionfilefiname,"PE_"),jj1,subdirf2(optionfilefiname,"PE_"),jj1,subdirf2(optionfilefiname,"PE_"),jj1);
      /* Pij */           /* Pij */
      fprintf(fichtm,"<br>\n- P<sub>ij</sub> or conditional probabilities to be observed in state j being in state i, %d (stepm) months before: <a href=\"%s_%d-2.svg\">%s_%d-2.svg</a><br> \           fprintf(fichtm,"<br>\n- P<sub>ij</sub> or conditional probabilities to be observed in state j being in state i, %d (stepm) months before: <a href=\"%s_%d-2.svg\">%s_%d-2.svg</a><br> \
 <img src=\"%s_%d-2.svg\">",stepm,subdirf2(optionfilefiname,"PE_"),jj1,subdirf2(optionfilefiname,"PE_"),jj1,subdirf2(optionfilefiname,"PE_"),jj1);       <img src=\"%s_%d-2.svg\">",stepm,subdirf2(optionfilefiname,"PE_"),jj1,subdirf2(optionfilefiname,"PE_"),jj1,subdirf2(optionfilefiname,"PE_"),jj1);     
      /* Quasi-incidences */           /* Quasi-incidences */
      fprintf(fichtm,"<br>\n- I<sub>ij</sub> or Conditional probabilities to be observed in state j being in state i %d (stepm) months\           fprintf(fichtm,"<br>\n- I<sub>ij</sub> or Conditional probabilities to be observed in state j being in state i %d (stepm) months\
  before but expressed in per year i.e. quasi incidences if stepm is small and probabilities too,\   before but expressed in per year i.e. quasi incidences if stepm is small and probabilities too, \
  incidence (rates) are the limit when h tends to zero of the ratio of the probability  <sub>h</sub>P<sub>ij</sub> \   incidence (rates) are the limit when h tends to zero of the ratio of the probability  <sub>h</sub>P<sub>ij</sub> \
 divided by h: <sub>h</sub>P<sub>ij</sub>/h : <a href=\"%s_%d-3.svg\">%s_%d-3.svg</a><br> \  divided by h: <sub>h</sub>P<sub>ij</sub>/h : <a href=\"%s_%d-3.svg\">%s_%d-3.svg</a><br> \
 <img src=\"%s_%d-3.svg\">",stepm,subdirf2(optionfilefiname,"PE_"),jj1,subdirf2(optionfilefiname,"PE_"),jj1,subdirf2(optionfilefiname,"PE_"),jj1);   <img src=\"%s_%d-3.svg\">",stepm,subdirf2(optionfilefiname,"PE_"),jj1,subdirf2(optionfilefiname,"PE_"),jj1,subdirf2(optionfilefiname,"PE_"),jj1); 
      /* Survival functions (period) in state j */           /* Survival functions (period) in state j */
      for(cpt=1; cpt<=nlstate;cpt++){           for(cpt=1; cpt<=nlstate;cpt++){
        fprintf(fichtm,"<br>\n- Survival functions in state %d. Or probability to survive in state %d being in state (1 to %d) at different ages. <a href=\"%s%d_%d.svg\">%s%d_%d.svg</a><br> \                   fprintf(fichtm,"<br>\n- Survival functions in state %d. Or probability to survive in state %d being in state (1 to %d) at different ages. <a href=\"%s%d_%d.svg\">%s%d_%d.svg</a><br> \
 <img src=\"%s_%d-%d.svg\">", cpt, cpt, nlstate, subdirf2(optionfilefiname,"LIJ_"),cpt,jj1,subdirf2(optionfilefiname,"LIJ_"),cpt,jj1,subdirf2(optionfilefiname,"LIJ_"),cpt,jj1);  <img src=\"%s_%d-%d.svg\">", cpt, cpt, nlstate, subdirf2(optionfilefiname,"LIJ_"),cpt,jj1,subdirf2(optionfilefiname,"LIJ_"),cpt,jj1,subdirf2(optionfilefiname,"LIJ_"),cpt,jj1);
      }           }
      /* State specific survival functions (period) */           /* State specific survival functions (period) */
      for(cpt=1; cpt<=nlstate;cpt++){           for(cpt=1; cpt<=nlstate;cpt++){
        fprintf(fichtm,"<br>\n- Survival functions from state %d in each live state and total.\                   fprintf(fichtm,"<br>\n- Survival functions from state %d in each live state and total.\
  Or probability to survive in various states (1 to %d) being in state %d at different ages.\   Or probability to survive in various states (1 to %d) being in state %d at different ages.     \
  <a href=\"%s%d_%d.svg\">%s%d_%d.svg</a><br> <img src=\"%s_%d-%d.svg\">", cpt, nlstate, cpt, subdirf2(optionfilefiname,"LIJT_"),cpt,jj1,subdirf2(optionfilefiname,"LIJT_"),cpt,jj1,subdirf2(optionfilefiname,"LIJT_"),cpt,jj1);   <a href=\"%s%d_%d.svg\">%s%d_%d.svg</a><br> <img src=\"%s_%d-%d.svg\">", cpt, nlstate, cpt, subdirf2(optionfilefiname,"LIJT_"),cpt,jj1,subdirf2(optionfilefiname,"LIJT_"),cpt,jj1,subdirf2(optionfilefiname,"LIJT_"),cpt,jj1);
      }           }
      /* Period (stable) prevalence in each health state */           /* Period (stable) prevalence in each health state */
      for(cpt=1; cpt<=nlstate;cpt++){           for(cpt=1; cpt<=nlstate;cpt++){
        fprintf(fichtm,"<br>\n- Convergence to period (stable) prevalence in state %d. Or probability to be in state %d being in state (1 to %d) at different ages. <a href=\"%s_%d-%d.svg\">%s_%d-%d.svg</a><br> \                   fprintf(fichtm,"<br>\n- Convergence to period (stable) prevalence in state %d. Or probability to be in state %d being in state (1 to %d) at different ages. <a href=\"%s_%d-%d.svg\">%s_%d-%d.svg</a><br> \
 <img src=\"%s_%d-%d.svg\">", cpt, cpt, nlstate, subdirf2(optionfilefiname,"P_"),cpt,jj1,subdirf2(optionfilefiname,"P_"),cpt,jj1,subdirf2(optionfilefiname,"P_"),cpt,jj1);  <img src=\"%s_%d-%d.svg\">", cpt, cpt, nlstate, subdirf2(optionfilefiname,"P_"),cpt,jj1,subdirf2(optionfilefiname,"P_"),cpt,jj1,subdirf2(optionfilefiname,"P_"),cpt,jj1);
      }           }
     if(backcast==1){           if(backcast==1){
      /* Period (stable) back prevalence in each health state */       /* Period (stable) back prevalence in each health state */
      for(cpt=1; cpt<=nlstate;cpt++){       for(cpt=1; cpt<=nlstate;cpt++){
        fprintf(fichtm,"<br>\n- Convergence to period (stable) back prevalence in state %d. Or probability to be in state %d being in state (1 to %d) at different ages. <a href=\"%s_%d-%d.svg\">%s_%d-%d.svg</a><br> \         fprintf(fichtm,"<br>\n- Convergence to period (stable) back prevalence in state %d. Or probability to be in state %d being in state (1 to %d) at different ages. <a href=\"%s_%d-%d.svg\">%s_%d-%d.svg</a><br> \
 <img src=\"%s_%d-%d.svg\">", cpt, cpt, nlstate, subdirf2(optionfilefiname,"PB_"),cpt,jj1,subdirf2(optionfilefiname,"PB_"),cpt,jj1,subdirf2(optionfilefiname,"PB_"),cpt,jj1);  <img src=\"%s_%d-%d.svg\">", cpt, cpt, nlstate, subdirf2(optionfilefiname,"PB_"),cpt,jj1,subdirf2(optionfilefiname,"PB_"),cpt,jj1,subdirf2(optionfilefiname,"PB_"),cpt,jj1);
      }       }
     }           }
     if(prevfcast==1){           if(prevfcast==1){
       /* Projection of prevalence up to period (stable) prevalence in each health state */                   /* Projection of prevalence up to period (stable) prevalence in each health state */
       for(cpt=1; cpt<=nlstate;cpt++){                   for(cpt=1; cpt<=nlstate;cpt++){
         fprintf(fichtm,"<br>\n- Projection of cross-sectional prevalence (estimated with cases observed from %.1f to %.1f) up to period (stable) prevalence in state %d. Or probability to be in state %d being in state (1 to %d) at different ages. <a href=\"%s%d_%d.svg\">%s%d_%d.svg</a><br> \                           fprintf(fichtm,"<br>\n- Projection of cross-sectional prevalence (estimated with cases observed from %.1f to %.1f) up to period (stable) prevalence in state %d. Or probability to be in state %d being in state (1 to %d) at different ages. <a href=\"%s%d_%d.svg\">%s%d_%d.svg</a><br> \
 <img src=\"%s_%d-%d.svg\">", dateprev1, dateprev2, cpt, cpt, nlstate, subdirf2(optionfilefiname,"PROJ_"),cpt,jj1,subdirf2(optionfilefiname,"PROJ_"),cpt,jj1,subdirf2(optionfilefiname,"PROJ_"),cpt,jj1);  <img src=\"%s_%d-%d.svg\">", dateprev1, dateprev2, cpt, cpt, nlstate, subdirf2(optionfilefiname,"PROJ_"),cpt,jj1,subdirf2(optionfilefiname,"PROJ_"),cpt,jj1,subdirf2(optionfilefiname,"PROJ_"),cpt,jj1);
       }                   }
     }           }
            
      for(cpt=1; cpt<=nlstate;cpt++) {           for(cpt=1; cpt<=nlstate;cpt++) {
        fprintf(fichtm,"\n<br>- Life expectancy by health state (%d) at initial age and its decomposition into health expectancies in each alive state (1 to %d) (or area under each survival functions): <a href=\"%s_%d%d.svg\">%s_%d%d.svg</a> <br> \                   fprintf(fichtm,"\n<br>- Life expectancy by health state (%d) at initial age and its decomposition into health expectancies in each alive state (1 to %d) (or area under each survival functions): <a href=\"%s_%d%d.svg\">%s_%d%d.svg</a> <br> \
 <img src=\"%s_%d%d.svg\">",cpt,nlstate,subdirf2(optionfilefiname,"EXP_"),cpt,jj1,subdirf2(optionfilefiname,"EXP_"),cpt,jj1,subdirf2(optionfilefiname,"EXP_"),cpt,jj1);  <img src=\"%s_%d%d.svg\">",cpt,nlstate,subdirf2(optionfilefiname,"EXP_"),cpt,jj1,subdirf2(optionfilefiname,"EXP_"),cpt,jj1,subdirf2(optionfilefiname,"EXP_"),cpt,jj1);
      }           }
    /* } /\* end i1 *\/ */     /* } /\* end i1 *\/ */
  }/* End k1 */   }/* End k1 */
  fprintf(fichtm,"</ul>");   fprintf(fichtm,"</ul>");
Line 5602  See page 'Matrix of variance-covariance Line 5663  See page 'Matrix of variance-covariance
   
  jj1=0;   jj1=0;
  for(k1=1; k1<=m;k1++){   for(k1=1; k1<=m;k1++){
    /* 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 ",Tvaraff[cpt],nbcode[Tvaraff[cpt]][codtabm(jj1,cpt)]);
        fprintf(fichtm," ************\n<hr size=\"2\" color=\"#EC5E5E\">");         fprintf(fichtm," ************\n<hr size=\"2\" color=\"#EC5E5E\">");
   
                            if(invalidvarcomb[k1]){
                                    fprintf(fichtm,"\n<h4>Combination (%d) ignored because no cases </h4>\n",k1); 
                                    continue;
                            }
      }       }
      for(cpt=1; cpt<=nlstate;cpt++) {       for(cpt=1; cpt<=nlstate;cpt++) {
        fprintf(fichtm,"\n<br>- Observed (cross-sectional) and period (incidence based) \         fprintf(fichtm,"\n<br>- Observed (cross-sectional) and period (incidence based) \
Line 5631  true period expectancies (those weighted Line 5697  true period expectancies (those weighted
  void printinggnuplot(char fileresu[], char optionfilefiname[], double ageminpar, double agemaxpar, double fage , int prevfcast, int backcast, char pathc[], double p[]){   void printinggnuplot(char fileresu[], char optionfilefiname[], double ageminpar, double agemaxpar, double fage , int prevfcast, int backcast, char pathc[], double p[]){
   
   char dirfileres[132],optfileres[132];    char dirfileres[132],optfileres[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,ij=0,l=0;
   int lv=0, vlv=0, kl=0;    int lv=0, vlv=0, kl=0;
   int ng=0;    int ng=0;
Line 5680  true period expectancies (those weighted Line 5747  true period expectancies (those weighted
   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 ; k1 ++) { /* For each combination of covariate */      for (k1=1; k1<= m ; k1 ++) { /* For each valid combination of covariate */
       /* plot [100000000000000000000:-100000000000000000000] "mysbiaspar/vplrmysbiaspar.txt to check */        /* plot [100000000000000000000:-100000000000000000000] "mysbiaspar/vplrmysbiaspar.txt to check */
       fprintf(ficgp,"\n# 1st: Period (stable) prevalence with CI: 'VPL_' files ");        fprintf(ficgp,"\n# 1st: Period (stable) prevalence with CI: 'VPL_' files ");
       for (k=1; k<=cptcoveff; k++){    /* For each covariate k get corresponding value lv for combination k1 */        for (k=1; k<=cptcoveff; k++){    /* For each covariate k get corresponding value lv for combination k1 */
Line 5690  true period expectancies (those weighted Line 5757  true period expectancies (those weighted
                                 /* 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 is the value of the covariate lv, 0 or 1 */                                  vlv= nbcode[Tvaraff[k]][lv]; /* vlv is the value of the covariate lv, 0 or 1 */
                         /* For each combination of covariate k1 (V1=1, V3=0), we printed the current covariate k and its value vlv */                          /* For each combination of covariate k1 (V1=1, V3=0), we printed the current covariate k and its value vlv */
                                 fprintf(ficgp," V%d=%d ",k,vlv);                                  fprintf(ficgp," V%d=%d ",Tvaraff[k],vlv);
       }        }
       fprintf(ficgp,"\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,"\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,"\n#set out \"V_%s_%d-%d.svg\" \n",optionfilefiname,cpt,k1);
Line 5732  plot [%.f:%.f] \"%s\" every :::%d::%d u Line 5803  plot [%.f:%.f] \"%s\" every :::%d::%d u
                                         /*6+1+(i-1)+(nlstate+1)*nlstate; 6+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*/                                          /* ''  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){                                          if(k==cptcoveff){
                                                         fprintf(ficgp,"$%d==%d && $%d==%d)? $%d : 1/0) t 'Backward prevalence in state %d' with line ",kl+1, k,kl+1+1,nbcode[Tvaraff[k]][lv], \                                                          fprintf(ficgp,"$%d==%d && $%d==%d)? $%d : 1/0) t 'Backward prevalence in state %d' with line ",kl+1, Tvaraff[k],kl+1+1,nbcode[Tvaraff[k]][lv], \
                                                                                 4+(cpt-1),  cpt );                                                                                          6+(cpt-1),  cpt );
                                         }else{                                          }else{
                                                 fprintf(ficgp,"$%d==%d && $%d==%d && ",kl+1, k,kl+1+1,nbcode[Tvaraff[k]][lv]);                                                  fprintf(ficgp,"$%d==%d && $%d==%d && ",kl+1, Tvaraff[k],kl+1+1,nbcode[Tvaraff[k]][lv]);
                                                 kl++;                                                  kl++;
                                         }                                          }
                                 } /* end covariate */                                  } /* end covariate */
Line 5745  plot [%.f:%.f] \"%s\" every :::%d::%d u Line 5816  plot [%.f:%.f] \"%s\" every :::%d::%d u
   } /* cpt */    } /* cpt */
   /*2 eme*/    /*2 eme*/
   for (k1=1; k1<= m ; k1 ++) {     for (k1=1; k1<= m ; k1 ++) { 
   
       fprintf(ficgp,"\n# 2nd: Total life expectancy with CI: 't' files ");        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 */
Line 5752  plot [%.f:%.f] \"%s\" every :::%d::%d u Line 5824  plot [%.f:%.f] \"%s\" every :::%d::%d u
                                 /* 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];
                                 fprintf(ficgp," V%d=%d ",k,vlv);                                  fprintf(ficgp," V%d=%d ",Tvaraff[k],vlv);
       }        }
       fprintf(ficgp,"\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.svg\" \n",subdirf2(optionfilefiname,"E_"),k1);                          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*/                          for(vpopbased=0; vpopbased <= popbased; vpopbased++){ /* Done for vpopbased=0 and vpopbased=1 if popbased==1*/
Line 5792  plot [%.f:%.f] \"%s\" every :::%d::%d u Line 5868  plot [%.f:%.f] \"%s\" every :::%d::%d u
                   
   /*3eme*/    /*3eme*/
   for (k1=1; k1<= m ; k1 ++) {     for (k1=1; k1<= m ; k1 ++) { 
   
     for (cpt=1; cpt<= nlstate ; cpt ++) {      for (cpt=1; cpt<= nlstate ; cpt ++) {
       fprintf(ficgp,"\n# 3d: Life expectancy with EXP_ files:  cov=%d state=%d",k1, cpt);        fprintf(ficgp,"\n# 3d: Life expectancy with EXP_ files:  cov=%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 5800  plot [%.f:%.f] \"%s\" every :::%d::%d u Line 5877  plot [%.f:%.f] \"%s\" every :::%d::%d u
                                 /* 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];
                                 fprintf(ficgp," V%d=%d ",k,vlv);                                  fprintf(ficgp," V%d=%d ",Tvaraff[k],vlv);
       }        }
       fprintf(ficgp,"\n#\n");        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*(2*cpt-2); */
       k=2+(nlstate+1)*(cpt-1);        k=2+(nlstate+1)*(cpt-1);
Line 5826  plot [%.f:%.f] \"%s\" every :::%d::%d u Line 5907  plot [%.f:%.f] \"%s\" every :::%d::%d u
     }      }
   }    }
       
           /* 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 multivariate if any */
   
     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# Survival functions in state j : 'LIJ_' files, cov=%d state=%d",k1, cpt);        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 */        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 */
         /* 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];
         fprintf(ficgp," V%d=%d ",k,vlv);                                  fprintf(ficgp," V%d=%d ",Tvaraff[k],vlv);
       }        }
       fprintf(ficgp,"\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,"LIJ_"),cpt,k1);        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\        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\n                                                                                                                                                                                     \
 unset log y\n\  unset log y\n                                                                                                                                                                                                                                           \
 plot [%.f:%.f]  ", ageminpar, agemaxpar);  plot [%.f:%.f]  ", ageminpar, agemaxpar);
       k=3;        k=3;
       for (i=1; i<= nlstate ; i ++){        for (i=1; i<= nlstate ; i ++){
         if(i==1){                                  if(i==1){
           fprintf(ficgp,"\"%s\"",subdirf2(fileresu,"PIJ_"));                                          fprintf(ficgp,"\"%s\"",subdirf2(fileresu,"PIJ_"));
         }else{                                  }else{
           fprintf(ficgp,", '' ");                                          fprintf(ficgp,", '' ");
         }                                  }
         l=(nlstate+ndeath)*(i-1)+1;                                  l=(nlstate+ndeath)*(i-1)+1;
         fprintf(ficgp," u ($1==%d ? ($3):1/0):($%d/($%d",k1,k+l+(cpt-1),k+l);                                  fprintf(ficgp," u ($1==%d ? ($3):1/0):($%d/($%d",k1,k+l+(cpt-1),k+l);
         for (j=2; j<= nlstate+ndeath ; j ++)                                  for (j=2; j<= nlstate+ndeath ; j ++)
           fprintf(ficgp,"+$%d",k+l+j-1);                                          fprintf(ficgp,"+$%d",k+l+j-1);
         fprintf(ficgp,")) t \"l(%d,%d)\" w l",i,cpt);                                  fprintf(ficgp,")) t \"l(%d,%d)\" w l",i,cpt);
       } /* nlstate */        } /* nlstate */
       fprintf(ficgp,"\nset out\n");        fprintf(ficgp,"\nset out\n");
     } /* end cpt state*/       } /* end cpt state*/ 
   } /* end covariate */      } /* end covariate */  
           
   /* 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 if any */
     for (cpt=1; cpt<=nlstate ; cpt ++) { /* For each inital state  */      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);        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 */        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 */
         /* 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];
         fprintf(ficgp," V%d=%d ",k,vlv);                                  fprintf(ficgp," V%d=%d ",Tvaraff[k],vlv);
       }        }
       fprintf(ficgp,"\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,"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\n                                                                                                                                                                                     \
 unset log y\n\  unset log y\n                                                                                                                                                                                                                                           \
 plot [%.f:%.f]  ", ageminpar, agemaxpar);  plot [%.f:%.f]  ", ageminpar, agemaxpar);
       k=3;        k=3;
       for (j=1; j<= nlstate ; j ++){ /* Lived in state j */        for (j=1; j<= nlstate ; j ++){ /* Lived in state j */
         if(j==1)                                  if(j==1)
           fprintf(ficgp,"\"%s\"",subdirf2(fileresu,"PIJ_"));                                          fprintf(ficgp,"\"%s\"",subdirf2(fileresu,"PIJ_"));
         else                                  else
           fprintf(ficgp,", '' ");                                          fprintf(ficgp,", '' ");
         l=(nlstate+ndeath)*(cpt-1) +j;                                  l=(nlstate+ndeath)*(cpt-1) +j;
         fprintf(ficgp," u (($1==%d && (floor($2)%%5 == 0)) ? ($3):1/0):($%d",k1,k+l);                                  fprintf(ficgp," u (($1==%d && (floor($2)%%5 == 0)) ? ($3):1/0):($%d",k1,k+l);
         /* for (i=2; i<= nlstate+ndeath ; i ++) */                                  /* for (i=2; i<= nlstate+ndeath ; i ++) */
         /*   fprintf(ficgp,"+$%d",k+l+i-1); */                                  /*   fprintf(ficgp,"+$%d",k+l+i-1); */
         fprintf(ficgp,") t \"l(%d,%d)\" w l",cpt,j);                                  fprintf(ficgp,") t \"l(%d,%d)\" w l",cpt,j);
       } /* nlstate */        } /* nlstate */
       fprintf(ficgp,", '' ");        fprintf(ficgp,", '' ");
       fprintf(ficgp," u (($1==%d && (floor($2)%%5 == 0)) ? ($3):1/0):(",k1);        fprintf(ficgp," u (($1==%d && (floor($2)%%5 == 0)) ? ($3):1/0):(",k1);
       for (j=1; j<= nlstate ; j ++){ /* Lived in state j */        for (j=1; j<= nlstate ; j ++){ /* Lived in state j */
         l=(nlstate+ndeath)*(cpt-1) +j;                                  l=(nlstate+ndeath)*(cpt-1) +j;
         if(j < nlstate)                                  if(j < nlstate)
           fprintf(ficgp,"$%d +",k+l);                                          fprintf(ficgp,"$%d +",k+l);
         else                                  else
           fprintf(ficgp,"$%d) t\"l(%d,.)\" w l",k+l,cpt);                                          fprintf(ficgp,"$%d) t\"l(%d,.)\" w l",k+l,cpt);
       }        }
       fprintf(ficgp,"\nset out\n");        fprintf(ficgp,"\nset out\n");
     } /* end cpt state*/       } /* end cpt state*/ 
   } /* end covariate */      } /* end covariate */  
           
   /* 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 (1 to m=2**k), if any covariate is present */
     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);
       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 */
         /* 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];
         fprintf(ficgp," V%d=%d ",k,vlv);                                  fprintf(ficgp," V%d=%d ",Tvaraff[k],vlv);
       }        }
       fprintf(ficgp,"\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,"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\
Line 5927  unset log y\n\ Line 6026  unset log y\n\
 plot [%.f:%.f]  ", ageminpar, agemaxpar);  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)
           fprintf(ficgp,"\"%s\"",subdirf2(fileresu,"PIJ_"));                                          fprintf(ficgp,"\"%s\"",subdirf2(fileresu,"PIJ_"));
         else                                  else
           fprintf(ficgp,", '' ");                                          fprintf(ficgp,", '' ");
         l=(nlstate+ndeath)*(i-1)+1;                                  l=(nlstate+ndeath)*(i-1)+1;
         fprintf(ficgp," u ($1==%d ? ($3):1/0):($%d/($%d",k1,k+l+(cpt-1),k+l);                                  fprintf(ficgp," u ($1==%d ? ($3):1/0):($%d/($%d",k1,k+l+(cpt-1),k+l);
         for (j=2; j<= nlstate ; j ++)                                  for (j=2; j<= nlstate ; j ++)
           fprintf(ficgp,"+$%d",k+l+j-1);                                          fprintf(ficgp,"+$%d",k+l+j-1);
         fprintf(ficgp,")) t \"prev(%d,%d)\" w l",i,cpt);                                  fprintf(ficgp,")) t \"prev(%d,%d)\" w l",i,cpt);
       } /* nlstate */        } /* nlstate */
       fprintf(ficgp,"\nset out\n");        fprintf(ficgp,"\nset out\n");
     } /* end cpt state*/       } /* end cpt state*/ 
   } /* end covariate */      } /* end covariate */  
   
   
   /* 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 (1 to m=2**k), if any covariate is present */
       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 */
           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 */
           /* 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];
           fprintf(ficgp," V%d=%d ",k,vlv);                                          fprintf(ficgp," V%d=%d ",Tvaraff[k],vlv);
         }                                  }
         fprintf(ficgp,"\n#\n");                                  fprintf(ficgp,"\n#\n");
                                           if(invalidvarcomb[k1]){
         fprintf(ficgp,"\nset out \"%s_%d-%d.svg\" \n",subdirf2(optionfilefiname,"PB_"),cpt,k1);                                                                  fprintf(ficgp,"#Combination (%d) ignored because no cases \n",k1); 
         fprintf(ficgp,"set xlabel \"Age\" \nset ylabel \"Probability\" \n\                                                                  continue;
 set ter svg size 640, 480\n                                             \                                  }
 unset log y\n                                                           \                                  
                                   fprintf(ficgp,"\nset out \"%s_%d-%d.svg\" \n",subdirf2(optionfilefiname,"PB_"),cpt,k1);
                                   fprintf(ficgp,"set xlabel \"Age\" \nset ylabel \"Probability\" \n\
   set ter svg size 640, 480\n                                                                                                                                                                                     \
   unset log y\n                                                                                                                                                                                                                                           \
 plot [%.f:%.f]  ", ageminpar, agemaxpar);  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)
             fprintf(ficgp,"\"%s\"",subdirf2(fileresu,"PIJB_"));                                                  fprintf(ficgp,"\"%s\"",subdirf2(fileresu,"PIJB_"));
           else                                          else
             fprintf(ficgp,", '' ");                                                  fprintf(ficgp,", '' ");
           /* l=(nlstate+ndeath)*(i-1)+1; */                                          /* l=(nlstate+ndeath)*(i-1)+1; */
           l=(nlstate+ndeath)*(cpt-1)+1;                                          l=(nlstate+ndeath)*(cpt-1)+1;
           /* fprintf(ficgp," u ($1==%d ? ($3):1/0):($%d/($%d",k1,k+l+(cpt-1),k+l); /\* a vérifier *\/ */                                          /* fprintf(ficgp," u ($1==%d ? ($3):1/0):($%d/($%d",k1,k+l+(cpt-1),k+l); /\* a vérifier *\/ */
           /* fprintf(ficgp," u ($1==%d ? ($3):1/0):($%d/($%d",k1,k+l+(cpt-1),k+l+(cpt-1)+i-1); /\* a vérifier *\/ */                                          /* fprintf(ficgp," u ($1==%d ? ($3):1/0):($%d/($%d",k1,k+l+(cpt-1),k+l+(cpt-1)+i-1); /\* a vérifier *\/ */
           fprintf(ficgp," u ($1==%d ? ($3):1/0):($%d",k1,k+l+(cpt-1)+i-1); /* a vérifier */                                          fprintf(ficgp," u ($1==%d ? ($3):1/0):($%d",k1,k+l+(cpt-1)+i-1); /* a vérifier */
           /* for (j=2; j<= nlstate ; j ++) */                                          /* for (j=2; j<= nlstate ; j ++) */
           /*    fprintf(ficgp,"+$%d",k+l+j-1); */                                          /*      fprintf(ficgp,"+$%d",k+l+j-1); */
           /*    /\* fprintf(ficgp,"+$%d",k+l+j-1); *\/ */                                          /*      /\* fprintf(ficgp,"+$%d",k+l+j-1); *\/ */
           fprintf(ficgp,") t \"bprev(%d,%d)\" w l",i,cpt);                                          fprintf(ficgp,") t \"bprev(%d,%d)\" w l",i,cpt);
         } /* nlstate */                                  } /* nlstate */
         fprintf(ficgp,"\nset out\n");                                  fprintf(ficgp,"\nset out\n");
       } /* end cpt state*/         } /* end cpt state*/ 
     } /* end covariate */        } /* end covariate */  
   } /* End if backcast */    } /* End if backcast */
       
           /* 8eme */
   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 */
           
Line 5993  plot [%.f:%.f]  ", ageminpar, agemaxpar) Line 6100  plot [%.f:%.f]  ", ageminpar, agemaxpar)
                                         /* 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];
                                         fprintf(ficgp," V%d=%d ",k,vlv);                                          fprintf(ficgp," V%d=%d ",Tvaraff[k],vlv);
                                 }                                  }
                                 fprintf(ficgp,"\n#\n");                                  fprintf(ficgp,"\n#\n");
                                   if(invalidvarcomb[k1]){
                                                                   fprintf(ficgp,"#Combination (%d) ignored because no cases \n",k1); 
                                                                   continue;
                                   }
                                                                   
                                 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);
Line 6034  plot [%.f:%.f]  ", ageminpar, agemaxpar) Line 6145  plot [%.f:%.f]  ", ageminpar, agemaxpar)
                                                 /*#  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 */
                                                 }                                                     }   
                                                 fprintf(ficgp," u %d:((",ioffset);                                                   fprintf(ficgp," u %d:(",ioffset); 
                                                 kl=0;                                                  kl=0;
                                                 for (k=1; k<=cptcoveff; k++){    /* For each covariate  */                                                  strcpy(gplotcondition,"(");
                                                   for (k=1; k<=cptcoveff; k++){    /* For each covariate writing the chain of conditions */
                                                         lv= decodtabm(k1,k,cptcoveff); /* Should be the covariate value corresponding to combination k1 and covariate k */                                                          lv= decodtabm(k1,k,cptcoveff); /* Should be the covariate value corresponding to combination k1 and covariate k */
                                                         /* 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]; /* Value of the modality of Tvaraff[k] */
                                                         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 *\/ */                                                          sprintf(gplotcondition+strlen(gplotcondition),"$%d==%d && $%d==%d " ,kl,Tvaraff[k], kl+1, nbcode[Tvaraff[k]][lv]);
                                                         /*6+(cpt-1)*(nlstate+1)+1+(i-1)+(nlstate+1)*nlstate; 6+(1-1)*(2+1)+1+(1-1) +(2+1)*2=13 */                                                           kl++;
                                                         /*6+1+(i-1)+(nlstate+1)*nlstate; 6+1+(1-1) +(2+1)*2=13 */                                                           if(k <cptcoveff && cptcoveff>1)
                                                         /* ''  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*/                                                                  sprintf(gplotcondition+strlen(gplotcondition)," && ");
                                                         if(k==cptcoveff){                                                  }
                                                                 if(i==nlstate+1){                                                  strcpy(gplotcondition+strlen(gplotcondition),")");
                                                                         if(cptcoveff ==1){                                                  /* 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 *\/ */
                                                                         fprintf(ficgp,"$%d==%d && $%d==%d)? $%d/(1.-$%d) : 1/0) t 'p.%d' with line ",kl, k,kl+1,nbcode[Tvaraff[k]][lv], \                                                  /*6+(cpt-1)*(nlstate+1)+1+(i-1)+(nlstate+1)*nlstate; 6+(1-1)*(2+1)+1+(1-1) +(2+1)*2=13 */ 
                                                                                                         ioffset+(cpt-1)*(nlstate+1)+1+(i-1),  ioffset+1+(i-1)+(nlstate+1)*nlstate,cpt );                                                  /*6+1+(i-1)+(nlstate+1)*nlstate; 6+1+(1-1) +(2+1)*2=13 */ 
                                                                         }else{                                                  /* ''  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,"$%d==%d && $%d==%d)? $%d/(1.-$%d) : 1/0) t 'p.%d' with line ",kl, k,kl+1,nbcode[Tvaraff[k]][lv], \                                                  if(i==nlstate+1){
                                                                                                         ioffset+(cpt-1)*(nlstate+1)+1+(i-1),  ioffset+1+(i-1)+(nlstate+1)*nlstate,cpt );                                                          fprintf(ficgp,"%s ? $%d/(1.-$%d) : 1/0) t 'p.%d' with line ", gplotcondition, \
                                                                         }                                                                                          ioffset+(cpt-1)*(nlstate+1)+1+(i-1),  ioffset+1+(i-1)+(nlstate+1)*nlstate,cpt );
                                                                 }else{                                                  }else{
                                                                         if(cptcoveff ==1){                                                                  fprintf(ficgp,"%s ? $%d/(1.-$%d) : 1/0) t 'p%d%d' with line ", gplotcondition, \
                                                                                 fprintf(ficgp,"$%d==%d && $%d==%d)? $%d/(1.-$%d) : 1/0) t 'p%d%d' with line ",kl, k,kl+1,nbcode[Tvaraff[k]][lv], \                                                                                                  ioffset+(cpt-1)*(nlstate+1)+1+(i-1), ioffset +1+(i-1)+(nlstate+1)*nlstate,i,cpt );
                                                                                                                 ioffset+(cpt-1)*(nlstate+1)+1+(i-1), ioffset +1+(i-1)+(nlstate+1)*nlstate,i,cpt );                                                  }
                                                                         }else{  
                                                                                 fprintf(ficgp,"$%d==%d && $%d==%d)? $%d/(1.-$%d) : 1/0) t 'p%d%d' with line ",kl, k,kl+1,nbcode[Tvaraff[k]][lv], \  
                                                                                                                 ioffset+(cpt-1)*(nlstate+1)+1+(i-1), ioffset +1+(i-1)+(nlstate+1)*nlstate,i,cpt );  
                                                                         }  
                                                                 }  
                                                         }else{ /* k < cptcoveff */  
                                                                 fprintf(ficgp,"$%d==%d && $%d==%d && ",kl, k,kl+1,nbcode[Tvaraff[k]][lv]);  
                                                                 kl++;  
                                                         }  
                                                 } /* end covariate */  
                                         } /* end if covariate */                                          } /* end if covariate */
                                 } /* nlstate */                                  } /* nlstate */
                                 fprintf(ficgp,"\nset out\n");                                  fprintf(ficgp,"\nset out\n");
Line 6235  int movingaverage(double ***probs, doubl Line 6337  int movingaverage(double ***probs, doubl
   double *agemingood, *agemaxgood; /* Currently identical for all covariates */    double *agemingood, *agemaxgood; /* Currently identical for all covariates */
       
       
   modcovmax=2*cptcoveff;/* Max number of modalities. We suppose     /* modcovmax=2*cptcoveff;/\* Max number of modalities. We suppose  */
                            a covariate has 2 modalities, should be equal to ncovcombmax  */          /*                 a covariate has 2 modalities, should be equal to ncovcombmax  *\/ */
   
   sumnewp = vector(1,modcovmax);    sumnewp = vector(1,ncovcombmax);
   sumnewm = vector(1,modcovmax);    sumnewm = vector(1,ncovcombmax);
   agemingood = vector(1,modcovmax);         agemingood = vector(1,ncovcombmax);   
   agemaxgood = vector(1,modcovmax);    agemaxgood = vector(1,ncovcombmax);
   
   for (cptcod=1;cptcod<=modcovmax;cptcod++){    for (cptcod=1;cptcod<=ncovcombmax;cptcod++){
                 sumnewm[cptcod]=0.;                  sumnewm[cptcod]=0.;
                 sumnewp[cptcod]=0.;                  sumnewp[cptcod]=0.;
                 agemingood[cptcod]=0;                  agemingood[cptcod]=0;
                 agemaxgood[cptcod]=0;                  agemaxgood[cptcod]=0;
         }          }
   if (cptcovn<1) modcovmax=1; /* At least 1 pass */    if (cptcovn<1) ncovcombmax=1; /* At least 1 pass */
       
   if(mobilav==1||mobilav ==3 ||mobilav==5 ||mobilav== 7){    if(mobilav==1||mobilav ==3 ||mobilav==5 ||mobilav== 7){
     if(mobilav==1) mobilavrange=5; /* default */      if(mobilav==1) mobilavrange=5; /* default */
     else mobilavrange=mobilav;      else mobilavrange=mobilav;
     for (age=bage; age<=fage; age++)      for (age=bage; age<=fage; age++)
       for (i=1; i<=nlstate;i++)        for (i=1; i<=nlstate;i++)
                                 for (cptcod=1;cptcod<=modcovmax;cptcod++)                                  for (cptcod=1;cptcod<=ncovcombmax;cptcod++)
                                         mobaverage[(int)age][i][cptcod]=probs[(int)age][i][cptcod];                                          mobaverage[(int)age][i][cptcod]=probs[(int)age][i][cptcod];
     /* We keep the original values on the extreme ages bage, fage and for       /* We keep the original values on the extreme ages bage, fage and for 
        fage+1 and bage-1 we use a 3 terms moving average; for fage+2 bage+2         fage+1 and bage-1 we use a 3 terms moving average; for fage+2 bage+2
Line 6265  int movingaverage(double ***probs, doubl Line 6367  int movingaverage(double ***probs, doubl
     for (mob=3;mob <=mobilavrange;mob=mob+2){      for (mob=3;mob <=mobilavrange;mob=mob+2){
       for (age=bage+(mob-1)/2; age<=fage-(mob-1)/2; age++){        for (age=bage+(mob-1)/2; age<=fage-(mob-1)/2; age++){
                                 for (i=1; i<=nlstate;i++){                                  for (i=1; i<=nlstate;i++){
                                         for (cptcod=1;cptcod<=modcovmax;cptcod++){                                          for (cptcod=1;cptcod<=ncovcombmax;cptcod++){
                                                 mobaverage[(int)age][i][cptcod] =probs[(int)age][i][cptcod];                                                  mobaverage[(int)age][i][cptcod] =probs[(int)age][i][cptcod];
                                                 for (cpt=1;cpt<=(mob-1)/2;cpt++){                                                  for (cpt=1;cpt<=(mob-1)/2;cpt++){
                                                         mobaverage[(int)age][i][cptcod] +=probs[(int)age-cpt][i][cptcod];                                                          mobaverage[(int)age][i][cptcod] +=probs[(int)age-cpt][i][cptcod];
Line 6278  int movingaverage(double ***probs, doubl Line 6380  int movingaverage(double ***probs, doubl
     }/* end mob */      }/* end mob */
   }else    }else
     return -1;      return -1;
   for (cptcod=1;cptcod<=modcovmax;cptcod++){    for (cptcod=1;cptcod<=ncovcombmax;cptcod++){
     /* for (age=bage+(mob-1)/2; age<=fage-(mob-1)/2; age++){ */      /* for (age=bage+(mob-1)/2; age<=fage-(mob-1)/2; age++){ */
     agemingood[cptcod]=fage-(mob-1)/2;      agemingood[cptcod]=fage-(mob-1)/2;
     for (age=fage-(mob-1)/2; age>=bage; age--){/* From oldest to youngest, finding the youngest wrong */      for (age=fage-(mob-1)/2; age>=bage; age--){/* From oldest to youngest, finding the youngest wrong */
Line 6362  int movingaverage(double ***probs, doubl Line 6464  int movingaverage(double ***probs, doubl
       }        }
     }      }
   }/* end cptcod */    }/* end cptcod */
   free_vector(sumnewm,1, modcovmax);    free_vector(sumnewm,1, ncovcombmax);
   free_vector(sumnewp,1, modcovmax);    free_vector(sumnewp,1, ncovcombmax);
   free_vector(agemaxgood,1, modcovmax);    free_vector(agemaxgood,1, ncovcombmax);
   free_vector(agemingood,1, modcovmax);    free_vector(agemingood,1, ncovcombmax);
   return 0;    return 0;
 }/* End movingaverage */  }/* End movingaverage */
     
Line 6921  double gompertz(double x[]) Line 7023  double gompertz(double x[])
   double A,B,L=0.0,sump=0.,num=0.;    double A,B,L=0.0,sump=0.,num=0.;
   int i,n=0; /* n is the size of the sample */    int i,n=0; /* n is the size of the sample */
   
   for (i=0;i<=imx-1 ; i++) {    for (i=1;i<=imx ; i++) {
     sump=sump+weight[i];      sump=sump+weight[i];
     /*    sump=sump+1;*/      /*    sump=sump+1;*/
     num=num+1;      num=num+1;
Line 7765  int prevalence_limit(double *p, double * Line 7867  int prevalence_limit(double *p, double *
   i1=pow(2,cptcoveff);    i1=pow(2,cptcoveff);
   if (cptcovn < 1){i1=1;}    if (cptcovn < 1){i1=1;}
   
   for(cptcov=1,k=0;cptcov<=i1;cptcov++){    for(k=1; k<=i1;k++){
     /* for(cptcov=1,k=0;cptcov<=i1;cptcov++){ */
     /* for(cptcov=1,k=0;cptcov<=1;cptcov++){ */      /* for(cptcov=1,k=0;cptcov<=1;cptcov++){ */
     //for(cptcod=1;cptcod<=ncodemax[cptcov];cptcod++){      //for(cptcod=1;cptcod<=ncodemax[cptcov];cptcod++){
     k=k+1;      /* k=k+1; */
     /* to clean */      /* to clean */
     //printf("cptcov=%d cptcod=%d codtab=%d\n",cptcov, cptcod,codtabm(cptcod,cptcov));      //printf("cptcov=%d cptcod=%d codtab=%d\n",cptcov, cptcod,codtabm(cptcod,cptcov));
     fprintf(ficrespl,"#******");      fprintf(ficrespl,"#******");
Line 7782  int prevalence_limit(double *p, double * Line 7885  int prevalence_limit(double *p, double *
     fprintf(ficrespl,"******\n");      fprintf(ficrespl,"******\n");
     printf("******\n");      printf("******\n");
     fprintf(ficlog,"******\n");      fprintf(ficlog,"******\n");
                   if(invalidvarcomb[k]){
                                                   printf("\nCombination (%d) ignored because no cases \n",k); 
                                                   fprintf(ficrespl,"#Combination (%d) ignored because no cases \n",k); 
                                                   fprintf(ficlog,"\nCombination (%d) ignored because no cases \n",k); 
                                                   continue;
                   }
   
     fprintf(ficrespl,"#Age ");      fprintf(ficrespl,"#Age ");
     for(j=1;j<=cptcoveff;j++) {      for(j=1;j<=cptcoveff;j++) {
Line 7795  int prevalence_limit(double *p, double * Line 7904  int prevalence_limit(double *p, double *
       prevalim(prlim, nlstate, p, age, oldm, savm, ftolpl, ncvyearp, k);        prevalim(prlim, nlstate, p, age, oldm, savm, ftolpl, ncvyearp, k);
       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 */
Line 7844  int back_prevalence_limit(double *p, dou Line 7953  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(cptcov=1,k=0;cptcov<=i1;cptcov++){          for(k=1; k<=i1;k++){ 
     /* for(cptcov=1,k=0;cptcov<=i1;cptcov++){ */
     /* for(cptcov=1,k=0;cptcov<=1;cptcov++){ */      /* for(cptcov=1,k=0;cptcov<=1;cptcov++){ */
     //for(cptcod=1;cptcod<=ncodemax[cptcov];cptcod++){      //for(cptcod=1;cptcod<=ncodemax[cptcov];cptcod++){
     k=k+1;      /* k=k+1; */
     /* to clean */      /* to clean */
     //printf("cptcov=%d cptcod=%d codtab=%d\n",cptcov, cptcod,codtabm(cptcod,cptcov));      //printf("cptcov=%d cptcod=%d codtab=%d\n",cptcov, cptcod,codtabm(cptcod,cptcov));
     fprintf(ficresplb,"#******");      fprintf(ficresplb,"#******");
Line 7862  int back_prevalence_limit(double *p, dou Line 7972  int back_prevalence_limit(double *p, dou
     fprintf(ficresplb,"******\n");      fprintf(ficresplb,"******\n");
     printf("******\n");      printf("******\n");
     fprintf(ficlog,"******\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++) {
Line 8432  int main(int argc, char *argv[]) Line 8548  int main(int argc, char *argv[])
     fclose (ficlog);      fclose (ficlog);
     goto end;      goto end;
     exit(0);      exit(0);
   }    }  else if(mle==-5) { /* Main Wizard */
   else if(mle==-3) { /* Main Wizard */  
     prwizard(ncovmodel, nlstate, ndeath, model, ficparo);      prwizard(ncovmodel, nlstate, ndeath, model, ficparo);
     printf(" You chose mle=-3, look at file %s for a template of covariance matrix \n",filereso);      printf(" You chose mle=-3, look at file %s for a template of covariance matrix \n",filereso);
     fprintf(ficlog," You chose mle=-3, look at file %s for a template of covariance matrix \n",filereso);      fprintf(ficlog," You chose mle=-3, look at file %s for a template of covariance matrix \n",filereso);
     param= ma3x(1,nlstate,1,nlstate+ndeath-1,1,ncovmodel);      param= ma3x(1,nlstate,1,nlstate+ndeath-1,1,ncovmodel);
     matcov=matrix(1,npar,1,npar);      matcov=matrix(1,npar,1,npar);
     hess=matrix(1,npar,1,npar);      hess=matrix(1,npar,1,npar);
   }    }  else{ /* Begin of mle != -1 or -5 */
   else{  
     /* Read guessed parameters */      /* Read guessed parameters */
     /* Reads comments: lines beginning with '#' */      /* Reads comments: lines beginning with '#' */
     while((c=getc(ficpar))=='#' && c!= EOF){      while((c=getc(ficpar))=='#' && c!= EOF){
Line 8456  int main(int argc, char *argv[]) Line 8570  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);
Line 8507  run imach with mle=-1 to get a correct t Line 8621  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];
                   
                   
     /* free_ma3x(delti3,1,nlstate,1,nlstate+ndeath-1,1,ncovmodel); */ /* Hasn't to to freed here otherwise delti is no more allocated */      /* free_ma3x(delti3,1,nlstate,1,nlstate+ndeath-1,1,ncovmodel); */ /* Hasn't to to freed here otherwise delti is no more allocated */
                     
     /* Reads comments: lines beginning with '#' */      /* Reads comments: lines beginning with '#' */
     while((c=getc(ficpar))=='#' && c!= EOF){      while((c=getc(ficpar))=='#' && c!= EOF){
       ungetc(c,ficpar);        ungetc(c,ficpar);
Line 8546  run imach with mle=-1 to get a correct t Line 8660  run imach with mle=-1 to get a correct t
       fputs(line,ficlog);        fputs(line,ficlog);
     }      }
     ungetc(c,ficpar);      ungetc(c,ficpar);
                     
     matcov=matrix(1,npar,1,npar);      matcov=matrix(1,npar,1,npar);
     hess=matrix(1,npar,1,npar);      hess=matrix(1,npar,1,npar);
     for(i=1; i <=npar; i++)      for(i=1; i <=npar; i++)
       for(j=1; j <=npar; j++) matcov[i][j]=0.;        for(j=1; j <=npar; j++) matcov[i][j]=0.;
                         
     /* Scans npar lines */      /* Scans npar lines */
     for(i=1; i <=npar; i++){      for(i=1; i <=npar; i++){
       count=fscanf(ficpar,"%1d%1d%1d",&i1,&j1,&jk);        count=fscanf(ficpar,"%1d%1d%1d",&i1,&j1,&jk);
       if(count != 3){        if(count != 3){
         printf("Error! Error in parameter file %s at line %d after line starting with %1d%1d%1d\n\                                  printf("Error! Error in parameter file %s at line %d after line starting with %1d%1d%1d\n\
 This is probably because your covariance matrix doesn't \n  contain exactly %d lines corresponding to your model line '1+age+%s'.\n\  This is probably because your covariance matrix doesn't \n  contain exactly %d lines corresponding to your model line '1+age+%s'.\n\
 Please run with mle=-1 to get a correct covariance matrix.\n",optionfile,numlinepar, i1,j1,jk, npar, model);  Please run with mle=-1 to get a correct covariance matrix.\n",optionfile,numlinepar, i1,j1,jk, npar, model);
         fprintf(ficlog,"Error! Error in parameter file %s at line %d after line starting with %1d%1d%1d\n\                                  fprintf(ficlog,"Error! Error in parameter file %s at line %d after line starting with %1d%1d%1d\n\
 This is probably because your covariance matrix doesn't \n  contain exactly %d lines corresponding to your model line '1+age+%s'.\n\  This is probably because your covariance matrix doesn't \n  contain exactly %d lines corresponding to your model line '1+age+%s'.\n\
 Please run with mle=-1 to get a correct covariance matrix.\n",optionfile,numlinepar, i1,j1,jk, npar, model);  Please run with mle=-1 to get a correct covariance matrix.\n",optionfile,numlinepar, i1,j1,jk, npar, model);
         exit(1);                                  exit(1);
       }else        }else{
         if(mle==1)                                  if(mle==1)
           printf("%1d%1d%1d",i1,j1,jk);                                          printf("%1d%1d%1d",i1,j1,jk);
                           }
       fprintf(ficlog,"%1d%1d%1d",i1,j1,jk);        fprintf(ficlog,"%1d%1d%1d",i1,j1,jk);
       fprintf(ficparo,"%1d%1d%1d",i1,j1,jk);        fprintf(ficparo,"%1d%1d%1d",i1,j1,jk);
       for(j=1; j <=i; j++){        for(j=1; j <=i; j++){
         fscanf(ficpar," %le",&matcov[i][j]);                                  fscanf(ficpar," %le",&matcov[i][j]);
         if(mle==1){                                  if(mle==1){
           printf(" %.5le",matcov[i][j]);                                          printf(" %.5le",matcov[i][j]);
         }                                  }
         fprintf(ficlog," %.5le",matcov[i][j]);                                  fprintf(ficlog," %.5le",matcov[i][j]);
         fprintf(ficparo," %.5le",matcov[i][j]);                                  fprintf(ficparo," %.5le",matcov[i][j]);
       }        }
       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");
     }      }
     /* End of read covariance matrix npar lines */      /* End of read covariance matrix npar lines */
     for(i=1; i <=npar; i++)      for(i=1; i <=npar; i++)
       for(j=i+1;j<=npar;j++)        for(j=i+1;j<=npar;j++)
         matcov[i][j]=matcov[j][i];                                  matcov[i][j]=matcov[j][i];
           
     if(mle==1)      if(mle==1)
       printf("\n");        printf("\n");
Line 8614  Please run with mle=-1 to get a correct Line 8729  Please run with mle=-1 to get a correct
   annais=vector(1,n);    annais=vector(1,n);
   moisdc=vector(1,n);    moisdc=vector(1,n);
   andc=vector(1,n);    andc=vector(1,n);
     weight=vector(1,n);
   agedc=vector(1,n);    agedc=vector(1,n);
   cod=ivector(1,n);    cod=ivector(1,n);
   weight=vector(1,n);    for(i=1;i<=n;i++){
   for(i=1;i<=n;i++) weight[i]=1.0; /* Equal weights, 1 by default */                  num[i]=0;
                   moisnais[i]=0;
                   annais[i]=0;
                   moisdc[i]=0;
                   andc[i]=0;
                   agedc[i]=0;
                   cod[i]=0;
                   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 8714  Please run with mle=-1 to get a correct Line 8838  Please run with mle=-1 to get a correct
   free_vector(andc,1,n);    free_vector(andc,1,n);
   
   /* Routine tricode is to calculate cptcoveff (real number of unique covariates) and to associate covariable number and modality */    /* Routine tricode is to calculate cptcoveff (real number of unique covariates) and to associate covariable number and modality */
   
   nbcode=imatrix(0,NCOVMAX,0,NCOVMAX);     nbcode=imatrix(0,NCOVMAX,0,NCOVMAX); 
   ncodemax[1]=1;    ncodemax[1]=1;
   Ndum =ivector(-1,NCOVMAX);      Ndum =ivector(-1,NCOVMAX);  
   if (ncovmodel-nagesqr > 2 ) /* That is if covariate other than cst, age and age*age */          cptcoveff=0;
     tricode(Tvar,nbcode,imx, Ndum); /**< Fills nbcode[Tvar[j]][l]; */    if (ncovmodel-nagesqr > 2 ){ /* That is if covariate other than cst, age and age*age */
       tricode(&cptcoveff,Tvar,nbcode,imx, Ndum); /**< Fills nbcode[Tvar[j]][l]; */
           }
           
           ncovcombmax=pow(2,cptcoveff);
           invalidvarcomb=ivector(1, ncovcombmax); 
           for(i=1;i<ncovcombmax;i++)
                   invalidvarcomb[i]=0;
   
   /* Nbcode gives the value of the lth modality (currently 1 to 2) of jth covariate, in    /* Nbcode gives the value of the lth modality (currently 1 to 2) of jth covariate, in
      V2+V1*age, there are 3 covariates Tvar[2]=1 (V1).*/       V2+V1*age, there are 3 covariates Tvar[2]=1 (V1).*/
   /* 1 to ncodemax[j] which is the maximum value of this jth covariate */    /* 1 to ncodemax[j] which is the maximum value of this jth covariate */
Line 8735  Please run with mle=-1 to get a correct Line 8866  Please run with mle=-1 to get a correct
    */     */
   
   h=0;    h=0;
   
   
   /*if (cptcovn > 0) */    /*if (cptcovn > 0) */
         
    
   m=pow(2,cptcoveff);    m=pow(2,cptcoveff);
     
           /**< codtab(h,k)  k   = codtab[h,k]=( (h-1) - mod(k-1,2**(k-1) )/2**(k-1) + 1            /**< codtab(h,k)  k   = codtab[h,k]=( (h-1) - mod(k-1,2**(k-1) )/2**(k-1) + 1
Line 8806  Please run with mle=-1 to get a correct Line 8933  Please run with mle=-1 to get a correct
      *                  2211       *                  2211
      *                  V1=1+1, V2=0+1, V3=1+1, V4=1+1       *                  V1=1+1, V2=0+1, V3=1+1, V4=1+1
      *                  V3=2       *                  V3=2
                    * codtabm and decodtabm are identical
      */       */
   
   /* /\* for(h=1; h <=100 ;h++){  *\/ */  
   /*   /\* printf("h=%2d ", h); *\/ */  
   /*    /\* for(k=1; k <=10; k++){ *\/ */  
   /*      /\* printf("k=%d %d ",k,codtabm(h,k)); *\/ */  
   /*    /\*   codtab[h][k]=codtabm(h,k); *\/ */  
   /*    /\* } *\/ */  
   /*    /\* printf("\n"); *\/ */  
   /* } */  
   /* for(k=1;k<=cptcoveff; k++){ /\* scans any effective covariate *\/ */  
   /*   for(i=1; i <=pow(2,cptcoveff-k);i++){ /\* i=1 to 8/1=8; i=1 to 8/2=4; i=1 to 8/8=1 *\/  */  
   /*     for(j=1; j <= ncodemax[k]; j++){ /\* For each modality of this covariate ncodemax=2*\/ */  
   /*    for(cpt=1; cpt <=pow(2,k-1); cpt++){  /\* cpt=1 to 8/2**(3+1-1 or 3+1-3) =1 or 4 *\/  */  
   /*      h++; */  
   /*      if (h>m)  */  
   /*        h=1; */  
   /*      codtab[h][k]=j; */  
   /*      /\* codtab[12][3]=1; *\/ */  
   /*      /\*codtab[h][Tvar[k]]=j;*\/ */  
   /*      /\* printf("h=%d k=%d j=%d codtab[h][k]=%d Tvar[k]=%d codtab[h][Tvar[k]]=%d \n",h, k,j,codtab[h][k],Tvar[k],codtab[h][Tvar[k]]); *\/ */  
   /*    }  */  
   /*     } */  
   /*   } */  
   /* }  */  
   /* printf("codtab[1][2]=%d codtab[2][2]=%d",codtab[1][2],codtab[2][2]);   
      codtab[1][2]=1;codtab[2][2]=2; */  
   /* for(i=1; i <=m ;i++){  */  
   /*    for(k=1; k <=cptcovn; k++){ */  
   /*      printf("i=%d k=%d %d %d ",i,k,codtab[i][k], cptcoveff); */  
   /*    } */  
   /*    printf("\n"); */  
   /* } */  
   /*   scanf("%d",i);*/  
   
  free_ivector(Ndum,-1,NCOVMAX);   free_ivector(Ndum,-1,NCOVMAX);
   
Line 8914  Title=%s <br>Datafile=%s Firstpass=%d La Line 9010  Title=%s <br>Datafile=%s Firstpass=%d La
 #endif  #endif
                       
       
   /* Calculates basic frequencies. Computes observed prevalence at single age    /* Calculates basic frequencies. Computes observed prevalence at single age 
                    and for any valid combination of covariates
      and prints on file fileres'p'. */       and prints on file fileres'p'. */
   freqsummary(fileres, agemin, agemax, s, agev, nlstate, imx,Tvaraff,nbcode, ncodemax,mint,anint,strstart,\    freqsummary(fileres, agemin, agemax, s, agev, nlstate, imx, Tvaraff, invalidvarcomb, nbcode, ncodemax,mint,anint,strstart,    \
               firstpass, lastpass,  stepm,  weightopt, model);                firstpass, lastpass,  stepm,  weightopt, model);
   
   fprintf(fichtm,"\n");    fprintf(fichtm,"\n");
Line 8925  Youngest age at first (selected) pass %. Line 9022  Youngest age at first (selected) pass %.
 Interval (in months) between two waves: Min=%d Max=%d Mean=%.2lf<br>\n",\  Interval (in months) between two waves: Min=%d Max=%d Mean=%.2lf<br>\n",\
           imx,agemin,agemax,jmin,jmax,jmean);            imx,agemin,agemax,jmin,jmax,jmean);
   pmmij= matrix(1,nlstate+ndeath,1,nlstate+ndeath); /* creation */    pmmij= matrix(1,nlstate+ndeath,1,nlstate+ndeath); /* creation */
     oldms= matrix(1,nlstate+ndeath,1,nlstate+ndeath); /* creation */          oldms= matrix(1,nlstate+ndeath,1,nlstate+ndeath); /* creation */
     newms= matrix(1,nlstate+ndeath,1,nlstate+ndeath); /* creation */          newms= matrix(1,nlstate+ndeath,1,nlstate+ndeath); /* creation */
     savms= matrix(1,nlstate+ndeath,1,nlstate+ndeath); /* creation */          savms= matrix(1,nlstate+ndeath,1,nlstate+ndeath); /* creation */
     oldm=oldms; newm=newms; savm=savms; /* Keeps fixed addresses to free */          oldm=oldms; newm=newms; savm=savms; /* Keeps fixed addresses to free */
   
   /* For Powell, parameters are in a vector p[] starting at p[1]    /* For Powell, parameters are in a vector p[] starting at p[1]
      so we point p on param[1][1] so that p[1] maps on param[1][1][1] */       so we point p on param[1][1] so that p[1] maps on param[1][1][1] */
Line 8938  Interval (in months) between two waves: Line 9035  Interval (in months) between two waves:
   /* For mortality only */    /* For mortality only */
   if (mle==-3){    if (mle==-3){
     ximort=matrix(1,NDIM,1,NDIM);       ximort=matrix(1,NDIM,1,NDIM); 
                   for(i=1;i<=NDIM;i++)
                           for(j=1;j<=NDIM;j++)
                                   ximort[i][j]=0.;
     /*     ximort=gsl_matrix_alloc(1,NDIM,1,NDIM); */      /*     ximort=gsl_matrix_alloc(1,NDIM,1,NDIM); */
     cens=ivector(1,n);      cens=ivector(1,n);
     ageexmed=vector(1,n);      ageexmed=vector(1,n);
Line 9086  Interval (in months) between two waves: Line 9186  Interval (in months) between two waves:
   
     for(i=1; i <=NDIM; i++)      for(i=1; i <=NDIM; i++)
       for(j=i+1;j<=NDIM;j++)        for(j=i+1;j<=NDIM;j++)
         matcov[i][j]=matcov[j][i];                                  matcov[i][j]=matcov[j][i];
           
     printf("\nCovariance matrix\n ");      printf("\nCovariance matrix\n ");
     fprintf(ficlog,"\nCovariance matrix\n ");      fprintf(ficlog,"\nCovariance matrix\n ");
     for(i=1; i <=NDIM; i++) {      for(i=1; i <=NDIM; i++) {
       for(j=1;j<=NDIM;j++){         for(j=1;j<=NDIM;j++){ 
         printf("%f ",matcov[i][j]);                                  printf("%f ",matcov[i][j]);
         fprintf(ficlog,"%f ",matcov[i][j]);                                  fprintf(ficlog,"%f ",matcov[i][j]);
       }        }
       printf("\n ");  fprintf(ficlog,"\n ");        printf("\n ");  fprintf(ficlog,"\n ");
     }      }
Line 9134  Interval (in months) between two waves: Line 9234  Interval (in months) between two waves:
           
           
     replace_back_to_slash(pathc,pathcd); /* Even gnuplot wants a / */      replace_back_to_slash(pathc,pathcd); /* Even gnuplot wants a / */
                   ageminpar=50;
                   agemaxpar=100;
     if(ageminpar == AGEOVERFLOW ||agemaxpar == AGEOVERFLOW){      if(ageminpar == AGEOVERFLOW ||agemaxpar == AGEOVERFLOW){
         printf("Warning! Error in gnuplot file with ageminpar %f or agemaxpar %f overflow\n\          printf("Warning! Error in gnuplot file with ageminpar %f or agemaxpar %f overflow\n\
 This is probably because your parameter file doesn't \n  contain the exact number of lines (or columns) corresponding to your model line.\n\  This is probably because your parameter file doesn't \n  contain the exact number of lines (or columns) corresponding to your model line.\n\
Line 9141  Please run with mle=-1 to get a correct Line 9243  Please run with mle=-1 to get a correct
         fprintf(ficlog,"Warning! Error in gnuplot file with ageminpar %f or agemaxpar %f overflow\n\          fprintf(ficlog,"Warning! Error in gnuplot file with ageminpar %f or agemaxpar %f overflow\n\
 This is probably because your parameter file doesn't \n  contain the exact number of lines (or columns) corresponding to your model line.\n\  This is probably because your parameter file doesn't \n  contain the exact number of lines (or columns) corresponding to your model line.\n\
 Please run with mle=-1 to get a correct covariance matrix.\n",ageminpar,agemaxpar);  Please run with mle=-1 to get a correct covariance matrix.\n",ageminpar,agemaxpar);
     }else      }else{
                           printf("Warning! ageminpar %f and agemaxpar %f have been fixed because for simplification until it is fixed...\n\n",ageminpar,agemaxpar);
                           fprintf(ficlog,"Warning! ageminpar %f and agemaxpar %f have been fixed because for simplification until it is fixed...\n\n",ageminpar,agemaxpar);
       printinggnuplotmort(fileresu, optionfilefiname,ageminpar,agemaxpar,fage, pathc,p);        printinggnuplotmort(fileresu, optionfilefiname,ageminpar,agemaxpar,fage, pathc,p);
                   }
     printinghtmlmort(fileresu,title,datafile, firstpass, lastpass, \      printinghtmlmort(fileresu,title,datafile, firstpass, lastpass, \
                      stepm, weightopt,\                       stepm, weightopt,\
                      model,imx,p,matcov,agemortsup);                       model,imx,p,matcov,agemortsup);
Line 9150  Please run with mle=-1 to get a correct Line 9255  Please run with mle=-1 to get a correct
     free_vector(lsurv,1,AGESUP);      free_vector(lsurv,1,AGESUP);
     free_vector(lpop,1,AGESUP);      free_vector(lpop,1,AGESUP);
     free_vector(tpop,1,AGESUP);      free_vector(tpop,1,AGESUP);
 #ifdef GSL      free_matrix(ximort,1,NDIM,1,NDIM);
     free_ivector(cens,1,n);      free_ivector(cens,1,n);
     free_vector(agecens,1,n);      free_vector(agecens,1,n);
     free_ivector(dcwave,1,n);      free_ivector(dcwave,1,n);
     free_matrix(ximort,1,NDIM,1,NDIM);  #ifdef GSL
 #endif  #endif
   } /* Endof if mle==-3 mortality only */    } /* Endof if mle==-3 mortality only */
   /* Standard  */    /* Standard  */
Line 9191  Please run with mle=-1 to get a correct Line 9296  Please run with mle=-1 to get a correct
     fprintf(ficlog,"# Parameters nlstate*nlstate*ncov a12*1 + b12 * age + ...\n");      fprintf(ficlog,"# Parameters nlstate*nlstate*ncov a12*1 + b12 * age + ...\n");
     for(i=1,jk=1; i <=nlstate; i++){      for(i=1,jk=1; i <=nlstate; i++){
       for(k=1; k <=(nlstate+ndeath); k++){        for(k=1; k <=(nlstate+ndeath); k++){
         if (k != i) {                                  if (k != i) {
           printf("%d%d ",i,k);                                          printf("%d%d ",i,k);
           fprintf(ficlog,"%d%d ",i,k);                                          fprintf(ficlog,"%d%d ",i,k);
           fprintf(ficres,"%1d%1d ",i,k);                                          fprintf(ficres,"%1d%1d ",i,k);
           for(j=1; j <=ncovmodel; j++){                                          for(j=1; j <=ncovmodel; j++){
             printf("%12.7f ",p[jk]);                                                  printf("%12.7f ",p[jk]);
             fprintf(ficlog,"%12.7f ",p[jk]);                                                  fprintf(ficlog,"%12.7f ",p[jk]);
             fprintf(ficres,"%12.7f ",p[jk]);                                                  fprintf(ficres,"%12.7f ",p[jk]);
             jk++;                                                   jk++; 
           }                                          }
           printf("\n");                                          printf("\n");
           fprintf(ficlog,"\n");                                          fprintf(ficlog,"\n");
           fprintf(ficres,"\n");                                          fprintf(ficres,"\n");
         }                                  }
       }        }
     }      }
     if(mle != 0){      if(mle != 0){
Line 9214  Please run with mle=-1 to get a correct Line 9319  Please run with mle=-1 to get a correct
       printf("Parameters and 95%% confidence intervals\n W is simply the result of the division of the parameter by the square root of covariance of the parameter.\n And Wald-based confidence intervals plus and minus 1.96 * W .\n But be careful that parameters are highly correlated because incidence of disability is highly correlated to incidence of recovery.\n It might be better to visualize the covariance matrix. See the page 'Matrix of variance-covariance of one-step probabilities' and its graphs.\n");        printf("Parameters and 95%% confidence intervals\n W is simply the result of the division of the parameter by the square root of covariance of the parameter.\n And Wald-based confidence intervals plus and minus 1.96 * W .\n But be careful that parameters are highly correlated because incidence of disability is highly correlated to incidence of recovery.\n It might be better to visualize the covariance matrix. See the page 'Matrix of variance-covariance of one-step probabilities' and its graphs.\n");
       fprintf(ficlog, "Parameters, Wald tests and Wald-based confidence intervals\n W is simply the result of the division of the parameter by the square root of covariance of the parameter.\n And Wald-based confidence intervals plus and minus 1.96 * W \n  It might be better to visualize the covariance matrix. See the page 'Matrix of variance-covariance of one-step probabilities' and its graphs.\n");        fprintf(ficlog, "Parameters, Wald tests and Wald-based confidence intervals\n W is simply the result of the division of the parameter by the square root of covariance of the parameter.\n And Wald-based confidence intervals plus and minus 1.96 * W \n  It might be better to visualize the covariance matrix. See the page 'Matrix of variance-covariance of one-step probabilities' and its graphs.\n");
       for(i=1,jk=1; i <=nlstate; i++){        for(i=1,jk=1; i <=nlstate; i++){
         for(k=1; k <=(nlstate+ndeath); k++){                                  for(k=1; k <=(nlstate+ndeath); k++){
           if (k != i) {                                          if (k != i) {
             printf("%d%d ",i,k);                                                  printf("%d%d ",i,k);
             fprintf(ficlog,"%d%d ",i,k);                                                  fprintf(ficlog,"%d%d ",i,k);
             for(j=1; j <=ncovmodel; j++){                                                  for(j=1; j <=ncovmodel; j++){
               printf("%12.7f W=%8.3f CI=[%12.7f ; %12.7f] ",p[jk], p[jk]/sqrt(matcov[jk][jk]), p[jk]-1.96*sqrt(matcov[jk][jk]),p[jk]+1.96*sqrt(matcov[jk][jk]));                                                          printf("%12.7f W=%8.3f CI=[%12.7f ; %12.7f] ",p[jk], p[jk]/sqrt(matcov[jk][jk]), p[jk]-1.96*sqrt(matcov[jk][jk]),p[jk]+1.96*sqrt(matcov[jk][jk]));
               fprintf(ficlog,"%12.7f W=%8.3f CI=[%12.7f ; %12.7f] ",p[jk], p[jk]/sqrt(matcov[jk][jk]), p[jk]-1.96*sqrt(matcov[jk][jk]),p[jk]+1.96*sqrt(matcov[jk][jk]));                                                          fprintf(ficlog,"%12.7f W=%8.3f CI=[%12.7f ; %12.7f] ",p[jk], p[jk]/sqrt(matcov[jk][jk]), p[jk]-1.96*sqrt(matcov[jk][jk]),p[jk]+1.96*sqrt(matcov[jk][jk]));
               jk++;                                                           jk++; 
             }                                                  }
             printf("\n");                                                  printf("\n");
             fprintf(ficlog,"\n");                                                  fprintf(ficlog,"\n");
           }                                          }
         }                                  }
       }        }
     } /* end of hesscov and Wald tests */      } /* end of hesscov and Wald tests */
                   
     /*  */      /*  */
     fprintf(ficres,"# Scales (for hessian or gradient estimation)\n");      fprintf(ficres,"# Scales (for hessian or gradient estimation)\n");
     printf("# Scales (for hessian or gradient estimation)\n");      printf("# Scales (for hessian or gradient estimation)\n");
     fprintf(ficlog,"# Scales (for hessian or gradient estimation)\n");      fprintf(ficlog,"# Scales (for hessian or gradient estimation)\n");
     for(i=1,jk=1; i <=nlstate; i++){      for(i=1,jk=1; i <=nlstate; i++){
       for(j=1; j <=nlstate+ndeath; j++){        for(j=1; j <=nlstate+ndeath; j++){
         if (j!=i) {                                  if (j!=i) {
           fprintf(ficres,"%1d%1d",i,j);                                          fprintf(ficres,"%1d%1d",i,j);
           printf("%1d%1d",i,j);                                          printf("%1d%1d",i,j);
           fprintf(ficlog,"%1d%1d",i,j);                                          fprintf(ficlog,"%1d%1d",i,j);
           for(k=1; k<=ncovmodel;k++){                                          for(k=1; k<=ncovmodel;k++){
             printf(" %.5e",delti[jk]);                                                  printf(" %.5e",delti[jk]);
             fprintf(ficlog," %.5e",delti[jk]);                                                  fprintf(ficlog," %.5e",delti[jk]);
             fprintf(ficres," %.5e",delti[jk]);                                                  fprintf(ficres," %.5e",delti[jk]);
             jk++;                                                  jk++;
           }                                          }
           printf("\n");                                          printf("\n");
           fprintf(ficlog,"\n");                                          fprintf(ficlog,"\n");
           fprintf(ficres,"\n");                                          fprintf(ficres,"\n");
         }                                  }
       }        }
     }      }
           
Line 9273  Please run with mle=-1 to get a correct Line 9378  Please run with mle=-1 to get a correct
     for(itimes=1;itimes<=2;itimes++){      for(itimes=1;itimes<=2;itimes++){
       jj=0;        jj=0;
       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++){
           if(j==i) continue;                                          if(j==i) continue;
           for(k=1; k<=ncovmodel;k++){                                          for(k=1; k<=ncovmodel;k++){
             jj++;                                                  jj++;
             ca[0]= k+'a'-1;ca[1]='\0';                                                  ca[0]= k+'a'-1;ca[1]='\0';
             if(itimes==1){                                                  if(itimes==1){
               if(mle>=1)                                                          if(mle>=1)
                 printf("#%1d%1d%d",i,j,k);                                                                  printf("#%1d%1d%d",i,j,k);
               fprintf(ficlog,"#%1d%1d%d",i,j,k);                                                          fprintf(ficlog,"#%1d%1d%d",i,j,k);
               fprintf(ficres,"#%1d%1d%d",i,j,k);                                                          fprintf(ficres,"#%1d%1d%d",i,j,k);
             }else{                                                  }else{
               if(mle>=1)                                                          if(mle>=1)
                 printf("%1d%1d%d",i,j,k);                                                                  printf("%1d%1d%d",i,j,k);
               fprintf(ficlog,"%1d%1d%d",i,j,k);                                                          fprintf(ficlog,"%1d%1d%d",i,j,k);
               fprintf(ficres,"%1d%1d%d",i,j,k);                                                          fprintf(ficres,"%1d%1d%d",i,j,k);
             }                                                  }
             ll=0;                                                  ll=0;
             for(li=1;li <=nlstate; li++){                                                  for(li=1;li <=nlstate; li++){
               for(lj=1;lj <=nlstate+ndeath; lj++){                                                          for(lj=1;lj <=nlstate+ndeath; lj++){
                 if(lj==li) continue;                                                                  if(lj==li) continue;
                 for(lk=1;lk<=ncovmodel;lk++){                                                                  for(lk=1;lk<=ncovmodel;lk++){
                   ll++;                                                                          ll++;
                   if(ll<=jj){                                                                          if(ll<=jj){
                     cb[0]= lk +'a'-1;cb[1]='\0';                                                                                  cb[0]= lk +'a'-1;cb[1]='\0';
                     if(ll<jj){                                                                                  if(ll<jj){
                       if(itimes==1){                                                                                          if(itimes==1){
                         if(mle>=1)                                                                                                  if(mle>=1)
                           printf(" Cov(%s%1d%1d,%s%1d%1d)",ca,i,j,cb, li,lj);                                                                                                          printf(" Cov(%s%1d%1d,%s%1d%1d)",ca,i,j,cb, li,lj);
                         fprintf(ficlog," Cov(%s%1d%1d,%s%1d%1d)",ca,i,j,cb, li,lj);                                                                                                  fprintf(ficlog," Cov(%s%1d%1d,%s%1d%1d)",ca,i,j,cb, li,lj);
                         fprintf(ficres," Cov(%s%1d%1d,%s%1d%1d)",ca,i,j,cb, li,lj);                                                                                                  fprintf(ficres," Cov(%s%1d%1d,%s%1d%1d)",ca,i,j,cb, li,lj);
                       }else{                                                                                          }else{
                         if(mle>=1)                                                                                                  if(mle>=1)
                           printf(" %.5e",matcov[jj][ll]);                                                                                                           printf(" %.5e",matcov[jj][ll]); 
                         fprintf(ficlog," %.5e",matcov[jj][ll]);                                                                                                   fprintf(ficlog," %.5e",matcov[jj][ll]); 
                         fprintf(ficres," %.5e",matcov[jj][ll]);                                                                                                   fprintf(ficres," %.5e",matcov[jj][ll]); 
                       }                                                                                          }
                     }else{                                                                                  }else{
                       if(itimes==1){                                                                                          if(itimes==1){
                         if(mle>=1)                                                                                                  if(mle>=1)
                           printf(" Var(%s%1d%1d)",ca,i,j);                                                                                                          printf(" Var(%s%1d%1d)",ca,i,j);
                         fprintf(ficlog," Var(%s%1d%1d)",ca,i,j);                                                                                                  fprintf(ficlog," Var(%s%1d%1d)",ca,i,j);
                         fprintf(ficres," Var(%s%1d%1d)",ca,i,j);                                                                                                  fprintf(ficres," Var(%s%1d%1d)",ca,i,j);
                       }else{                                                                                          }else{
                         if(mle>=1)                                                                                                  if(mle>=1)
                           printf(" %.7e",matcov[jj][ll]);                                                                                                           printf(" %.7e",matcov[jj][ll]); 
                         fprintf(ficlog," %.7e",matcov[jj][ll]);                                                                                                   fprintf(ficlog," %.7e",matcov[jj][ll]); 
                         fprintf(ficres," %.7e",matcov[jj][ll]);                                                                                                   fprintf(ficres," %.7e",matcov[jj][ll]); 
                       }                                                                                          }
                     }                                                                                  }
                   }                                                                          }
                 } /* end lk */                                                                  } /* end lk */
               } /* end lj */                                                          } /* end lj */
             } /* end li */                                                  } /* end li */
             if(mle>=1)                                                  if(mle>=1)
               printf("\n");                                                          printf("\n");
             fprintf(ficlog,"\n");                                                  fprintf(ficlog,"\n");
             fprintf(ficres,"\n");                                                  fprintf(ficres,"\n");
             numlinepar++;                                                  numlinepar++;
           } /* end k*/                                          } /* end k*/
         } /*end j */                                  } /*end j */
       } /* end i */        } /* end i */
     } /* end itimes */      } /* end itimes */
           
     fflush(ficlog);      fflush(ficlog);
     fflush(ficres);      fflush(ficres);
       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,ficlog);                                  fputs(line,ficlog);
       continue;                                  continue;
     }else                          }else
       break;                                  break;
   }                  }
                   
     /* while((c=getc(ficpar))=='#' && c!= EOF){ */      /* while((c=getc(ficpar))=='#' && c!= EOF){ */
     /*   ungetc(c,ficpar); */      /*   ungetc(c,ficpar); */
     /*   fgets(line, MAXLINE, ficpar); */      /*   fgets(line, MAXLINE, ficpar); */
Line 9360  Please run with mle=-1 to get a correct Line 9465  Please run with mle=-1 to get a correct
           
     estepm=0;      estepm=0;
     if((num_filled=sscanf(line,"agemin=%lf agemax=%lf bage=%lf fage=%lf estepm=%d ftolpl=%lf\n",&ageminpar,&agemaxpar, &bage, &fage, &estepm, &ftolpl)) !=EOF){      if((num_filled=sscanf(line,"agemin=%lf agemax=%lf bage=%lf fage=%lf estepm=%d ftolpl=%lf\n",&ageminpar,&agemaxpar, &bage, &fage, &estepm, &ftolpl)) !=EOF){
                           
     if (num_filled != 6) {                          if (num_filled != 6) {
       printf("Error: Not 6 parameters in line, for example:agemin=60 agemax=95 bage=55 fage=95 estepm=24 ftolpl=6e-4\n, your line=%s . Probably you are running an older format.\n",line);                                  printf("Error: Not 6 parameters in line, for example:agemin=60 agemax=95 bage=55 fage=95 estepm=24 ftolpl=6e-4\n, your line=%s . Probably you are running an older format.\n",line);
       fprintf(ficlog,"Error: Not 6 parameters in line, for example:agemin=60 agemax=95 bage=55 fage=95 estepm=24 ftolpl=6e-4\n, your line=%s . Probably you are running an older format.\n",line);                                  fprintf(ficlog,"Error: Not 6 parameters in line, for example:agemin=60 agemax=95 bage=55 fage=95 estepm=24 ftolpl=6e-4\n, your line=%s . Probably you are running an older format.\n",line);
       goto end;                                  goto end;
     }                          }
     printf("agemin=%lf agemax=%lf bage=%lf fage=%lf estepm=%d ftolpl=%lf\n",ageminpar,agemaxpar, bage, fage, estepm, ftolpl);                          printf("agemin=%lf agemax=%lf bage=%lf fage=%lf estepm=%d ftolpl=%lf\n",ageminpar,agemaxpar, bage, fage, estepm, ftolpl);
   }                  }
   /* ftolpl=6*ftol*1.e5; /\* 6.e-3 make convergences in less than 80 loops for the prevalence limit *\/ */                  /* ftolpl=6*ftol*1.e5; /\* 6.e-3 make convergences in less than 80 loops for the prevalence limit *\/ */
   /*ftolpl=6.e-4;*/ /* 6.e-3 make convergences in less than 80 loops for the prevalence limit */                  /*ftolpl=6.e-4;*/ /* 6.e-3 make convergences in less than 80 loops for the prevalence limit */
                   
     /* fscanf(ficpar,"agemin=%lf agemax=%lf bage=%lf fage=%lf estepm=%d ftolpl=%\n",&ageminpar,&agemaxpar, &bage, &fage, &estepm); */      /* fscanf(ficpar,"agemin=%lf agemax=%lf bage=%lf fage=%lf estepm=%d ftolpl=%\n",&ageminpar,&agemaxpar, &bage, &fage, &estepm); */
     if (estepm==0 || estepm < stepm) estepm=stepm;      if (estepm==0 || estepm < stepm) estepm=stepm;
     if (fage <= 2) {      if (fage <= 2) {
Line 9381  Please run with mle=-1 to get a correct Line 9486  Please run with mle=-1 to get a correct
     fprintf(ficres,"# agemin agemax for life expectancy, bage fage (if mle==0 ie no data nor Max likelihood).\n");      fprintf(ficres,"# agemin agemax for life expectancy, bage fage (if mle==0 ie no data nor Max likelihood).\n");
     fprintf(ficres,"agemin=%.0f agemax=%.0f bage=%.0f fage=%.0f estepm=%d ftolpl=%e\n",ageminpar,agemaxpar,bage,fage, estepm, ftolpl);      fprintf(ficres,"agemin=%.0f agemax=%.0f bage=%.0f fage=%.0f estepm=%d ftolpl=%e\n",ageminpar,agemaxpar,bage,fage, estepm, ftolpl);
     fprintf(ficparo,"agemin=%.0f agemax=%.0f bage=%.0f fage=%.0f estepm=%d, ftolpl=%e\n",ageminpar,agemaxpar,bage,fage, estepm, ftolpl);      fprintf(ficparo,"agemin=%.0f agemax=%.0f bage=%.0f fage=%.0f estepm=%d, ftolpl=%e\n",ageminpar,agemaxpar,bage,fage, estepm, ftolpl);
                   
     /* Other stuffs, more or less useful */          /* Other stuffs, more or less useful */    
     while((c=getc(ficpar))=='#' && c!= EOF){      while((c=getc(ficpar))=='#' && c!= EOF){
       ungetc(c,ficpar);        ungetc(c,ficpar);
Line 9444  Please run with mle=-1 to get a correct Line 9549  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.*/
           
           
      /* freqsummary(fileres, agemin, agemax, s, agev, nlstate, imx,Tvaraff,nbcode, ncodemax,mint,anint); */                  /* freqsummary(fileres, agemin, agemax, s, agev, nlstate, imx,Tvaraff,nbcode, ncodemax,mint,anint); */
     /* ,dateprev1,dateprev2,jprev1, mprev1,anprev1,jprev2, mprev2,anprev2); */      /* ,dateprev1,dateprev2,jprev1, mprev1,anprev1,jprev2, mprev2,anprev2); */
           
     replace_back_to_slash(pathc,pathcd); /* Even gnuplot wants a / */      replace_back_to_slash(pathc,pathcd); /* Even gnuplot wants a / */
     if(ageminpar == AGEOVERFLOW ||agemaxpar == -AGEOVERFLOW){      if(ageminpar == AGEOVERFLOW ||agemaxpar == -AGEOVERFLOW){
         printf("Warning! Error in gnuplot file with ageminpar %f or agemaxpar %f overflow\n\                          printf("Warning! Error in gnuplot file with ageminpar %f or agemaxpar %f overflow\n\
 This is probably because your parameter file doesn't \n  contain the exact number of lines (or columns) corresponding to your model line.\n\  This is probably because your parameter file doesn't \n  contain the exact number of lines (or columns) corresponding to your model line.\n\
 Please run with mle=-1 to get a correct covariance matrix.\n",ageminpar,agemaxpar);  Please run with mle=-1 to get a correct covariance matrix.\n",ageminpar,agemaxpar);
         fprintf(ficlog,"Warning! Error in gnuplot file with ageminpar %f or agemaxpar %f overflow\n\                          fprintf(ficlog,"Warning! Error in gnuplot file with ageminpar %f or agemaxpar %f overflow\n\
 This is probably because your parameter file doesn't \n  contain the exact number of lines (or columns) corresponding to your model line.\n\  This is probably because your parameter file doesn't \n  contain the exact number of lines (or columns) corresponding to your model line.\n\
 Please run with mle=-1 to get a correct covariance matrix.\n",ageminpar,agemaxpar);  Please run with mle=-1 to get a correct covariance matrix.\n",ageminpar,agemaxpar);
     }else      }else{
       printinggnuplot(fileresu, optionfilefiname,ageminpar,agemaxpar,fage, prevfcast, backcast, pathc,p);        printinggnuplot(fileresu, optionfilefiname,ageminpar,agemaxpar,fage, prevfcast, backcast, pathc,p);
           }
     printinghtml(fileresu,title,datafile, firstpass, lastpass, stepm, weightopt,\      printinghtml(fileresu,title,datafile, firstpass, lastpass, stepm, weightopt, \
                  model,imx,jmin,jmax,jmean,rfileres,popforecast,prevfcast,backcast, estepm, \                                                                   model,imx,jmin,jmax,jmean,rfileres,popforecast,prevfcast,backcast, estepm, \
                  jprev1,mprev1,anprev1,dateprev1,jprev2,mprev2,anprev2,dateprev2);                                                                   jprev1,mprev1,anprev1,dateprev1,jprev2,mprev2,anprev2,dateprev2);
                         
    /*------------ free_vector  -------------*/                  /*------------ free_vector  -------------*/
    /*  chdir(path); */                  /*  chdir(path); */
                    
     /* free_ivector(wav,1,imx); */  /* Moved after last prevalence call */      /* free_ivector(wav,1,imx); */  /* Moved after last prevalence call */
     /* free_imatrix(dh,1,lastpass-firstpass+2,1,imx); */      /* free_imatrix(dh,1,lastpass-firstpass+2,1,imx); */
     /* free_imatrix(bh,1,lastpass-firstpass+2,1,imx); */      /* free_imatrix(bh,1,lastpass-firstpass+2,1,imx); */
Line 9475  Please run with mle=-1 to get a correct Line 9580  Please run with mle=-1 to get a correct
     /*free_matrix(covar,1,NCOVMAX,1,n);*/      /*free_matrix(covar,1,NCOVMAX,1,n);*/
     fclose(ficparo);      fclose(ficparo);
     fclose(ficres);      fclose(ficres);
                   
                   
     /* Other results (useful)*/      /* Other results (useful)*/
                   
                   
     /*--------------- Prevalence limit  (period or stable prevalence) --------------*/      /*--------------- Prevalence limit  (period or stable prevalence) --------------*/
     /*#include "prevlim.h"*/  /* Use ficrespl, ficlog */      /*#include "prevlim.h"*/  /* Use ficrespl, ficlog */
     prlim=matrix(1,nlstate,1,nlstate);      prlim=matrix(1,nlstate,1,nlstate);
Line 9491  Please run with mle=-1 to get a correct Line 9596  Please run with mle=-1 to get a correct
     hPijx(p, bage, fage);      hPijx(p, bage, fage);
     fclose(ficrespij);      fclose(ficrespij);
   
     ncovcombmax=  pow(2,cptcoveff);      /* ncovcombmax=  pow(2,cptcoveff); */
     /*-------------- Variance of one-step probabilities---*/      /*-------------- Variance of one-step probabilities---*/
     k=1;      k=1;
     varprob(optionfilefiname, matcov, p, delti, nlstate, bage, fage,k,Tvar,nbcode, ncodemax,strstart);      varprob(optionfilefiname, matcov, p, delti, nlstate, bage, fage,k,Tvar,nbcode, ncodemax,strstart);
Line 9543  Please run with mle=-1 to get a correct Line 9648  Please run with mle=-1 to get a correct
       back_prevalence_limit(p, bprlim,  ageminpar, agemaxpar, ftolpl, &ncvyear, dateprev1, dateprev2, firstpass, lastpass, mobilavproj);        back_prevalence_limit(p, bprlim,  ageminpar, agemaxpar, ftolpl, &ncvyear, dateprev1, dateprev2, firstpass, lastpass, mobilavproj);
       fclose(ficresplb);        fclose(ficresplb);
   
       hBijx(p, bage, fage, mobaverage);        /* hBijx(p, bage, fage, mobaverage); */
       fclose(ficrespijb);        /* fclose(ficrespijb); */
       free_matrix(bprlim,1,nlstate,1,nlstate); /*here or after loop ? */        free_matrix(bprlim,1,nlstate,1,nlstate); /*here or after loop ? */
   
       /* prevbackforecast(fileresu, anback1, mback1, jback1, agemin, agemax, dateprev1, dateprev2, mobilavproj,        /* prevbackforecast(fileresu, anback1, mback1, jback1, agemin, agemax, dateprev1, dateprev2, mobilavproj,
Line 9577  Please run with mle=-1 to get a correct Line 9682  Please run with mle=-1 to get a correct
     for (k=1; k <= (int) pow(2,cptcoveff); k++){      for (k=1; k <= (int) pow(2,cptcoveff); k++){
       fprintf(ficreseij,"\n#****** ");        fprintf(ficreseij,"\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)]);
       }        }
       fprintf(ficreseij,"******\n");        fprintf(ficreseij,"******\n");
               
Line 9671  Please run with mle=-1 to get a correct Line 9776  Please run with mle=-1 to get a correct
               
               
       for(vpopbased=0; vpopbased <= popbased; vpopbased++){ /* Done for vpopbased=0 and vpopbased=1 if popbased==1*/        for(vpopbased=0; vpopbased <= popbased; vpopbased++){ /* Done for vpopbased=0 and vpopbased=1 if popbased==1*/
         oldm=oldms;savm=savms; /* ZZ Segmentation fault */                                  oldm=oldms;savm=savms; /* ZZ Segmentation fault */
         cptcod= 0; /* To be deleted */                                  cptcod= 0; /* To be deleted */
         printf("varevsij %d \n",vpopbased);                                  printf("varevsij %d \n",vpopbased);
         fprintf(ficlog, "varevsij %d \n",vpopbased);                                  fprintf(ficlog, "varevsij %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); /* 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);
         else                                  else
           fprintf(ficrest,"the age specific period (stable) prevalences in each health state \n");                                          fprintf(ficrest,"the age specific period (stable) prevalences in each health state \n");
         fprintf(ficrest,"# Age popbased mobilav e.. (std) ");                                  fprintf(ficrest,"# Age popbased mobilav e.. (std) ");
         for (i=1;i<=nlstate;i++) fprintf(ficrest,"e.%d (std) ",i);                                  for (i=1;i<=nlstate;i++) fprintf(ficrest,"e.%d (std) ",i);
         fprintf(ficrest,"\n");                                  fprintf(ficrest,"\n");
         /* printf("Which p?\n"); for(i=1;i<=npar;i++)printf("p[i=%d]=%lf,",i,p[i]);printf("\n"); */                                  /* printf("Which p?\n"); for(i=1;i<=npar;i++)printf("p[i=%d]=%lf,",i,p[i]);printf("\n"); */
         epj=vector(1,nlstate+1);                                  epj=vector(1,nlstate+1);
         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); /*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++)
                 prlim[i][i]=probs[(int)age][i][k];                                                                  prlim[i][i]=probs[(int)age][i][k];
             }else{ /* mobilav */                                                   }else{ /* mobilav */ 
               for(i=1; i<=nlstate;i++)                                                          for(i=1; i<=nlstate;i++)
                 prlim[i][i]=mobaverage[(int)age][i][k];                                                                  prlim[i][i]=mobaverage[(int)age][i][k];
             }                                                  }
           }                                          }
                       
           fprintf(ficrest," %4.0f %d %d",age, vpopbased, mobilav);                                          fprintf(ficrest," %4.0f %d %d",age, vpopbased, mobilav);
           /* fprintf(ficrest," %4.0f %d %d %d %d",age, vpopbased, mobilav,Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]); */ /* to be done */                                          /* fprintf(ficrest," %4.0f %d %d %d %d",age, vpopbased, mobilav,Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,j)]); */ /* to be done */
           /* printf(" age %4.0f ",age); */                                          /* printf(" age %4.0f ",age); */
           for(j=1, epj[nlstate+1]=0.;j <=nlstate;j++){                                          for(j=1, epj[nlstate+1]=0.;j <=nlstate;j++){
             for(i=1, epj[j]=0.;i <=nlstate;i++) {                                                  for(i=1, epj[j]=0.;i <=nlstate;i++) {
               epj[j] += prlim[i][i]*eij[i][j][(int)age];                                                          epj[j] += prlim[i][i]*eij[i][j][(int)age];
               /*ZZZ  printf("%lf %lf ", prlim[i][i] ,eij[i][j][(int)age]);*/                                                          /*ZZZ  printf("%lf %lf ", prlim[i][i] ,eij[i][j][(int)age]);*/
               /* printf("%lf %lf ", prlim[i][i] ,eij[i][j][(int)age]); */                                                          /* printf("%lf %lf ", prlim[i][i] ,eij[i][j][(int)age]); */
             }                                                  }
             epj[nlstate+1] +=epj[j];                                                  epj[nlstate+1] +=epj[j];
           }                                          }
           /* printf(" age %4.0f \n",age); */                                          /* printf(" age %4.0f \n",age); */
                       
           for(i=1, vepp=0.;i <=nlstate;i++)                                          for(i=1, vepp=0.;i <=nlstate;i++)
             for(j=1;j <=nlstate;j++)                                                  for(j=1;j <=nlstate;j++)
               vepp += vareij[i][j][(int)age];                                                          vepp += vareij[i][j][(int)age];
           fprintf(ficrest," %7.3f (%7.3f)", epj[nlstate+1],sqrt(vepp));                                          fprintf(ficrest," %7.3f (%7.3f)", epj[nlstate+1],sqrt(vepp));
           for(j=1;j <=nlstate;j++){                                          for(j=1;j <=nlstate;j++){
             fprintf(ficrest," %7.3f (%7.3f)", epj[j],sqrt(vareij[j][j][(int)age]));                                                  fprintf(ficrest," %7.3f (%7.3f)", epj[j],sqrt(vareij[j][j][(int)age]));
           }                                          }
           fprintf(ficrest,"\n");                                          fprintf(ficrest,"\n");
         }                                  }
       } /* End vpopbased */        } /* End vpopbased */
       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);
Line 9781  Please run with mle=-1 to get a correct Line 9886  Please run with mle=-1 to get a correct
     if (mobilav!=0 ||mobilavproj !=0)      if (mobilav!=0 ||mobilavproj !=0)
       free_ma3x(mobaverages,1, AGESUP,1,nlstate+ndeath, 1,ncovcombmax); /* We need to have a squared matrix with prevalence of the dead! */        free_ma3x(mobaverages,1, AGESUP,1,nlstate+ndeath, 1,ncovcombmax); /* We need to have a squared matrix with prevalence of the dead! */
     free_ma3x(probs,1,AGESUP,1,nlstate+ndeath, 1,ncovcombmax);      free_ma3x(probs,1,AGESUP,1,nlstate+ndeath, 1,ncovcombmax);
   }  /* mle==-3 arrives here for freeing */  
  /* endfree:*/  
     free_matrix(prlim,1,nlstate,1,nlstate); /*here or after loop ? */      free_matrix(prlim,1,nlstate,1,nlstate); /*here or after loop ? */
     free_matrix(pmmij,1,nlstate+ndeath,1,nlstate+ndeath);      free_matrix(pmmij,1,nlstate+ndeath,1,nlstate+ndeath);
     }  /* mle==-3 arrives here for freeing */
    /* endfree:*/
     free_matrix(oldms, 1,nlstate+ndeath,1,nlstate+ndeath);      free_matrix(oldms, 1,nlstate+ndeath,1,nlstate+ndeath);
     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);
Line 9801  Please run with mle=-1 to get a correct Line 9906  Please run with mle=-1 to get a correct
     free_ivector(Tvar,1,NCOVMAX);      free_ivector(Tvar,1,NCOVMAX);
     free_ivector(Tprod,1,NCOVMAX);      free_ivector(Tprod,1,NCOVMAX);
     free_ivector(Tvaraff,1,NCOVMAX);      free_ivector(Tvaraff,1,NCOVMAX);
       free_ivector(invalidvarcomb,1,ncovcombmax);
     free_ivector(Tage,1,NCOVMAX);      free_ivector(Tage,1,NCOVMAX);
   
     free_imatrix(nbcode,0,NCOVMAX,0,NCOVMAX);      free_imatrix(nbcode,0,NCOVMAX,0,NCOVMAX);

Removed from v.1.219  
changed lines
  Added in v.1.220


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