Summary: not working
authorN. Brouard <brouard@ined.fr>
Thu, 15 Sep 2016 15:01:13 +0000 (15:01 +0000)
committerN. Brouard <brouard@ined.fr>
Thu, 15 Sep 2016 15:01:13 +0000 (15:01 +0000)
src/imach.c

index b9390687944fc645296a602b7f799f3e9f7498cc..203011aaa7cdf34198346630c2bde1a99c2e733c 100644 (file)
@@ -1,6 +1,9 @@
 /* $Id$
   $State$
   $Log$
+  Revision 1.250  2016/09/08 16:07:27  brouard
+  Summary: continue
+
   Revision 1.249  2016/09/07 17:14:18  brouard
   Summary: Starting values from frequencies
 
@@ -912,7 +915,7 @@ typedef struct {
 /* #include <libintl.h> */
 /* #define _(String) gettext (String) */
 
-#define MAXLINE 1024 /* Was 256. Overflow with 312 with 2 states and 4 covariates. Should be ok */
+#define MAXLINE 2048 /* Was 256 and 1024. Overflow with 312 with 2 states and 4 covariates. Should be ok */
 
 #define GNUPLOTPROGRAM "gnuplot"
 /*#define GNUPLOTPROGRAM "..\\gp37mgw\\wgnuplot"*/
@@ -4183,7 +4186,7 @@ void pstamp(FILE *fichier)
 }
 
 /************ Frequencies ********************/
