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

version 1.230, 2016/08/22 06:55:53 version 1.231, 2016/08/22 07:17:15
Line 1 Line 1
 /* $Id$  /* $Id$
   $State$    $State$
   $Log$    $Log$
     Revision 1.231  2016/08/22 07:17:15  brouard
     Summary: not working
   
   Revision 1.230  2016/08/22 06:55:53  brouard    Revision 1.230  2016/08/22 06:55:53  brouard
   Summary: Not working    Summary: Not working
   
Line 1064  double ***cotvar; /* Time varying covari Line 1067  double ***cotvar; /* Time varying covari
 double ***cotqvar; /* Time varying quantitative covariate itqv */  double ***cotqvar; /* Time varying quantitative covariate itqv */
 double  idx;   double  idx; 
 int **nbcode, *Tvar; /**< model=V2 => Tvar[1]= 2 */  int **nbcode, *Tvar; /**< model=V2 => Tvar[1]= 2 */
   int *TvarFD; /**< TvarFD[1]=V1 in V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1 */
   int *TvarFDind; /* TvarFDind[1]=9 in V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1 */
   int *TvarFQ; /* TvarFQ[1]=V2 in V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1 */ /* Only simple fixed quantitative variable */
   int *TvarFQind; /* TvarFQind[1]=6 in V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1 */ /* Only simple fixed quantitative variable */
   int *TvarVD; /* TvarVD[1]=V5 in V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1 */ /* Only simple fixed quantitative variable */
   int *TvarVDind; /* TvarVDind[1]=1 in V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1 */ /* Only simple fixed quantitative variable */
   int *TvarVQ; /* TvarVQ[1]=V5 in V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1 */ /* Only simple time varying quantitative variable */
   int *TvarVQind; /* TvarVQind[1]=1 in V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1 */ /* Only simple time varying quantitative variable */
   
 int *Tvarsel; /**< Selected covariates for output */  int *Tvarsel; /**< Selected covariates for output */
 double *Tvalsel; /**< Selected modality value of covariate for output */  double *Tvalsel; /**< Selected modality value of covariate for output */
 int *Typevar; /**< 0 for simple covariate (dummy, quantitative, fixed or varying), 1 for age product, 2 for  product */  int *Typevar; /**< 0 for simple covariate (dummy, quantitative, fixed or varying), 1 for age product, 2 for  product */
Line 1086  int *Tposprod; /**< Gives the k1 product Line 1098  int *Tposprod; /**< Gives the k1 product
 int cptcovprod, *Tvaraff, *invalidvarcomb;  int cptcovprod, *Tvaraff, *invalidvarcomb;
 double *lsurv, *lpop, *tpop;  double *lsurv, *lpop, *tpop;
   
   #define FD 1; /* Fixed dummy covariate */
   #define FQ 2; /* Fixed quantitative covariate */
   #define FP 3; /* Fixed product covariate */
   #define FPDD 7; /* Fixed product dummy*dummy covariate */
   #define FPDQ 8; /* Fixed product dummy*quantitative covariate */
   #define FPQQ 9; /* Fixed product quantitative*quantitative covariate */
   #define VD 10; /* Varying dummy covariate */
   #define VQ 11; /* Varying quantitative covariate */
   #define VP 12; /* Varying product covariate */
   #define VPDD 13; /* Varying product dummy*dummy covariate */
   #define VPDQ 14; /* Varying product dummy*quantitative covariate */
   #define VPQQ 15; /* Varying product quantitative*quantitative covariate */
   #define APFD 16; /* Age product * fixed dummy covariate */
   #define APFQ 17; /* Age product * fixed quantitative covariate */
   #define APVD 18; /* Age product * varying dummy covariate */
   #define APVQ 19; /* Age product * varying quantitative covariate */
   
   #define FTYPE 1; /* Fixed covariate */
   #define VTYPE 2; /* Varying covariate (loop in wave) */
   #define ATYPE 2; /* Age product covariate (loop in dh within wave)*/
   
   struct kmodel{
           int maintype; /* main type */
           int subtype; /* subtype */
   };
   struct kmodel modell[NCOVMAX];
   
 double ftol=FTOL; /**< Tolerance for computing Max Likelihood */  double ftol=FTOL; /**< Tolerance for computing Max Likelihood */
 double ftolhess; /**< Tolerance for computing hessian */  double ftolhess; /**< Tolerance for computing hessian */
   
