Diff for /imach/src/imach.c between versions 1.332 and 1.334

version 1.332, 2022/08/21 09:06:25 version 1.334, 2022/08/25 09:08:41
Line 1 Line 1
 /* $Id$  /* $Id$
   $State$    $State$
   $Log$    $Log$
     Revision 1.334  2022/08/25 09:08:41  brouard
     Summary: In progress for quantitative
   
     Revision 1.333  2022/08/21 09:10:30  brouard
     * src/imach.c (Module): Version 0.99r33 A lot of changes in
     reassigning covariates: my first idea was that people will always
     use the first covariate V1 into the model but in fact they are
     producing data with many covariates and can use an equation model
     with some of the covariate; it means that in a model V2+V3 instead
     of codtabm(k,Tvaraff[j]) which calculates for combination k, for
     three covariates (V1, V2, V3) the value of Tvaraff[j], but in fact
     the equation model is restricted to two variables only (V2, V3)
     and the combination for V2 should be codtabm(k,1) instead of
     (codtabm(k,2), and the code should be
     codtabm(k,TnsdVar[Tvaraff[j]]. Many many changes have been
     made. All of these should be simplified once a day like we did in
     hpxij() for example by using precov[nres] which is computed in
     decoderesult for each nres of each resultline. Loop should be done
     on the equation model globally by distinguishing only product with
     age (which are changing with age) and no more on type of
     covariates, single dummies, single covariates.
   
   Revision 1.332  2022/08/21 09:06:25  brouard    Revision 1.332  2022/08/21 09:06:25  brouard
   Summary: Version 0.99r33    Summary: Version 0.99r33
   
Line 1277  int cptcovs=0; /**< cptcovs number of si Line 1299  int cptcovs=0; /**< cptcovs number of si
 int cptcovsnq=0; /**< cptcovsnq number of simple covariates in the model but non quantitative V2+V1 =2 */  int cptcovsnq=0; /**< cptcovsnq number of simple covariates in the model but non quantitative V2+V1 =2 */
 int cptcovage=0; /**< Number of covariates with age: V3*age only =1 */  int cptcovage=0; /**< Number of covariates with age: V3*age only =1 */
 int cptcovprodnoage=0; /**< Number of covariate products without age */     int cptcovprodnoage=0; /**< Number of covariate products without age */   
 int cptcoveff=0; /* Total number of covariates to vary for printing results (2**cptcoveff combinations of dummies)(computed in tricode as cptcov) */  int cptcoveff=0; /* Total number of single dummy covariates to vary for printing results (2**cptcoveff combinations of dummies)(computed in tricode as cptcov) */
 int ncovf=0; /* Total number of effective fixed covariates (dummy or quantitative) in the model */  int ncovf=0; /* Total number of effective fixed covariates (dummy or quantitative) in the model */
 int ncovv=0; /* Total number of effective (wave) varying covariates (dummy or quantitative) in the model */  int ncovv=0; /* Total number of effective (wave) varying covariates (dummy or quantitative) in the model */
 int ncova=0; /* Total number of effective (wave and stepm) varying with age covariates (dummy of quantitative) in the model */  int ncova=0; /* Total number of effective (wave and stepm) varying with age covariates (dummy of quantitative) in the model */
Line 1288  int nqfveff=0; /**< nqfveff Number of Qu Line 1310  int nqfveff=0; /**< nqfveff Number of Qu
 int ntveff=0; /**< ntveff number of effective time varying variables */  int ntveff=0; /**< ntveff number of effective time varying variables */
 int nqtveff=0; /**< ntqveff number of effective time varying quantitative variables */  int nqtveff=0; /**< ntqveff number of effective time varying quantitative variables */
 int cptcov=0; /* Working variable */  int cptcov=0; /* Working variable */
   int firstobs=1, lastobs=10; /* nobs = lastobs-firstobs+1 declared globally ;*/
 int nobs=10;  /* Number of observations in the data lastobs-firstobs */  int nobs=10;  /* Number of observations in the data lastobs-firstobs */
 int ncovcombmax=NCOVMAX; /* Maximum calculated number of covariate combination = pow(2, cptcoveff) */  int ncovcombmax=NCOVMAX; /* Maximum calculated number of covariate combination = pow(2, cptcoveff) */
 int npar=NPARMAX; /* Number of parameters (nlstate+ndeath-1)*nlstate*ncovmodel; */  int npar=NPARMAX; /* Number of parameters (nlstate+ndeath-1)*nlstate*ncovmodel; */
Line 1505  int *TvarsQind; Line 1528  int *TvarsQind;
 #define MAXRESULTLINESPONE 10+1  #define MAXRESULTLINESPONE 10+1
 int nresult=0;  int nresult=0;
 int parameterline=0; /* # of the parameter (type) line */  int parameterline=0; /* # of the parameter (type) line */
 int TKresult[MAXRESULTLINESPONE];  int TKresult[MAXRESULTLINESPONE]; /* TKresult[nres]=k for each resultline nres give the corresponding combination of dummies */
 int resultmodel[MAXRESULTLINESPONE][NCOVMAX];/* resultmodel[k1]=k3: k1th position in the model correspond to the k3 position in the resultline */  int resultmodel[MAXRESULTLINESPONE][NCOVMAX];/* resultmodel[k1]=k3: k1th position in the model corresponds to the k3 position in the resultline */
 int Tresult[MAXRESULTLINESPONE][NCOVMAX];/* For dummy variable , value (output) */  int modelresult[MAXRESULTLINESPONE][NCOVMAX];/* modelresult[k3]=k1: k1th position in the model corresponds to the k3 position in the resultline */
   int Tresult[MAXRESULTLINESPONE][NCOVMAX];/* Tresult[nres][result_position]= value of the dummy variable at the result_position in the nres resultline */
 int Tinvresult[MAXRESULTLINESPONE][NCOVMAX];/* Tinvresult[nres][Name of a dummy variable]= value of the variable in the result line  */  int Tinvresult[MAXRESULTLINESPONE][NCOVMAX];/* Tinvresult[nres][Name of a dummy variable]= value of the variable in the result line  */
 double TinvDoQresult[MAXRESULTLINESPONE][NCOVMAX];/* TinvDoQresult[nres][Name of a Dummy or Q variable]= value of the variable in the result line */  double TinvDoQresult[MAXRESULTLINESPONE][NCOVMAX];/* TinvDoQresult[nres][Name of a Dummy or Q variable]= value of the variable in the result line */
 int Tvresult[MAXRESULTLINESPONE][NCOVMAX]; /* For dummy variable , variable # (output) */  int Tvresult[MAXRESULTLINESPONE][NCOVMAX]; /* Tvresult[nres][result_position]= name of the dummy variable at the result_position in the nres resultline */
 double Tqresult[MAXRESULTLINESPONE][NCOVMAX]; /* Tqresult[nres][result_position]= value of the variable at the result_position in the nres resultline */  double Tqresult[MAXRESULTLINESPONE][NCOVMAX]; /* Tqresult[nres][result_position]= value of the variable at the result_position in the nres resultline */
 double Tqinvresult[MAXRESULTLINESPONE][NCOVMAX]; /* For quantitative variable , value (output) */  double Tqinvresult[MAXRESULTLINESPONE][NCOVMAX]; /* For quantitative variable , value (output) */
 int Tvqresult[MAXRESULTLINESPONE][NCOVMAX]; /* Tvqresult[nres][result_position]= id of the variable at the result_position in the nres resultline */  int Tvqresult[MAXRESULTLINESPONE][NCOVMAX]; /* Tvqresult[nres][result_position]= id of the variable at the result_position in the nres resultline */
Line 4956  Title=%s <br>Datafile=%s Firstpass=%d La Line 4980  Title=%s <br>Datafile=%s Firstpass=%d La
   j1=0;    j1=0;
       
   /* j=ncoveff;  /\* Only fixed dummy covariates *\/ */    /* j=ncoveff;  /\* Only fixed dummy covariates *\/ */
   j=cptcoveff;  /* Only dummy covariates of the model */    j=cptcoveff;  /* Only dummy covariates used in the model */
   /* j=cptcovn;  /\* Only dummy covariates of the model *\/ */    /* j=cptcovn;  /\* Only dummy covariates of the model *\/ */
   if (cptcovn<1) {j=1;ncodemax[1]=1;}    if (cptcovn<1) {j=1;ncodemax[1]=1;}
       
Line 5071  Title=%s <br>Datafile=%s Firstpass=%d La Line 5095  Title=%s <br>Datafile=%s Firstpass=%d La
                                                                                       constant and age model which counts them. */                                                                                        constant and age model which counts them. */
                       bool=0; /* not selected */                        bool=0; /* not selected */
                   }else if( Fixed[Tmodelind[z1]]== 0) { /* fixed */                    }else if( Fixed[Tmodelind[z1]]== 0) { /* fixed */
                     if (covar[Tvaraff[z1]][iind]!= nbcode[Tvaraff[z1]][codtabm(j1,TnsdVar[Tvaraff[z1]])]) {                      /* i1=Tvaraff[z1]; */
                       /* i2=TnsdVar[i1]; */
                       /* i3=nbcode[i1][i2]; */
                       /* i4=covar[i1][iind]; */
                       /* if(i4 != i3){ */
                       if (covar[Tvaraff[z1]][iind]!= nbcode[Tvaraff[z1]][codtabm(j1,TnsdVar[Tvaraff[z1]])]) { /* Bug valgrind */
                       bool=0;                        bool=0;
                     }                      }
                   }                    }