-void  freqsummary(char fileres[], double p[], int iagemin, int iagemax, int **s, double **agev, int nlstate, int imx, \
+void  freqsummary(char fileres[], double p[], double pstart[], int iagemin, int iagemax, int **s, double **agev, int nlstate, int imx, \
                  int *Tvaraff, int *invalidvarcomb, int **nbcode, int *ncodemax,double **mint,double **anint, char strstart[], \
                  int firstpass,  int lastpass, int stepm, int weightopt, char model[])
 {  /* Some frequencies as well as proposing some starting values */
@@ -4201,7 +4204,7 @@ void  freqsummary(char fileres[], double p[], int iagemin, int iagemax, int **s,
   double agebegin, ageend;
     
   pp=vector(1,nlstate);
-  prop=matrix(1,nlstate,iagemin-AGEMARGE,iagemax+3+AGEMARGE); 
+  prop=matrix(1,nlstate,iagemin-AGEMARGE,iagemax+4+AGEMARGE); 
   posprop=vector(1,nlstate); /* Counting the number of transition starting from a live state per age */ 
   pospropt=vector(1,nlstate); /* Counting the number of transition starting from a live state */ 
   /* prop=matrix(1,nlstate,iagemin,iagemax+3); */
@@ -4245,7 +4248,7 @@ Title=%s <br>Datafile=%s Firstpass=%d Lastpass=%d Stepm=%d Weight=%d Model=1+age
   }
   fprintf(ficresphtmfr,"Current page is file <a href=\"%s\">%s</a><br>\n\n<h4>Frequencies of all effective transitions of the model, by age at begin of transition, and covariate value at the begin of transition (if the covariate is a varying covariate) </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+4+AGEMARGE);
   j1=0;
   
   /* j=ncoveff;  /\* Only fixed dummy covariates *\/ */
@@ -4262,327 +4265,367 @@ Title=%s <br>Datafile=%s Firstpass=%d Lastpass=%d Stepm=%d Weight=%d Model=1+age
   dateintsum=0;
   k2cpt=0;
 
-  for (j = 0; j <= cptcoveff; j+=cptcoveff){   
-  first=1;
-  for (j1 = 1; j1 <= (int) pow(2,j); j1++){ /* Loop on covariates combination in order of model, excluding quantitatives V4=0, V3=0 for example, fixed or varying covariates */
-    posproptt=0.;
-    /*printf("cptcoveff=%d Tvaraff=%d", cptcoveff,Tvaraff[1]);
-      scanf("%d", i);*/
-    for (i=-5; i<=nlstate+ndeath; i++)  
-      for (jk=-5; jk<=nlstate+ndeath; jk++)  
+  for (j = 0; j <= cptcoveff; j+=cptcoveff){   /* j= 0 constant model */
+    first=1;
+    for (j1 = 1; j1 <= (int) pow(2,j); j1++){ /* Loop on covariates combination in order of model, excluding quantitatives, V4=0, V3=0 for example, fixed or varying covariates */
+      posproptt=0.;
+      /*printf("cptcoveff=%d Tvaraff=%d", cptcoveff,Tvaraff[1]);
+       scanf("%d", i);*/
+      for (i=-5; i<=nlstate+ndeath; i++)  
+       for (jk=-5; jk<=nlstate+ndeath; jk++)  
+         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++)
-         freq[i][jk][m]=0;
-    
-    for (i=1; i<=nlstate; i++)  {
-      for(m=iagemin; m <= iagemax+3; m++)
-       prop[i][m]=0;
-      posprop[i]=0;
-      pospropt[i]=0;
-    }
-    /* for (z1=1; z1<= nqfveff; z1++) {   */
-    /*   meanq[z1]+=0.; */
-    /*   for(m=1;m<=lastpass;m++){ */
-    /*         meanqt[m][z1]=0.; */
-    /*   } */
-    /* } */
-    
-    /* dateintsum=0; */
-    /* k2cpt=0; */
-
-    /* For that combination of covariate j1, we count and print the frequencies in one pass */
-    for (iind=1; iind<=imx; iind++) { /* For each individual iind */
-      bool=1;
-      if(j !=0){
-      if(anyvaryingduminmodel==0){ /* If All fixed covariates */
-       if (cptcoveff >0) { /* Filter is here: Must be looked at for model=V1+V2+V3+V4 */
-         /* for (z1=1; z1<= nqfveff; z1++) {   */
-         /*   meanq[z1]+=coqvar[Tvar[z1]][iind];  /\* Computes mean of quantitative with selected filter *\/ */
-         /* } */
-         for (z1=1; z1<=cptcoveff; z1++) { /* loops on covariates in the model */
-           /* if(Tvaraff[z1] ==-20){ */
-           /*   /\* sumnew+=cotvar[mw[mi][iind]][z1][iind]; *\/ */
-           /* }else  if(Tvaraff[z1] ==-10){ */
-           /*   /\* sumnew+=coqvar[z1][iind]; *\/ */
-           /* }else  */
-           if (covar[Tvaraff[z1]][iind]!= nbcode[Tvaraff[z1]][codtabm(j1,z1)]){ /* for combination j1 of covariates */
-             /* Tests if this individual iind responded to combination j1 (V4=1 V3=0) */
-             bool=0; /* bool should be equal to 1 to be selected, one covariate value failed */
-             /* 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),
-                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*/
-           } /* Onlyf fixed */
-         } /* end z1 */
-       } /* cptcovn > 0 */
-      } /* end any */
-      }/* end j==0 */
-      if (bool==1){ /* We selected an individual iind satisfying combination j1 or all fixed */
-       /* for(m=firstpass; m<=lastpass; m++){ */
-       for(mi=1; mi<wav[iind];mi++){ /* For that wave */
-         m=mw[mi][iind];
-         if(j!=0){
-         if(anyvaryingduminmodel==1){ /* Some are varying covariates */
-           for (z1=1; z1<=cptcoveff; z1++) {
-             if( Fixed[Tmodelind[z1]]==1){
-               iv= Tvar[Tmodelind[z1]]-ncovcol-nqv;
-               if (cotvar[m][iv][iind]!= nbcode[Tvaraff[z1]][codtabm(j1,z1)]) /* iv=1 to ntv, right modality. If covariate's 
-                                                                                 value is -1, we don't select. It differs from the 
-                                                                                 constant and age model which counts them. */
-                 bool=0; /* not selected */
-             }else if( Fixed[Tmodelind[z1]]== 0) { /* fixed */
-               if (covar[Tvaraff[z1]][iind]!= nbcode[Tvaraff[z1]][codtabm(j1,z1)]) {
-                 bool=0;
+         prop[i][m]=0;
+       posprop[i]=0;
+       pospropt[i]=0;
+      }
+      /* for (z1=1; z1<= nqfveff; z1++) {   */
+      /*   meanq[z1]+=0.; */
+      /*   for(m=1;m<=lastpass;m++){ */
+      /*       meanqt[m][z1]=0.; */
+      /*   } */
+      /* } */
+      
+      /* dateintsum=0; */
+      /* k2cpt=0; */
+      
+      /* For that combination of covariate j1, we count and print the frequencies in one pass */
+      for (iind=1; iind<=imx; iind++) { /* For each individual iind */
+       bool=1;
+       if(j !=0){
+         if(anyvaryingduminmodel==0){ /* If All fixed covariates */
+           if (cptcoveff >0) { /* Filter is here: Must be looked at for model=V1+V2+V3+V4 */
+             /* for (z1=1; z1<= nqfveff; z1++) {   */
+             /*   meanq[z1]+=coqvar[Tvar[z1]][iind];  /\* Computes mean of quantitative with selected filter *\/ */
+             /* } */
+             for (z1=1; z1<=cptcoveff; z1++) { /* loops on covariates in the model */
+               /* if(Tvaraff[z1] ==-20){ */
+               /*       /\* sumnew+=cotvar[mw[mi][iind]][z1][iind]; *\/ */
+               /* }else  if(Tvaraff[z1] ==-10){ */
+               /*       /\* sumnew+=coqvar[z1][iind]; *\/ */
+               /* }else  */
+               if (covar[Tvaraff[z1]][iind]!= nbcode[Tvaraff[z1]][codtabm(j1,z1)]){ /* for combination j1 of covariates */
+                 /* Tests if this individual iind responded to combination j1 (V4=1 V3=0) */
+                 bool=0; /* bool should be equal to 1 to be selected, one covariate value failed */
+                 /* 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),
+                    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*/
+               } /* Onlyf fixed */
+             } /* end z1 */
+           } /* cptcovn > 0 */
+         } /* end any */
+       }/* end j==0 */
+       if (bool==1){ /* We selected an individual iind satisfying combination j1 or all fixed */
+         /* for(m=firstpass; m<=lastpass; m++){ */
+         for(mi=1; mi<wav[iind];mi++){ /* For that wave */
+           m=mw[mi][iind];
+           if(j!=0){
+             if(anyvaryingduminmodel==1){ /* Some are varying covariates */
+               for (z1=1; z1<=cptcoveff; z1++) {
+                 if( Fixed[Tmodelind[z1]]==1){
+                   iv= Tvar[Tmodelind[z1]]-ncovcol-nqv;
+                   if (cotvar[m][iv][iind]!= nbcode[Tvaraff[z1]][codtabm(j1,z1)]) /* iv=1 to ntv, right modality. If covariate's 
+                                                                                     value is -1, we don't select. It differs from the 
+                                                                                     constant and age model which counts them. */
+                     bool=0; /* not selected */
+                 }else if( Fixed[Tmodelind[z1]]== 0) { /* fixed */
+                   if (covar[Tvaraff[z1]][iind]!= nbcode[Tvaraff[z1]][codtabm(j1,z1)]) {
+                     bool=0;
+                   }
+                 }
                }
+             }/* Some are varying covariates, we tried to speed up if all fixed covariates in the model, avoiding waves loop  */
+           } /* end j==0 */
+           /* bool =0 we keep that guy which corresponds to the combination of dummy values */
+           if(bool==1){
+             /* dh[m][iind] or dh[mw[mi][iind]][iind] is the delay between two effective (mi) waves m=mw[mi][iind]
+                and mw[mi+1][iind]. dh depends on stepm. */
+             agebegin=agev[m][iind]; /* Age at beginning of wave before transition*/
+             ageend=agev[m][iind]+(dh[m][iind])*stepm/YEARM; /* Age at end of wave and transition */
+             if(m >=firstpass && m <=lastpass){
+               k2=anint[m][iind]+(mint[m][iind]/12.);
+               /*if ((k2>=dateprev1) && (k2<=dateprev2)) {*/
+               if(agev[m][iind]==0) agev[m][iind]=iagemax+1;  /* All ages equal to 0 are in iagemax+1 */
+               if(agev[m][iind]==1) agev[m][iind]=iagemax+2;  /* All ages equal to 1 are in iagemax+2 */
+               if (s[m][iind]>0 && s[m][iind]<=nlstate)  /* If status at wave m is known and a live state */
+                 prop[s[m][iind]][(int)agev[m][iind]] += weight[iind];  /* At age of beginning of transition, where status is known */
+               if (m<lastpass) {
+                 /* if(s[m][iind]==4 && s[m+1][iind]==4) */
+                 /*   printf(" num=%ld m=%d, iind=%d s1=%d s2=%d agev at m=%d\n", num[iind], m, iind,s[m][iind],s[m+1][iind], (int)agev[m][iind]); */
+                 if(s[m][iind]==-1)
+                   printf(" num=%ld m=%d, iind=%d s1=%d s2=%d agev at m=%d agebegin=%.2f ageend=%.2f, agemed=%d\n", num[iind], m, iind,s[m][iind],s[m+1][iind], (int)agev[m][iind],agebegin, ageend, (int)((agebegin+ageend)/2.));
+                 freq[s[m][iind]][s[m+1][iind]][(int)agev[m][iind]] += weight[iind]; /* At age of beginning of transition, where status is known */
+                 /* if((int)agev[m][iind] == 55) */
+                 /*   printf("j=%d, j1=%d Age %d, iind=%d, num=%09ld m=%d\n",j,j1,(int)agev[m][iind],iind, num[iind],m); */
+                 /* 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 */
+               }
+             } /* end if between passes */  
+             if ((agev[m][iind]>1) && (agev[m][iind]< (iagemax+3)) && (anint[m][iind]!=9999) && (mint[m][iind]!=99) && (j==0)) {
+               dateintsum=dateintsum+k2; /* on all covariates ?*/
+               k2cpt++;
+               /* printf("iind=%ld dateintmean = %lf dateintsum=%lf k2cpt=%lf k2=%lf\n",iind, dateintsum/k2cpt, dateintsum,k2cpt, k2); */
              }
-           }
-         }/* Some are varying covariates, we tried to speed up if all fixed covariates in the model, avoiding waves loop  */
-         } /* end j==0 */
-         /* bool =0 we keep that guy which corresponds to the combination of dummy values */
-         if(bool==1){
-           /* dh[m][iind] or dh[mw[mi][iind]][iind] is the delay between two effective (mi) waves m=mw[mi][iind]
-              and mw[mi+1][iind]. dh depends on stepm. */
-           agebegin=agev[m][iind]; /* Age at beginning of wave before transition*/
-           ageend=agev[m][iind]+(dh[m][iind])*stepm/YEARM; /* Age at end of wave and transition */
-           if(m >=firstpass && m <=lastpass){
-             k2=anint[m][iind]+(mint[m][iind]/12.);
-             /*if ((k2>=dateprev1) && (k2<=dateprev2)) {*/
-             if(agev[m][iind]==0) agev[m][iind]=iagemax+1;  /* All ages equal to 0 are in iagemax+1 */
-             if(agev[m][iind]==1) agev[m][iind]=iagemax+2;  /* All ages equal to 1 are in iagemax+2 */
-             if (s[m][iind]>0 && s[m][iind]<=nlstate)  /* If status at wave m is known and a live state */
-               prop[s[m][iind]][(int)agev[m][iind]] += weight[iind];  /* At age of beginning of transition, where status is known */
-             if (m<lastpass) {
-               /* if(s[m][iind]==4 && s[m+1][iind]==4) */
-               /*   printf(" num=%ld m=%d, iind=%d s1=%d s2=%d agev at m=%d\n", num[iind], m, iind,s[m][iind],s[m+1][iind], (int)agev[m][iind]); */
-               if(s[m][iind]==-1)
-                 printf(" num=%ld m=%d, iind=%d s1=%d s2=%d agev at m=%d agebegin=%.2f ageend=%.2f, agemed=%d\n", num[iind], m, iind,s[m][iind],s[m+1][iind], (int)agev[m][iind],agebegin, ageend, (int)((agebegin+ageend)/2.));
-               freq[s[m][iind]][s[m+1][iind]][(int)agev[m][iind]] += weight[iind]; /* At age of beginning of transition, where status is known */
-               /* if((int)agev[m][iind] == 55) */
-               /*   printf("j=%d, j1=%d Age %d, iind=%d, num=%09ld m=%d\n",j,j1,(int)agev[m][iind],iind, num[iind],m); */
-               /* 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 */
-             }
-           } /* end if between passes */  
-           if ((agev[m][iind]>1) && (agev[m][iind]< (iagemax+3)) && (anint[m][iind]!=9999) && (mint[m][iind]!=99) && (j==0)) {
-             dateintsum=dateintsum+k2; /* on all covariates ?*/
-             k2cpt++;
-             /* printf("iind=%ld dateintmean = %lf dateintsum=%lf k2cpt=%lf k2=%lf\n",iind, dateintsum/k2cpt, dateintsum,k2cpt, k2); */
-           }
+           }else{
+             bool=1;
+           }/* end bool 2 */
+         } /* end m */
+       } /* end bool */
+      } /* end iind = 1 to imx */
+      /* prop[s][age] is feeded for any initial and valid live state as well as
+        freq[s1][s2][age] at single age of beginning the transition, for a combination j1 */
+      
+      
+      /*      fprintf(ficresp, "#Count between %.lf/%.lf/%.lf and %.lf/%.lf/%.lf\n",jprev1, mprev1,anprev1,jprev2, mprev2,anprev2);*/
+      pstamp(ficresp);
+      if  (cptcoveff>0 && j!=0){
+       printf( "\n#********** Variable "); 
+       fprintf(ficresp, "\n#********** Variable "); 
+       fprintf(ficresphtm, "\n<br/><br/><h3>********** Variable "); 
+       fprintf(ficresphtmfr, "\n<br/><br/><h3>********** Variable "); 
+       fprintf(ficlog, "\n#********** Variable "); 
+       for (z1=1; z1<=cptcoveff; z1++){
+         if(!FixedV[Tvaraff[z1]]){
+           printf( "V%d(fixed)=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtabm(j1,z1)]);
+           fprintf(ficresp, "V%d(fixed)=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtabm(j1,z1)]);
+           fprintf(ficresphtm, "V%d(fixed)=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtabm(j1,z1)]);
+           fprintf(ficresphtmfr, "V%d(fixed)=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtabm(j1,z1)]);
+           fprintf(ficlog, "V%d(fixed)=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtabm(j1,z1)]);
          }else{
-           bool=1;
-         }/* end bool 2 */
-       } /* end m */
-      } /* end bool */
-    } /* end iind = 1 to imx */
-    /* prop[s][age] is feeded for any initial and valid live state as well as
-       freq[s1][s2][age] at single age of beginning the transition, for a combination j1 */
-    
-    
-    /*      fprintf(ficresp, "#Count between %.lf/%.lf/%.lf and %.lf/%.lf/%.lf\n",jprev1, mprev1,anprev1,jprev2, mprev2,anprev2);*/
-    pstamp(ficresp);
-    if  (cptcoveff>0 && j!=0){
-      fprintf(ficresp, "\n#********** Variable "); 
-      fprintf(ficresphtm, "\n<br/><br/><h3>********** Variable "); 
-      fprintf(ficresphtmfr, "\n<br/><br/><h3>********** Variable "); 
-      fprintf(ficlog, "\n#********** Variable "); 
-      for (z1=1; z1<=cptcoveff; z1++){
-       if(DummyV[z1]){
-         fprintf(ficresp, "V%d (fixed)=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtabm(j1,z1)]);
-         fprintf(ficresphtm, "V%d (fixed)=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtabm(j1,z1)]);
-         fprintf(ficresphtmfr, "V%d (fixed)=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtabm(j1,z1)]);
-         fprintf(ficlog, "V%d (fixed)=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtabm(j1,z1)]);
-       }else{
-         fprintf(ficresp, "V%d(varying)=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtabm(j1,z1)]);
-         fprintf(ficresphtm, "V%d(varying)=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtabm(j1,z1)]);
-         fprintf(ficresphtmfr, "V%d(varying)=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtabm(j1,z1)]);
-         fprintf(ficlog, "V%d(varying)=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtabm(j1,z1)]);
+           printf( "V%d(varying)=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtabm(j1,z1)]);
+           fprintf(ficresp, "V%d(varying)=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtabm(j1,z1)]);
+           fprintf(ficresphtm, "V%d(varying)=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtabm(j1,z1)]);
+           fprintf(ficresphtmfr, "V%d(varying)=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtabm(j1,z1)]);
+           fprintf(ficlog, "V%d(varying)=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtabm(j1,z1)]);
+         }
        }
+       printf( "**********\n#");
+       fprintf(ficresp, "**********\n#");
+       fprintf(ficresphtm, "**********</h3>\n");
+       fprintf(ficresphtmfr, "**********</h3>\n");
+       fprintf(ficlog, "**********\n");
       }
-      fprintf(ficresp, "**********\n#");
-      fprintf(ficresphtm, "**********</h3>\n");
-      fprintf(ficresphtmfr, "**********</h3>\n");
-      fprintf(ficlog, "**********\n");
-    }
-    fprintf(ficresphtm,"<table style=\"text-align:center; border: 1px solid\">");
-    for(i=1; i<=nlstate;i++) {
-      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);
-    }
-    fprintf(ficresp, "\n");
-    fprintf(ficresphtm, "\n");
-    
-    /* Header of frequency table by age */
-    fprintf(ficresphtmfr,"<table style=\"text-align:center; border: 1px solid\">");
-    fprintf(ficresphtmfr,"<th>Age</th> ");
-    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(ficresphtm,"<table style=\"text-align:center; border: 1px solid\">");
+      for(i=1; i<=nlstate;i++) {
+       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);
       }
-    }
-    fprintf(ficresphtmfr, "\n");
-    
-    /* For each age */
-    for(iage=iagemin; iage <= iagemax+3; iage++){
-      fprintf(ficresphtm,"<tr>");
-      if(iage==iagemax+1){
-       fprintf(ficlog,"1");
-       fprintf(ficresphtmfr,"<tr><th>0</th> ");
-      }else if(iage==iagemax+2){
-       fprintf(ficlog,"0");
-       fprintf(ficresphtmfr,"<tr><th>Unknown</th> ");
-      }else if(iage==iagemax+3){
-       fprintf(ficlog,"Total");
-       fprintf(ficresphtmfr,"<tr><th>Total</th> ");
-      }else{
-       if(first==1){
-         first=0;
-         printf("See log file for details...\n");
+      fprintf(ficresp, "\n");
+      fprintf(ficresphtm, "\n");
+      
+      /* Header of frequency table by age */
+      fprintf(ficresphtmfr,"<table style=\"text-align:center; border: 1px solid\">");
+      fprintf(ficresphtmfr,"<th>Age</th> ");
+      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,"<tr><th>%d</th> ",iage);
-       fprintf(ficlog,"Age %d", iage);
-      }
-      for(jk=1; jk <=nlstate ; jk++){
-       for(m=-1, pp[jk]=0; m <=nlstate+ndeath ; m++)
-         pp[jk] += freq[jk][m][iage]; 
       }
-      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){
+      fprintf(ficresphtmfr, "\n");
+    
+      /* For each age */
+      for(iage=iagemin; iage <= iagemax+3; iage++){
+       fprintf(ficresphtm,"<tr>");
+       if(iage==iagemax+1){
+         fprintf(ficlog,"1");
+         fprintf(ficresphtmfr,"<tr><th>0</th> ");
+       }else if(iage==iagemax+2){
+         fprintf(ficlog,"0");
+         fprintf(ficresphtmfr,"<tr><th>Unknown</th> ");
+       }else if(iage==iagemax+3){
+         fprintf(ficlog,"Total");
+         fprintf(ficresphtmfr,"<tr><th>Total</th> ");
+       }else{
          if(first==1){
-           printf(" %d.=%.0f loss[%d]=%.1f%%",jk,pp[jk],jk,100*pos/pp[jk]);
+           first=0;
+           printf("See log file for details...\n");
+         }
+         fprintf(ficresphtmfr,"<tr><th>%d</th> ",iage);
+         fprintf(ficlog,"Age %d", iage);
+       }
+       for(jk=1; jk <=nlstate ; jk++){
+         for(m=-1, pp[jk]=0; m <=nlstate+ndeath ; m++)
+           pp[jk] += freq[jk][m][iage]; 
+       }
+       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){
+           if(first==1){
+             printf(" %d.=%.0f loss[%d]=%.1f%%",jk,pp[jk],jk,100*pos/pp[jk]);
+           }
+           fprintf(ficlog," %d.=%.0f loss[%d]=%.1f%%",jk,pp[jk],jk,100*pos/pp[jk]);
+         }else{
+           if(first==1)
+             printf(" %d.=%.0f loss[%d]=NaNQ%%",jk,pp[jk],jk);
+           fprintf(ficlog," %d.=%.0f loss[%d]=NaNQ%%",jk,pp[jk],jk);
          }
-         fprintf(ficlog," %d.=%.0f loss[%d]=%.1f%%",jk,pp[jk],jk,100*pos/pp[jk]);
-       }else{
-         if(first==1)
-           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++){ 
-       /* posprop[jk]=0; */
-       for(m=0, pp[jk]=0; m <=nlstate+ndeath; m++)/* Summing on all ages */
-         pp[jk] += freq[jk][m][iage];
-             /* pp[jk] is the total number of transitions starting from state jk and any ending status until this age */
+       for(jk=1; jk <=nlstate ; jk++){ 
+         /* posprop[jk]=0; */
+         for(m=0, pp[jk]=0; m <=nlstate+ndeath; m++)/* Summing on all ages */
+           pp[jk] += freq[jk][m][iage];
+       }       /* pp[jk] is the total number of transitions starting from state jk and any ending status until this age */
       
-      for(jk=1,pos=0, pospropta=0.; jk <=nlstate ; jk++){
-       pos += pp[jk]; /* pos is the total number of transitions until this age */
-       posprop[jk] += prop[jk][iage]; /* prop is the number of transitions from a live state
+       for(jk=1,pos=0, pospropta=0.; jk <=nlstate ; jk++){
+         pos += pp[jk]; /* pos is the total number of transitions until this age */
+         posprop[jk] += prop[jk][iage]; /* prop is the number of transitions from a live state
+                                           from jk at age iage prop[s[m][iind]][(int)agev[m][iind]] += weight[iind] */
+         pospropta += prop[jk][iage]; /* prop is the number of transitions from a live state
                                          from jk at age iage prop[s[m][iind]][(int)agev[m][iind]] += weight[iind] */
-       pospropta += prop[jk][iage]; /* prop is the number of transitions from a live state
-                                       from jk at age iage prop[s[m][iind]][(int)agev[m][iind]] += weight[iind] */
-      }
-      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);
-         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);
-         fprintf(ficlog," %d.=%.0f prev[%d]=NaNQ%%",jk,pp[jk],jk);
        }
-       if( iage <= iagemax){
+       for(jk=1; jk <=nlstate ; jk++){
          if(pos>=1.e-5){
-           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);
-           /*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(first==1)
+             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);
+           fprintf(ficlog," %d.=%.0f prev[%d]=NaNQ%%",jk,pp[jk],jk);
          }
-         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);
+         if( iage <= iagemax){
+           if(pos>=1.e-5){
+             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);
+             /*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]);*/
+           }
+           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);
+           }
          }
-       }
-       pospropt[jk] +=posprop[jk];
-      } /* end loop jk */
-      /* pospropt=0.; */
-      for(jk=-1; jk <=nlstate+ndeath; jk++){
-       for(m=-1; m <=nlstate+ndeath; m++){
-         if(freq[jk][m][iage] !=0 ) { /* minimizing output */
-           if(first==1){
-             printf(" %d%d=%.0f",jk,m,freq[jk][m][iage]);
+         pospropt[jk] +=posprop[jk];
+       } /* end loop jk */
+       /* pospropt=0.; */
+       for(jk=-1; jk <=nlstate+ndeath; jk++){
+         for(m=-1; m <=nlstate+ndeath; m++){
+           if(freq[jk][m][iage] !=0 ) { /* minimizing output */
+             if(first==1){
+               printf(" %d%d=%.0f",jk,m,freq[jk][m][iage]);
+             }
+             fprintf(ficlog," %d%d=%.0f",jk,m,freq[jk][m][iage]);
            }
-           fprintf(ficlog," %d%d=%.0f",jk,m,freq[jk][m][iage]);
+           if(jk!=0 && m!=0)
+             fprintf(ficresphtmfr,"<td>%.0f</td> ",freq[jk][m][iage]);
          }
-         if(jk!=0 && m!=0)
-           fprintf(ficresphtmfr,"<td>%.0f</td> ",freq[jk][m][iage]);
+       } /* end loop jk */
+       posproptt=0.; 
+       for(jk=1; jk <=nlstate; jk++){
+         posproptt += pospropt[jk];
+       }
+       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>Nanq</td><td>%.0f</td><td>%.0f</td>",pospropt[jk],posproptt); 
+       }else{
+         fprintf(ficresphtm,"<td>%.5f</td><td>%.0f</td><td>%.0f</td>",pospropt[jk]/posproptt,pospropt[jk],posproptt);  
        }
-      } /* end loop jk */
-      posproptt=0.; 
-      for(jk=1; jk <=nlstate; jk++){
-       posproptt += pospropt[jk];
-      }
-      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++){
+      fprintf(ficresphtm,"</tr>\n");
+      fprintf(ficresphtm,"</table>\n");
+      fprintf(ficresphtmfr,"</table>\n");
       if(posproptt < 1.e-5){
-       fprintf(ficresphtm,"<td>Nanq</td><td>%.0f</td><td>%.0f</td>",pospropt[jk],posproptt);   
+       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,"<td>%.5f</td><td>%.0f</td><td>%.0f</td>",pospropt[jk]/posproptt,pospropt[jk],posproptt);    
+       fprintf(ficresphtm,"\n <p> This combination (%d) is valid and result will be produced.</p>",j1);
+       invalidvarcomb[j1]=0;
       }
-    }
-    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 */
-  if(j==0){ /* We can estimate starting values from the occurences in each case */
-    printf("#Freqsummary\n");
-    fprintf(ficlog,"\n");
-    for(i=1,jk=1; i <=nlstate; i++){
-      for(k=1; k <=(nlstate+ndeath); k++){
-       if (k != i) {
-         printf("%d%d ",i,k);
-         fprintf(ficlog,"%d%d ",i,k);
-         for(jj=1; jj <=ncovmodel; jj++){
-           if(jj==1){
-             printf("%12.7f ln(%12.1f/%12.1f)= %12.7f ",p[jk],freq[i][k][iagemax+3],freq[i][i][iagemax+3], log(freq[i][k][iagemax+3]/freq[i][i][iagemax+3]));
-             fprintf(ficlog,"%12.7f ln(%12.1f/%12.1f)= %12.7f ",p[jk],freq[i][k][iagemax+3],freq[i][i][iagemax+3], log(freq[i][k][iagemax+3]/freq[i][i][iagemax+3]));
+      fprintf(ficresphtmfr,"</table>\n");
+      fprintf(ficlog,"\n");
+      if(j!=0){
+       printf("#Freqsummary: Starting values for combination j1=%d:\n", j1);
+       for(i=1,jk=1; i <=nlstate; i++){
+         for(k=1; k <=(nlstate+ndeath); k++){
+           if (k != i) {
+             printf("%d%d ",i,k);
+             fprintf(ficlog,"%d%d ",i,k);
+             for(jj=1; jj <=ncovmodel; jj++){ /* For counting jk */
+               if(jj==1){  /* Constant case */
+                 if(j1==1){ /* All dummy covariates to zero */
+                   freq[i][k][iagemax+4]=freq[i][k][iagemax+3]; /* Stores case 0 0 0 */
+                   freq[i][i][iagemax+4]=freq[i][i][iagemax+3]; /* Stores case 0 0 0 */
+                 }
+                 printf("%12.7f ln(%.0f/%.0f)= %f, OR=%f sd=%f \n",p[jk],freq[i][k][iagemax+3],freq[i][i][iagemax+3], log(freq[i][k][iagemax+3]/freq[i][i][iagemax+3]),freq[i][k][iagemax+3]/freq[i][i][iagemax+3], sqrt(1/freq[i][k][iagemax+3]+1/freq[i][i][iagemax+3]));
+                 fprintf(ficlog,"%12.7f ln(%.0f/%.0f)= %12.7f \n",p[jk],freq[i][k][iagemax+3],freq[i][i][iagemax+3], log(freq[i][k][iagemax+3]/freq[i][i][iagemax+3]));
+                 pstart[jk]= log(freq[i][k][iagemax+3]/freq[i][i][iagemax+3]);
+               }else if( (log(j1-1)/log(2)+1 == jj -2 -nagesqr)  && Dummy[jj-2-nagesqr]==0){ /* We want only if the position, jj, in model corresponds to unique covariate equal to 1 in j1 combination */ 
+                 pstart[jk]= log((freq[i][k][iagemax+3]/freq[i][i][iagemax+3])/(freq[i][k][iagemax+4]/freq[i][i][iagemax+4]));
+                 printf("jk=%d,i=%d,k=%d,p[%d]=%12.7f ln((%.0f/%.0f)/(%.0f/%.0f))= %f, OR=%f sd=%f \n",jk,i,k,jk,p[jk],freq[i][k][iagemax+3],freq[i][i][iagemax+3],freq[i][k][iagemax+4],freq[i][i][iagemax+4], log((freq[i][k][iagemax+3]/freq[i][i][iagemax+3])/(freq[i][k][iagemax+4]/freq[i][i][iagemax+4])),(freq[i][k][iagemax+3]/freq[i][i][iagemax+3])/(freq[i][k][iagemax+4]/freq[i][i][iagemax+4]), sqrt(1/freq[i][k][iagemax+3]+1/freq[i][i][iagemax+3]+1/freq[i][k][iagemax+4]+1/freq[i][i][iagemax+4]));
+               }else if(jj==2 || nagesqr==1){ /* age or age*age parameter */
+                 ;
+               }else{ /* Other cases, like quantitative fixed or varying covariates */
+                 ;
+               }
+               /* printf("%12.7f )", param[i][jj][k]); */
+               /* fprintf(ficlog,"%12.7f )", param[i][jj][k]); */
+               jk++; 
+             } /* end jj */
+             printf("\n");
+             fprintf(ficlog,"\n");
+           } /* end k!= i */
+         } /* end k */
+       } /* end i, jk */
+      } /* end j !=0 */
+    } /* end selected combination of covariate j1 */
+    if(j==0){ /* We can estimate starting values from the occurences in each case */
+      printf("#Freqsummary: Starting values for the constants:\n");
+      fprintf(ficlog,"\n");
+      for(i=1,jk=1; i <=nlstate; i++){
+       for(k=1; k <=(nlstate+ndeath); k++){
+         if (k != i) {
+           printf("%d%d ",i,k);
+           fprintf(ficlog,"%d%d ",i,k);
+           for(jj=1; jj <=ncovmodel; jj++){
+             if(jj==1){
+               printf("%12.7f ln(%.0f/%.0f)= %12.7f ",p[jk],freq[i][k][iagemax+3],freq[i][i][iagemax+3], log(freq[i][k][iagemax+3]/freq[i][i][iagemax+3]));
+               fprintf(ficlog,"%12.7f ln(%.0f/%.0f)= %12.7f ",p[jk],freq[i][k][iagemax+3],freq[i][i][iagemax+3], log(freq[i][k][iagemax+3]/freq[i][i][iagemax+3]));
+             }
+             /* printf("%12.7f )", param[i][jj][k]); */
+             /* fprintf(ficlog,"%12.7f )", param[i][jj][k]); */
+             jk++; 
            }
-           /* printf("%12.7f )", param[i][jj][k]); */
-           /* fprintf(ficlog,"%12.7f )", param[i][jj][k]); */
-           jk++; 
+           printf("\n");
+           fprintf(ficlog,"\n");
          }
-         printf("\n");
-         fprintf(ficlog,"\n");
        }
       }
-    }
-    printf("#Freqsummary\n");
-    fprintf(ficlog,"\n");
-    for(jk=-1; jk <=nlstate+ndeath; jk++){
-      for(m=-1; m <=nlstate+ndeath; m++){
-       /* param[i]|j][k]= freq[jk][m][iagemax+3] */
+      printf("#Freqsummary\n");
+      fprintf(ficlog,"\n");
+      for(jk=-1; jk <=nlstate+ndeath; jk++){
+       for(m=-1; m <=nlstate+ndeath; m++){
+         /* param[i]|j][k]= freq[jk][m][iagemax+3] */
          printf(" %d%d=%.0f",jk,m,freq[jk][m][iagemax+3]);
          fprintf(ficlog," %d%d=%.0f",jk,m,freq[jk][m][iagemax+3]);
-       /* if(freq[jk][m][iage] !=0 ) { /\* minimizing output *\/ */
-       /*   printf(" %d%d=%.0f",jk,m,freq[jk][m][iagemax+3]); */
-       /*   fprintf(ficlog," %d%d=%.0f",jk,m,freq[jk][m][iagemax+3]); */
-       /* } */
-      }
-    } /* end loop jk */
-    printf("\n");
-    fprintf(ficlog,"\n");
-  } /* if j=0 */
+         /* if(freq[jk][m][iage] !=0 ) { /\* minimizing output *\/ */
+         /*   printf(" %d%d=%.0f",jk,m,freq[jk][m][iagemax+3]); */
+         /*   fprintf(ficlog," %d%d=%.0f",jk,m,freq[jk][m][iagemax+3]); */
+         /* } */
+       }
+      } /* end loop jk */
+      
+      printf("\n");
+      fprintf(ficlog,"\n");
+    } /* end j=0 */
   } /* end j */
   dateintmean=dateintsum/k2cpt; 
   
@@ -4591,10 +4634,10 @@ Title=%s <br>Datafile=%s Firstpass=%d Lastpass=%d Stepm=%d Weight=%d Model=1+age
   fclose(ficresphtmfr);
   free_vector(meanq,1,nqfveff);
   free_matrix(meanqt,1,lastpass,1,nqtveff);
-  free_ma3x(freq,-5,nlstate+ndeath,-5,nlstate+ndeath, iagemin-AGEMARGE, iagemax+3+AGEMARGE);
+  free_ma3x(freq,-5,nlstate+ndeath,-5,nlstate+ndeath, iagemin-AGEMARGE, iagemax+4+AGEMARGE);
   free_vector(pospropt,1,nlstate);
   free_vector(posprop,1,nlstate);
-  free_matrix(prop,1,nlstate,iagemin-AGEMARGE, iagemax+3+AGEMARGE);
+  free_matrix(prop,1,nlstate,iagemin-AGEMARGE, iagemax+4+AGEMARGE);
   free_vector(pp,1,nlstate);
   /* End of freqsummary */
 }
@@ -4621,7 +4664,7 @@ void prevalence(double ***probs, double agemin, double agemax, int **s, double *
   iagemin= (int) agemin;
   iagemax= (int) agemax;
   /*pp=vector(1,nlstate);*/
-  prop=matrix(1,nlstate,iagemin-AGEMARGE,iagemax+3+AGEMARGE); 
+  prop=matrix(1,nlstate,iagemin-AGEMARGE,iagemax+4+AGEMARGE); 
   /*  freq=ma3x(-1,nlstate+ndeath,-1,nlstate+ndeath,iagemin,iagemax+3);*/
   j1=0;
   
@@ -4631,7 +4674,7 @@ void prevalence(double ***probs, double agemin, double agemax, int **s, double *
   first=1;
   for(j1=1; j1<= (int) pow(2,cptcoveff);j1++){ /* For each combination of covariate */
     for (i=1; i<=nlstate; i++)  
-      for(iage=iagemin-AGEMARGE; iage <= iagemax+3+AGEMARGE; iage++)
+      for(iage=iagemin-AGEMARGE; iage <= iagemax+4+AGEMARGE; iage++)
        prop[i][iage]=0.0;
     printf("Prevalence combination of varying and fixed dummies %d\n",j1);
     /* fprintf(ficlog," V%d=%d ",Tvaraff[j1],nbcode[Tvaraff[j1]][codtabm(k,j1)]); */
@@ -4662,7 +4705,7 @@ void prevalence(double ***probs, double agemin, double agemax, int **s, double *
            if ((y2>=dateprev1) && (y2<=dateprev2)) { /* Here is the main selection (fractional years) */
              if(agev[m][i]==0) agev[m][i]=iagemax+1;
              if(agev[m][i]==1) agev[m][i]=iagemax+2;
-             if((int)agev[m][i] <iagemin-AGEMARGE || (int)agev[m][i] >iagemax+3+AGEMARGE){
+             if((int)agev[m][i] <iagemin-AGEMARGE || (int)agev[m][i] >iagemax+4+AGEMARGE){
                printf("Error on individual # %d agev[m][i]=%f <%d-%d or > %d+3+%d  m=%d; either change agemin or agemax or fix data\n",i, agev[m][i],iagemin,AGEMARGE, iagemax,AGEMARGE,m); 
                exit(1);
              }
@@ -4699,7 +4742,7 @@ void prevalence(double ***probs, double agemin, double agemax, int **s, double *
   
   /*  free_ma3x(freq,-1,nlstate+ndeath,-1,nlstate+ndeath, iagemin, iagemax+3);*/
   /*free_vector(pp,1,nlstate);*/
-  free_matrix(prop,1,nlstate, iagemin-AGEMARGE,iagemax+3+AGEMARGE);
+  free_matrix(prop,1,nlstate, iagemin-AGEMARGE,iagemax+4+AGEMARGE);
 }  /* End of prevalence */
 
 /************* Waves Concatenation ***************/
@@ -9635,7 +9678,8 @@ int main(int argc, char *argv[])
   double **prlim;
   double **bprlim;
   double ***param; /* Matrix of parameters */
-  double  *p;
+  double ***paramstart; /* Matrix of starting parameter values */
+  double  *p, *pstart; /* p=param[1][1] pstart is for starting values guessed by freqsummary */
   double **matcov; /* Matrix of covariance */
   double **hess; /* Hessian matrix */
   double ***delti3; /* Scale */
@@ -9986,6 +10030,7 @@ int main(int argc, char *argv[])
     ungetc(c,ficpar);
     
     param= ma3x(1,nlstate,1,nlstate+ndeath-1,1,ncovmodel);
+    paramstart= ma3x(1,nlstate,1,nlstate+ndeath-1,1,ncovmodel);
     for(i=1; i <=nlstate; i++){
       j=0;
       for(jj=1; jj <=nlstate+ndeath; jj++){
@@ -10022,8 +10067,9 @@ run imach with mle=-1 to get a correct template of the parameter file.\n",numlin
     }  
     fflush(ficlog);
     
-    /* Reads scales values */
+    /* Reads parameters values */
     p=param[1][1];
+    pstart=paramstart[1][1];
     
     /* Reads comments: lines beginning with '#' */
     while((c=getc(ficpar))=='#' && c!= EOF){
@@ -10469,7 +10515,7 @@ Title=%s <br>Datafile=%s Firstpass=%d Lastpass=%d Stepm=%d Weight=%d Model=1+age
   /* Calculates basic frequencies. Computes observed prevalence at single age 
                 and for any valid combination of covariates
      and prints on file fileres'p'. */
-  freqsummary(fileres, p, agemin, agemax, s, agev, nlstate, imx, Tvaraff, invalidvarcomb, nbcode, ncodemax,mint,anint,strstart, \
+  freqsummary(fileres, p, pstart, agemin, agemax, s, agev, nlstate, imx, Tvaraff, invalidvarcomb, nbcode, ncodemax,mint,anint,strstart, \
              firstpass, lastpass,  stepm,  weightopt, model);
 
   fprintf(fichtm,"\n");