Line 3006  double func( double *x) Line 3045  double func( double *x)
          meaning that decodemodel should be used cotvar[mw[mi+1][i]][TTvar[iv]][i]           meaning that decodemodel should be used cotvar[mw[mi+1][i]][TTvar[iv]][i]
       */        */
       for(mi=1; mi<= wav[i]-1; mi++){        for(mi=1; mi<= wav[i]-1; mi++){
         for(itv=1; itv <= ntveff; itv++){ /* Varying dummy covariates */                                  for(itv=1; itv <= ntveff; itv++){ /* Varying dummy covariates */
           /* cov[ioffset+itv]=cotvar[mw[mi][i]][Tvar[itv]][i]; /\* Not sure, Tvar V4+V3+V5 Tvaraff ? *\/ */                                          /* cov[ioffset+itv]=cotvar[mw[mi][i]][Tvar[itv]][i]; /\* Not sure, Tvar V4+V3+V5 Tvaraff ? *\/ */
           cov[ioffset+itv]=cotvar[mw[mi][i]][TmodelInvind[itv]][i];                                          cov[ioffset+itv]=cotvar[mw[mi][i]][TmodelInvind[itv]][i];
         }                                  }
         for(iqtv=1; iqtv <= nqtveff; iqtv++){ /* Varying quantitatives covariates */                                  for(iqtv=1; iqtv <= nqtveff; iqtv++){ /* Varying quantitatives covariates */
           if(cotqvar[mw[mi][i]][iqtv][i] == -1){                                          if(cotqvar[mw[mi][i]][iqtv][i] == -1){
             printf("i=%d, mi=%d, iqtv=%d, cotqvar[mw[mi][i]][iqtv][i]=%f",i,mi,iqtv,cotqvar[mw[mi][i]][iqtv][i]);                                                  printf("i=%d, mi=%d, iqtv=%d, cotqvar[mw[mi][i]][iqtv][i]=%f",i,mi,iqtv,cotqvar[mw[mi][i]][iqtv][i]);
           }                                          }
           cov[ioffset+ntveff+iqtv]=cotqvar[mw[mi][i]][TmodelInvQind[iqtv]][i];                                          cov[ioffset+ntveff+iqtv]=cotqvar[mw[mi][i]][TmodelInvQind[iqtv]][i];
           /* cov[ioffset+ntveff+iqtv]=cotqvar[mw[mi][i]][iqtv][i]; */                                          /* cov[ioffset+ntveff+iqtv]=cotqvar[mw[mi][i]][iqtv][i]; */
         }                                  }
         /* ioffset=2+nagesqr+cptcovn+nqv+ntv+nqtv; */                                  /* ioffset=2+nagesqr+cptcovn+nqv+ntv+nqtv; */
         for (ii=1;ii<=nlstate+ndeath;ii++)                                  for (ii=1;ii<=nlstate+ndeath;ii++)
           for (j=1;j<=nlstate+ndeath;j++){                                          for (j=1;j<=nlstate+ndeath;j++){
             oldm[ii][j]=(ii==j ? 1.0 : 0.0);                                                  oldm[ii][j]=(ii==j ? 1.0 : 0.0);
             savm[ii][j]=(ii==j ? 1.0 : 0.0);                                                  savm[ii][j]=(ii==j ? 1.0 : 0.0);
           }                                          }
         for(d=0; d<dh[mi][i]; d++){                                  for(d=0; d<dh[mi][i]; d++){
           newm=savm;                                          newm=savm;
           agexact=agev[mw[mi][i]][i]+d*stepm/YEARM;                                          agexact=agev[mw[mi][i]][i]+d*stepm/YEARM;
           cov[2]=agexact;                                          cov[2]=agexact;
           if(nagesqr==1)                                          if(nagesqr==1)
             cov[3]= agexact*agexact;  /* Should be changed here */                                                  cov[3]= agexact*agexact;  /* Should be changed here */
           for (kk=1; kk<=cptcovage;kk++) {                                          for (kk=1; kk<=cptcovage;kk++) {
             cov[Tage[kk]+2+nagesqr]=covar[Tvar[Tage[kk]]][i]*agexact; /* Tage[kk] gives the data-covariate associated with age */                                                  cov[Tage[kk]+2+nagesqr]=covar[Tvar[Tage[kk]]][i]*agexact; /* Tage[kk] gives the data-covariate associated with age */
           }                                          }
           out=matprod2(newm,oldm,1,nlstate+ndeath,1,nlstate+ndeath,                                          out=matprod2(newm,oldm,1,nlstate+ndeath,1,nlstate+ndeath,
                        1,nlstate+ndeath,pmij(pmmij,cov,ncovmodel,x,nlstate));                                                                                           1,nlstate+ndeath,pmij(pmmij,cov,ncovmodel,x,nlstate));
           savm=oldm;                                          savm=oldm;
           oldm=newm;                                          oldm=newm;
         } /* end mult */                                  } /* end mult */
                                                                   
         /*lli=log(out[s[mw[mi][i]][i]][s[mw[mi+1][i]][i]]);*/ /* Original formula */                                  /*lli=log(out[s[mw[mi][i]][i]][s[mw[mi+1][i]][i]]);*/ /* Original formula */
         /* But now since version 0.9 we anticipate for bias at large stepm.                                  /* But now since version 0.9 we anticipate for bias at large stepm.
          * If stepm is larger than one month (smallest stepm) and if the exact delay                                    * If stepm is larger than one month (smallest stepm) and if the exact delay 
          * (in months) between two waves is not a multiple of stepm, we rounded to                                    * (in months) between two waves is not a multiple of stepm, we rounded to 
          * the nearest (and in case of equal distance, to the lowest) interval but now                                   * the nearest (and in case of equal distance, to the lowest) interval but now
          * we keep into memory the bias bh[mi][i] and also the previous matrix product                                   * we keep into memory the bias bh[mi][i] and also the previous matrix product
          * (i.e to dh[mi][i]-1) saved in 'savm'. Then we inter(extra)polate the                                   * (i.e to dh[mi][i]-1) saved in 'savm'. Then we inter(extra)polate the
          * probability in order to take into account the bias as a fraction of the way                                   * probability in order to take into account the bias as a fraction of the way
          * from savm to out if bh is negative or even beyond if bh is positive. bh varies                                   * from savm to out if bh is negative or even beyond if bh is positive. bh varies
          * -stepm/2 to stepm/2 .                                   * -stepm/2 to stepm/2 .
          * For stepm=1 the results are the same as for previous versions of Imach.                                   * For stepm=1 the results are the same as for previous versions of Imach.
          * For stepm > 1 the results are less biased than in previous versions.                                    * For stepm > 1 the results are less biased than in previous versions. 
          */                                   */
         s1=s[mw[mi][i]][i];                                  s1=s[mw[mi][i]][i];
         s2=s[mw[mi+1][i]][i];                                  s2=s[mw[mi+1][i]][i];
         bbh=(double)bh[mi][i]/(double)stepm;                                   bbh=(double)bh[mi][i]/(double)stepm; 
         /* bias bh is positive if real duration                                  /* bias bh is positive if real duration
          * is higher than the multiple of stepm and negative otherwise.                                   * is higher than the multiple of stepm and negative otherwise.
          */                                   */
         /* lli= (savm[s1][s2]>1.e-8 ?(1.+bbh)*log(out[s1][s2])- bbh*log(savm[s1][s2]):log((1.+bbh)*out[s1][s2]));*/                                  /* lli= (savm[s1][s2]>1.e-8 ?(1.+bbh)*log(out[s1][s2])- bbh*log(savm[s1][s2]):log((1.+bbh)*out[s1][s2]));*/
         if( s2 > nlstate){                                   if( s2 > nlstate){ 
           /* i.e. if s2 is a death state and if the date of death is known                                           /* i.e. if s2 is a death state and if the date of death is known 
              then the contribution to the likelihood is the probability to                                                    then the contribution to the likelihood is the probability to 
              die between last step unit time and current  step unit time,                                                    die between last step unit time and current  step unit time, 
              which is also equal to probability to die before dh                                                    which is also equal to probability to die before dh 
              minus probability to die before dh-stepm .                                                    minus probability to die before dh-stepm . 
              In version up to 0.92 likelihood was computed                                                   In version up to 0.92 likelihood was computed
              as if date of death was unknown. Death was treated as any other                                                   as if date of death was unknown. Death was treated as any other
              health state: the date of the interview describes the actual state                                                   health state: the date of the interview describes the actual state
              and not the date of a change in health state. The former idea was                                                   and not the date of a change in health state. The former idea was
              to consider that at each interview the state was recorded                                                   to consider that at each interview the state was recorded
              (healthy, disable or death) and IMaCh was corrected; but when we                                                   (healthy, disable or death) and IMaCh was corrected; but when we
              introduced the exact date of death then we should have modified                                                   introduced the exact date of death then we should have modified
              the contribution of an exact death to the likelihood. This new                                                   the contribution of an exact death to the likelihood. This new
              contribution is smaller and very dependent of the step unit                                                   contribution is smaller and very dependent of the step unit
              stepm. It is no more the probability to die between last interview                                                   stepm. It is no more the probability to die between last interview
              and month of death but the probability to survive from last                                                   and month of death but the probability to survive from last
              interview up to one month before death multiplied by the                                                   interview up to one month before death multiplied by the
              probability to die within a month. Thanks to Chris                                                   probability to die within a month. Thanks to Chris
              Jackson for correcting this bug.  Former versions increased                                                   Jackson for correcting this bug.  Former versions increased
              mortality artificially. The bad side is that we add another loop                                                   mortality artificially. The bad side is that we add another loop
              which slows down the processing. The difference can be up to 10%                                                   which slows down the processing. The difference can be up to 10%
              lower mortality.                                                   lower mortality.
           */                                          */
           /* If, at the beginning of the maximization mostly, the                                          /* If, at the beginning of the maximization mostly, the
              cumulative probability or probability to be dead is                                                   cumulative probability or probability to be dead is
              constant (ie = 1) over time d, the difference is equal to                                                   constant (ie = 1) over time d, the difference is equal to
              0.  out[s1][3] = savm[s1][3]: probability, being at state                                                   0.  out[s1][3] = savm[s1][3]: probability, being at state
              s1 at precedent wave, to be dead a month before current                                                   s1 at precedent wave, to be dead a month before current
              wave is equal to probability, being at state s1 at                                                   wave is equal to probability, being at state s1 at
              precedent wave, to be dead at mont of the current                                                   precedent wave, to be dead at mont of the current
              wave. Then the observed probability (that this person died)                                                   wave. Then the observed probability (that this person died)
              is null according to current estimated parameter. In fact,                                                   is null according to current estimated parameter. In fact,
              it should be very low but not zero otherwise the log go to                                                   it should be very low but not zero otherwise the log go to
              infinity.                                                   infinity.
           */                                          */
 /* #ifdef INFINITYORIGINAL */  /* #ifdef INFINITYORIGINAL */
 /*          lli=log(out[s1][s2] - savm[s1][s2]); */  /*          lli=log(out[s1][s2] - savm[s1][s2]); */
 /* #else */  /* #else */
Line 3314  double funcone( double *x) Line 3353  double funcone( double *x)
   for (i=1,ipmx=0, sw=0.; i<=imx; i++){    for (i=1,ipmx=0, sw=0.; i<=imx; i++){
     ioffset=2+nagesqr+cptcovage;      ioffset=2+nagesqr+cptcovage;
     /* for (k=1; k<=cptcovn;k++) cov[2+nagesqr+k]=covar[Tvar[k]][i]; */      /* for (k=1; k<=cptcovn;k++) cov[2+nagesqr+k]=covar[Tvar[k]][i]; */
     for (k=1; k<=ncoveff+nqfveff;k++){ /* Simple and product fixed Dummy covariates without age* products */      for (k=1; k<=ncoveff;k++){ /* Simple and product fixed Dummy covariates without age* products */
       cov[++ioffset]=covar[TvarFD[k]][i];/* V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1, only V1 is fixed (k=6)*/        cov[++ioffset]=covar[TvarFD[k]][i];/* V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1, only V1 is fixed (k=6)*/
     }      }
     for(iqv=1; iqv <= nqfveff; iqv++){ /* Quantitative fixed covariates */      for (k=1; k<=nqfveff;k++){ /* Simple and product fixed Quantitative covariates without age* products */
       cov[++ioffset]=coqvar[Tvar[iqv]][i]; /* Only V1 k=9 */        cov[++ioffset]=coqvar[TvarFQ[k]][i];/* V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1, only V2 and V1*V2 is fixed (k=6 and 7?)*/
     }      }
       /* for(iqv=1; iqv <= nqfveff; iqv++){ /\* Quantitative fixed covariates *\/ */
       /*   cov[++ioffset]=coqvar[Tvar[iqv]][i]; /\* Only V2 k=6 and V1*V2 7 *\/ */
       /* } */
           
     for(mi=1; mi<= wav[i]-1; mi++){  /* Varying with waves */      for(mi=1; mi<= wav[i]-1; mi++){  /* Varying with waves */
       for(itv=1; itv <= ntveff; itv++){ /* Varying dummy covariates */        for(itv=1; itv <= ntveff; itv++){ /* Varying dummy covariates (single??)*/
         /* iv= Tvar[Tmodelind[ioffset-2-nagesqr-cptcovage+itv]]-ncovcol-nqv; /\* Counting the # varying covariate from 1 to ntveff *\/ */                                  /* iv= Tvar[Tmodelind[ioffset-2-nagesqr-cptcovage+itv]]-ncovcol-nqv; /\* Counting the # varying covariate from 1 to ntveff *\/ */
         /* cov[ioffset+iv]=cotvar[mw[mi][i]][iv][i]; */                                  /* cov[ioffset+iv]=cotvar[mw[mi][i]][iv][i]; */
         k=ioffset-2-nagesqr-cptcovage+itv; /* position in simple model */                                  k=ioffset-2-nagesqr-cptcovage+itv; /* position in simple model */
         cov[ioffset+itv]=cotvar[mw[mi][i]][TmodelInvind[itv]][i];                                  cov[ioffset+itv]=cotvar[mw[mi][i]][TmodelInvind[itv]][i];
         /* printf(" i=%d,mi=%d,itv=%d,TmodelInvind[itv]=%d,cotvar[mw[mi][i]][TmodelInvind[itv]][i]=%f\n", i, mi, itv, TmodelInvind[itv],cotvar[mw[mi][i]][TmodelInvind[itv]][i]); */                                  /* printf(" i=%d,mi=%d,itv=%d,TmodelInvind[itv]=%d,cotvar[mw[mi][i]][TmodelInvind[itv]][i]=%f\n", i, mi, itv, TmodelInvind[itv],cotvar[mw[mi][i]][TmodelInvind[itv]][i]); */
       }        }
       for(iqtv=1; iqtv <= nqtveff; iqtv++){ /* Varying quantitatives covariates */        for(iqtv=1; iqtv <= nqtveff; iqtv++){ /* Varying quantitatives covariates */
         iv=TmodelInvQind[iqtv]; /* Counting the # varying covariate from 1 to ntveff */                                  iv=TmodelInvQind[iqtv]; /* Counting the # varying covariate from 1 to ntveff */
         /* printf(" i=%d,mi=%d,iqtv=%d,TmodelInvQind[iqtv]=%d,cotqvar[mw[mi][i]][TmodelInvQind[iqtv]][i]=%f\n", i, mi, iqtv, TmodelInvQind[iqtv],cotqvar[mw[mi][i]][TmodelInvQind[iqtv]][i]); */                                  /* printf(" i=%d,mi=%d,iqtv=%d,TmodelInvQind[iqtv]=%d,cotqvar[mw[mi][i]][TmodelInvQind[iqtv]][i]=%f\n", i, mi, iqtv, TmodelInvQind[iqtv],cotqvar[mw[mi][i]][TmodelInvQind[iqtv]][i]); */
         cov[ioffset+ntveff+iqtv]=cotqvar[mw[mi][i]][TmodelInvQind[iqtv]][i];                                  cov[ioffset+ntveff+iqtv]=cotqvar[mw[mi][i]][TmodelInvQind[iqtv]][i];
       }        }
       for (ii=1;ii<=nlstate+ndeath;ii++)        for (ii=1;ii<=nlstate+ndeath;ii++)
         for (j=1;j<=nlstate+ndeath;j++){                                  for (j=1;j<=nlstate+ndeath;j++){
           oldm[ii][j]=(ii==j ? 1.0 : 0.0);                                          oldm[ii][j]=(ii==j ? 1.0 : 0.0);
           savm[ii][j]=(ii==j ? 1.0 : 0.0);                                          savm[ii][j]=(ii==j ? 1.0 : 0.0);
         }                                  }
               
       agebegin=agev[mw[mi][i]][i]; /* Age at beginning of effective wave */        agebegin=agev[mw[mi][i]][i]; /* Age at beginning of effective wave */
       ageend=agev[mw[mi][i]][i] + (dh[mi][i])*stepm/YEARM; /* Age at end of effective wave and at the end of transition */        ageend=agev[mw[mi][i]][i] + (dh[mi][i])*stepm/YEARM; /* Age at end of effective wave and at the end of transition */
       for(d=0; d<dh[mi][i]; d++){  /* Delay between two effective waves */        for(d=0; d<dh[mi][i]; d++){  /* Delay between two effective waves */
         /*dh[m][i] or dh[mw[mi][i]][i] is the delay between two effective waves m=mw[mi][i]                                  /*dh[m][i] or dh[mw[mi][i]][i] is the delay between two effective waves m=mw[mi][i]
           and mw[mi+1][i]. dh depends on stepm.*/                                          and mw[mi+1][i]. dh depends on stepm.*/
         newm=savm;                                  newm=savm;
         agexact=agev[mw[mi][i]][i]+d*stepm/YEARM;                                  agexact=agev[mw[mi][i]][i]+d*stepm/YEARM;
         cov[2]=agexact;                                  cov[2]=agexact;
         if(nagesqr==1)                                  if(nagesqr==1)
           cov[3]= agexact*agexact;                                          cov[3]= agexact*agexact;
         for (kk=1; kk<=cptcovage;kk++) {                                  for (kk=1; kk<=cptcovage;kk++) {
           cov[Tage[kk]+2+nagesqr]=covar[Tvar[Tage[kk]]][i]*agexact;                                          cov[Tage[kk]+2+nagesqr]=covar[Tvar[Tage[kk]]][i]*agexact;
         }                                  }
         /* printf("i=%d,mi=%d,d=%d,mw[mi][i]=%d\n",i, mi,d,mw[mi][i]); */                                  /* printf("i=%d,mi=%d,d=%d,mw[mi][i]=%d\n",i, mi,d,mw[mi][i]); */
         /* savm=pmij(pmmij,cov,ncovmodel,x,nlstate); */                                  /* savm=pmij(pmmij,cov,ncovmodel,x,nlstate); */
         out=matprod2(newm,oldm,1,nlstate+ndeath,1,nlstate+ndeath,                                  out=matprod2(newm,oldm,1,nlstate+ndeath,1,nlstate+ndeath,
                      1,nlstate+ndeath,pmij(pmmij,cov,ncovmodel,x,nlstate));                                                                                   1,nlstate+ndeath,pmij(pmmij,cov,ncovmodel,x,nlstate));
         /* out=matprod2(newm,oldm,1,nlstate+ndeath,1,nlstate+ndeath, */                                  /* out=matprod2(newm,oldm,1,nlstate+ndeath,1,nlstate+ndeath, */
         /*           1,nlstate+ndeath,pmij(pmmij,cov,ncovmodel,x,nlstate)); */                                  /*           1,nlstate+ndeath,pmij(pmmij,cov,ncovmodel,x,nlstate)); */
         savm=oldm;                                  savm=oldm;
         oldm=newm;                                  oldm=newm;
       } /* end mult */        } /* end mult */
               
       s1=s[mw[mi][i]][i];        s1=s[mw[mi][i]][i];
Line 3996  Title=%s <br>Datafile=%s Firstpass=%d La Line 4038  Title=%s <br>Datafile=%s Firstpass=%d La
       scanf("%d", i);*/        scanf("%d", i);*/
     for (i=-5; i<=nlstate+ndeath; i++)        for (i=-5; i<=nlstate+ndeath; i++)  
       for (jk=-5; jk<=nlstate+ndeath; jk++)          for (jk=-5; jk<=nlstate+ndeath; jk++)  
         for(m=iagemin; m <= iagemax+3; m++)                                  for(m=iagemin; m <= iagemax+3; m++)
           freq[i][jk][m]=0;                                          freq[i][jk][m]=0;
                         
     for (i=1; i<=nlstate; i++)  {      for (i=1; i<=nlstate; i++)  {
       for(m=iagemin; m <= iagemax+3; m++)        for(m=iagemin; m <= iagemax+3; m++)
         prop[i][m]=0;                                  prop[i][m]=0;
       posprop[i]=0;        posprop[i]=0;
       pospropt[i]=0;        pospropt[i]=0;
     }      }
Line 4011  Title=%s <br>Datafile=%s Firstpass=%d La Line 4053  Title=%s <br>Datafile=%s Firstpass=%d La
     /*  meanqt[m][z1]=0.; */      /*  meanqt[m][z1]=0.; */
     /*   } */      /*   } */
     /* } */      /* } */
                         
     dateintsum=0;      dateintsum=0;
     k2cpt=0;      k2cpt=0;
     /* For that combination of covariate j1, we count and print the frequencies in one pass */      /* For that combination of covariate j1, we count and print the frequencies in one pass */
     for (iind=1; iind<=imx; iind++) { /* For each individual iind */      for (iind=1; iind<=imx; iind++) { /* For each individual iind */
       bool=1;        bool=1;
       if(anyvaryingduminmodel==0){ /* If All fixed covariates */        if(anyvaryingduminmodel==0){ /* If All fixed covariates */
         if (cptcoveff >0) { /* Filter is here: Must be looked at for model=V1+V2+V3+V4 */                                  if (cptcoveff >0) { /* Filter is here: Must be looked at for model=V1+V2+V3+V4 */
           /* for (z1=1; z1<= nqfveff; z1++) {   */            /* for (z1=1; z1<= nqfveff; z1++) {   */
           /*   meanq[z1]+=coqvar[Tvar[z1]][iind];  /\* Computes mean of quantitative with selected filter *\/ */            /*   meanq[z1]+=coqvar[Tvar[z1]][iind];  /\* Computes mean of quantitative with selected filter *\/ */
           /* } */            /* } */
           for (z1=1; z1<=cptcoveff; z1++) {                                            for (z1=1; z1<=cptcoveff; z1++) {  
             /* if(Tvaraff[z1] ==-20){ */                                                  /* if(Tvaraff[z1] ==-20){ */
             /*   /\* sumnew+=cotvar[mw[mi][iind]][z1][iind]; *\/ */                                                  /*       /\* sumnew+=cotvar[mw[mi][iind]][z1][iind]; *\/ */
             /* }else  if(Tvaraff[z1] ==-10){ */                                                  /* }else  if(Tvaraff[z1] ==-10){ */
             /*   /\* sumnew+=coqvar[z1][iind]; *\/ */                                                  /*       /\* sumnew+=coqvar[z1][iind]; *\/ */
             /* }else  */                                                  /* }else  */
             if (covar[Tvaraff[z1]][iind]!= nbcode[Tvaraff[z1]][codtabm(j1,z1)]){                                                  if (covar[Tvaraff[z1]][iind]!= nbcode[Tvaraff[z1]][codtabm(j1,z1)]){
               /* Tests if this individual iind responded to j1 (V4=1 V3=0) */                                                          /* Tests if this individual iind responded to j1 (V4=1 V3=0) */
               bool=0;                                                          bool=0;
               /* printf("bool=%d i=%d, z1=%d, Tvaraff[%d]=%d, covar[Tvarff][%d]=%2f, codtabm(%d,%d)=%d, nbcode[Tvaraff][codtabm(%d,%d)=%d, j1=%d\n",                                                           /* printf("bool=%d i=%d, z1=%d, Tvaraff[%d]=%d, covar[Tvarff][%d]=%2f, codtabm(%d,%d)=%d, nbcode[Tvaraff][codtabm(%d,%d)=%d, j1=%d\n", 
                  bool,i,z1, z1, Tvaraff[z1],i,covar[Tvaraff[z1]][i],j1,z1,codtabm(j1,z1),                                                                   bool,i,z1, z1, Tvaraff[z1],i,covar[Tvaraff[z1]][i],j1,z1,codtabm(j1,z1),
                  j1,z1,nbcode[Tvaraff[z1]][codtabm(j1,z1)],j1);*/                                                                   j1,z1,nbcode[Tvaraff[z1]][codtabm(j1,z1)],j1);*/
               /* For j1=7 in V1+V2+V3+V4 = 0 1 1 0 and codtabm(7,3)=1 and nbcde[3][?]=1*/                                                          /* For j1=7 in V1+V2+V3+V4 = 0 1 1 0 and codtabm(7,3)=1 and nbcde[3][?]=1*/
             } /* Onlyf fixed */                                                  } /* Onlyf fixed */
           } /* end z1 */                                          } /* end z1 */
         } /* cptcovn > 0 */                                  } /* cptcovn > 0 */
       } /* end any */        } /* end any */
       if (bool==1){ /* We selected an individual iind satisfying combination j1 or all fixed */        if (bool==1){ /* We selected an individual iind satisfying combination j1 or all fixed */
         /* for(m=firstpass; m<=lastpass; m++){ */                                  /* for(m=firstpass; m<=lastpass; m++){ */
         for(mi=1; mi<wav[iind];mi++){ /* For that wave */                                  for(mi=1; mi<wav[iind];mi++){ /* For that wave */
           m=mw[mi][iind];                                          m=mw[mi][iind];
           if(anyvaryingduminmodel==1){ /* Some are varying covariates */                                          if(anyvaryingduminmodel==1){ /* Some are varying covariates */
             for (z1=1; z1<=cptcoveff; z1++) {                                                  for (z1=1; z1<=cptcoveff; z1++) {
               if( Fixed[Tmodelind[z1]]==1){                                                          if( Fixed[Tmodelind[z1]]==1){
                 iv= Tvar[Tmodelind[z1]]-ncovcol-nqv;                                                                  iv= Tvar[Tmodelind[z1]]-ncovcol-nqv;
                 if (cotvar[m][iv][iind]!= nbcode[Tvaraff[z1]][codtabm(j1,z1)]) /* iv=1 to ntv, right modality */                                                                  if (cotvar[m][iv][iind]!= nbcode[Tvaraff[z1]][codtabm(j1,z1)]) /* iv=1 to ntv, right modality */
                   bool=0;                                                                          bool=0;
               }else if( Fixed[Tmodelind[z1]]== 0) { /* fixed */                                                          }else if( Fixed[Tmodelind[z1]]== 0) { /* fixed */
                 if (covar[Tvaraff[z1]][iind]!= nbcode[Tvaraff[z1]][codtabm(j1,z1)]) {                                                                  if (covar[Tvaraff[z1]][iind]!= nbcode[Tvaraff[z1]][codtabm(j1,z1)]) {
                   bool=0;                                                                          bool=0;
                 }                                                                  }
               }                                                          }
             }                                                  }
           }/* Some are varying covariates, we tried to speed up if all fixed covariates in the model, avoiding waves loop  */                                          }/* Some are varying covariates, we tried to speed up if all fixed covariates in the model, avoiding waves loop  */
           /* bool =0 we keep that guy which corresponds to the combination of dummy values */                                          /* bool =0 we keep that guy which corresponds to the combination of dummy values */
           if(bool==1){                                          if(bool==1){
             /* dh[m][iind] or dh[mw[mi][iind]][iind] is the delay between two effective (mi) waves m=mw[mi][iind]                                                  /* dh[m][iind] or dh[mw[mi][iind]][iind] is the delay between two effective (mi) waves m=mw[mi][iind]
                and mw[mi+1][iind]. dh depends on stepm. */                                                           and mw[mi+1][iind]. dh depends on stepm. */
             agebegin=agev[m][iind]; /* Age at beginning of wave before transition*/                                                  agebegin=agev[m][iind]; /* Age at beginning of wave before transition*/
             ageend=agev[m][iind]+(dh[m][iind])*stepm/YEARM; /* Age at end of wave and transition */                                                  ageend=agev[m][iind]+(dh[m][iind])*stepm/YEARM; /* Age at end of wave and transition */
             if(m >=firstpass && m <=lastpass){                                                  if(m >=firstpass && m <=lastpass){
               k2=anint[m][iind]+(mint[m][iind]/12.);                                                          k2=anint[m][iind]+(mint[m][iind]/12.);
               /*if ((k2>=dateprev1) && (k2<=dateprev2)) {*/                                                          /*if ((k2>=dateprev1) && (k2<=dateprev2)) {*/
               if(agev[m][iind]==0) agev[m][iind]=iagemax+1;  /* All ages equal to 0 are in iagemax+1 */                                                          if(agev[m][iind]==0) agev[m][iind]=iagemax+1;  /* All ages equal to 0 are in iagemax+1 */
               if(agev[m][iind]==1) agev[m][iind]=iagemax+2;  /* All ages equal to 1 are in iagemax+2 */                                                          if(agev[m][iind]==1) agev[m][iind]=iagemax+2;  /* All ages equal to 1 are in iagemax+2 */
               if (s[m][iind]>0 && s[m][iind]<=nlstate)  /* If status at wave m is known and a live state */                                                          if (s[m][iind]>0 && s[m][iind]<=nlstate)  /* If status at wave m is known and a live state */
                 prop[s[m][iind]][(int)agev[m][iind]] += weight[iind];  /* At age of beginning of transition, where status is known */                                                                  prop[s[m][iind]][(int)agev[m][iind]] += weight[iind];  /* At age of beginning of transition, where status is known */
               if (m<lastpass) {                                                          if (m<lastpass) {
                 /* if(s[m][iind]==4 && s[m+1][iind]==4) */                                                                  /* if(s[m][iind]==4 && s[m+1][iind]==4) */
                 /*   printf(" num=%ld m=%d, iind=%d s1=%d s2=%d agev at m=%d\n", num[iind], m, iind,s[m][iind],s[m+1][iind], (int)agev[m][iind]); */                                                                  /*   printf(" num=%ld m=%d, iind=%d s1=%d s2=%d agev at m=%d\n", num[iind], m, iind,s[m][iind],s[m+1][iind], (int)agev[m][iind]); */
                 if(s[m][iind]==-1)                                                                  if(s[m][iind]==-1)
                   printf(" num=%ld m=%d, iind=%d s1=%d s2=%d agev at m=%d agebegin=%.2f ageend=%.2f, agemed=%d\n", num[iind], m, iind,s[m][iind],s[m+1][iind], (int)agev[m][iind],agebegin, ageend, (int)((agebegin+ageend)/2.));                                                                          printf(" num=%ld m=%d, iind=%d s1=%d s2=%d agev at m=%d agebegin=%.2f ageend=%.2f, agemed=%d\n", num[iind], m, iind,s[m][iind],s[m+1][iind], (int)agev[m][iind],agebegin, ageend, (int)((agebegin+ageend)/2.));
                 freq[s[m][iind]][s[m+1][iind]][(int)agev[m][iind]] += weight[iind]; /* At age of beginning of transition, where status is known */                                                                  freq[s[m][iind]][s[m+1][iind]][(int)agev[m][iind]] += weight[iind]; /* At age of beginning of transition, where status is known */
                 /* freq[s[m][iind]][s[m+1][iind]][(int)((agebegin+ageend)/2.)] += weight[iind]; */                                                                  /* freq[s[m][iind]][s[m+1][iind]][(int)((agebegin+ageend)/2.)] += weight[iind]; */
                 freq[s[m][iind]][s[m+1][iind]][iagemax+3] += weight[iind]; /* Total is in iagemax+3 *//* At age of beginning of transition, where status is known */                                                                  freq[s[m][iind]][s[m+1][iind]][iagemax+3] += weight[iind]; /* Total is in iagemax+3 *//* At age of beginning of transition, where status is known */
               }                                                          }
             } /* end if between passes */                                                    } /* end if between passes */  
             if ((agev[m][iind]>1) && (agev[m][iind]< (iagemax+3)) && (anint[m][iind]!=9999) && (mint[m][iind]!=99)) {                                                  if ((agev[m][iind]>1) && (agev[m][iind]< (iagemax+3)) && (anint[m][iind]!=9999) && (mint[m][iind]!=99)) {
               dateintsum=dateintsum+k2;                                                          dateintsum=dateintsum+k2;
               k2cpt++;                                                          k2cpt++;
               /* printf("iind=%ld dateintmean = %lf dateintsum=%lf k2cpt=%lf k2=%lf\n",iind, dateintsum/k2cpt, dateintsum,k2cpt, k2); */                                                          /* printf("iind=%ld dateintmean = %lf dateintsum=%lf k2cpt=%lf k2=%lf\n",iind, dateintsum/k2cpt, dateintsum,k2cpt, k2); */
             }                                                  }
           } /* end bool 2 */                                          } /* end bool 2 */
         } /* end m */                                  } /* end m */
       } /* end bool */        } /* end bool */
     } /* end iind = 1 to imx */      } /* end iind = 1 to imx */
     /* prop[s][age] is feeded for any initial and valid live state as well as      /* prop[s][age] is feeded for any initial and valid live state as well as
        freq[s1][s2][age] at single age of beginning the transition, for a combination j1 */         freq[s1][s2][age] at single age of beginning the transition, for a combination j1 */
                   
                   
     /*      fprintf(ficresp, "#Count between %.lf/%.lf/%.lf and %.lf/%.lf/%.lf\n",jprev1, mprev1,anprev1,jprev2, mprev2,anprev2);*/      /*      fprintf(ficresp, "#Count between %.lf/%.lf/%.lf and %.lf/%.lf/%.lf\n",jprev1, mprev1,anprev1,jprev2, mprev2,anprev2);*/
     pstamp(ficresp);      pstamp(ficresp);
     /* if  (ncoveff>0) { */      /* if  (ncoveff>0) { */
Line 4100  Title=%s <br>Datafile=%s Firstpass=%d La Line 4142  Title=%s <br>Datafile=%s Firstpass=%d La
       fprintf(ficresphtm, "\n<br/><br/><h3>********** Variable ");         fprintf(ficresphtm, "\n<br/><br/><h3>********** Variable "); 
       fprintf(ficresphtmfr, "\n<br/><br/><h3>********** Variable ");         fprintf(ficresphtmfr, "\n<br/><br/><h3>********** Variable "); 
       for (z1=1; z1<=cptcoveff; z1++){        for (z1=1; z1<=cptcoveff; z1++){
         fprintf(ficresp, "V%d=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtabm(j1,z1)]);                                  fprintf(ficresp, "V%d=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtabm(j1,z1)]);
         fprintf(ficresphtm, "V%d=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtabm(j1,z1)]);                                  fprintf(ficresphtm, "V%d=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtabm(j1,z1)]);
         fprintf(ficresphtmfr, "V%d=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtabm(j1,z1)]);                                  fprintf(ficresphtmfr, "V%d=%d ",Tvaraff[z1],nbcode[Tvaraff[z1]][codtabm(j1,z1)]);
       }        }
       fprintf(ficresp, "**********\n#");        fprintf(ficresp, "**********\n#");
       fprintf(ficresphtm, "**********</h3>\n");        fprintf(ficresphtm, "**********</h3>\n");
Line 4118  Title=%s <br>Datafile=%s Firstpass=%d La Line 4160  Title=%s <br>Datafile=%s Firstpass=%d La
     }      }
     fprintf(ficresp, "\n");      fprintf(ficresp, "\n");
     fprintf(ficresphtm, "\n");      fprintf(ficresphtm, "\n");
                         
     /* Header of frequency table by age */      /* Header of frequency table by age */
     fprintf(ficresphtmfr,"<table style=\"text-align:center; border: 1px solid\">");      fprintf(ficresphtmfr,"<table style=\"text-align:center; border: 1px solid\">");
     fprintf(ficresphtmfr,"<th>Age</th> ");      fprintf(ficresphtmfr,"<th>Age</th> ");
     for(jk=-1; jk <=nlstate+ndeath; jk++){      for(jk=-1; jk <=nlstate+ndeath; jk++){
       for(m=-1; m <=nlstate+ndeath; m++){        for(m=-1; m <=nlstate+ndeath; m++){
         if(jk!=0 && m!=0)                                  if(jk!=0 && m!=0)
           fprintf(ficresphtmfr,"<th>%d%d</th> ",jk,m);                                          fprintf(ficresphtmfr,"<th>%d%d</th> ",jk,m);
       }        }
     }      }
     fprintf(ficresphtmfr, "\n");      fprintf(ficresphtmfr, "\n");
                         
     /* For each age */      /* For each age */
     for(iage=iagemin; iage <= iagemax+3; iage++){      for(iage=iagemin; iage <= iagemax+3; iage++){
       fprintf(ficresphtm,"<tr>");        fprintf(ficresphtm,"<tr>");
       if(iage==iagemax+1){        if(iage==iagemax+1){
         fprintf(ficlog,"1");                                  fprintf(ficlog,"1");
         fprintf(ficresphtmfr,"<tr><th>0</th> ");                                  fprintf(ficresphtmfr,"<tr><th>0</th> ");
       }else if(iage==iagemax+2){        }else if(iage==iagemax+2){
         fprintf(ficlog,"0");                                  fprintf(ficlog,"0");
         fprintf(ficresphtmfr,"<tr><th>Unknown</th> ");                                  fprintf(ficresphtmfr,"<tr><th>Unknown</th> ");
       }else if(iage==iagemax+3){        }else if(iage==iagemax+3){
         fprintf(ficlog,"Total");                                  fprintf(ficlog,"Total");
         fprintf(ficresphtmfr,"<tr><th>Total</th> ");                                  fprintf(ficresphtmfr,"<tr><th>Total</th> ");
       }else{        }else{
         if(first==1){                                  if(first==1){
           first=0;                                          first=0;
           printf("See log file for details...\n");                                          printf("See log file for details...\n");
         }                                  }
         fprintf(ficresphtmfr,"<tr><th>%d</th> ",iage);                                  fprintf(ficresphtmfr,"<tr><th>%d</th> ",iage);
         fprintf(ficlog,"Age %d", iage);                                  fprintf(ficlog,"Age %d", iage);
       }        }
       for(jk=1; jk <=nlstate ; jk++){        for(jk=1; jk <=nlstate ; jk++){
         for(m=-1, pp[jk]=0; m <=nlstate+ndeath ; m++)                                  for(m=-1, pp[jk]=0; m <=nlstate+ndeath ; m++)
           pp[jk] += freq[jk][m][iage];                                           pp[jk] += freq[jk][m][iage]; 
       }        }
       for(jk=1; jk <=nlstate ; jk++){        for(jk=1; jk <=nlstate ; jk++){
         for(m=-1, pos=0; m <=0 ; m++)                                  for(m=-1, pos=0; m <=0 ; m++)
           pos += freq[jk][m][iage];                                          pos += freq[jk][m][iage];
         if(pp[jk]>=1.e-10){                                  if(pp[jk]>=1.e-10){
           if(first==1){                                          if(first==1){
             printf(" %d.=%.0f loss[%d]=%.1f%%",jk,pp[jk],jk,100*pos/pp[jk]);                                                  printf(" %d.=%.0f loss[%d]=%.1f%%",jk,pp[jk],jk,100*pos/pp[jk]);
           }                                          }
           fprintf(ficlog," %d.=%.0f loss[%d]=%.1f%%",jk,pp[jk],jk,100*pos/pp[jk]);                                          fprintf(ficlog," %d.=%.0f loss[%d]=%.1f%%",jk,pp[jk],jk,100*pos/pp[jk]);
         }else{                                  }else{
           if(first==1)                                          if(first==1)
             printf(" %d.=%.0f loss[%d]=NaNQ%%",jk,pp[jk],jk);                                                  printf(" %d.=%.0f loss[%d]=NaNQ%%",jk,pp[jk],jk);
           fprintf(ficlog," %d.=%.0f loss[%d]=NaNQ%%",jk,pp[jk],jk);                                          fprintf(ficlog," %d.=%.0f loss[%d]=NaNQ%%",jk,pp[jk],jk);
         }                                  }
       }        }
                           
       for(jk=1; jk <=nlstate ; jk++){         for(jk=1; jk <=nlstate ; jk++){ 
         /* posprop[jk]=0; */                                  /* posprop[jk]=0; */
         for(m=0, pp[jk]=0; m <=nlstate+ndeath; m++)/* Summing on all ages */                                  for(m=0, pp[jk]=0; m <=nlstate+ndeath; m++)/* Summing on all ages */
           pp[jk] += freq[jk][m][iage];                                          pp[jk] += freq[jk][m][iage];
       } /* pp[jk] is the total number of transitions starting from state jk and any ending status until this age */        } /* pp[jk] is the total number of transitions starting from state jk and any ending status until this age */
                           
       for(jk=1,pos=0, pospropta=0.; jk <=nlstate ; jk++){        for(jk=1,pos=0, pospropta=0.; jk <=nlstate ; jk++){
         pos += pp[jk]; /* pos is the total number of transitions until this age */                                  pos += pp[jk]; /* pos is the total number of transitions until this age */
         posprop[jk] += prop[jk][iage]; /* prop is the number of transitions from a live state                                  posprop[jk] += prop[jk][iage]; /* prop is the number of transitions from a live state
                                           from jk at age iage prop[s[m][iind]][(int)agev[m][iind]] += weight[iind] */                                                                                                                                                                          from jk at age iage prop[s[m][iind]][(int)agev[m][iind]] += weight[iind] */
         pospropta += prop[jk][iage]; /* prop is the number of transitions from a live state                                  pospropta += prop[jk][iage]; /* prop is the number of transitions from a live state
                                         from jk at age iage prop[s[m][iind]][(int)agev[m][iind]] += weight[iind] */                                                                                                                                                                  from jk at age iage prop[s[m][iind]][(int)agev[m][iind]] += weight[iind] */
       }        }
       for(jk=1; jk <=nlstate ; jk++){        for(jk=1; jk <=nlstate ; jk++){
         if(pos>=1.e-5){                                  if(pos>=1.e-5){
           if(first==1)                                          if(first==1)
             printf(" %d.=%.0f prev[%d]=%.1f%%",jk,pp[jk],jk,100*pp[jk]/pos);                                                  printf(" %d.=%.0f prev[%d]=%.1f%%",jk,pp[jk],jk,100*pp[jk]/pos);
           fprintf(ficlog," %d.=%.0f prev[%d]=%.1f%%",jk,pp[jk],jk,100*pp[jk]/pos);                                          fprintf(ficlog," %d.=%.0f prev[%d]=%.1f%%",jk,pp[jk],jk,100*pp[jk]/pos);
         }else{                                  }else{
           if(first==1)                                          if(first==1)
             printf(" %d.=%.0f prev[%d]=NaNQ%%",jk,pp[jk],jk);                                                  printf(" %d.=%.0f prev[%d]=NaNQ%%",jk,pp[jk],jk);
           fprintf(ficlog," %d.=%.0f prev[%d]=NaNQ%%",jk,pp[jk],jk);                                          fprintf(ficlog," %d.=%.0f prev[%d]=NaNQ%%",jk,pp[jk],jk);
         }                                  }
         if( iage <= iagemax){                                  if( iage <= iagemax){
           if(pos>=1.e-5){                                          if(pos>=1.e-5){
             fprintf(ficresp," %d %.5f %.0f %.0f",iage,prop[jk][iage]/pospropta, prop[jk][iage],pospropta);                                                  fprintf(ficresp," %d %.5f %.0f %.0f",iage,prop[jk][iage]/pospropta, prop[jk][iage],pospropta);
             fprintf(ficresphtm,"<th>%d</th><td>%.5f</td><td>%.0f</td><td>%.0f</td>",iage,prop[jk][iage]/pospropta, prop[jk][iage],pospropta);                                                  fprintf(ficresphtm,"<th>%d</th><td>%.5f</td><td>%.0f</td><td>%.0f</td>",iage,prop[jk][iage]/pospropta, prop[jk][iage],pospropta);
             /*probs[iage][jk][j1]= pp[jk]/pos;*/                                                  /*probs[iage][jk][j1]= pp[jk]/pos;*/
             /*printf("\niage=%d jk=%d j1=%d %.5f %.0f %.0f %f",iage,jk,j1,pp[jk]/pos, pp[jk],pos,probs[iage][jk][j1]);*/                                                  /*printf("\niage=%d jk=%d j1=%d %.5f %.0f %.0f %f",iage,jk,j1,pp[jk]/pos, pp[jk],pos,probs[iage][jk][j1]);*/
           }                                          }
           else{                                          else{
             fprintf(ficresp," %d NaNq %.0f %.0f",iage,prop[jk][iage],pospropta);                                                  fprintf(ficresp," %d NaNq %.0f %.0f",iage,prop[jk][iage],pospropta);
             fprintf(ficresphtm,"<th>%d</th><td>NaNq</td><td>%.0f</td><td>%.0f</td>",iage, prop[jk][iage],pospropta);                                                  fprintf(ficresphtm,"<th>%d</th><td>NaNq</td><td>%.0f</td><td>%.0f</td>",iage, prop[jk][iage],pospropta);
           }                                          }
         }                                  }
         pospropt[jk] +=posprop[jk];                                  pospropt[jk] +=posprop[jk];
       } /* end loop jk */        } /* end loop jk */
       /* pospropt=0.; */        /* pospropt=0.; */
       for(jk=-1; jk <=nlstate+ndeath; jk++){        for(jk=-1; jk <=nlstate+ndeath; jk++){
         for(m=-1; m <=nlstate+ndeath; m++){                                  for(m=-1; m <=nlstate+ndeath; m++){
           if(freq[jk][m][iage] !=0 ) { /* minimizing output */                                          if(freq[jk][m][iage] !=0 ) { /* minimizing output */
             if(first==1){                                                  if(first==1){
               printf(" %d%d=%.0f",jk,m,freq[jk][m][iage]);                                                          printf(" %d%d=%.0f",jk,m,freq[jk][m][iage]);
             }                                                  }
             fprintf(ficlog," %d%d=%.0f",jk,m,freq[jk][m][iage]);                                                  fprintf(ficlog," %d%d=%.0f",jk,m,freq[jk][m][iage]);
           }                                          }
           if(jk!=0 && m!=0)                                          if(jk!=0 && m!=0)
             fprintf(ficresphtmfr,"<td>%.0f</td> ",freq[jk][m][iage]);                                                  fprintf(ficresphtmfr,"<td>%.0f</td> ",freq[jk][m][iage]);
         }                                  }
       } /* end loop jk */        } /* end loop jk */
       posproptt=0.;         posproptt=0.; 
       for(jk=1; jk <=nlstate; jk++){        for(jk=1; jk <=nlstate; jk++){
         posproptt += pospropt[jk];                                  posproptt += pospropt[jk];
       }        }
       fprintf(ficresphtmfr,"</tr>\n ");        fprintf(ficresphtmfr,"</tr>\n ");
       if(iage <= iagemax){        if(iage <= iagemax){
         fprintf(ficresp,"\n");                                  fprintf(ficresp,"\n");
         fprintf(ficresphtm,"</tr>\n");                                  fprintf(ficresphtm,"</tr>\n");
       }        }
       if(first==1)        if(first==1)
         printf("Others in log...\n");                                  printf("Others in log...\n");
       fprintf(ficlog,"\n");        fprintf(ficlog,"\n");
     } /* end loop age iage */      } /* end loop age iage */
     fprintf(ficresphtm,"<tr><th>Tot</th>");      fprintf(ficresphtm,"<tr><th>Tot</th>");
     for(jk=1; jk <=nlstate ; jk++){      for(jk=1; jk <=nlstate ; jk++){
       if(posproptt < 1.e-5){        if(posproptt < 1.e-5){
         fprintf(ficresphtm,"<td>Nanq</td><td>%.0f</td><td>%.0f</td>",pospropt[jk],posproptt);                                     fprintf(ficresphtm,"<td>Nanq</td><td>%.0f</td><td>%.0f</td>",pospropt[jk],posproptt);   
       }else{        }else{
         fprintf(ficresphtm,"<td>%.5f</td><td>%.0f</td><td>%.0f</td>",pospropt[jk]/posproptt,pospropt[jk],posproptt);                                      fprintf(ficresphtm,"<td>%.5f</td><td>%.0f</td><td>%.0f</td>",pospropt[jk]/posproptt,pospropt[jk],posproptt);    
       }        }
     }      }
     fprintf(ficresphtm,"</tr>\n");      fprintf(ficresphtm,"</tr>\n");
Line 4255  Title=%s <br>Datafile=%s Firstpass=%d La Line 4297  Title=%s <br>Datafile=%s Firstpass=%d La
     fprintf(ficresphtmfr,"</table>\n");      fprintf(ficresphtmfr,"</table>\n");
   } /* end selected combination of covariate j1 */    } /* end selected combination of covariate j1 */
   dateintmean=dateintsum/k2cpt;     dateintmean=dateintsum/k2cpt; 
                            
   fclose(ficresp);    fclose(ficresp);
   fclose(ficresphtm);    fclose(ficresphtm);
   fclose(ficresphtmfr);    fclose(ficresphtmfr);
Line 4616  void  concatwav(int wav[], int **dh, int Line 4658  void  concatwav(int wav[], int **dh, int
     if(Dummy[k]==0 && Typevar[k] !=1){ /* Dummy covariate and not age product */       if(Dummy[k]==0 && Typevar[k] !=1){ /* Dummy covariate and not age product */ 
       switch(Fixed[k]) {        switch(Fixed[k]) {
       case 0: /* Testing on fixed dummy covariate, simple or product of fixed */        case 0: /* Testing on fixed dummy covariate, simple or product of fixed */
         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*/
           ij=(int)(covar[Tvar[k]][i]);                                          ij=(int)(covar[Tvar[k]][i]);
           /* ij=0 or 1 or -1. Value of the covariate Tvar[j] for individual i                                          /* ij=0 or 1 or -1. Value of the covariate Tvar[j] for individual i
            * If product of Vn*Vm, still boolean *:                                           * If product of Vn*Vm, still boolean *:
            * If it was coded 1, 2, 3, 4 should be splitted into 3 boolean variables                                           * If it was coded 1, 2, 3, 4 should be splitted into 3 boolean variables
            * 1 => 0 0 0, 2 => 0 0 1, 3 => 0 1 1, 4=1 0 0   */                                           * 1 => 0 0 0, 2 => 0 0 1, 3 => 0 1 1, 4=1 0 0   */
           /* Finds for covariate j, n=Tvar[j] of Vn . ij is the                                          /* Finds for covariate j, n=Tvar[j] of Vn . ij is the
              modality of the nth covariate of individual i. */                                                   modality of the nth covariate of individual i. */
           if (ij > modmaxcovj)                                          if (ij > modmaxcovj)
             modmaxcovj=ij;                                                   modmaxcovj=ij; 
           else if (ij < modmincovj)                                           else if (ij < modmincovj) 
             modmincovj=ij;                                                   modmincovj=ij; 
           if ((ij < -1) && (ij > NCOVMAX)){                                          if ((ij < -1) && (ij > NCOVMAX)){
             printf( "Error: minimal is less than -1 or maximal is bigger than %d. Exiting. \n", NCOVMAX );                                                  printf( "Error: minimal is less than -1 or maximal is bigger than %d. Exiting. \n", NCOVMAX );
             exit(1);                                                  exit(1);
           }else                                          }else
             Ndum[ij]++; /*counts and stores the occurence of this modality 0, 1, -1*/                                                  Ndum[ij]++; /*counts and stores the occurence of this modality 0, 1, -1*/
           /*  If coded 1, 2, 3 , counts the number of 1 Ndum[1], number of 2, Ndum[2], etc */                                          /*  If coded 1, 2, 3 , counts the number of 1 Ndum[1], number of 2, Ndum[2], etc */
           /*printf("i=%d ij=%d Ndum[ij]=%d imx=%d",i,ij,Ndum[ij],imx);*/                                          /*printf("i=%d ij=%d Ndum[ij]=%d imx=%d",i,ij,Ndum[ij],imx);*/
           /* getting the maximum value of the modality of the covariate                                          /* getting the maximum value of the modality of the covariate
              (should be 0 or 1 now) Tvar[j]. If V=sex and male is coded 0 and                                                   (should be 0 or 1 now) Tvar[j]. If V=sex and male is coded 0 and
              female ies 1, then modmaxcovj=1.                                                   female ies 1, then modmaxcovj=1.
           */                                          */
         } /* end for loop on individuals i */                                  } /* end for loop on individuals i */
         printf(" Minimal and maximal values of %d th covariate V%d: min=%d max=%d \n", k, Tvar[k], modmincovj, modmaxcovj);                                  printf(" Minimal and maximal values of %d th covariate V%d: min=%d max=%d \n", k, Tvar[k], modmincovj, modmaxcovj);
         fprintf(ficlog," Minimal and maximal values of %d th covariate V%d: min=%d max=%d \n", k, Tvar[k], modmincovj, modmaxcovj);                                  fprintf(ficlog," Minimal and maximal values of %d th covariate V%d: min=%d max=%d \n", k, Tvar[k], modmincovj, modmaxcovj);
         cptcode=modmaxcovj;                                  cptcode=modmaxcovj;
         /* Ndum[0] = frequency of 0 for model-covariate j, Ndum[1] frequency of 1 etc. */                                  /* Ndum[0] = frequency of 0 for model-covariate j, Ndum[1] frequency of 1 etc. */
         /*for (i=0; i<=cptcode; i++) {*/                                  /*for (i=0; i<=cptcode; i++) {*/
         for (j=modmincovj;  j<=modmaxcovj; j++) { /* j=-1 ? 0 and 1*//* For each value j of the modality of model-cov k */                                  for (j=modmincovj;  j<=modmaxcovj; j++) { /* j=-1 ? 0 and 1*//* For each value j of the modality of model-cov k */
           printf("Frequencies of covariates %d ie V%d with value %d: %d\n", k, Tvar[k], j, Ndum[j]);                                          printf("Frequencies of covariates %d ie V%d with value %d: %d\n", k, Tvar[k], j, Ndum[j]);
           fprintf(ficlog, "Frequencies of covariates %d ie V%d with value %d: %d\n", k, Tvar[k], j, Ndum[j]);                                          fprintf(ficlog, "Frequencies of covariates %d ie V%d with value %d: %d\n", k, Tvar[k], j, Ndum[j]);
           if( Ndum[j] != 0 ){ /* Counts if nobody answered modality j ie empty modality, we skip it and reorder */                                          if( Ndum[j] != 0 ){ /* Counts if nobody answered modality j ie empty modality, we skip it and reorder */
             if( j != -1){                                                  if( j != -1){
               ncodemax[k]++;  /* ncodemax[k]= Number of modalities of the k th                                                          ncodemax[k]++;  /* ncodemax[k]= Number of modalities of the k th
                                  covariate for which somebody answered excluding                                                                                                                                    covariate for which somebody answered excluding 
                                  undefined. Usually 2: 0 and 1. */                                                                                                                                   undefined. Usually 2: 0 and 1. */
             }                                                  }
             ncodemaxwundef[k]++; /* ncodemax[j]= Number of modalities of the k th                                                  ncodemaxwundef[k]++; /* ncodemax[j]= Number of modalities of the k th
                                     covariate for which somebody answered including                                                                                                                                                   covariate for which somebody answered including 
                                     undefined. Usually 3: -1, 0 and 1. */                                                                                                                                                  undefined. Usually 3: -1, 0 and 1. */
           }                                          }       /* In fact  ncodemax[k]=2 (dichotom. variables only) but it could be more for
           /* In fact  ncodemax[k]=2 (dichotom. variables only) but it could be more for                                                   * historical reasons: 3 if coded 1, 2, 3 and 4 and Ndum[2]=0 */
            * historical reasons: 3 if coded 1, 2, 3 and 4 and Ndum[2]=0 */                                  } /* Ndum[-1] number of undefined modalities */
         } /* Ndum[-1] number of undefined modalities */                          
                                           /* j is a covariate, n=Tvar[j] of Vn; Fills nbcode */
         /* j is a covariate, n=Tvar[j] of Vn; Fills nbcode */                                  /* For covariate j, modalities could be 1, 2, 3, 4, 5, 6, 7. */
         /* For covariate j, modalities could be 1, 2, 3, 4, 5, 6, 7.                                   /* If Ndum[1]=0, Ndum[2]=0, Ndum[3]= 635, Ndum[4]=0, Ndum[5]=0, Ndum[6]=27, Ndum[7]=125; */
            If Ndum[1]=0, Ndum[2]=0, Ndum[3]= 635, Ndum[4]=0, Ndum[5]=0, Ndum[6]=27, Ndum[7]=125;                                  /* modmincovj=3; modmaxcovj = 7; */
            modmincovj=3; modmaxcovj = 7;                                  /* There are only 3 modalities non empty 3, 6, 7 (or 2 if 27 is too few) : ncodemax[j]=3; */
            There are only 3 modalities non empty 3, 6, 7 (or 2 if 27 is too few) : ncodemax[j]=3;                                  /* which will be coded 0, 1, 2 which in binary on 2=3-1 digits are 0=00 1=01, 2=10; */
            which will be coded 0, 1, 2 which in binary on 2=3-1 digits are 0=00 1=01, 2=10;                            /*             defining two dummy variables: variables V1_1 and V1_2.*/
            defining two dummy variables: variables V1_1 and V1_2.                /* nbcode[Tvar[j]][ij]=k; */
            nbcode[Tvar[j]][ij]=k;                /* nbcode[Tvar[j]][1]=0; */
            nbcode[Tvar[j]][1]=0;                /* nbcode[Tvar[j]][2]=1; */
            nbcode[Tvar[j]][2]=1;                /* nbcode[Tvar[j]][3]=2; */
            nbcode[Tvar[j]][3]=2;                /* To be continued (not working yet). */
            To be continued (not working yet).                ij=0; /* ij is similar to i but can jump over null modalities */
         */                                  for (i=modmincovj; i<=modmaxcovj; i++) { /* i= 1 to 2 for dichotomous, or from 1 to 3 or from -1 or 0 to 1 currently*/
         ij=0; /* ij is similar to i but can jump over null modalities */            if (Ndum[i] == 0) { /* If nobody responded to this modality k */
         for (i=modmincovj; i<=modmaxcovj; i++) { /* i= 1 to 2 for dichotomous, or from 1 to 3 or from -1 or 0 to 1 currently*/                    break;
           if (Ndum[i] == 0) { /* If nobody responded to this modality k */                  }
             break;                                          ij++;
           }                                          nbcode[Tvar[k]][ij]=i;  /* stores the original value of modality i in an array nbcode, ij modality from 1 to last non-nul modality. nbcode[1][1]=0 nbcode[1][2]=1*/
           ij++;                                          cptcode = ij; /* New max modality for covar j */
           nbcode[Tvar[k]][ij]=i;  /* stores the original value of modality i in an array nbcode, ij modality from 1 to last non-nul modality. nbcode[1][1]=0 nbcode[1][2]=1*/                                  } /* end of loop on modality i=-1 to 1 or more */
           cptcode = ij; /* New max modality for covar j */                                  break;
         } /* end of loop on modality i=-1 to 1 or more */  
         break;  
       case 1: /* Testing on varying covariate, could be simple and        case 1: /* Testing on varying covariate, could be simple and
                * should look at waves or product of fixed *                 * should look at waves or product of fixed *
                * varying. No time to test -1, assuming 0 and 1 only */                 * varying. No time to test -1, assuming 0 and 1 only */
         ij=0;                                  ij=0;
         for(i=0; i<=1;i++){                                  for(i=0; i<=1;i++){
           nbcode[Tvar[k]][++ij]=i;                                          nbcode[Tvar[k]][++ij]=i;
         }                                  }
         break;                                  break;
       default:        default:
         break;                                  break;
       } /* end switch */        } /* end switch */
     } /* end dummy test */      } /* end dummy test */
           
Line 4733  void  concatwav(int wav[], int **dh, int Line 4773  void  concatwav(int wav[], int **dh, int
       ++ij;/* V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1, */        ++ij;/* V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1, */
       Tvaraff[ij]=Tvar[k]; /* For printing combination *//* V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1, Tvar {5, 4, 3, 6, 5, 2, 7, 1, 1} Tvaraff={4, 3, 1} V4, V3, V1*/        Tvaraff[ij]=Tvar[k]; /* For printing combination *//* V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1, Tvar {5, 4, 3, 6, 5, 2, 7, 1, 1} Tvaraff={4, 3, 1} V4, V3, V1*/
       Tmodelind[ij]=k; /* Tmodelind: index in model of dummies Tmodelind[1]=2 V4: pos=2; V3: pos=3, V1=9 {2, 3, 9, ?, ?,} */        Tmodelind[ij]=k; /* Tmodelind: index in model of dummies Tmodelind[1]=2 V4: pos=2; V3: pos=3, V1=9 {2, 3, 9, ?, ?,} */
       TmodelInvind[k]=Tvar[k]- ncovcol-nqv; /* Inverse TmodelInvind[2=V4]=2 second dummy varying cov (V4)4-1-1 {0, 2, 1, } TmodelInvind[3]=1 */        TmodelInvind[ij]=Tvar[k]- ncovcol-nqv; /* Inverse TmodelInvind[2=V4]=2 second dummy varying cov (V4)4-1-1 {0, 2, 1, } TmodelInvind[3]=1 */
       if(Fixed[k]!=0)        if(Fixed[k]!=0)
         anyvaryingduminmodel=1;          anyvaryingduminmodel=1;
       /* }else if((Ndum[i]!=0) && (i<=ncovcol+nqv)){ */                          /* }else if((Ndum[i]!=0) && (i<=ncovcol+nqv)){ */
       /*   Tvaraff[++ij]=-10; /\* Dont'n know how to treat quantitative variables yet *\/ */                          /*   Tvaraff[++ij]=-10; /\* Dont'n know how to treat quantitative variables yet *\/ */
       /* }else if((Ndum[i]!=0) && (i<=ncovcol+nqv+ntv)){ */                          /* }else if((Ndum[i]!=0) && (i<=ncovcol+nqv+ntv)){ */
       /*   Tvaraff[++ij]=i; /\*For printing (unclear) *\/ */                          /*   Tvaraff[++ij]=i; /\*For printing (unclear) *\/ */
       /* }else if((Ndum[i]!=0) && (i<=ncovcol+nqv+ntv+nqtv)){ */                          /* }else if((Ndum[i]!=0) && (i<=ncovcol+nqv+ntv+nqtv)){ */
       /*   Tvaraff[++ij]=-20; /\* Dont'n know how to treat quantitative variables yet *\/ */                          /*   Tvaraff[++ij]=-20; /\* Dont'n know how to treat quantitative variables yet *\/ */
     }       } 
   } /* Tvaraff[1]@5 {3, 4, -20, 0, 0} Very strange */    } /* Tvaraff[1]@5 {3, 4, -20, 0, 0} Very strange */
   /* ij--; */    /* ij--; */
   /* cptcoveff=ij; /\*Number of total covariates*\/ */    /* cptcoveff=ij; /\*Number of total covariates*\/ */
   *cptcov=ij; /*Number of total real effective covariates: effective    *cptcov=ij; /*Number of total real effective covariates: effective
                * because they can be excluded from the model and real                                                           * because they can be excluded from the model and real
                * if in the model but excluded because missing values, but how to get k from ij?*/                                                           * if in the model but excluded because missing values, but how to get k from ij?*/
   for(j=ij+1; j<= cptcovt; j++){    for(j=ij+1; j<= cptcovt; j++){
     Tvaraff[j]=0;      Tvaraff[j]=0;
     Tmodelind[j]=0;      Tmodelind[j]=0;
Line 7876  int decodemodel( char model[], int lasto Line 7916  int decodemodel( char model[], int lasto
     if ((strpt=strstr(model,"age*age")) !=0){      if ((strpt=strstr(model,"age*age")) !=0){
       printf(" strpt=%s, model=%s\n",strpt, model);        printf(" strpt=%s, model=%s\n",strpt, model);
       if(strpt != model){        if(strpt != model){
         printf("Error in model: 'model=%s'; 'age*age' should in first place before other covariates\n \                                  printf("Error in model: 'model=%s'; 'age*age' should in first place before other covariates\n \
  'model=1+age+age*age+V1.' or 'model=1+age+age*age+V1+V1*age.', please swap as well as \n \   'model=1+age+age*age+V1.' or 'model=1+age+age*age+V1+V1*age.', please swap as well as \n \
  corresponding column of parameters.\n",model);   corresponding column of parameters.\n",model);
         fprintf(ficlog,"Error in model: 'model=%s'; 'age*age' should in first place before other covariates\n \                                  fprintf(ficlog,"Error in model: 'model=%s'; 'age*age' should in first place before other covariates\n \
  'model=1+age+age*age+V1.' or 'model=1+age+age*age+V1+V1*age.', please swap as well as \n \   'model=1+age+age*age+V1.' or 'model=1+age+age*age+V1+V1*age.', please swap as well as \n \
  corresponding column of parameters.\n",model); fflush(ficlog);   corresponding column of parameters.\n",model); fflush(ficlog);
         return 1;                                  return 1;
       }        }
       nagesqr=1;        nagesqr=1;
       if (strstr(model,"+age*age") !=0)        if (strstr(model,"+age*age") !=0)
         substrchaine(modelsav, model, "+age*age");                                  substrchaine(modelsav, model, "+age*age");
       else if (strstr(model,"age*age+") !=0)        else if (strstr(model,"age*age+") !=0)
         substrchaine(modelsav, model, "age*age+");                                  substrchaine(modelsav, model, "age*age+");
       else         else 
         substrchaine(modelsav, model, "age*age");                                  substrchaine(modelsav, model, "age*age");
     }else      }else
       nagesqr=0;        nagesqr=0;
     if (strlen(modelsav) >1){      if (strlen(modelsav) >1){
Line 8061  Fixed[k] 0=fixed (product or simple), 1 Line 8101  Fixed[k] 0=fixed (product or simple), 1
 Dummy[k] 0=dummy (0 1), 1 quantitative (single or product without age), 2 dummy with age product, 3 quant with age product\n",model);  Dummy[k] 0=dummy (0 1), 1 quantitative (single or product without age), 2 dummy with age product, 3 quant with age product\n",model);
   
   for(k=1, ncoveff=0, nqfveff=0, ntveff=0, nqtveff=0;k<=cptcovt; k++){ /* or cptocvt */    for(k=1, ncoveff=0, nqfveff=0, ntveff=0, nqtveff=0;k<=cptcovt; k++){ /* or cptocvt */
     if (Tvar[k] <=ncovcol && (Typevar[k]==0 || Typevar[k]==2)){ /* Simple or product fixed dummy covariatee */      if (Tvar[k] <=ncovcol && (Typevar[k]==0 || Typevar[k]==2)){ /* Simple or product fixed dummy (<=ncovcol) covariates */
       Fixed[k]= 0;        Fixed[k]= 0;
       Dummy[k]= 0;        Dummy[k]= 0;
       ncoveff++;        ncoveff++;
                           modell[k].maintype= FTYPE;
       TvarFD[ncoveff]=Tvar[k]; /* TvarFD[1]=V1 in V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1 */        TvarFD[ncoveff]=Tvar[k]; /* TvarFD[1]=V1 in V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1 */
       TvarFDind[ncoveff]=Tvar[k]; /* TvarFDind[1]=9 in V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1 */        TvarFDind[ncoveff]=k; /* TvarFDind[1]=9 in V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1 */
     }else if( Tvar[k] <=ncovcol+nqv && Typevar[k]==0){ /* Remind that product Vn*Vm are added in k*/      }else if( Tvar[k] <=ncovcol+nqv && Typevar[k]==0){ /* Remind that product Vn*Vm are added in k*/ /* Only simple fixed quantitative variable */
       Fixed[k]= 0;        Fixed[k]= 0;
       Dummy[k]= 1;        Dummy[k]= 1;
       nqfveff++;        nqfveff++;
       TvarFQ[nqfveff]=Tvar[k]; /* TvarFQ[1]=V2 in V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1 */ /* Only simple fixed quantitative variable */                          modell[k].maintype= FTYPE;
                           modell[k].subtype= FQ;
         TvarFQ[nqfveff]=Tvar[k]-ncovcol; /* TvarFQ[1]=V2-1=1st in V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1 */ /* Only simple fixed quantitative variable */
       TvarFQind[nqfveff]=k; /* TvarFQind[1]=6 in V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1 */ /* Only simple fixed quantitative variable */        TvarFQind[nqfveff]=k; /* TvarFQind[1]=6 in V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1 */ /* Only simple fixed quantitative variable */
     }else if( Tvar[k] <=ncovcol+nqv+ntv && Typevar[k]==0){      }else if( Tvar[k] <=ncovcol+nqv+ntv && Typevar[k]==0){
       Fixed[k]= 1;        Fixed[k]= 1;
       Dummy[k]= 0;        Dummy[k]= 0;
       ntveff++; /* Only simple time varying dummy variable */        ntveff++; /* Only simple time varying dummy variable */
       TvarVD[ntvveff]=Tvar[k]; /* TvarVD[1]=V5 in V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1 */ /* Only simple fixed quantitative variable */                          modell[k].maintype= VTYPE;
       TvarVDind[ntveff++]=k; /* TvarVDind[1]=1 in V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1 */ /* Only simple fixed quantitative variable */                          modell[k].subtype= VD;
         TvarVD[ntveff]=Tvar[k]; /* TvarVD[1]=V4  TvarVD[2]=V3 in V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1 */ /* Only simple time varying dummy variable */
         TvarVDind[ntveff]=k; /* TvarVDind[1]=2 TvarVDind[2]=3 in V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1 */ /* Only simple time varying dummy variable */
       printf("Quasi Tmodelind[%d]=%d,Tvar[Tmodelind[%d]]=V%d, ncovcol=%d, nqv=%d,Tvar[k]- ncovcol-nqv=%d\n",ntveff,k,ntveff,Tvar[k], ncovcol, nqv,Tvar[k]- ncovcol-nqv);        printf("Quasi Tmodelind[%d]=%d,Tvar[Tmodelind[%d]]=V%d, ncovcol=%d, nqv=%d,Tvar[k]- ncovcol-nqv=%d\n",ntveff,k,ntveff,Tvar[k], ncovcol, nqv,Tvar[k]- ncovcol-nqv);
       printf("Quasi TmodelInvind[%d]=%d\n",k,Tvar[k]- ncovcol-nqv);        printf("Quasi TmodelInvind[%d]=%d\n",k,Tvar[k]- ncovcol-nqv);
     }else if( Tvar[k] <=ncovcol+nqv+ntv+nqtv  && Typevar[k]==0){      }else if( Tvar[k] <=ncovcol+nqv+ntv+nqtv  && Typevar[k]==0){ /* Only simple time varying quantitative variable V5*/
         Fixed[k]= 1;                          Fixed[k]= 1;
         Dummy[k]= 1;                          Dummy[k]= 1;
         TmodelInvQind[++nqtveff]=Tvar[k]- ncovcol-nqv-ntv;/* Only simple time varying quantitative variable */                          nqtveff++;
         /* Tmodeliqind[k]=nqtveff;/\* Only simple time varying quantitative variable *\/ */                          modell[k].maintype= VTYPE;
         printf("Quasi TmodelQind[%d]=%d,Tvar[TmodelQind[%d]]=V%d, ncovcol=%d, nqv=%d, ntv=%d,Tvar[k]- ncovcol-nqv-ntv=%d\n",nqtveff,k,nqtveff,Tvar[k], ncovcol, nqv, ntv, Tvar[k]- ncovcol-nqv-ntv);                          modell[k].subtype= VQ;
         TvarVQ[nqtveff]=Tvar[k]; /* TvarVQ[1]=V5 in V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1 */ /* Only simple time varying quantitative variable */
         TvarVQind[nqtveff]=k; /* TvarVQind[1]=1 in V5+V4+V3+V4*V3+V5*age+V2+V1*V2+V1*age+V1 */ /* Only simple time varying quantitative variable */
                           TmodelInvQind[nqtveff]=Tvar[k]- ncovcol-nqv-ntv;/* Only simple time varying quantitative variable */
                           /* Tmodeliqind[k]=nqtveff;/\* Only simple time varying quantitative variable *\/ */
                           printf("Quasi TmodelQind[%d]=%d,Tvar[TmodelQind[%d]]=V%d, ncovcol=%d, nqv=%d, ntv=%d,Tvar[k]- ncovcol-nqv-ntv=%d\n",nqtveff,k,nqtveff,Tvar[k], ncovcol, nqv, ntv, Tvar[k]- ncovcol-nqv-ntv);
       printf("Quasi TmodelInvQind[%d]=%d\n",k,Tvar[k]- ncovcol-nqv-ntv);        printf("Quasi TmodelInvQind[%d]=%d\n",k,Tvar[k]- ncovcol-nqv-ntv);
     }else if (Typevar[k] == 1) {  /* product with age */      }else if (Typevar[k] == 1) {  /* product with age */
       if (Tvar[k] <=ncovcol ){ /* Simple or product fixed dummy covariatee */        if (Tvar[k] <=ncovcol ){ /* Product age with fixed dummy covariatee */
         Fixed[k]= 2;                                  Fixed[k]= 2;
         Dummy[k]= 2;                                  Dummy[k]= 2;
         /* ncoveff++; */                                  modell[k].maintype= ATYPE;
                                   modell[k].subtype= APFD;
                                   /* ncoveff++; */
       }else if( Tvar[k] <=ncovcol+nqv) { /* Remind that product Vn*Vm are added in k*/        }else if( Tvar[k] <=ncovcol+nqv) { /* Remind that product Vn*Vm are added in k*/
         Fixed[k]= 2;                                  Fixed[k]= 2;
         Dummy[k]= 3;                                  Dummy[k]= 3;
         /* nqfveff++;  /\* Only simple fixed quantitative variable *\/ */                                  modell[k].maintype= ATYPE;
                                   modell[k].subtype= APFQ;                /*      Product age * fixed quantitative */
                                   /* nqfveff++;  /\* Only simple fixed quantitative variable *\/ */
       }else if( Tvar[k] <=ncovcol+nqv+ntv ){        }else if( Tvar[k] <=ncovcol+nqv+ntv ){
         Fixed[k]= 3;                                  Fixed[k]= 3;
         Dummy[k]= 2;                                  Dummy[k]= 2;
         /* ntveff++; /\* Only simple time varying dummy variable *\/ */                                  modell[k].maintype= ATYPE;
                                   modell[k].subtype= APVD;                /*      Product age * varying dummy */
                                   /* ntveff++; /\* Only simple time varying dummy variable *\/ */
       }else if( Tvar[k] <=ncovcol+nqv+ntv+nqtv){        }else if( Tvar[k] <=ncovcol+nqv+ntv+nqtv){
         Fixed[k]= 3;                                  Fixed[k]= 3;
         Dummy[k]= 3;                                  Dummy[k]= 3;
         /* nqtveff++;/\* Only simple time varying quantitative variable *\/ */                                  modell[k].maintype= ATYPE;
                                   modell[k].subtype= APVQ;                /*      Product age * varying quantitative */
                                   /* nqtveff++;/\* Only simple time varying quantitative variable *\/ */
       }        }
     }else if (Typevar[k] == 2) {  /* product without age */      }else if (Typevar[k] == 2) {  /* product without age */
       k1=Tposprod[k];        k1=Tposprod[k];
       if(Tvard[k1][1] <=ncovcol){        if(Tvard[k1][1] <=ncovcol){
         if(Tvard[k1][2] <=ncovcol){                                  if(Tvard[k1][2] <=ncovcol){
           Fixed[k]= 1;                                          Fixed[k]= 1;
           Dummy[k]= 0;                                          Dummy[k]= 0;
         }else if(Tvard[k1][2] <=ncovcol+nqv){                                          modell[k].maintype= FTYPE;
           Fixed[k]= 0;  /* or 2 ?*/                                          modell[k].subtype= FPDD;                /*      Product fixed dummy * fixed dummy */
           Dummy[k]= 1;                                  }else if(Tvard[k1][2] <=ncovcol+nqv){
         }else if(Tvard[k1][2] <=ncovcol+nqv+ntv){                                          Fixed[k]= 0;  /* or 2 ?*/
           Fixed[k]= 1;                                          Dummy[k]= 1;
           Dummy[k]= 0;                                          modell[k].maintype= FTYPE;
         }else if(Tvard[k1][2] <=ncovcol+nqv+ntv+nqtv){                                          modell[k].subtype= FPDQ;                /*      Product fixed dummy * fixed quantitative */
           Fixed[k]= 1;                                  }else if(Tvard[k1][2] <=ncovcol+nqv+ntv){
           Dummy[k]= 1;                                          Fixed[k]= 1;
         }                                           Dummy[k]= 0;
                                           modell[k].maintype= VTYPE;
                                           modell[k].subtype= VPDD;                /*      Product fixed dummy * varying dummy */
                                   }else if(Tvard[k1][2] <=ncovcol+nqv+ntv+nqtv){
                                           Fixed[k]= 1;
                                           Dummy[k]= 1;
                                           modell[k].maintype= VTYPE;
                                           modell[k].subtype= VPDQ;                /*      Product fixed dummy * varying quantitative */
                                   } 
       }else if(Tvard[k1][1] <=ncovcol+nqv){        }else if(Tvard[k1][1] <=ncovcol+nqv){
         if(Tvard[k1][2] <=ncovcol){                                  if(Tvard[k1][2] <=ncovcol){
           Fixed[k]= 0;  /* or 2 ?*/                                          Fixed[k]= 0;  /* or 2 ?*/
           Dummy[k]= 1;                                          Dummy[k]= 1;
         }else if(Tvard[k1][2] <=ncovcol+nqv){                                          modell[k].maintype= FTYPE;
           Fixed[k]= 0; /* or 2 ?*/                                          modell[k].subtype= FPDQ;                /*      Product fixed quantitative * fixed dummy */
           Dummy[k]= 1;                                  }else if(Tvard[k1][2] <=ncovcol+nqv+ntv){
         }else if(Tvard[k1][2] <=ncovcol+nqv+ntv){                                          Fixed[k]= 1;
           Fixed[k]= 1;                                          Dummy[k]= 1;
           Dummy[k]= 1;                                          modell[k].maintype= VTYPE;
         }else if(Tvard[k1][2] <=ncovcol+nqv+ntv+nqtv){                                          modell[k].subtype= VPDQ;                /*      Product fixed quantitative * varying dummy */
           Fixed[k]= 1;                                  }else if(Tvard[k1][2] <=ncovcol+nqv+ntv+nqtv){
           Dummy[k]= 1;                                          Fixed[k]= 1;
         }                                           Dummy[k]= 1;
                                           modell[k].maintype= VTYPE;
                                           modell[k].subtype= VPQQ;                /*      Product fixed quantitative * varying quantitative */
                                   } 
       }else if(Tvard[k1][1] <=ncovcol+nqv+ntv){        }else if(Tvard[k1][1] <=ncovcol+nqv+ntv){
         if(Tvard[k1][2] <=ncovcol){                                  if(Tvard[k1][2] <=ncovcol){
           Fixed[k]= 1;                                          Fixed[k]= 1;
           Dummy[k]= 1;                                          Dummy[k]= 1;
         }else if(Tvard[k1][2] <=ncovcol+nqv){                                          modell[k].maintype= VTYPE;
           Fixed[k]= 1;                                          modell[k].subtype= VPDD;                /*      Product time varying dummy * fixed dummy */
           Dummy[k]= 1;                                  }else if(Tvard[k1][2] <=ncovcol+nqv){
         }else if(Tvard[k1][2] <=ncovcol+nqv+ntv){                                          Fixed[k]= 1;
           Fixed[k]= 1;                                          Dummy[k]= 1;
           Dummy[k]= 0;                                          modell[k].maintype= VTYPE;
         }else if(Tvard[k1][2] <=ncovcol+nqv+ntv+nqtv){                                          modell[k].subtype= VPDQ;                /*      Product time varying dummy * fixed quantitative */
           Fixed[k]= 1;                                  }else if(Tvard[k1][2] <=ncovcol+nqv+ntv){
           Dummy[k]= 1;                                          Fixed[k]= 1;
         }                                           Dummy[k]= 0;
                                           modell[k].maintype= VTYPE;
                                           modell[k].subtype= VPDD;                /*      Product time varying dummy * time varying dummy */
                                   }else if(Tvard[k1][2] <=ncovcol+nqv+ntv+nqtv){
                                           Fixed[k]= 1;
                                           Dummy[k]= 1;
                                           modell[k].maintype= VTYPE;
                                           modell[k].subtype= VPDQ;                /*      Product time varying dummy * time varying quantitative */
                                   } 
       }else if(Tvard[k1][1] <=ncovcol+nqv+ntv+nqtv){        }else if(Tvard[k1][1] <=ncovcol+nqv+ntv+nqtv){
         if(Tvard[k1][2] <=ncovcol){                                  if(Tvard[k1][2] <=ncovcol){
           Fixed[k]= 1;                                          Fixed[k]= 1;
           Dummy[k]= 1;                                          Dummy[k]= 1;
         }else if(Tvard[k1][2] <=ncovcol+nqv){                                          modell[k].maintype= VTYPE;
           Fixed[k]= 1;                                          modell[k].subtype= VPDQ;                /*      Product time varying quantitative * fixed dummy */
           Dummy[k]= 1;                                  }else if(Tvard[k1][2] <=ncovcol+nqv){
         }else if(Tvard[k1][2] <=ncovcol+nqv+ntv){                                          Fixed[k]= 1;
           Fixed[k]= 1;                                          Dummy[k]= 1;
           Dummy[k]= 1;                                          modell[k].maintype= VTYPE;
         }else if(Tvard[k1][2] <=ncovcol+nqv+ntv+nqtv){                                          modell[k].subtype= VPQQ;                /*      Product time varying quantitative * fixed quantitative */
           Fixed[k]= 1;                                  }else if(Tvard[k1][2] <=ncovcol+nqv+ntv){
           Dummy[k]= 1;                                          Fixed[k]= 1;
         }                                           Dummy[k]= 1;
                                           modell[k].maintype= VTYPE;
                                           modell[k].subtype= VPDQ;                /*      Product time varying quantitative * time varying dummy */
                                   }else if(Tvard[k1][2] <=ncovcol+nqv+ntv+nqtv){
                                           Fixed[k]= 1;
                                           Dummy[k]= 1;
                                           modell[k].maintype= VTYPE;
                                           modell[k].subtype= VPQQ;                /*      Product time varying quantitative * time varying quantitative */
                                   } 
       }else{        }else{
         printf("Error unknown type of covariate: Tvard[%d][1]=%d,Tvard[%d][2]=%d\n",k1,Tvard[k1][1],k1,Tvard[k1][2]);                                  printf("Error unknown type of covariate: Tvard[%d][1]=%d,Tvard[%d][2]=%d\n",k1,Tvard[k1][1],k1,Tvard[k1][2]);
         fprintf(ficlog,"Error unknown type of covariate: Tvard[%d][1]=%d,Tvard[%d][2]=%d\n",k1,Tvard[k1][1],k1,Tvard[k1][2]);                                  fprintf(ficlog,"Error unknown type of covariate: Tvard[%d][1]=%d,Tvard[%d][2]=%d\n",k1,Tvard[k1][1],k1,Tvard[k1][2]);
       } /* end k1 */        } /* end k1 */
     }else{      }else{
       printf("Error, current version can't treat for performance reasons, Tvar[%d]=%d, Typevar[%d]=%d\n", k, Tvar[k], k, Typevar[k]);        printf("Error, current version can't treat for performance reasons, Tvar[%d]=%d, Typevar[%d]=%d\n", k, Tvar[k], k, Typevar[k]);
       fprintf(ficlog,"Error, current version can't treat for performance reasons, Tvar[%d]=%d, Typevar[%d]=%d\n", k, Tvar[k], k, Typevar[k]);        fprintf(ficlog,"Error, current version can't treat for performance reasons, Tvar[%d]=%d, Typevar[%d]=%d\n", k, Tvar[k], k, Typevar[k]);
     }      }
     printf("Decodemodel, k=%d, Tvar[%d]=V%d,Typevar=%d, Fixed=%d, Dummy=%d\n",k, k,Tvar[k],Typevar[k],Fixed[k],Dummy[k]);      printf("Decodemodel, k=%d, Tvar[%d]=V%d,Typevar=%d, Fixed=%d, Dummy=%d\n",k, k,Tvar[k],Typevar[k],Fixed[k],Dummy[k]);
       printf("           modell[%d].maintype=%d, modell[%d].subtype=%d\n",k,modell[k].maintype,k,modell[k].subtype);
     fprintf(ficlog,"Decodemodel, k=%d, Tvar[%d]=V%d,Typevar=%d, Fixed=%d, Dummy=%d\n",k, k,Tvar[k],Typevar[k],Fixed[k],Dummy[k]);      fprintf(ficlog,"Decodemodel, k=%d, Tvar[%d]=V%d,Typevar=%d, Fixed=%d, Dummy=%d\n",k, k,Tvar[k],Typevar[k],Fixed[k],Dummy[k]);
   }    }
   /* Searching for doublons in the model */    /* Searching for doublons in the model */
   for(k1=1; k1<= cptcovt;k1++){    for(k1=1; k1<= cptcovt;k1++){
     for(k2=1; k2 <k1;k2++){      for(k2=1; k2 <k1;k2++){
       if((Typevar[k1]==Typevar[k2]) && (Fixed[Tvar[k1]]==Fixed[Tvar[k2]]) && (Dummy[Tvar[k1]]==Dummy[Tvar[k2]] )){        if((Typevar[k1]==Typevar[k2]) && (Fixed[Tvar[k1]]==Fixed[Tvar[k2]]) && (Dummy[Tvar[k1]]==Dummy[Tvar[k2]] )){
         if((Typevar[k1] == 0 || Typevar[k1] == 1)){ /* Simple or age product */                                  if((Typevar[k1] == 0 || Typevar[k1] == 1)){ /* Simple or age product */
           if(Tvar[k1]==Tvar[k2]){                                          if(Tvar[k1]==Tvar[k2]){
             printf("Error duplication in the model=%s at positions (+) %d and %d, Tvar[%d]=V%d, Tvar[%d]=V%d, Typevar=%d, Fixed=%d, Dummy=%d\n", model, k1,k2, k1, Tvar[k1], k2, Tvar[k2],Typevar[k1],Fixed[Tvar[k1]],Dummy[Tvar[k1]]);                                                  printf("Error duplication in the model=%s at positions (+) %d and %d, Tvar[%d]=V%d, Tvar[%d]=V%d, Typevar=%d, Fixed=%d, Dummy=%d\n", model, k1,k2, k1, Tvar[k1], k2, Tvar[k2],Typevar[k1],Fixed[Tvar[k1]],Dummy[Tvar[k1]]);
             fprintf(ficlog,"Error duplication in the model=%s at positions (+) %d and %d, Tvar[%d]=V%d, Tvar[%d]=V%d, Typevar=%d, Fixed=%d, Dummy=%d\n", model, k1,k2, k1, Tvar[k1], k2, Tvar[k2],Typevar[k1],Fixed[Tvar[k1]],Dummy[Tvar[k1]]); fflush(ficlog);                                                  fprintf(ficlog,"Error duplication in the model=%s at positions (+) %d and %d, Tvar[%d]=V%d, Tvar[%d]=V%d, Typevar=%d, Fixed=%d, Dummy=%d\n", model, k1,k2, k1, Tvar[k1], k2, Tvar[k2],Typevar[k1],Fixed[Tvar[k1]],Dummy[Tvar[k1]]); fflush(ficlog);
             return(1);                                                  return(1);
           }                                          }
         }else if (Typevar[k1] ==2){                                  }else if (Typevar[k1] ==2){
           k3=Tposprod[k1];                                          k3=Tposprod[k1];
           k4=Tposprod[k2];                                          k4=Tposprod[k2];
           if( ((Tvard[k3][1]== Tvard[k4][1])&&(Tvard[k3][2]== Tvard[k4][2])) || ((Tvard[k3][1]== Tvard[k4][2])&&(Tvard[k3][2]== Tvard[k4][1])) ){                                          if( ((Tvard[k3][1]== Tvard[k4][1])&&(Tvard[k3][2]== Tvard[k4][2])) || ((Tvard[k3][1]== Tvard[k4][2])&&(Tvard[k3][2]== Tvard[k4][1])) ){
             printf("Error duplication in the model=%s at positions (+) %d and %d, V%d*V%d, Typevar=%d, Fixed=%d, Dummy=%d\n",model, k1,k2, Tvard[k3][1], Tvard[k3][2],Typevar[k1],Fixed[Tvar[k1]],Dummy[Tvar[k1]]);                                                  printf("Error duplication in the model=%s at positions (+) %d and %d, V%d*V%d, Typevar=%d, Fixed=%d, Dummy=%d\n",model, k1,k2, Tvard[k3][1], Tvard[k3][2],Typevar[k1],Fixed[Tvar[k1]],Dummy[Tvar[k1]]);
             fprintf(ficlog,"Error duplication in the model=%s at positions (+) %d and %d, V%d*V%d, Typevar=%d, Fixed=%d, Dummy=%d\n",model, k1,k2, Tvard[k3][1], Tvard[k3][2],Typevar[k1],Fixed[Tvar[k1]],Dummy[Tvar[k1]]); fflush(ficlog);                                                  fprintf(ficlog,"Error duplication in the model=%s at positions (+) %d and %d, V%d*V%d, Typevar=%d, Fixed=%d, Dummy=%d\n",model, k1,k2, Tvard[k3][1], Tvard[k3][2],Typevar[k1],Fixed[Tvar[k1]],Dummy[Tvar[k1]]); fflush(ficlog);
             return(1);                                                  return(1);
           }                                          }
         }                                  }
       }        }
     }      }
   }    }
Line 9438  Please run with mle=-1 to get a correct Line 9524  Please run with mle=-1 to get a correct
         k=2 V1 Tvar[k=2]= 1 (from V1)          k=2 V1 Tvar[k=2]= 1 (from V1)
         k=1 Tvar[1]=2 (from V2)          k=1 Tvar[1]=2 (from V2)
     */      */
   Tvar=ivector(1,NCOVMAX); /* Was 15 changed to NCOVMAX. */  
   Tvarsel=ivector(1,NCOVMAX); /*  */          Tvar=ivector(1,NCOVMAX); /* Was 15 changed to NCOVMAX. */
     TvarFD=ivector(1,NCOVMAX); /*  */
     TvarFDind=ivector(1,NCOVMAX); /*  */
     TvarFQ=ivector(1,NCOVMAX); /*  */
     TvarFQind=ivector(1,NCOVMAX); /*  */
     TvarVD=ivector(1,NCOVMAX); /*  */
     TvarVDind=ivector(1,NCOVMAX); /*  */
     TvarVQ=ivector(1,NCOVMAX); /*  */
     TvarVQind=ivector(1,NCOVMAX); /*  */
   
   Tvalsel=vector(1,NCOVMAX); /*  */    Tvalsel=vector(1,NCOVMAX); /*  */
   Typevar=ivector(-1,NCOVMAX); /* -1 to 2 */    Typevar=ivector(-1,NCOVMAX); /* -1 to 2 */
   Fixed=ivector(-1,NCOVMAX); /* -1 to 3 */    Fixed=ivector(-1,NCOVMAX); /* -1 to 3 */
Line 10662  Please run with mle=-1 to get a correct Line 10757  Please run with mle=-1 to get a correct
   free_ivector(Fixed,-1,NCOVMAX);    free_ivector(Fixed,-1,NCOVMAX);
   free_ivector(Typevar,-1,NCOVMAX);    free_ivector(Typevar,-1,NCOVMAX);
   free_ivector(Tvar,1,NCOVMAX);    free_ivector(Tvar,1,NCOVMAX);
     free_ivector(TvarFD,1,NCOVMAX);
     free_ivector(TvarFDind,1,NCOVMAX);
     free_ivector(TvarFQ,1,NCOVMAX);
     free_ivector(TvarFQind,1,NCOVMAX);
     free_ivector(TvarVD,1,NCOVMAX);
     free_ivector(TvarVDind,1,NCOVMAX);
     free_ivector(TvarVQ,1,NCOVMAX);
     free_ivector(TvarVQind,1,NCOVMAX);
   free_ivector(Tvarsel,1,NCOVMAX);    free_ivector(Tvarsel,1,NCOVMAX);
   free_vector(Tvalsel,1,NCOVMAX);    free_vector(Tvalsel,1,NCOVMAX);
   free_ivector(Tposprod,1,NCOVMAX);    free_ivector(Tposprod,1,NCOVMAX);

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


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