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

version 1.333, 2022/08/21 09:10:30 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    Revision 1.333  2022/08/21 09:10:30  brouard
   * src/imach.c (Module): Version 0.99r33 A lot of changes in    * src/imach.c (Module): Version 0.99r33 A lot of changes in
   reassigning covariates: my first idea was that people will always    reassigning covariates: my first idea was that people will always
Line 1296  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 1307  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 1524  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 4975  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 5090  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 6018  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 6464  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 7099  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 7107  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 7137  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 10265  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 10274  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 10309  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 10330  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 10376  int decoderesult( char resultline[], int Line 10433  int decoderesult( char resultline[], int
   }/* 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 10396  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 10415  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 10428  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 10450  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 10463  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 10481  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 10746  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 10778  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 11722  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 13631  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 13689  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 13713  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.333  
changed lines
  Added in v.1.334


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