Line 5999  void  concatwav(int wav[], int **dh, int Line 6028  void  concatwav(int wav[], int **dh, int
          break;           break;
        } /* end switch */         } /* end switch */
      } /* end dummy test */       } /* end dummy test */
      if(Dummy[k]==1 && Typevar[k] !=1){ /* Dummy covariate and not age product */        if(Dummy[k]==1 && Typevar[k] !=1){ /* Quantitative covariate and not age product */ 
        for (i=1; i<=imx; i++) { /* Loop on individuals: reads the data file to get the maximum value of the  modality of this covariate Vj*/         for (i=1; i<=imx; i++) { /* Loop on individuals: reads the data file to get the maximum value of the  modality of this covariate Vj*/
          if(isnan(covar[Tvar[k]][i])){           if(isnan(covar[Tvar[k]][i])){
            printf("ERROR, IMaCh doesn't treat fixed quantitative covariate with missing values V%d=., individual %d will be skipped.\n",Tvar[k],i);             printf("ERROR, IMaCh doesn't treat fixed quantitative covariate with missing values V%d=., individual %d will be skipped.\n",Tvar[k],i);
Line 6445  void  concatwav(int wav[], int **dh, int Line 6474  void  concatwav(int wav[], int **dh, int
    pstamp(ficresprobmorprev);     pstamp(ficresprobmorprev);
    fprintf(ficresprobmorprev,"# probabilities of dying before estepm=%d months for people of exact age and weighted probabilities w1*p1j+w2*p2j+... stand dev in()\n",estepm);     fprintf(ficresprobmorprev,"# probabilities of dying before estepm=%d months for people of exact age and weighted probabilities w1*p1j+w2*p2j+... stand dev in()\n",estepm);
    fprintf(ficresprobmorprev,"# Selected quantitative variables and dummies");     fprintf(ficresprobmorprev,"# Selected quantitative variables and dummies");
    for (j=1; j<= nsq; j++){ /* For each selected (single) quantitative value */     for (j=1; j<= nsq; j++){ /* For each selected (single) quantitative value */ /* To be done*/
      fprintf(ficresprobmorprev," V%d=%f ",Tvqresult[nres][j],Tqresult[nres][resultmodel[nres][j]]);       fprintf(ficresprobmorprev," V%d=%f ",Tvqresult[nres][j],Tqresult[nres][resultmodel[nres][j]]);
    }     }
    for(j=1;j<=cptcoveff;j++)      for(j=1;j<=cptcoveff;j++) 
      fprintf(ficresprobmorprev,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(ij,TnsdVar[Tvaraff[j]])]);       fprintf(ficresprobmorprev," V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(ij,TnsdVar[Tvaraff[j]])]);
    fprintf(ficresprobmorprev,"\n");     fprintf(ficresprobmorprev,"\n");
   
    fprintf(ficresprobmorprev,"# Age cov=%-d",ij);     fprintf(ficresprobmorprev,"# Age cov=%-d",ij);
Line 7080  To be simple, these graphs help to under Line 7109  To be simple, these graphs help to under
   
    for(nres=1;nres <=nresult; nres++){ /* For each resultline */     for(nres=1;nres <=nresult; nres++){ /* For each resultline */
    for(j1=1; j1<=tj;j1++){ /* For any combination of dummy covariates, fixed and varying */     for(j1=1; j1<=tj;j1++){ /* For any combination of dummy covariates, fixed and varying */
      printf("Varprob  TKresult[nres]=%d j1=%d, nres=%d, cptcovn=%d, cptcoveff=%d tj=%d \n",  TKresult[nres], j1, nres, cptcovn, cptcoveff, tj);       printf("Varprob  TKresult[nres]=%d j1=%d, nres=%d, cptcovn=%d, cptcoveff=%d tj=%d cptcovs=%d\n",  TKresult[nres], j1, nres, cptcovn, cptcoveff, tj, cptcovs);
      if(tj != 1 && TKresult[nres]!= j1)       if(tj != 1 && TKresult[nres]!= j1)
        continue;         continue;
   
Line 7088  To be simple, these graphs help to under Line 7117  To be simple, these graphs help to under
      /* for(nres=1;nres <=1; nres++){ /\* For each resultline *\/ */       /* for(nres=1;nres <=1; nres++){ /\* For each resultline *\/ */
      /* /\* for(nres=1;nres <=nresult; nres++){ /\\* For each resultline *\\/ *\/ */       /* /\* for(nres=1;nres <=nresult; nres++){ /\\* For each resultline *\\/ *\/ */
      if  (cptcovn>0) {       if  (cptcovn>0) {
        fprintf(ficresprob, "\n#********** Variable ");          fprintf(ficresprob, "\n#********** Variable ");
        for (z1=1; z1<=cptcoveff; z1++) fprintf(ficresprob, "V%d=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtabm(j1,TnsdVar[Tvaraff[z1]])]);  
        fprintf(ficresprob, "**********\n#\n");  
        fprintf(ficresprobcov, "\n#********** Variable ");          fprintf(ficresprobcov, "\n#********** Variable "); 
        for (z1=1; z1<=cptcoveff; z1++) fprintf(ficresprobcov, "V%d=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtabm(j1,TnsdVar[Tvaraff[z1]])]);         fprintf(ficgp, "\n#********** Variable ");
          fprintf(fichtmcov, "\n<hr  size=\"2\" color=\"#EC5E5E\">********** Variable "); 
          fprintf(ficresprobcor, "\n#********** Variable ");    
   
          /* Including quantitative variables of the resultline to be done */
          for (z1=1; z1<=cptcovs; z1++){ /* Loop on each variable of this resultline  */
            printf("Varprob modelresult[%d][%d]=%d model=%s \n",nres, z1, modelresult[nres][z1], model);
            fprintf(ficlog,"Varprob modelresult[%d][%d]=%d model=%s \n",nres, z1, modelresult[nres][z1], model);
            /* fprintf(ficlog,"Varprob modelresult[%d][%d]=%d model=%s resultline[%d]=%s \n",nres, z1, modelresult[nres][z1], model, nres, resultline[nres]); */
            if(Dummy[modelresult[nres][z1]]==0){/* Dummy variable of the variable in position modelresult in the model corresponding to z1 in resultline  */
              if(Fixed[modelresult[nres][z1]]==0){ /* Fixed referenced to model equation */
                fprintf(ficresprob,"V%d=%d ",Tvresult[nres][z1],Tresult[nres][z1]); /* Output of each value for the combination TKresult[nres], ordere by the covariate values in the resultline  */
                fprintf(ficresprobcov,"V%d=%d ",Tvresult[nres][z1],Tresult[nres][z1]); /* Output of each value for the combination TKresult[nres], ordere by the covariate values in the resultline  */
                fprintf(ficgp,"V%d=%d ",Tvresult[nres][z1],Tresult[nres][z1]); /* Output of each value for the combination TKresult[nres], ordere by the covariate values in the resultline  */
                fprintf(fichtmcov,"V%d=%d ",Tvresult[nres][z1],Tresult[nres][z1]); /* Output of each value for the combination TKresult[nres], ordere by the covariate values in the resultline  */
                fprintf(ficresprobcor,"V%d=%d ",Tvresult[nres][z1],Tresult[nres][z1]); /* Output of each value for the combination TKresult[nres], ordere by the covariate values in the resultline  */
                fprintf(ficresprob,"fixed ");
                fprintf(ficresprobcov,"fixed ");
                fprintf(ficgp,"fixed ");
                fprintf(fichtmcov,"fixed ");
                fprintf(ficresprobcor,"fixed ");
              }else{
                fprintf(ficresprob,"varyi ");
                fprintf(ficresprobcov,"varyi ");
                fprintf(ficgp,"varyi ");
                fprintf(fichtmcov,"varyi ");
                fprintf(ficresprobcor,"varyi ");
              }
            }else if(Dummy[modelresult[nres][z1]]==1){ /* Quanti variable */
              /* For each selected (single) quantitative value */
              fprintf(ficresprob," V%d=%f ",Tvqresult[nres][z1],Tqresult[nres][z1]);
              if(Fixed[modelresult[nres][z1]]==0){ /* Fixed */
                fprintf(ficresprob,"fixed ");
                fprintf(ficresprobcov,"fixed ");
                fprintf(ficgp,"fixed ");
                fprintf(fichtmcov,"fixed ");
                fprintf(ficresprobcor,"fixed ");
              }else{
                fprintf(ficresprob,"varyi ");
                fprintf(ficresprobcov,"varyi ");
                fprintf(ficgp,"varyi ");
                fprintf(fichtmcov,"varyi ");
                fprintf(ficresprobcor,"varyi ");
              }
            }else{
              printf("Error in varprob() Dummy[modelresult[%d][%d]]=%d, modelresult[%d][%d]=V%d cptcovs=%d, cptcoveff=%d \n", nres, z1, Dummy[modelresult[nres][z1]],nres,z1,modelresult[nres][z1],cptcovs, cptcoveff);  /* end if dummy  or quanti */
              fprintf(ficlog,"Error in varprob() Dummy[modelresult[%d][%d]]=%d, modelresult[%d][%d]=V%d cptcovs=%d, cptcoveff=%d \n", nres, z1, Dummy[modelresult[nres][z1]],nres,z1,modelresult[nres][z1],cptcovs, cptcoveff);  /* end if dummy  or quanti */
              exit(1);
            }
          } /* End loop on variable of this resultline */
          /* for (z1=1; z1<=cptcoveff; z1++) fprintf(ficresprob, "V%d=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtabm(j1,TnsdVar[Tvaraff[z1]])]); */
          fprintf(ficresprob, "**********\n#\n");
        fprintf(ficresprobcov, "**********\n#\n");         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,TnsdVar[Tvaraff[z1]])]);  
        fprintf(ficgp, "**********\n#\n");         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)]); */  
        for (z1=1; z1<=cptcoveff; z1++) fprintf(fichtmcov, "V%d=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtabm(j1,TnsdVar[Tvaraff[z1]])]);  
        fprintf(fichtmcov, "**********\n<hr size=\"2\" color=\"#EC5E5E\">");         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,TnsdVar[Tvaraff[z1]])]);  
        fprintf(ficresprobcor, "**********\n#");             fprintf(ficresprobcor, "**********\n#");    
        if(invalidvarcomb[j1]){         if(invalidvarcomb[j1]){
          fprintf(ficgp,"\n#Combination (%d) ignored because no cases \n",j1);            fprintf(ficgp,"\n#Combination (%d) ignored because no cases \n",j1); 
Line 7118  To be simple, these graphs help to under Line 7185  To be simple, these graphs help to under
      trgradg=matrix(1,(nlstate)*(nlstate+ndeath),1,npar);       trgradg=matrix(1,(nlstate)*(nlstate+ndeath),1,npar);
      gp=vector(1,(nlstate)*(nlstate+ndeath));       gp=vector(1,(nlstate)*(nlstate+ndeath));
      gm=vector(1,(nlstate)*(nlstate+ndeath));       gm=vector(1,(nlstate)*(nlstate+ndeath));
      for (age=bage; age<=fage; age ++){        for (age=bage; age<=fage; age ++){ /* Fo each age we feed the model equation with covariates, using precov as in hpxij() ? */
        cov[2]=age;         cov[2]=age;
        if(nagesqr==1)         if(nagesqr==1)
          cov[3]= age*age;           cov[3]= age*age;
        /* for (k=1; k<=cptcovn;k++) { */         /* New code end of combination but for each resultline */
        /*        cov[2+nagesqr+k]=nbcode[Tvar[k]][codtabm(j1,k)]; */         for(k1=1;k1<=cptcovt;k1++){ /* loop on model equation (including products) */ 
        for (k=1; k<=nsd;k++) { /* For single dummy covariates only */           if(Typevar[k1]==1){ /* A product with age */
          /* Here comes the value of the covariate 'j1' after renumbering k with single dummy covariates */             cov[2+nagesqr+k1]=precov[nres][k1]*cov[2];
          cov[2+nagesqr+TvarsDind[k]]=nbcode[TvarsD[k]][codtabm(j1,TnsdVar[TvarsD[k]])];  
          /*cov[2+nagesqr+k]=nbcode[Tvar[k]][codtabm(j1,Tvar[k])];*//* j1 1 2 3 4  
                                                                     * 1  1 1 1 1  
                                                                     * 2  2 1 1 1  
                                                                     * 3  1 2 1 1  
                                                                     */  
          /* nbcode[1][1]=0 nbcode[1][2]=1;*/  
        }  
        /* V2+V1+V4+V3*age Tvar[4]=3 ; V1+V2*age Tvar[2]=2; V1+V1*age Tvar[2]=1, Tage[1]=2 */  
        /* ) p nbcode[Tvar[Tage[k]]][(1 & (ij-1) >> (k-1))+1] */  
        /*for (k=1; k<=cptcovage;k++) cov[2+Tage[k]]=cov[2+Tage[k]]*cov[2]; */  
        for (k=1; k<=cptcovage;k++){  /* For product with age */  
          if(Dummy[Tage[k]]==2){ /* dummy with age */  
            cov[2+nagesqr+Tage[k]]=nbcode[Tvar[Tage[k]]][codtabm(j1,TnsdVar[Tvar[Tage[k]]])]*cov[2];  
            /* cov[++k1]=nbcode[Tvar[Tage[k]]][codtabm(ij,k)]*cov[2]; */  
          } else if(Dummy[Tage[k]]==3){ /* quantitative with age */  
            printf("Internal IMaCh error, don't know which value for quantitative covariate with age, Tage[k]%d, k=%d, Tvar[Tage[k]]=V%d, age=%d\n",Tage[k],k ,Tvar[Tage[k]], (int)cov[2]);  
            /* cov[2+nagesqr+Tage[k]]=meanq[k]/idq[k]*cov[2];/\* Using the mean of quantitative variable Tvar[Tage[k]] /\* Tqresult[nres][k]; *\/ */  
            /* exit(1); */  
            /* cov[++k1]=Tqresult[nres][k];  */  
          }  
          /* cov[2+Tage[k]+nagesqr]=nbcode[Tvar[Tage[k]]][codtabm(ij,k)]*cov[2]; */  
        }  
        for (k=1; k<=cptcovprod;k++){/* For product without age */  
          if(Dummy[Tvard[k][1]]==0){  
            if(Dummy[Tvard[k][2]]==0){  
              cov[2+nagesqr+Tprod[k]]=nbcode[Tvard[k][1]][codtabm(j1,TnsdVar[Tvard[k][1]])] * nbcode[Tvard[k][2]][codtabm(j1,TnsdVar[Tvard[k][2]])];  
              /* cov[++k1]=nbcode[Tvard[k][1]][codtabm(ij,k)] * nbcode[Tvard[k][2]][codtabm(ij,k)]; */  
            }else{ /* Should we use the mean of the quantitative variables? */  
              cov[2+nagesqr+Tprod[k]]=nbcode[Tvard[k][1]][codtabm(j1,TnsdVar[Tvard[k][1]])] * Tqresult[nres][resultmodel[nres][k]];  
              /* cov[++k1]=nbcode[Tvard[k][1]][codtabm(ij,k)] * Tqresult[nres][k]; */  
            }  
          }else{           }else{
            if(Dummy[Tvard[k][2]]==0){             cov[2+nagesqr+k1]=precov[nres][k1];
              cov[2+nagesqr+Tprod[k]]=nbcode[Tvard[k][2]][codtabm(j1,TnsdVar[Tvard[k][2]])] * Tqinvresult[nres][TnsdVar[Tvard[k][1]]];  
              /* cov[++k1]=nbcode[Tvard[k][2]][codtabm(ij,k)] * Tqinvresult[nres][Tvard[k][1]]; */  
            }else{  
              cov[2+nagesqr+Tprod[k]]=Tqinvresult[nres][TnsdVar[Tvard[k][1]]]*  Tqinvresult[nres][TnsdVar[Tvard[k][2]]];  
              /* cov[++k1]=Tqinvresult[nres][Tvard[k][1]]*  Tqinvresult[nres][Tvard[k][2]]; */  
            }  
          }           }
          /* cov[2+nagesqr+Tprod[k]]=nbcode[Tvard[k][1]][codtabm(ij,k)]*nbcode[Tvard[k][2]][codtabm(ij,k)]; */         }/* End of loop on model equation */
        }                          /* Old code */
          /* /\* for (k=1; k<=cptcovn;k++) { *\/ */
          /* /\*    cov[2+nagesqr+k]=nbcode[Tvar[k]][codtabm(j1,k)]; *\/ */
          /* for (k=1; k<=nsd;k++) { /\* For single dummy covariates only *\/ */
          /*        /\* Here comes the value of the covariate 'j1' after renumbering k with single dummy covariates *\/ */
          /*        cov[2+nagesqr+TvarsDind[k]]=nbcode[TvarsD[k]][codtabm(j1,TnsdVar[TvarsD[k]])]; */
          /*        /\*cov[2+nagesqr+k]=nbcode[Tvar[k]][codtabm(j1,Tvar[k])];*\//\* j1 1 2 3 4 */
          /*                                                                   * 1  1 1 1 1 */
          /*                                                                   * 2  2 1 1 1 */
          /*                                                                   * 3  1 2 1 1 */
          /*                                                                   *\/ */
          /*        /\* nbcode[1][1]=0 nbcode[1][2]=1;*\/ */
          /* } */
          /* /\* V2+V1+V4+V3*age Tvar[4]=3 ; V1+V2*age Tvar[2]=2; V1+V1*age Tvar[2]=1, Tage[1]=2 *\/ */
          /* /\* ) p nbcode[Tvar[Tage[k]]][(1 & (ij-1) >> (k-1))+1] *\/ */
          /* /\*for (k=1; k<=cptcovage;k++) cov[2+Tage[k]]=cov[2+Tage[k]]*cov[2]; *\/ */
          /* for (k=1; k<=cptcovage;k++){  /\* For product with age *\/ */
          /*        if(Dummy[Tage[k]]==2){ /\* dummy with age *\/ */
          /*          cov[2+nagesqr+Tage[k]]=nbcode[Tvar[Tage[k]]][codtabm(j1,TnsdVar[Tvar[Tage[k]]])]*cov[2]; */
          /*          /\* cov[++k1]=nbcode[Tvar[Tage[k]]][codtabm(ij,k)]*cov[2]; *\/ */
          /*        } else if(Dummy[Tage[k]]==3){ /\* quantitative with age *\/ */
          /*          printf("Internal IMaCh error, don't know which value for quantitative covariate with age, Tage[k]%d, k=%d, Tvar[Tage[k]]=V%d, age=%d\n",Tage[k],k ,Tvar[Tage[k]], (int)cov[2]); */
          /*          /\* cov[2+nagesqr+Tage[k]]=meanq[k]/idq[k]*cov[2];/\\* Using the mean of quantitative variable Tvar[Tage[k]] /\\* Tqresult[nres][k]; *\\/ *\/ */
          /*          /\* exit(1); *\/ */
          /*          /\* cov[++k1]=Tqresult[nres][k];  *\/ */
          /*        } */
          /*        /\* cov[2+Tage[k]+nagesqr]=nbcode[Tvar[Tage[k]]][codtabm(ij,k)]*cov[2]; *\/ */
          /* } */
          /* for (k=1; k<=cptcovprod;k++){/\* For product without age *\/ */
          /*        if(Dummy[Tvard[k][1]]==0){ */
          /*          if(Dummy[Tvard[k][2]]==0){ */
          /*            cov[2+nagesqr+Tprod[k]]=nbcode[Tvard[k][1]][codtabm(j1,TnsdVar[Tvard[k][1]])] * nbcode[Tvard[k][2]][codtabm(j1,TnsdVar[Tvard[k][2]])]; */
          /*            /\* cov[++k1]=nbcode[Tvard[k][1]][codtabm(ij,k)] * nbcode[Tvard[k][2]][codtabm(ij,k)]; *\/ */
          /*          }else{ /\* Should we use the mean of the quantitative variables? *\/ */
          /*            cov[2+nagesqr+Tprod[k]]=nbcode[Tvard[k][1]][codtabm(j1,TnsdVar[Tvard[k][1]])] * Tqresult[nres][resultmodel[nres][k]]; */
          /*            /\* cov[++k1]=nbcode[Tvard[k][1]][codtabm(ij,k)] * Tqresult[nres][k]; *\/ */
          /*          } */
          /*        }else{ */
          /*          if(Dummy[Tvard[k][2]]==0){ */
          /*            cov[2+nagesqr+Tprod[k]]=nbcode[Tvard[k][2]][codtabm(j1,TnsdVar[Tvard[k][2]])] * Tqinvresult[nres][TnsdVar[Tvard[k][1]]]; */
          /*            /\* cov[++k1]=nbcode[Tvard[k][2]][codtabm(ij,k)] * Tqinvresult[nres][Tvard[k][1]]; *\/ */
          /*          }else{ */
          /*            cov[2+nagesqr+Tprod[k]]=Tqinvresult[nres][TnsdVar[Tvard[k][1]]]*  Tqinvresult[nres][TnsdVar[Tvard[k][2]]]; */
          /*            /\* cov[++k1]=Tqinvresult[nres][Tvard[k][1]]*  Tqinvresult[nres][Tvard[k][2]]; *\/ */
          /*          } */
          /*        } */
          /*        /\* cov[2+nagesqr+Tprod[k]]=nbcode[Tvard[k][1]][codtabm(ij,k)]*nbcode[Tvard[k][2]][codtabm(ij,k)]; *\/ */
          /* } */                  
 /* For each age and combination of dummy covariates we slightly move the parameters of delti in order to get the gradient*/                       /* For each age and combination of dummy covariates we slightly move the parameters of delti in order to get the gradient*/                     
        for(theta=1; theta <=npar; theta++){         for(theta=1; theta <=npar; theta++){
          for(i=1; i<=npar; i++)           for(i=1; i<=npar; i++)
Line 10246  int decoderesult( char resultline[], int Line 10322  int decoderesult( char resultline[], int
   int j=0, k=0, k1=0, k2=0, k3=0, k4=0, match=0, k2q=0, k3q=0, k4q=0;    int j=0, k=0, k1=0, k2=0, k3=0, k4=0, match=0, k2q=0, k3q=0, k4q=0;
   char resultsav[MAXLINE];    char resultsav[MAXLINE];
   /* int resultmodel[MAXLINE]; */    /* int resultmodel[MAXLINE]; */
   int modelresult[MAXLINE];    /* int modelresult[MAXLINE]; */
   char stra[80], strb[80], strc[80], strd[80],stre[80];    char stra[80], strb[80], strc[80], strd[80],stre[80];
   
   removefirstspace(&resultline);    removefirstspace(&resultline);
Line 10255  int decoderesult( char resultline[], int Line 10331  int decoderesult( char resultline[], int
   strcpy(resultsav,resultline);    strcpy(resultsav,resultline);
   printf("Decoderesult resultsav=\"%s\" resultline=\"%s\"\n", resultsav, resultline);    printf("Decoderesult resultsav=\"%s\" resultline=\"%s\"\n", resultsav, resultline);
   if (strlen(resultsav) >1){    if (strlen(resultsav) >1){
     j=nbocc(resultsav,'='); /**< j=Number of covariate values'=' */      j=nbocc(resultsav,'='); /**< j=Number of covariate values'=' in this resultline */
   }    }
   if(j == 0){ /* Resultline but no = */    if(j == 0){ /* Resultline but no = */
     TKresult[nres]=0; /* Combination for the nresult and the model */      TKresult[nres]=0; /* Combination for the nresult and the model */
     return (0);      return (0);
   }    }
   if( j != cptcovs ){ /* Be careful if a variable is in a product but not single */    if( j != cptcovs ){ /* Be careful if a variable is in a product but not single */
     printf("ERROR: the number of variables in the resultline which is %d, differs from the number %d of variables used in the model line, %s.\n",j, cptcovs, model);      printf("ERROR: the number of variables in the resultline which is %d, differs from the number %d of single variables used in the model line, %s.\n",j, cptcovs, model);
     fprintf(ficlog,"ERROR: the number of variables in the resultline which is %d, differs from the number %d of variables used in the model line, %s.\n",j, cptcovs, model);      fprintf(ficlog,"ERROR: the number of variables in the resultline which is %d, differs from the number %d of single variables used in the model line, %s.\n",j, cptcovs, model);
     /* return 1;*/      /* return 1;*/
   }    }
   for(k=1; k<=j;k++){ /* Loop on any covariate of the result line */    for(k=1; k<=j;k++){ /* Loop on any covariate of the RESULT LINE */
     if(nbocc(resultsav,'=') >1){      if(nbocc(resultsav,'=') >1){
       cutl(stra,strb,resultsav,' '); /* keeps in strb after the first ' ' (stra is the rest of the resultline to be analyzed in the next loop *//*     resultsav= "V4=1 V5=25.1 V3=0" stra= "V5=25.1 V3=0" strb= "V4=1" */        cutl(stra,strb,resultsav,' '); /* keeps in strb after the first ' ' (stra is the rest of the resultline to be analyzed in the next loop *//*     resultsav= "V4=1 V5=25.1 V3=0" stra= "V5=25.1 V3=0" strb= "V4=1" */
       /* If resultsav= "V4= 1 V5=25.1 V3=0" with a blank then strb="V4=" and stra="1 V5=25.1 V3=0" */        /* If resultsav= "V4= 1 V5=25.1 V3=0" with a blank then strb="V4=" and stra="1 V5=25.1 V3=0" */
Line 10290  int decoderesult( char resultline[], int Line 10366  int decoderesult( char resultline[], int
   }    }
   /* Checking for missing or useless values in comparison of current model needs */    /* Checking for missing or useless values in comparison of current model needs */
   /* Feeds resultmodel[nres][k1]=k2 for k1th product covariate with age in the model equation fed by the index k2 of the resutline*/    /* Feeds resultmodel[nres][k1]=k2 for k1th product covariate with age in the model equation fed by the index k2 of the resutline*/
   for(k1=1; k1<= cptcovt ;k1++){ /* Loop on model. model line V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1 */    for(k1=1; k1<= cptcovt ;k1++){ /* Loop on MODEL LINE V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1 */
     if(Typevar[k1]==0){ /* Single covariate in model */      if(Typevar[k1]==0){ /* Single covariate in model */
       /* 0 for simple covariate (dummy, quantitative, fixed or varying), 1 for age product, 2 for  product */        /* 0 for simple covariate (dummy, quantitative, fixed or varying), 1 for age product, 2 for  product */
       match=0;        match=0;
       for(k2=1; k2 <=j;k2++){/* Loop on resultline. In result line V4=1 V5=24.1 V3=1  V2=8 V1=0 */        for(k2=1; k2 <=j;k2++){/* Loop on resultline. In result line V4=1 V5=24.1 V3=1  V2=8 V1=0 */
         if(Tvar[k1]==Tvarsel[k2]) {/* Tvar is coming from the model, Tvarsel from the result. Tvar[1]=5 == Tvarsel[2]=5   */          if(Tvar[k1]==Tvarsel[k2]) {/* Tvar is coming from the model, Tvarsel from the result. Tvar[1]=5 == Tvarsel[2]=5   */
           modelresult[k2]=k1;/* modelresult[2]=1 modelresult[1]=2  modelresult[3]=3  modelresult[6]=4 modelresult[9]=5 */            modelresult[nres][k2]=k1;/* modelresult[2]=1 modelresult[1]=2  modelresult[3]=3  modelresult[6]=4 modelresult[9]=5 */
           match=1; /* modelresult of k2 variable of resultline is identical to k1 variable of the model good */            match=1; /* modelresult of k2 variable of resultline is identical to k1 variable of the model good */
           break;            break;
         }          }
Line 10311  int decoderesult( char resultline[], int Line 10387  int decoderesult( char resultline[], int
       match=0;        match=0;
       for(k2=1; k2 <=j;k2++){/* Loop on resultline.  jth occurence of = signs in the result line. In result line V4=1 V5=24.1 V3=1  V2=8 V1=0 */        for(k2=1; k2 <=j;k2++){/* Loop on resultline.  jth occurence of = signs in the result line. In result line V4=1 V5=24.1 V3=1  V2=8 V1=0 */
         if(Tvar[k1]==Tvarsel[k2]) {/* Tvar is coming from the model, Tvarsel from the result. Tvar[1]=5 == Tvarsel[2]=5   */          if(Tvar[k1]==Tvarsel[k2]) {/* Tvar is coming from the model, Tvarsel from the result. Tvar[1]=5 == Tvarsel[2]=5   */
           modelresult[k2]=k1;/* we found a Vn=1 corrresponding to Vn*age in the model modelresult[2]=1 modelresult[1]=2  modelresult[3]=3  modelresult[6]=4 modelresult[9]=5 */            modelresult[nres][k2]=k1;/* we found a Vn=1 corrresponding to Vn*age in the model modelresult[2]=1 modelresult[1]=2  modelresult[3]=3  modelresult[6]=4 modelresult[9]=5 */
           resultmodel[nres][k1]=k2; /* Added here */            resultmodel[nres][k1]=k2; /* Added here */
           printf("Decoderesult first modelresult[k2=%d]=%d (k1) V%d*AGE\n",k2,k1,Tvar[k1]);            printf("Decoderesult first modelresult[k2=%d]=%d (k1) V%d*AGE\n",k2,k1,Tvar[k1]);
           match=1; /* modelresult of k2 variable of resultline is identical to k1 variable of the model good */            match=1; /* modelresult of k2 variable of resultline is identical to k1 variable of the model good */
Line 10320  int decoderesult( char resultline[], int Line 10396  int decoderesult( char resultline[], int
       }        }
       if(match == 0){        if(match == 0){
         printf("Error in result line (Product with age): V%d is missing in result: %s according to model=%s (Tvarsel[k2=%d]=%d)\n",Tvar[k1], resultline, model, k2, Tvarsel[k2]);          printf("Error in result line (Product with age): V%d is missing in result: %s according to model=%s (Tvarsel[k2=%d]=%d)\n",Tvar[k1], resultline, model, k2, Tvarsel[k2]);
         fprintf(ficlog,"Error in result line (Product with age): V%d is missing in result: %s according to model=%s\n",Tvar[k1], resultline, model, k2, Tvarsel[k2]);          fprintf(ficlog,"Error in result line (Product with age): V%d is missing in result: %s according to model=%s (Tvarsel[k2=%d]=%d)\n",Tvar[k1], resultline, model, k2, Tvarsel[k2]);
       return 1;        return 1;
       }        }
     }else if(Typevar[k1]==2){ /* Product No age We want to get the position in the resultline of the product in the model line*/      }else if(Typevar[k1]==2){ /* Product No age We want to get the position in the resultline of the product in the model line*/
Line 10336  int decoderesult( char resultline[], int Line 10412  int decoderesult( char resultline[], int
       }        }
       if(match == 0){        if(match == 0){
         printf("Error in result line (Product without age first variable): V%d is missing in result: %s according to model=%s\n",Tvardk[k1][1], resultline, model);          printf("Error in result line (Product without age first variable): V%d is missing in result: %s according to model=%s\n",Tvardk[k1][1], resultline, model);
         fprintf(ficlog,"Error in result line (Product without age first variable): V%d is missing in result: %s according to model=%s\n",k1,Tvardk[k1][1], resultline, model);          fprintf(ficlog,"Error in result line (Product without age first variable): V%d is missing in result: %s according to model=%s\n",Tvardk[k1][1], resultline, model);
         return 1;          return 1;
       }        }
       match=0;        match=0;
Line 10350  int decoderesult( char resultline[], int Line 10426  int decoderesult( char resultline[], int
       }        }
       if(match == 0){        if(match == 0){
         printf("Error in result line (Product without age second variable): V%d is missing in result: %s according to model=%s\n",Tvardk[k1][2], resultline, model);          printf("Error in result line (Product without age second variable): V%d is missing in result: %s according to model=%s\n",Tvardk[k1][2], resultline, model);
         fprintf(ficlog,"Error in result line (Product without age second variable): V%d is missing in result : %s according to model=%s\n",k1,Tvardk[k1][2], resultline, model);          fprintf(ficlog,"Error in result line (Product without age second variable): V%d is missing in result : %s according to model=%s\n",Tvardk[k1][2], resultline, model);
         return 1;          return 1;
       }        }
     }/* End of testing */      }/* End of testing */
   }/* End loop cptcovt    }/* End loop cptcovt */
   /* Checking for missing or useless values in comparison of current model needs */    /* Checking for missing or useless values in comparison of current model needs */
   /* Feeds resultmodel[nres][k1]=k2 for single covariate (k1) in the model equation */    /* Feeds resultmodel[nres][k1]=k2 for single covariate (k1) in the model equation */
   for(k2=1; k2 <=j;k2++){ /* Loop on resultline variables: result line V4=1 V5=24.1 V3=1  V2=8 V1=0 */    for(k2=1; k2 <=j;k2++){ /* j or cptcovs is the number of single covariates used either in the model line as well as in the result line (dummy or quantitative)
                              * Loop on resultline variables: result line V4=1 V5=24.1 V3=1  V2=8 V1=0 */
     match=0;      match=0;
     for(k1=1; k1<= cptcovt ;k1++){ /* loop on model: model line V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1 */      for(k1=1; k1<= cptcovt ;k1++){ /* loop on model: model line V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1 */
       if(Typevar[k1]==0){ /* Single only */        if(Typevar[k1]==0){ /* Single only */
         if(Tvar[k1]==Tvarsel[k2]) { /* Tvar[2]=4 == Tvarsel[1]=4   */          if(Tvar[k1]==Tvarsel[k2]) { /* Tvar[2]=4 == Tvarsel[1]=4   */
           resultmodel[nres][k1]=k2;  /* k1th position in the model equation corresponds to k2th position in the result line. resultmodel[2]=1 resultmodel[1]=2  resultmodel[3]=3  resultmodel[6]=4 resultmodel[9]=5 */            resultmodel[nres][k1]=k2;  /* k1th position in the model equation corresponds to k2th position in the result line. resultmodel[2]=1 resultmodel[1]=2  resultmodel[3]=3  resultmodel[6]=4 resultmodel[9]=5 */
             modelresult[nres][k2]=k1; /* k1th position in the model equation corresponds to k2th position in the result line. modelresult[1]=2 modelresult[2]=1  modelresult[3]=3  remodelresult[4]=6 modelresult[5]=9 */
           ++match;            ++match;
         }          }
       }        }
Line 10377  int decoderesult( char resultline[], int Line 10455  int decoderesult( char resultline[], int
       return 1;        return 1;
     }      }
   }    }
           /* cptcovres=j /\* Number of variables in the resultline is equal to cptcovs and thus useless *\/     */
   /* We need to deduce which combination number is chosen and save quantitative values */    /* We need to deduce which combination number is chosen and save quantitative values */
   /* model line V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1 */    /* model line V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1 */
   /* nres=1st result line: V4=1 V5=25.1 V3=0  V2=8 V1=1 */    /* nres=1st result line: V4=1 V5=25.1 V3=0  V2=8 V1=1 */
Line 10396  int decoderesult( char resultline[], int Line 10474  int decoderesult( char resultline[], int
   /* V(Tvqresult)=Tqresult V5=25.1 V2=8 Tqresult[nres=1][1]=25.1 */    /* V(Tvqresult)=Tqresult V5=25.1 V2=8 Tqresult[nres=1][1]=25.1 */
   /* V5*age V5 known which value for nres?  */    /* V5*age V5 known which value for nres?  */
   /* Tqinvresult[2]=8 Tqinvresult[1]=25.1  */    /* Tqinvresult[2]=8 Tqinvresult[1]=25.1  */
   for(k1=1, k=0, k4=0, k4q=0; k1 <=cptcovt;k1++){ /* loop k1 on position in the model line (excluding product) */    for(k1=1, k=0, k4=0, k4q=0; k1 <=cptcovt;k1++){ /* cptcovt number of covariates (excluding 1 and age or age*age) in the MODEL equation.
                                                      * loop on position k1 in the MODEL LINE */
     /* k counting number of combination of single dummies in the equation model */      /* k counting number of combination of single dummies in the equation model */
     /* k4 counting single dummies in the equation model */      /* k4 counting single dummies in the equation model */
     /* k4q counting single quantitatives in the equation model */      /* k4q counting single quantitatives in the equation model */
     if( Dummy[k1]==0 && Typevar[k1]==0 ){ /* Dummy and Single */      if( Dummy[k1]==0 && Typevar[k1]==0 ){ /* Dummy and Single, k1 is sorting according to MODEL, but k3 to resultline */
        /* k4+1= position in the resultline V(Tvarsel)=Tvalsel=Tresult[nres][pos](value); V(Tvresult[nres][pos] (variable): V(variable)=value) */         /* k4+1= (not always if quant in model) position in the resultline V(Tvarsel)=Tvalsel=Tresult[nres][pos](value); V(Tvresult[nres][pos] (variable): V(variable)=value) */
       /* modelresult[k3]=k1: k3th position in the result line corresponds to the k1 position in the model line (doesn't work with products)*/        /* modelresult[k3]=k1: k3th position in the result line corresponds to the k1 position in the model line (doesn't work with products)*/
       /* Value in the (current nres) resultline of the variable at the k1th position in the model equation resultmodel[nres][k1]= k3 */        /* Value in the (current nres) resultline of the variable at the k1th position in the model equation resultmodel[nres][k1]= k3 */
       /* resultmodel[nres][k1]=k3: k1th position in the model correspond to the k3 position in the resultline                        */        /* resultmodel[nres][k1]=k3: k1th position in the model correspond to the k3 position in the resultline                        */
Line 10409  int decoderesult( char resultline[], int Line 10488  int decoderesult( char resultline[], int
       /* Tvarsel[k3]: Name of the variable at the k3th position in the result line.                                                  */        /* Tvarsel[k3]: Name of the variable at the k3th position in the result line.                                                  */
       /* Tvalsel[k3]: Value of the variable at the k3th position in the result line.                                                 */        /* Tvalsel[k3]: Value of the variable at the k3th position in the result line.                                                 */
       /* Tresult[nres][result_position]= value of the dummy variable at the result_position in the nres resultline                   */        /* Tresult[nres][result_position]= value of the dummy variable at the result_position in the nres resultline                   */
       /* Tvresult[nres][result_position]= id of the dummy variable at the result_position in the nres resultline                     */        /* Tvresult[nres][result_position]= name of the dummy variable at the result_position in the nres resultline                     */
       /* Tinvresult[nres][Name of a dummy variable]= value of the variable in the result line                                        */        /* Tinvresult[nres][Name of a dummy variable]= value of the variable in the result line                                        */
       /* TinvDoQresult[nres][Name of a Dummy or Q variable]= value of the variable in the result line                                                      */        /* TinvDoQresult[nres][Name of a Dummy or Q variable]= value of the variable in the result line                                                      */
       k3= resultmodel[nres][k1]; /* From position k1 in model get position k3 in result line */        k3= resultmodel[nres][k1]; /* From position k1 in model get position k3 in result line */
       /* nres=1 k1=2 resultmodel[2(V4)] = 1=k3 ; k1=3 resultmodel[3(V3)] = 2=k3*/        /* nres=1 k1=2 resultmodel[2(V4)] = 1=k3 ; k1=3 resultmodel[3(V3)] = 2=k3*/
       k2=(int)Tvarsel[k3]; /* from position k3 in resultline get name k2: nres=1 k1=2=>k3=1 Tvarsel[resultmodel[2]]= Tvarsel[1] = 4=k2 (V4); k1=3=>k3=2 Tvarsel[2]=3 (V3)*/        k2=(int)Tvarsel[k3]; /* from position k3 in resultline get name k2: nres=1 k1=2=>k3=1 Tvarsel[resultmodel[2]]= Tvarsel[1] = 4=k2 (V4); k1=3=>k3=2 Tvarsel[2]=3 (V3)*/
       k+=Tvalsel[k3]*pow(2,k4);  /* nres=1 k1=2 Tvalsel[1]=1 (V4=1); k1=3 k3=2 Tvalsel[2]=0 (V3=0) */        k+=Tvalsel[k3]*pow(2,k4);  /* nres=1 k1=2 Tvalsel[1]=1 (V4=1); k1=3 k3=2 Tvalsel[2]=0 (V3=0) */
       TinvDoQresult[nres][(int)Tvarsel[k3]]=Tvalsel[k3]; /* Stores the value into the name of the variable. */        TinvDoQresult[nres][(int)Tvarsel[k3]]=Tvalsel[k3]; /* TinvDoQresult[nres][Name]=Value; stores the value into the name of the variable. */
       /* Tinvresult[nres][4]=1 */        /* Tinvresult[nres][4]=1 */
       Tresult[nres][k4+1]=Tvalsel[k3];/* Tresult[nres=2][1]=1(V4=1)  Tresult[nres=2][2]=0(V3=0) */        /* Tresult[nres][k4+1]=Tvalsel[k3];/\* Tresult[nres=2][1]=1(V4=1)  Tresult[nres=2][2]=0(V3=0) *\/ */
       Tvresult[nres][k4+1]=(int)Tvarsel[k3];/* Tvresult[nres][1]=4 Tvresult[nres][3]=1 */        Tresult[nres][k3]=Tvalsel[k3];/* Tresult[nres=2][1]=1(V4=1)  Tresult[nres=2][2]=0(V3=0) */
         /* Tvresult[nres][k4+1]=(int)Tvarsel[k3];/\* Tvresult[nres][1]=4 Tvresult[nres][3]=1 *\/ */
         Tvresult[nres][k3]=(int)Tvarsel[k3];/* Tvresult[nres][1]=4 Tvresult[nres][3]=1 */
       Tinvresult[nres][(int)Tvarsel[k3]]=Tvalsel[k3]; /* Tinvresult[nres][4]=1 */        Tinvresult[nres][(int)Tvarsel[k3]]=Tvalsel[k3]; /* Tinvresult[nres][4]=1 */
       precov[nres][k1]=Tvalsel[k3];        precov[nres][k1]=Tvalsel[k3]; /* Value from resultline of the variable at the k1 position in the model */
       printf("Decoderesult Dummy k=%d, k1=%d precov[nres=%d][k1=%d]=%.f V(k2=V%d)= Tvalsel[%d]=%d, 2**(%d)\n",k, k1, nres, k1,precov[nres][k1], k2, k3, (int)Tvalsel[k3], k4);        printf("Decoderesult Dummy k=%d, k1=%d precov[nres=%d][k1=%d]=%.f V(k2=V%d)= Tvalsel[%d]=%d, 2**(%d)\n",k, k1, nres, k1,precov[nres][k1], k2, k3, (int)Tvalsel[k3], k4);
       k4++;;        k4++;;
     }else if( Dummy[k1]==1 && Typevar[k1]==0 ){ /* Quantitative and single */      }else if( Dummy[k1]==1 && Typevar[k1]==0 ){ /* Quantitative and single */
Line 10431  int decoderesult( char resultline[], int Line 10512  int decoderesult( char resultline[], int
       k3q= resultmodel[nres][k1]; /* resultmodel[1(V5)] = 5 =k3q */        k3q= resultmodel[nres][k1]; /* resultmodel[1(V5)] = 5 =k3q */
       k2q=(int)Tvarsel[k3q]; /*  Name of variable at k3q th position in the resultline */        k2q=(int)Tvarsel[k3q]; /*  Name of variable at k3q th position in the resultline */
       /* Tvarsel[resultmodel[1]]= Tvarsel[1] = 4=k2 */        /* Tvarsel[resultmodel[1]]= Tvarsel[1] = 4=k2 */
       Tqresult[nres][k4q+1]=Tvalsel[k3q]; /* Tqresult[nres][1]=25.1 */        /* Tqresult[nres][k4q+1]=Tvalsel[k3q]; /\* Tqresult[nres][1]=25.1 *\/ */
       Tvqresult[nres][k4q+1]=(int)Tvarsel[k3q]; /* Tvqresult[nres][1]=5 */        /* Tvresult[nres][k4q+1]=(int)Tvarsel[k3q];/\* Tvresult[nres][1]=4 Tvresult[nres][3]=1 *\/ */
         /* Tvqresult[nres][k4q+1]=(int)Tvarsel[k3q]; /\* Tvqresult[nres][1]=5 *\/ */
         Tqresult[nres][k3q]=Tvalsel[k3q]; /* Tqresult[nres][1]=25.1 */
         Tvresult[nres][k3q]=(int)Tvarsel[k3q];/* Tvresult[nres][1]=4 Tvresult[nres][3]=1 */
         Tvqresult[nres][k3q]=(int)Tvarsel[k3q]; /* Tvqresult[nres][1]=5 */
       Tqinvresult[nres][(int)Tvarsel[k3q]]=Tvalsel[k3q]; /* Tqinvresult[nres][5]=25.1 */        Tqinvresult[nres][(int)Tvarsel[k3q]]=Tvalsel[k3q]; /* Tqinvresult[nres][5]=25.1 */
       TinvDoQresult[nres][(int)Tvarsel[k3q]]=Tvalsel[k3q]; /* Tqinvresult[nres][5]=25.1 */        TinvDoQresult[nres][(int)Tvarsel[k3q]]=Tvalsel[k3q]; /* Tqinvresult[nres][5]=25.1 */
       precov[nres][k1]=Tvalsel[k3q];        precov[nres][k1]=Tvalsel[k3q];
Line 10444  int decoderesult( char resultline[], int Line 10529  int decoderesult( char resultline[], int
               
       k3= resultmodel[nres][k1]; /* nres=1 k1=2 resultmodel[2(V4)] = 1=k3 ; k1=3 resultmodel[3(V3)] = 2=k3*/        k3= resultmodel[nres][k1]; /* nres=1 k1=2 resultmodel[2(V4)] = 1=k3 ; k1=3 resultmodel[3(V3)] = 2=k3*/
       k2=(int)Tvarsel[k3]; /* nres=1 k1=2=>k3=1 Tvarsel[resultmodel[2]]= Tvarsel[1] = 4=k2 (V4); k1=3=>k3=2 Tvarsel[2]=3 (V3)*/        k2=(int)Tvarsel[k3]; /* nres=1 k1=2=>k3=1 Tvarsel[resultmodel[2]]= Tvarsel[1] = 4=k2 (V4); k1=3=>k3=2 Tvarsel[2]=3 (V3)*/
       TinvDoQresult[nres][(int)Tvarsel[k3]]=Tvalsel[k3]; /* Tinvresult[nres][4]=1 */        TinvDoQresult[nres][(int)Tvarsel[k3]]=Tvalsel[k3]; /* TinvDoQresult[nres][4]=1 */
       precov[nres][k1]=Tvalsel[k3];        precov[nres][k1]=Tvalsel[k3];
       printf("Decoderesult Dummy with age k=%d, k1=%d precov[nres=%d][k1=%d]=%.f Tvar[%d]=V%d k2=Tvarsel[%d]=%d Tvalsel[%d]=%d\n",k, k1, nres, k1,precov[nres][k1], k1, Tvar[k1], k3,(int)Tvarsel[k3], k3, (int)Tvalsel[k3]);        printf("Decoderesult Dummy with age k=%d, k1=%d precov[nres=%d][k1=%d]=%.f Tvar[%d]=V%d k2=Tvarsel[%d]=%d Tvalsel[%d]=%d\n",k, k1, nres, k1,precov[nres][k1], k1, Tvar[k1], k3,(int)Tvarsel[k3], k3, (int)Tvalsel[k3]);
     }else if( Dummy[k1]==3 ){ /* For quant with age product */      }else if( Dummy[k1]==3 ){ /* For quant with age product */
       k3q= resultmodel[nres][k1]; /* resultmodel[1(V5)] = 25.1=k3q */        k3q= resultmodel[nres][k1]; /* resultmodel[1(V5)] = 25.1=k3q */
       k2q=(int)Tvarsel[k3q]; /*  Tvarsel[resultmodel[1]]= Tvarsel[1] = 4=k2 */        k2q=(int)Tvarsel[k3q]; /*  Tvarsel[resultmodel[1]]= Tvarsel[1] = 4=k2 */
       TinvDoQresult[nres][(int)Tvarsel[k3q]]=Tvalsel[k3q]; /* Tqinvresult[nres][5]=25.1 */        TinvDoQresult[nres][(int)Tvarsel[k3q]]=Tvalsel[k3q]; /* TinvDoQresult[nres][5]=25.1 */
       precov[nres][k1]=Tvalsel[k3q];        precov[nres][k1]=Tvalsel[k3q];
       printf("Decoderesult Quantitative with age nres=%d, k1=%d, precov[nres=%d][k1=%d]=%.f Tvar[%d]=V%d V(k2q=%d)= Tvarsel[%d]=%d, Tvalsel[%d]=%f\n",nres, k1, nres, k1,precov[nres][k1], k1,  Tvar[k1], k2q, k3q, Tvarsel[k3q], k3q, Tvalsel[k3q]);        printf("Decoderesult Quantitative with age nres=%d, k1=%d, precov[nres=%d][k1=%d]=%f Tvar[%d]=V%d V(k2q=%d)= Tvarsel[%d]=%d, Tvalsel[%d]=%f\n",nres, k1, nres, k1,precov[nres][k1], k1,  Tvar[k1], k2q, k3q, Tvarsel[k3q], k3q, Tvalsel[k3q]);
     }else if(Typevar[k1]==2 ){ /* For product quant or dummy (not with age) */      }else if(Typevar[k1]==2 ){ /* For product quant or dummy (not with age) */
       precov[nres][k1]=TinvDoQresult[nres][Tvardk[k1][1]] * TinvDoQresult[nres][Tvardk[k1][2]];              precov[nres][k1]=TinvDoQresult[nres][Tvardk[k1][1]] * TinvDoQresult[nres][Tvardk[k1][2]];      
       printf("Decoderesult Quantitative or Dummy (not with age) nres=%d k1=%d precov[nres=%d][k1=%d]=%.f V%d(=%.f) * V%d(=%.f) \n",nres, k1, nres, k1,precov[nres][k1], Tvardk[k1][1], TinvDoQresult[nres][Tvardk[k1][1]], Tvardk[k1][2], TinvDoQresult[nres][Tvardk[k1][2]]);        printf("Decoderesult Quantitative or Dummy (not with age) nres=%d k1=%d precov[nres=%d][k1=%d]=%.f V%d(=%.f) * V%d(=%.f) \n",nres, k1, nres, k1,precov[nres][k1], Tvardk[k1][1], TinvDoQresult[nres][Tvardk[k1][1]], Tvardk[k1][2], TinvDoQresult[nres][Tvardk[k1][2]]);
Line 10462  int decoderesult( char resultline[], int Line 10547  int decoderesult( char resultline[], int
     }      }
   }    }
       
   TKresult[nres]=++k; /* Combination for the nresult and the model */    TKresult[nres]=++k; /* Number of combinations of dummies for the nresult and the model =Tvalsel[k3]*pow(2,k4) + 1*/
   return (0);    return (0);
 }  }
   
Line 10727  Dummy[k] 0=dummy (0 1), 1 quantitative ( Line 10812  Dummy[k] 0=dummy (0 1), 1 quantitative (
       modell[k].maintype= FTYPE;        modell[k].maintype= FTYPE;
       modell[k].subtype= FQ;        modell[k].subtype= FQ;
       nsq++;        nsq++;
       TvarsQ[nsq]=Tvar[k];        TvarsQ[nsq]=Tvar[k]; /* Gives the variable name (extended to products) of first nsq simple quantitative covariates (fixed or time vary see below */
       TvarsQind[nsq]=k;        TvarsQind[nsq]=k;    /* Gives the position in the model equation of the first nsq simple quantitative covariates (fixed or time vary) */
       ncovf++;        ncovf++;
       TvarF[ncovf]=Tvar[k];        TvarF[ncovf]=Tvar[k];
       TvarFind[ncovf]=k;        TvarFind[ncovf]=k;
Line 10759  Dummy[k] 0=dummy (0 1), 1 quantitative ( Line 10844  Dummy[k] 0=dummy (0 1), 1 quantitative (
       modell[k].subtype= VQ;        modell[k].subtype= VQ;
       ncovv++; /* Only simple time varying variables */        ncovv++; /* Only simple time varying variables */
       nsq++;        nsq++;
       TvarsQ[nsq]=Tvar[k]; /* k=1 Tvar=5 nsq=1 TvarsQ[1]=5 */        TvarsQ[nsq]=Tvar[k]; /* k=1 Tvar=5 nsq=1 TvarsQ[1]=5 */ /* Gives the variable name (extended to products) of first nsq simple quantitative covariates (fixed or time vary here) */
       TvarsQind[nsq]=k; /* For single quantitative covariate gives the model position of each single quantitative covariate */        TvarsQind[nsq]=k; /* For single quantitative covariate gives the model position of each single quantitative covariate *//* Gives the position in the model equation of the first nsq simple quantitative covariates (fixed or time vary) */
       TvarV[ncovv]=Tvar[k];        TvarV[ncovv]=Tvar[k];
       TvarVind[ncovv]=k; /* TvarVind[1]=1 in V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1 */ /* Any time varying singele */        TvarVind[ncovv]=k; /* TvarVind[1]=1 in V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1 */ /* Any time varying singele */
       TvarVQ[nqtveff]=Tvar[k]; /* TvarVQ[1]=V5 in V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1 */ /* Only simple time varying quantitative variable */        TvarVQ[nqtveff]=Tvar[k]; /* TvarVQ[1]=V5 in V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1 */ /* Only simple time varying quantitative variable */
Line 11703  int main(int argc, char *argv[]) Line 11788  int main(int argc, char *argv[])
       
   char pathr[MAXLINE], pathimach[MAXLINE];     char pathr[MAXLINE], pathimach[MAXLINE]; 
   char *tok, *val; /* pathtot */    char *tok, *val; /* pathtot */
   int firstobs=1, lastobs=10; /* nobs = lastobs-firstobs declared globally ;*/    /* int firstobs=1, lastobs=10; /\* nobs = lastobs-firstobs declared globally ;*\/ */
   int c,  h , cpt, c2;    int c,  h , cpt, c2;
   int jl=0;    int jl=0;
   int i1, j1, jk, stepsize=0;    int i1, j1, jk, stepsize=0;
Line 13612  Please run with mle=-1 to get a correct Line 13697  Please run with mle=-1 to get a correct
         printf("V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,TnsdVar[Tvaraff[j]])]);          printf("V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,TnsdVar[Tvaraff[j]])]);
       }        }
       for (j=1; j<= nsq; j++){ /* For each selected (single) quantitative value */        for (j=1; j<= nsq; j++){ /* For each selected (single) quantitative value */
         printf(" V%d=%f ",Tvqresult[nres][j],Tqresult[nres][resultmodel[nres][j]]);          printf(" V%d=%f ",TvarsQ[j], TinvDoQresult[nres][TvarsQ[j]]); /* TvarsQ[j] gives the name of the jth quantitative (fixed or time v) */
         fprintf(ficreseij," V%d=%f ",Tvqresult[nres][j],Tqresult[nres][resultmodel[nres][j]]);          fprintf(ficreseij,"V%d=%f ",TvarsQ[j], TinvDoQresult[nres][TvarsQ[j]]);
       }        }
       fprintf(ficreseij,"******\n");        fprintf(ficreseij,"******\n");
       printf("******\n");        printf("******\n");
Line 13670  Please run with mle=-1 to get a correct Line 13755  Please run with mle=-1 to get a correct
     i1=pow(2,cptcoveff); /* Number of combination of dummy covariates */      i1=pow(2,cptcoveff); /* Number of combination of dummy covariates */
     if (cptcovn < 1){i1=1;}      if (cptcovn < 1){i1=1;}
           
     for(nres=1; nres <= nresult; nres++) /* For each resultline */      for(nres=1; nres <= nresult; nres++) /* For each resultline, find the combination and output results according to the values of dummies and then quanti.  */
     for(k=1; k<=i1;k++){ /* For any combination of dummy covariates, fixed and varying */      for(k=1; k<=i1;k++){ /* For any combination of dummy covariates, fixed and varying. For each nres and each value at position k
       if(i1 != 1 && TKresult[nres]!= k)                            * we know Tresult[nres][result_position]= value of the dummy variable at the result_position in the nres resultline
                             * Tvqresult[nres][result_position]= id of the variable at the result_position in the nres resultline 
                             * and Tqresult[nres][result_position]= value of the variable at the result_position in the nres resultline */
         /* */
         if(i1 != 1 && TKresult[nres]!= k) /* TKresult[nres] is the combination of this nres resultline. All the i1 combinations are not output */
         continue;          continue;
       printf("\n# model %s \n#****** Result for:", model);        printf("\n# model %s \n#****** Result for:", model);
       fprintf(ficrest,"\n# model %s \n#****** Result for:", model);        fprintf(ficrest,"\n# model %s \n#****** Result for:", model);
       fprintf(ficlog,"\n# model %s \n#****** Result for:", model);        fprintf(ficlog,"\n# model %s \n#****** Result for:", model);
       for(j=1;j<=cptcoveff;j++){         /* It might not be a good idea to mix dummies and quantitative */
         printf("V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,TnsdVar[Tvaraff[j]])]);        /* for(j=1;j<=cptcoveff;j++){ /\* j=resultpos. Could be a loop on cptcovs: number of single dummy covariate in the result line as well as in the model *\/ */
         fprintf(ficrest,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,TnsdVar[Tvaraff[j]])]);        for(j=1;j<=cptcovs;j++){ /* j=resultpos. Could be a loop on cptcovs: number of single covariate (dummy or quantitative) in the result line as well as in the model */
         fprintf(ficlog,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,TnsdVar[Tvaraff[j]])]);          /* printf("V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,TnsdVar[Tvaraff[j]])]); /\* Output by variables in the resultline *\/ */
           /* Tvaraff[j] is the name of the dummy variable in position j in the equation model:
            * Tvaraff[1]@9={4, 3, 0, 0, 0, 0, 0, 0, 0}, in model=V5+V4+V3+V4*V3+V5*age
            * (V5 is quanti) V4 and V3 are dummies
            * TnsdVar[4] is the position 1 and TnsdVar[3]=2 in codtabm(k,l)(V4  V3)=V4  V3
            *                                                              l=1 l=2
            *                                                           k=1  1   1   0   0
            *                                                           k=2  2   1   1   0
            *                                                           k=3 [1] [2]  0   1
            *                                                           k=4  2   2   1   1
            * If nres=1 result: V3=1 V4=0 then k=3 and outputs
            * If nres=2 result: V4=1 V3=0 then k=2 and outputs
            * nres=1 =>k=3 j=1 V4= nbcode[4][codtabm(3,1)=1)=0; j=2  V3= nbcode[3][codtabm(3,2)=2]=1
            * nres=2 =>k=2 j=1 V4= nbcode[4][codtabm(2,1)=2)=1; j=2  V3= nbcode[3][codtabm(2,2)=1]=0
            */
           /* Tvresult[nres][j] Name of the variable at position j in this resultline */
           /* Tresult[nres][j] Value of this variable at position j could be a float if quantitative  */
   /* We give up with the combinations!! */
           printf("\n j=%d In computing T_ Dummy[modelresult[%d][%d]]=%d, modelresult[%d][%d]=%d cptcovs=%d, cptcoveff=%d Fixed[modelresult[nres][j]]=%d\n", j, nres, j, Dummy[modelresult[nres][j]],nres,j,modelresult[nres][j],cptcovs, cptcoveff,Fixed[modelresult[nres][j]]);  /* end if dummy  or quanti */
   
           if(Dummy[modelresult[nres][j]]==0){/* Dummy variable of the variable in position modelresult in the model corresponding to j in resultline  */
             printf("V%d=%d ",Tvresult[nres][j],Tresult[nres][j]); /* Output of each value for the combination TKresult[nres], ordere by the covariate values in the resultline  */
             fprintf(ficlog,"V%d=%d ",Tvresult[nres][j],Tresult[nres][j]); /* Output of each value for the combination TKresult[nres], ordere by the covariate values in the resultline  */
             fprintf(ficrest,"V%d=%d ",Tvresult[nres][j],Tresult[nres][j]); /* Output of each value for the combination TKresult[nres], ordere by the covariate values in the resultline  */
             if(Fixed[modelresult[nres][j]]==0){ /* Fixed */
               printf("fixed ");fprintf(ficlog,"fixed ");fprintf(ficrest,"fixed ");
             }else{
               printf("varyi ");fprintf(ficlog,"varyi ");fprintf(ficrest,"varyi ");
             }
             /* fprintf(ficrest,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,TnsdVar[Tvaraff[j]])]); */
             /* fprintf(ficlog,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,TnsdVar[Tvaraff[j]])]); */
           }else if(Dummy[modelresult[nres][j]]==1){ /* Quanti variable */
             /* For each selected (single) quantitative value */
             printf(" V%d=%f ",Tvqresult[nres][j],Tqresult[nres][j]);
             if(Fixed[modelresult[nres][j]]==0){ /* Fixed */
               printf("fixed ");fprintf(ficlog,"fixed ");fprintf(ficrest,"fixed ");
             }else{
               printf("varyi ");fprintf(ficlog,"varyi ");fprintf(ficrest,"varyi ");
             }
           }else{
             printf("Error in computing T_ Dummy[modelresult[%d][%d]]=%d, modelresult[%d][%d]=%d cptcovs=%d, cptcoveff=%d \n", nres, j, Dummy[modelresult[nres][j]],nres,j,modelresult[nres][j],cptcovs, cptcoveff);  /* end if dummy  or quanti */
             fprintf(ficlog,"Error in computing T_ Dummy[modelresult[%d][%d]]=%d, modelresult[%d][%d]=%d cptcovs=%d, cptcoveff=%d \n", nres, j, Dummy[modelresult[nres][j]],nres,j,modelresult[nres][j],cptcovs, cptcoveff);  /* end if dummy  or quanti */
             exit(1);
           }
       }        }
       for (j=1; j<= nsq; j++){ /* For each selected (single) quantitative value */        /* for (j=1; j<= nsq; j++){ /\* For each selected (single) quantitative value *\/ */
         printf(" V%d=%f ",Tvqresult[nres][j],Tqresult[nres][resultmodel[nres][j]]);        /*        printf(" V%d=%f ",Tvqresult[nres][j],Tqresult[nres][resultmodel[nres][j]]); /\* Wrong j is not in the equation model *\/ */
         fprintf(ficrest," V%d=%f ",Tvqresult[nres][j],Tqresult[nres][resultmodel[nres][j]]);        /*        fprintf(ficrest," V%d=%f ",Tvqresult[nres][j],Tqresult[nres][resultmodel[nres][j]]); */
         fprintf(ficlog," V%d=%f ",Tvqresult[nres][j],Tqresult[nres][resultmodel[nres][j]]);        /*        fprintf(ficlog," V%d=%f ",Tvqresult[nres][j],Tqresult[nres][resultmodel[nres][j]]); */
       }         /* }       */
       fprintf(ficrest,"******\n");        fprintf(ficrest,"******\n");
       fprintf(ficlog,"******\n");        fprintf(ficlog,"******\n");
       printf("******\n");        printf("******\n");
Line 13694  Please run with mle=-1 to get a correct Line 13826  Please run with mle=-1 to get a correct
       fprintf(ficresstdeij,"\n#****** ");        fprintf(ficresstdeij,"\n#****** ");
       fprintf(ficrescveij,"\n#****** ");        fprintf(ficrescveij,"\n#****** ");
       for(j=1;j<=cptcoveff;j++) {        for(j=1;j<=cptcoveff;j++) {
         fprintf(ficresstdeij,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,TnsdVar[Tvaraff[j]])]);          fprintf(ficresstdeij,"V%d=%d ",Tvresult[nres][j],Tresult[nres][j]);
         fprintf(ficrescveij,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,TnsdVar[Tvaraff[j]])]);          /* fprintf(ficresstdeij,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,TnsdVar[Tvaraff[j]])]); */
       }          /* fprintf(ficrescveij,"V%d=%d ",Tvaraff[j],nbcode[Tvaraff[j]][codtabm(k,TnsdVar[Tvaraff[j]])]); */
       for (j=1; j<= nsq; j++){ /* For each selected (single) quantitative value */        }
         fprintf(ficresstdeij," V%d=%f ",Tvqresult[nres][j],Tqresult[nres][resultmodel[nres][j]]);        for (j=1; j<= nsq; j++){ /* For each selected (single) quantitative value, TvarsQind gives the position of a quantitative in model equation  */
         fprintf(ficrescveij," V%d=%f ",Tvqresult[nres][j],Tqresult[nres][resultmodel[nres][j]]);          fprintf(ficresstdeij," V%d=%f ",Tvar[TvarsQind[j]],Tqresult[nres][resultmodel[nres][TvarsQind[j]]]);
           fprintf(ficrescveij," V%d=%f ",Tvar[TvarsQind[j]],Tqresult[nres][resultmodel[nres][TvarsQind[j]]]);
       }         } 
       fprintf(ficresstdeij,"******\n");        fprintf(ficresstdeij,"******\n");
       fprintf(ficrescveij,"******\n");        fprintf(ficrescveij,"******\n");

Removed from v.1.332  
changed lines
  Added in v.1.334


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